Merge branch 'tizen' into tizen_base 18/63818/1 submit/tizen_base/20160411.015551
authorDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 28 Mar 2016 03:02:58 +0000 (12:02 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Mon, 28 Mar 2016 03:02:58 +0000 (12:02 +0900)
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Conflicts:
SAX2.c
packaging/libxml2.manifest
packaging/libxml2.spec
packaging/python-libxml2.spec

Change-Id: I90f1ac4e938f1107dac1e851821de691531a8836

535 files changed:
COPYING
ChangeLog
Copyright
DOCBparser.c
HTMLparser.c
HTMLtree.c
INSTALL
Makefile.am
Makefile.in
NEWS
SAX.c
SAX2.c
acinclude.m4
aclocal.m4
buf.c [new file with mode: 0644]
buf.h [new file with mode: 0644]
c14n.c
catalog.c
chvalid.c [changed mode: 0755->0644]
config.guess
config.h.in
config.sub
configure
configure.ac [moved from configure.in with 84% similarity]
debugXML.c
depcomp
dict.c
doc/APIchunk0.html
doc/APIchunk1.html
doc/APIchunk10.html
doc/APIchunk11.html
doc/APIchunk12.html
doc/APIchunk13.html
doc/APIchunk14.html
doc/APIchunk15.html
doc/APIchunk16.html
doc/APIchunk17.html
doc/APIchunk18.html
doc/APIchunk19.html
doc/APIchunk2.html
doc/APIchunk20.html
doc/APIchunk21.html
doc/APIchunk22.html
doc/APIchunk23.html
doc/APIchunk24.html
doc/APIchunk25.html
doc/APIchunk26.html
doc/APIchunk27.html
doc/APIchunk28.html
doc/APIchunk29.html
doc/APIchunk3.html
doc/APIchunk4.html
doc/APIchunk5.html
doc/APIchunk6.html
doc/APIchunk7.html
doc/APIchunk8.html
doc/APIchunk9.html
doc/APIconstructors.html
doc/APIfiles.html
doc/APIfunctions.html
doc/APIsymbols.html
doc/FAQ.html
doc/Makefile.am
doc/Makefile.in
doc/apibuild.py
doc/architecture.html
doc/bugs.html
doc/catalog.html
doc/contribs.html
doc/devhelp/Makefile.am
doc/devhelp/Makefile.in
doc/devhelp/general.html
doc/devhelp/libxml2-dict.html
doc/devhelp/libxml2-entities.html
doc/devhelp/libxml2-parser.html
doc/devhelp/libxml2-parserInternals.html
doc/devhelp/libxml2-relaxng.html
doc/devhelp/libxml2-tree.html
doc/devhelp/libxml2-valid.html
doc/devhelp/libxml2-xmlIO.html
doc/devhelp/libxml2-xmlerror.html
doc/devhelp/libxml2-xmlmodule.html
doc/devhelp/libxml2-xmlregexp.html
doc/devhelp/libxml2-xmlschemas.html
doc/devhelp/libxml2-xmlschemastypes.html
doc/devhelp/libxml2-xmlversion.html
doc/devhelp/libxml2-xmlwriter.html
doc/devhelp/libxml2-xpath.html
doc/devhelp/libxml2-xpathInternals.html
doc/devhelp/libxml2.devhelp
doc/docs.html
doc/downloads.html
doc/encoding.html
doc/example.html
doc/examples/Makefile.am
doc/examples/Makefile.in
doc/examples/examples.xml
doc/examples/index.html [new file with mode: 0644]
doc/examples/index.py
doc/examples/io1.c
doc/examples/io1.res
doc/examples/io2.c
doc/examples/reader1.c
doc/examples/reader2.c
doc/examples/reader3.c
doc/examples/reader4.c
doc/examples/testWriter.c
doc/examples/tree1.c
doc/examples/tree2.c
doc/examples/xpath1.c
doc/examples/xpath2.c
doc/help.html
doc/html/book1.html
doc/html/index.html
doc/html/libxml-dict.html
doc/html/libxml-entities.html
doc/html/libxml-lib.html
doc/html/libxml-parser.html
doc/html/libxml-parserInternals.html
doc/html/libxml-relaxng.html
doc/html/libxml-tree.html
doc/html/libxml-valid.html
doc/html/libxml-xmlIO.html
doc/html/libxml-xmlerror.html
doc/html/libxml-xmlmodule.html
doc/html/libxml-xmlregexp.html
doc/html/libxml-xmlschemas.html
doc/html/libxml-xmlschemastypes.html
doc/html/libxml-xmlversion.html
doc/html/libxml-xmlwriter.html
doc/html/libxml-xpath.html
doc/html/libxml-xpathInternals.html
doc/index.html
doc/interface.html
doc/intro.html
doc/library.html
doc/libxml2-api.xml
doc/libxml2.xsa
doc/news.html
doc/python.html
doc/symbols.xml
doc/threads.html
doc/upgrade.html
doc/xml.html
doc/xmldtd.html
doc/xmlio.html
doc/xmllint.1
doc/xmllint.xml
doc/xmlmem.html
elfgcchack.h
enc.h [new file with mode: 0644]
encoding.c
entities.c
error.c
example/Makefile.am
example/Makefile.in
globals.c
hash.c
include/Makefile.in
include/libxml/DOCBparser.h
include/libxml/HTMLparser.h
include/libxml/HTMLtree.h
include/libxml/Makefile.in
include/libxml/SAX.h
include/libxml/SAX2.h
include/libxml/c14n.h
include/libxml/catalog.h
include/libxml/debugXML.h
include/libxml/dict.h
include/libxml/encoding.h
include/libxml/entities.h
include/libxml/globals.h
include/libxml/hash.h
include/libxml/list.h
include/libxml/nanoftp.h
include/libxml/nanohttp.h
include/libxml/parser.h
include/libxml/parserInternals.h
include/libxml/relaxng.h
include/libxml/schemasInternals.h
include/libxml/schematron.h
include/libxml/tree.h
include/libxml/valid.h
include/libxml/xlink.h
include/libxml/xmlIO.h
include/libxml/xmlautomata.h
include/libxml/xmlerror.h
include/libxml/xmlexports.h
include/libxml/xmlmodule.h
include/libxml/xmlreader.h
include/libxml/xmlschemas.h
include/libxml/xmlschemastypes.h
include/libxml/xmlstring.h
include/libxml/xmlversion.h
include/libxml/xmlversion.h.in
include/libxml/xmlwriter.h
include/libxml/xpath.h
include/libxml/xpathInternals.h
include/libxml/xpointer.h
include/win32config.h
include/wsockcompat.h
install-sh
legacy.c
libxml-2.0-uninstalled.pc.in
libxml-2.0.pc.in
libxml.3
libxml.h
libxml.spec.in
libxml2-config.cmake.in [new file with mode: 0644]
libxml2.spec
libxml2.syms
list.c
ltmain.sh [changed mode: 0755->0644]
m4/libtool.m4
m4/ltoptions.m4
m4/ltversion.m4
missing
nanoftp.c
nanohttp.c
os400/README400 [new file with mode: 0644]
os400/dlfcn/dlfcn.c [new file with mode: 0644]
os400/dlfcn/dlfcn.h [new file with mode: 0644]
os400/iconv/README.iconv [new file with mode: 0644]
os400/iconv/bldcsndfa/bldcsndfa.c [new file with mode: 0644]
os400/iconv/bldcsndfa/ccsid_mibenum.dtd [new file with mode: 0644]
os400/iconv/bldcsndfa/ccsid_mibenum.xml [new file with mode: 0644]
os400/iconv/bldcsndfa/character-sets.xhtml [new file with mode: 0644]
os400/iconv/ianatables.c [new file with mode: 0644]
os400/iconv/iconv.c [new file with mode: 0644]
os400/iconv/iconv.h [new file with mode: 0644]
os400/initscript.sh [new file with mode: 0644]
os400/libxmlrpg/DOCBparser.rpgle [new file with mode: 0644]
os400/libxmlrpg/HTMLparser.rpgle [new file with mode: 0644]
os400/libxmlrpg/HTMLtree.rpgle [new file with mode: 0644]
os400/libxmlrpg/SAX.rpgle [new file with mode: 0644]
os400/libxmlrpg/SAX2.rpgle [new file with mode: 0644]
os400/libxmlrpg/c14n.rpgle [new file with mode: 0644]
os400/libxmlrpg/catalog.rpgle [new file with mode: 0644]
os400/libxmlrpg/chvalid.rpgle [new file with mode: 0644]
os400/libxmlrpg/debugXML.rpgle [new file with mode: 0644]
os400/libxmlrpg/dict.rpgle [new file with mode: 0644]
os400/libxmlrpg/encoding.rpgle [new file with mode: 0644]
os400/libxmlrpg/entities.rpgle [new file with mode: 0644]
os400/libxmlrpg/globals.rpgle [new file with mode: 0644]
os400/libxmlrpg/hash.rpgle [new file with mode: 0644]
os400/libxmlrpg/list.rpgle [new file with mode: 0644]
os400/libxmlrpg/nanoftp.rpgle [new file with mode: 0644]
os400/libxmlrpg/nanohttp.rpgle [new file with mode: 0644]
os400/libxmlrpg/parser.rpgle [new file with mode: 0644]
os400/libxmlrpg/parserInternals.rpgle [new file with mode: 0644]
os400/libxmlrpg/pattern.rpgle [new file with mode: 0644]
os400/libxmlrpg/relaxng.rpgle [new file with mode: 0644]
os400/libxmlrpg/schemasInternals.rpgle [new file with mode: 0644]
os400/libxmlrpg/schematron.rpgle [new file with mode: 0644]
os400/libxmlrpg/threads.rpgle [new file with mode: 0644]
os400/libxmlrpg/transcode.rpgle [new file with mode: 0644]
os400/libxmlrpg/tree.rpgle [new file with mode: 0644]
os400/libxmlrpg/uri.rpgle [new file with mode: 0644]
os400/libxmlrpg/valid.rpgle [new file with mode: 0644]
os400/libxmlrpg/xinclude.rpgle [new file with mode: 0644]
os400/libxmlrpg/xlink.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlIO.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlautomata.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlerror.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlexports.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlmemory.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlmodule.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlreader.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlregexp.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlsave.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlschemas.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlschemastypes.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlstdarg.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlstring.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlunicode.rpgle [new file with mode: 0644]
os400/libxmlrpg/xmlversion.rpgle.in [new file with mode: 0644]
os400/libxmlrpg/xmlwriter.rpgle [new file with mode: 0644]
os400/libxmlrpg/xpath.rpgle [new file with mode: 0644]
os400/libxmlrpg/xpathInternals.rpgle [new file with mode: 0644]
os400/libxmlrpg/xpointer.rpgle [new file with mode: 0644]
os400/make-bldcsndfa.sh [new file with mode: 0644]
os400/make-include.sh [new file with mode: 0644]
os400/make-rpg.sh [new file with mode: 0644]
os400/make-src.sh [new file with mode: 0644]
os400/make.sh [new file with mode: 0644]
os400/os400config.h.in [new file with mode: 0644]
os400/rpgsupport.c [new file with mode: 0644]
os400/rpgsupport.h [new file with mode: 0644]
os400/transcode.c [new file with mode: 0644]
os400/transcode.h [new file with mode: 0644]
os400/wrappers.c [new file with mode: 0644]
os400/wrappers.h [new file with mode: 0644]
packaging/libxml2.manifest
packaging/libxml2.spec
packaging/python-libxml2.spec
parser.c
parserInternals.c
pattern.c
python/Makefile.am
python/Makefile.in
python/drv_libxml2.py
python/generator.py
python/libxml.c
python/libxml.py
python/libxml2-export.c [new file with mode: 0644]
python/libxml2-py.c [new file with mode: 0644]
python/libxml2-py.h [new file with mode: 0644]
python/libxml2-python-api.xml
python/libxml2.py [new file with mode: 0644]
python/libxml2class.py [new file with mode: 0644]
python/libxml2class.txt [new file with mode: 0644]
python/libxml_wrap.h
python/setup.py
python/setup.py.in
python/tests/Makefile.am
python/tests/Makefile.in
python/tests/attribs.py
python/tests/build.py
python/tests/compareNodes.py
python/tests/ctxterror.py
python/tests/cutnpaste.py
python/tests/dtdvalid.py
python/tests/error.py
python/tests/inbuf.py
python/tests/indexes.py
python/tests/input_callback.py [new file with mode: 0755]
python/tests/nsdel.py
python/tests/outbuf.py
python/tests/push.py
python/tests/pushSAX.py
python/tests/pushSAXhtml.py
python/tests/reader.py
python/tests/reader2.py
python/tests/reader3.py
python/tests/reader4.py
python/tests/reader5.py
python/tests/reader6.py
python/tests/reader7.py
python/tests/reader8.py
python/tests/readererr.py [changed mode: 0644->0755]
python/tests/readernext.py
python/tests/regexp.py [changed mode: 0644->0755]
python/tests/relaxng.py
python/tests/resolver.py
python/tests/schema.py
python/tests/serialize.py
python/tests/sync.py
python/tests/thread2.py
python/tests/tst.py
python/tests/tstLastError.py
python/tests/tstURI.py
python/tests/tstmem.py
python/tests/tstxpath.py
python/tests/validDTD.py
python/tests/validRNG.py
python/tests/validSchemas.py
python/tests/validate.py
python/tests/walker.py
python/tests/xpath.py
python/tests/xpathext.py
python/tests/xpathleak.py [changed mode: 0644->0755]
python/tests/xpathns.py
python/tests/xpathret.py
python/types.c
relaxng.c
result/HTML/53867.html
result/HTML/Down.html
result/HTML/attrents.html
result/HTML/autoclose.html
result/HTML/cf_128.html
result/HTML/doc2.htm
result/HTML/doc3.htm
result/HTML/entities.html
result/HTML/entities2.html
result/HTML/fp40.htm
result/HTML/html5_enc.html
result/HTML/liclose.html
result/HTML/lt.html
result/HTML/noscript.html
result/HTML/pre.html
result/HTML/python.html
result/HTML/reg1.html
result/HTML/reg2.html
result/HTML/reg3.html
result/HTML/reg4.html
result/HTML/repeat.html
result/HTML/script.html
result/HTML/script2.html
result/HTML/test2.html
result/HTML/test3.html
result/HTML/utf8bug.html
result/HTML/wired.html
result/VC/AttributeDefaultLegal.rdr [new file with mode: 0644]
result/VC/AttributeNmtokens.rdr [new file with mode: 0644]
result/VC/DuplicateType.rdr [new file with mode: 0644]
result/VC/ElementValid.rdr [new file with mode: 0644]
result/VC/ElementValid2.rdr [new file with mode: 0644]
result/VC/ElementValid3.rdr [new file with mode: 0644]
result/VC/ElementValid4.rdr [new file with mode: 0644]
result/VC/ElementValid5.rdr [new file with mode: 0644]
result/VC/ElementValid6.rdr [new file with mode: 0644]
result/VC/ElementValid7.rdr [new file with mode: 0644]
result/VC/ElementValid8.rdr [new file with mode: 0644]
result/VC/Enumeration.rdr [new file with mode: 0644]
result/VC/NS1.rdr [new file with mode: 0644]
result/VC/NS2.rdr [new file with mode: 0644]
result/VC/NS3.rdr [new file with mode: 0644]
result/VC/OneID.rdr [new file with mode: 0644]
result/VC/OneID2.rdr [new file with mode: 0644]
result/VC/OneID3.rdr [new file with mode: 0644]
result/VC/PENesting.rdr [new file with mode: 0644]
result/VC/PENesting2.rdr [new file with mode: 0644]
result/VC/UniqueElementTypeDeclaration.rdr [new file with mode: 0644]
result/VC/UniqueElementTypeDeclaration2.rdr [new file with mode: 0644]
result/att11.sax
result/att11.sax2
result/errors/content1.xml.err
result/errors/content1.xml.str
result/errors/extparsedent.xml [new file with mode: 0644]
result/errors/extparsedent.xml.err [new file with mode: 0644]
result/errors/extparsedent.xml.str [new file with mode: 0644]
result/japancrlf.xml [new file with mode: 0644]
result/japancrlf.xml.rde [new file with mode: 0644]
result/japancrlf.xml.rdr [new file with mode: 0644]
result/japancrlf.xml.sax [new file with mode: 0644]
result/japancrlf.xml.sax2 [new file with mode: 0644]
result/noent/japancrlf.xml [new file with mode: 0644]
result/relaxng/710744_1 [new file with mode: 0644]
result/relaxng/710744_1.err [new file with mode: 0644]
result/relaxng/710744_2 [new file with mode: 0644]
result/relaxng/710744_2.err [new file with mode: 0644]
result/valid/127772.xml.err.rdr [new file with mode: 0644]
result/valid/694228.xml [new file with mode: 0644]
result/valid/694228.xml.err [new file with mode: 0644]
result/valid/694228.xml.err.rdr [new file with mode: 0644]
result/valid/REC-xml-19980210.xml.err.rdr [new file with mode: 0644]
result/valid/UTF16Entity.xml.err.rdr [new file with mode: 0644]
result/valid/dia.xml.err.rdr [new file with mode: 0644]
result/valid/id1.xml.err.rdr [new file with mode: 0644]
result/valid/id2.xml.err.rdr [new file with mode: 0644]
result/valid/id3.xml.err.rdr [new file with mode: 0644]
result/valid/index.xml.err.rdr [new file with mode: 0644]
result/valid/mixed_ns.xml.err.rdr [new file with mode: 0644]
result/valid/notes.xml.err.rdr [new file with mode: 0644]
result/valid/ns.xml.err.rdr [new file with mode: 0644]
result/valid/ns2.xml.err.rdr [new file with mode: 0644]
result/valid/objednavka.xml.err.rdr [new file with mode: 0644]
result/valid/rss.xml.err.rdr [new file with mode: 0644]
result/valid/t10.xml.err.rdr [new file with mode: 0644]
result/valid/t11.xml.err.rdr [new file with mode: 0644]
result/valid/t4.dtd.err.rdr [new file with mode: 0644]
result/valid/t4.xml.err.rdr [new file with mode: 0644]
result/valid/t4a.dtd.err.rdr [new file with mode: 0644]
result/valid/t4a.xml.err.rdr [new file with mode: 0644]
result/valid/t6.dtd.err.rdr [new file with mode: 0644]
result/valid/t6.xml.err.rdr [new file with mode: 0644]
result/valid/t8.xml.err
result/valid/t8.xml.err.rdr [new file with mode: 0644]
result/valid/t8a.xml.err
result/valid/t8a.xml.err.rdr [new file with mode: 0644]
result/valid/t9.xml.err.rdr [new file with mode: 0644]
result/valid/t9a.xml.err.rdr [new file with mode: 0644]
result/valid/xhtml1.xhtml.err.rdr [new file with mode: 0644]
result/valid/xlink.xml.err.rdr [new file with mode: 0644]
runsuite.c
runtest.c
runxmlconf.c
save.h [new file with mode: 0644]
schematron.c
test/errors/extparsedent.xml [new file with mode: 0644]
test/japancrlf.xml [new file with mode: 0644]
test/relaxng/710744.rng [new file with mode: 0644]
test/relaxng/710744_1.xml [new file with mode: 0644]
test/relaxng/710744_2.xml [new file with mode: 0644]
test/valid/694228.xml [new file with mode: 0644]
test/valid/dtds/694228.dtd [new file with mode: 0644]
testAutomata.c
testC14N.c
testHTML.c
testModule.c
testRegexp.c
testRelax.c
testSAX.c
testSchemas.c
testThreadsWin32.c
testXPath.c
testapi.c
testchar.c
testlimits.c [new file with mode: 0644]
testrecurse.c
threads.c
timsort.h [new file with mode: 0644]
tree.c
trio.c
trio.h
triodef.h
trionan.c
trionan.h
triostr.c
uri.c
valid.c
vms/build_libxml.com
vms/config.vms
win32/.cvsignore [deleted file]
win32/Makefile.bcb
win32/Makefile.mingw
win32/Makefile.msvc
win32/VC10/libxml2.vcxproj
win32/VC10/runsuite.vcxproj
win32/configure.js
win32/libxml2.def.src
win32/wince/wincecompat.c
xinclude.c
xlink.c
xml2-config.1
xml2-config.in
xmlIO.c
xmlcatalog.c
xmllint.c
xmlmemory.c
xmlmodule.c
xmlreader.c
xmlregexp.c
xmlsave.c
xmlschemas.c
xmlschemastypes.c
xmlstring.c
xmlunicode.c
xmlwriter.c
xpath.c
xpointer.c
xstc/Makefile.am
xstc/Makefile.in
xzlib.c
xzlib.h

diff --git a/COPYING b/COPYING
index 417e955..d613185 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -2,7 +2,7 @@ Except where otherwise noted in the source code (e.g. the files hash.c,
 list.c and the trio files, which are covered by a similar licence but
 with different Copyright notices) all the files are:
 
- Copyright (C) 1998-2003 Daniel Veillard.  All Rights Reserved.
+ Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -17,11 +17,7 @@ all copies or substantial portions of the Software.
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
 NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
-NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of Daniel Veillard shall not
-be used in advertising or otherwise to promote the sale, use or other deal-
-ings in this Software without prior written authorization from him.
-
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
index 36045e6..08725dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8139,7 +8139,7 @@ Wed Dec 10 11:16:29 CET 2003 Daniel Veillard <daniel@veillard.com>
 
 Tue Dec  9 23:50:23 CET 2003 Daniel Veillard <daniel@veillard.com>
 
-       * entities.c: fixed an XML entites content serialization 
+       * entities.c: fixed an XML entities content serialization
          potentially triggered by XInclude, see #126817
 
 Tue Dec  9 16:12:50 CET 2003 Daniel Veillard <daniel@veillard.com>
index 417e955..d613185 100644 (file)
--- a/Copyright
+++ b/Copyright
@@ -2,7 +2,7 @@ Except where otherwise noted in the source code (e.g. the files hash.c,
 list.c and the trio files, which are covered by a similar licence but
 with different Copyright notices) all the files are:
 
- Copyright (C) 1998-2003 Daniel Veillard.  All Rights Reserved.
+ Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -17,11 +17,7 @@ all copies or substantial portions of the Software.
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
 NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-DANIEL VEILLARD BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
-NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of Daniel Veillard shall not
-be used in advertising or otherwise to promote the sale, use or other deal-
-ings in this Software without prior written authorization from him.
-
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
index 3573743..f12511b 100644 (file)
@@ -53,7 +53,7 @@ docbEncodeEntities(unsigned char *out ATTRIBUTE_UNUSED,
 /**
  * docbParseDocument:
  * @ctxt:  an SGML parser context
- * 
+ *
  * parse an SGML document (and build a tree if using the standard SAX
  * interface).
  *
@@ -163,12 +163,12 @@ docbCreatePushParserCtxt(docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
  * @cur:  a pointer to an array of xmlChar
  * @encoding:  a free form C string describing the SGML document encoding, or NULL
  * @sax:  the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks. 
+ * @userData: if using SAX, this pointer will be provided on callbacks.
  *
  * parse an SGML in-memory document and build a tree.
  * It use the given SAX function block to handle the parsing callback.
  * If sax is NULL, fallback to the default DOM tree building routines.
- * 
+ *
  * Returns the resulting document tree
  */
 
@@ -196,7 +196,7 @@ docbSAXParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
  * @encoding:  a free form C string describing the SGML document encoding, or NULL
  *
  * parse an SGML in-memory document and build a tree.
- * 
+ *
  * Returns the resulting document tree
  */
 
@@ -221,7 +221,7 @@ docbParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
  * @filename:  the filename
  * @encoding:  the SGML document encoding, or NULL
  *
- * Create a parser context for a file content. 
+ * Create a parser context for a file content.
  * Automatic support for ZLIB/Compress compressed document is provided
  * by default if found at compile-time.
  *
@@ -247,7 +247,7 @@ docbCreateFileParserCtxt(const char *filename ATTRIBUTE_UNUSED,
  * @filename:  the filename
  * @encoding:  a free form C string describing the SGML document encoding, or NULL
  * @sax:  the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks. 
+ * @userData: if using SAX, this pointer will be provided on callbacks.
  *
  * parse an SGML file and build a tree. Automatic support for ZLIB/Compress
  * compressed document is provided by default if found at compile-time.
index 66ff17b..d329d3b 100644 (file)
@@ -44,6 +44,9 @@
 #include <libxml/globals.h>
 #include <libxml/uri.h>
 
+#include "buf.h"
+#include "enc.h"
+
 #define HTML_MAX_NAMELEN 1000
 #define HTML_PARSER_BIG_BUFFER_SIZE 1000
 #define HTML_PARSER_BUFFER_SIZE 100
@@ -1082,7 +1085,7 @@ static const char * const htmlStartClose[] = {
 "div",         "p", "head", NULL,
 "noscript",    "p", NULL,
 "center",      "font", "b", "i", "p", "head", NULL,
-"a",           "a", NULL,
+"a",           "a", "head", NULL,
 "caption",     "p", NULL,
 "colgroup",    "caption", "colgroup", "col", "p", NULL,
 "col",         "caption", "col", "p", NULL,
@@ -1100,6 +1103,43 @@ static const char * const htmlStartClose[] = {
 "option",      "option", NULL,
 "fieldset",    "legend", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6",
                "pre", "listing", "xmp", "a", NULL,
+/* most tags in in FONTSTYLE, PHRASE and SPECIAL should close <head> */
+"tt",          "head", NULL,
+"i",           "head", NULL,
+"b",           "head", NULL,
+"u",           "head", NULL,
+"s",           "head", NULL,
+"strike",      "head", NULL,
+"big",         "head", NULL,
+"small",       "head", NULL,
+
+"em",          "head", NULL,
+"strong",      "head", NULL,
+"dfn",         "head", NULL,
+"code",                "head", NULL,
+"samp",                "head", NULL,
+"kbd",         "head", NULL,
+"var",         "head", NULL,
+"cite",                "head", NULL,
+"abbr",                "head", NULL,
+"acronym",     "head", NULL,
+
+/* "a" */
+"img",         "head", NULL,
+/* "applet" */
+/* "embed" */
+/* "object" */
+"font",                "head", NULL,
+/* "basefont" */
+"br",          "head", NULL,
+/* "script" */
+"map",         "head", NULL,
+"q",           "head", NULL,
+"sub",         "head", NULL,
+"sup",         "head", NULL,
+"span",                "head", NULL,
+"bdo",         "head", NULL,
+"iframe",      "head", NULL,
 NULL
 };
 
@@ -1137,7 +1177,7 @@ static const char *const htmlScriptAttributes[] = {
     "onfocus",
     "onblur",
     "onsubmit",
-    "onrest",
+    "onreset",
     "onchange",
     "onselect"
 };
@@ -2941,9 +2981,14 @@ htmlParseCharData(htmlParserCtxtPtr ctxt) {
             */
            if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
                if (areBlanks(ctxt, buf, nbchar)) {
-                   if (ctxt->sax->ignorableWhitespace != NULL)
-                       ctxt->sax->ignorableWhitespace(ctxt->userData,
-                                                      buf, nbchar);
+                   if (ctxt->keepBlanks) {
+                       if (ctxt->sax->characters != NULL)
+                           ctxt->sax->characters(ctxt->userData, buf, nbchar);
+                   } else {
+                       if (ctxt->sax->ignorableWhitespace != NULL)
+                           ctxt->sax->ignorableWhitespace(ctxt->userData,
+                                                          buf, nbchar);
+                   }
                } else {
                    htmlCheckParagraph(ctxt);
                    if (ctxt->sax->characters != NULL)
@@ -2974,8 +3019,14 @@ htmlParseCharData(htmlParserCtxtPtr ctxt) {
         */
        if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
            if (areBlanks(ctxt, buf, nbchar)) {
-               if (ctxt->sax->ignorableWhitespace != NULL)
-                   ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar);
+               if (ctxt->keepBlanks) {
+                   if (ctxt->sax->characters != NULL)
+                       ctxt->sax->characters(ctxt->userData, buf, nbchar);
+               } else {
+                   if (ctxt->sax->ignorableWhitespace != NULL)
+                       ctxt->sax->ignorableWhitespace(ctxt->userData,
+                                                      buf, nbchar);
+               }
            } else {
                htmlCheckParagraph(ctxt);
                if (ctxt->sax->characters != NULL)
@@ -3509,19 +3560,14 @@ htmlCheckEncodingDirect(htmlParserCtxtPtr ctxt, const xmlChar *encoding) {
             * convert as much as possible to the parser reading buffer.
             */
            processed = ctxt->input->cur - ctxt->input->base;
-           xmlBufferShrink(ctxt->input->buf->buffer, processed);
-           nbchars = xmlCharEncInFunc(ctxt->input->buf->encoder,
-                                      ctxt->input->buf->buffer,
-                                      ctxt->input->buf->raw);
+           xmlBufShrink(ctxt->input->buf->buffer, processed);
+           nbchars = xmlCharEncInput(ctxt->input->buf, 1);
            if (nbchars < 0) {
                htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
                             "htmlCheckEncoding: encoder error\n",
                             NULL, NULL);
            }
-           ctxt->input->base =
-           ctxt->input->cur = ctxt->input->buf->buffer->content;
-            ctxt->input->end =
-                          &ctxt->input->base[ctxt->input->buf->buffer->use];
+            xmlBufResetInput(ctxt->input->buf->buffer, ctxt->input);
        }
     }
 }
@@ -3625,13 +3671,13 @@ htmlParseStartTag(htmlParserCtxtPtr ctxt) {
     int i;
     int discardtag = 0;
 
-    if (ctxt->instate == XML_PARSER_EOF)
-        return(-1);
     if ((ctxt == NULL) || (ctxt->input == NULL)) {
        htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
                     "htmlParseStartTag: context error\n", NULL, NULL);
        return -1;
     }
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(-1);
     if (CUR != '<') return -1;
     NEXT;
 
@@ -4320,7 +4366,7 @@ static void
 htmlParseElementInternal(htmlParserCtxtPtr ctxt) {
     const xmlChar *name;
     const htmlElemDesc * info;
-    htmlParserNodeInfo node_info;
+    htmlParserNodeInfo node_info = { 0, };
     int failed;
 
     if ((ctxt == NULL) || (ctxt->input == NULL)) {
@@ -4906,9 +4952,7 @@ htmlCreateMemoryParserCtxt(const char *buffer, int size) {
 
     input->filename = NULL;
     input->buf = buf;
-    input->base = input->buf->buffer->content;
-    input->cur = input->buf->buffer->content;
-    input->end = &input->buf->buffer->content[input->buf->buffer->use];
+    xmlBufResetInput(buf->buffer, input);
 
     inputPush(ctxt, input);
     return(ctxt);
@@ -5025,8 +5069,8 @@ htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first,
         buf = in->base;
         len = in->length;
     } else {
-        buf = in->buf->buffer->content;
-        len = in->buf->buffer->use;
+        buf = xmlBufContent(in->buf->buffer);
+        len = xmlBufUse(in->buf->buffer);
     }
 
     /* take into account the sequence length */
@@ -5118,13 +5162,13 @@ htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first,
  * @stop: Array of chars, which stop the lookup.
  * @stopLen: Length of stop-Array
  *
- * Try to find if any char of the stop-Array is available in the input 
+ * Try to find if any char of the stop-Array is available in the input
  * stream.
  * This function has a side effect of (possibly) incrementing ctxt->checkIndex
  * to avoid rescanning sequences of bytes, it DOES change the state of the
  * parser, do not use liberally.
  *
- * Returns the index to the current parsing point if a stopChar 
+ * Returns the index to the current parsing point if a stopChar
  *      is available, -1 otherwise.
  */
 static int
@@ -5152,8 +5196,8 @@ htmlParseLookupChars(htmlParserCtxtPtr ctxt, const xmlChar * stop,
         buf = in->base;
         len = in->length;
     } else {
-        buf = in->buf->buffer->content;
-        len = in->buf->buffer->use;
+        buf = xmlBufContent(in->buf->buffer);
+        len = xmlBufUse(in->buf->buffer);
     }
 
     for (; base < len; base++) {
@@ -5264,7 +5308,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
        if (in->buf == NULL)
            avail = in->length - (in->cur - in->base);
        else
-           avail = in->buf->buffer->use - (in->cur - in->base);
+           avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
        if ((avail == 0) && (terminate)) {
            htmlAutoCloseOnEnd(ctxt);
            if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
@@ -5300,7 +5344,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
                    if (in->buf == NULL)
                        avail = in->length - (in->cur - in->base);
                    else
-                       avail = in->buf->buffer->use - (in->cur - in->base);
+                       avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
                }
                if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
                    ctxt->sax->setDocumentLocator(ctxt->userData,
@@ -5342,7 +5386,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
                if (in->buf == NULL)
                    avail = in->length - (in->cur - in->base);
                else
-                   avail = in->buf->buffer->use - (in->cur - in->base);
+                   avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
                /*
                 * no chars in buffer
                 */
@@ -5415,7 +5459,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
                if (in->buf == NULL)
                    avail = in->length - (in->cur - in->base);
                else
-                   avail = in->buf->buffer->use - (in->cur - in->base);
+                   avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
                if (avail < 2)
                    goto done;
                cur = in->cur[0];
@@ -5456,7 +5500,7 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
                if (in->buf == NULL)
                    avail = in->length - (in->cur - in->base);
                else
-                   avail = in->buf->buffer->use - (in->cur - in->base);
+                   avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
                if (avail < 1)
                    goto done;
                cur = in->cur[0];
@@ -5654,9 +5698,15 @@ htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
                    if ((cur != '<') && (cur != '&')) {
                        if (ctxt->sax != NULL) {
                            if (IS_BLANK_CH(cur)) {
-                               if (ctxt->sax->ignorableWhitespace != NULL)
-                                   ctxt->sax->ignorableWhitespace(
-                                           ctxt->userData, &cur, 1);
+                               if (ctxt->keepBlanks) {
+                                   if (ctxt->sax->characters != NULL)
+                                       ctxt->sax->characters(
+                                               ctxt->userData, &cur, 1);
+                               } else {
+                                   if (ctxt->sax->ignorableWhitespace != NULL)
+                                       ctxt->sax->ignorableWhitespace(
+                                               ctxt->userData, &cur, 1);
+                               }
                            } else {
                                htmlCheckParagraph(ctxt);
                                if (ctxt->sax->characters != NULL)
@@ -5941,7 +5991,7 @@ done:
                ctxt->sax->endDocument(ctxt->userData);
        }
     }
-    if ((ctxt->myDoc != NULL) &&
+    if ((!(ctxt->options & HTML_PARSE_NODEFDTD)) && (ctxt->myDoc != NULL) &&
        ((terminate) || (ctxt->instate == XML_PARSER_EOF) ||
         (ctxt->instate == XML_PARSER_EPILOG))) {
        xmlDtdPtr dtd;
@@ -5979,8 +6029,8 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
     }
     if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
         (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF))  {
-       int base = ctxt->input->base - ctxt->input->buf->buffer->content;
-       int cur = ctxt->input->cur - ctxt->input->base;
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
+       size_t cur = ctxt->input->cur - ctxt->input->base;
        int res;
 
        res = xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
@@ -5989,10 +6039,7 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
            ctxt->disableSAX = 1;
            return (XML_PARSER_EOF);
        }
-       ctxt->input->base = ctxt->input->buf->buffer->content + base;
-       ctxt->input->cur = ctxt->input->base + cur;
-       ctxt->input->end =
-         &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+        xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
 #ifdef DEBUG_PUSH
        xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
 #endif
@@ -6007,13 +6054,16 @@ htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
            if ((in->encoder != NULL) && (in->buffer != NULL) &&
                    (in->raw != NULL)) {
                int nbchars;
+               size_t base = xmlBufGetInputBase(in->buffer, ctxt->input);
+               size_t current = ctxt->input->cur - ctxt->input->base;
 
-               nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+               nbchars = xmlCharEncInput(in, terminate);
                if (nbchars < 0) {
                    htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
                                 "encoder error\n", NULL, NULL);
                    return(XML_ERR_INVALID_ENCODING);
                }
+               xmlBufSetInputBaseCur(in->buffer, ctxt->input, base, current);
            }
        }
     }
@@ -6107,24 +6157,18 @@ htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data,
        inputStream->filename = (char *)
            xmlCanonicPath((const xmlChar *) filename);
     inputStream->buf = buf;
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end =
-       &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+    xmlBufResetInput(buf->buffer, inputStream);
 
     inputPush(ctxt, inputStream);
 
     if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
         (ctxt->input->buf != NULL))  {
-       int base = ctxt->input->base - ctxt->input->buf->buffer->content;
-       int cur = ctxt->input->cur - ctxt->input->base;
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
+       size_t cur = ctxt->input->cur - ctxt->input->base;
 
        xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
 
-       ctxt->input->base = ctxt->input->buf->buffer->content + base;
-       ctxt->input->cur = ctxt->input->base + cur;
-       ctxt->input->end =
-           &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+        xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
 #ifdef DEBUG_PUSH
        xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
 #endif
@@ -6244,12 +6288,16 @@ htmlCreateFileParserCtxt(const char *filename, const char *encoding)
 
     /* set encoding */
     if (encoding) {
-        content = xmlMallocAtomic (xmlStrlen(content_line) + strlen(encoding) + 1);
-       if (content) {
-           strcpy ((char *)content, (char *)content_line);
-            strcat ((char *)content, (char *)encoding);
-            htmlCheckEncoding (ctxt, content);
-           xmlFree (content);
+        size_t l = strlen(encoding);
+
+       if (l < 1000) {
+           content = xmlMallocAtomic (xmlStrlen(content_line) + l + 1);
+           if (content) {
+               strcpy ((char *)content, (char *)content_line);
+               strcat ((char *)content, (char *)encoding);
+               htmlCheckEncoding (ctxt, content);
+               xmlFree (content);
+           }
        }
     }
 
@@ -6764,6 +6812,7 @@ htmlReadFd(int fd, const char *URL, const char *encoding, int options)
 
     if (fd < 0)
         return (NULL);
+    xmlInitParser();
 
     xmlInitParser();
     input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
@@ -6854,6 +6903,7 @@ htmlCtxtReadDoc(htmlParserCtxtPtr ctxt, const xmlChar * cur,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     htmlCtxtReset(ctxt);
 
@@ -6887,6 +6937,7 @@ htmlCtxtReadFile(htmlParserCtxtPtr ctxt, const char *filename,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     htmlCtxtReset(ctxt);
 
@@ -6923,6 +6974,7 @@ htmlCtxtReadMemory(htmlParserCtxtPtr ctxt, const char *buffer, int size,
         return (NULL);
     if (buffer == NULL)
         return (NULL);
+    xmlInitParser();
 
     htmlCtxtReset(ctxt);
 
@@ -6965,6 +7017,7 @@ htmlCtxtReadFd(htmlParserCtxtPtr ctxt, int fd,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     htmlCtxtReset(ctxt);
 
@@ -7009,6 +7062,7 @@ htmlCtxtReadIO(htmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     htmlCtxtReset(ctxt);
 
index 5d0893b..5c57fc5 100644 (file)
 #include <libxml/globals.h>
 #include <libxml/uri.h>
 
+#include "buf.h"
+
 /************************************************************************
  *                                                                     *
- *             Getting/Setting encoding meta tags                      *
+ *             Getting/Setting encoding meta tags                      *
  *                                                                     *
  ************************************************************************/
 
 /**
  * htmlGetMetaEncoding:
  * @doc:  the document
- * 
+ *
  * Encoding definition lookup in the Meta tags
  *
  * Returns the current encoding as flagged in the HTML source
@@ -126,17 +128,17 @@ found_meta:
 
 found_content:
     encoding = xmlStrstr(content, BAD_CAST"charset=");
-    if (encoding == NULL) 
+    if (encoding == NULL)
        encoding = xmlStrstr(content, BAD_CAST"Charset=");
-    if (encoding == NULL) 
+    if (encoding == NULL)
        encoding = xmlStrstr(content, BAD_CAST"CHARSET=");
     if (encoding != NULL) {
        encoding += 8;
     } else {
        encoding = xmlStrstr(content, BAD_CAST"charset =");
-       if (encoding == NULL) 
+       if (encoding == NULL)
            encoding = xmlStrstr(content, BAD_CAST"Charset =");
-       if (encoding == NULL) 
+       if (encoding == NULL)
            encoding = xmlStrstr(content, BAD_CAST"CHARSET =");
        if (encoding != NULL)
            encoding += 9;
@@ -314,7 +316,7 @@ static const char* htmlBooleanAttrs[] = {
  * @name:  the name of the attribute to check
  *
  * Determine if a given attribute is a boolean attribute.
- * 
+ *
  * returns: false if the attribute is not boolean, true otherwise.
  */
 int
@@ -338,7 +340,7 @@ xmlOutputBufferPtr
 xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder);
 /************************************************************************
  *                                                                     *
- *                     Output error handlers                           *
+ *                     Output error handlers                           *
  *                                                                     *
  ************************************************************************/
 /**
@@ -387,17 +389,13 @@ htmlSaveErr(int code, xmlNodePtr node, const char *extra)
 
 /************************************************************************
  *                                                                     *
- *             Dumping HTML tree content to a simple buffer            *
+ *             Dumping HTML tree content to a simple buffer            *
  *                                                                     *
  ************************************************************************/
 
-static int
-htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
-                  int format);
-
 /**
- * htmlNodeDumpFormat:
- * @buf:  the HTML buffer output
+ * htmlBufNodeDumpFormat:
+ * @buf:  the xmlBufPtr output
  * @doc:  the document
  * @cur:  the current node
  * @format:  should formatting spaces been added
@@ -406,10 +404,10 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
  *
  * Returns the number of byte written or -1 in case of error
  */
-static int
-htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
+static size_t
+htmlBufNodeDumpFormat(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur,
                   int format) {
-    unsigned int use;
+    size_t use;
     int ret;
     xmlOutputBufferPtr outbuf;
 
@@ -432,10 +430,10 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
     outbuf->context = NULL;
     outbuf->written = 0;
 
-    use = buf->use;
+    use = xmlBufUse(buf);
     htmlNodeDumpFormatOutput(outbuf, doc, cur, NULL, format);
     xmlFree(outbuf);
-    ret = buf->use - use;
+    ret = xmlBufUse(buf) - use;
     return (ret);
 }
 
@@ -452,9 +450,24 @@ htmlNodeDumpFormat(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
  */
 int
 htmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur) {
+    xmlBufPtr buffer;
+    size_t ret;
+
+    if ((buf == NULL) || (cur == NULL))
+        return(-1);
+
     xmlInitParser();
+    buffer = xmlBufFromBuffer(buf);
+    if (buffer == NULL)
+        return(-1);
+
+    ret = htmlBufNodeDumpFormat(buffer, doc, cur, 1);
 
-    return(htmlNodeDumpFormat(buf, doc, cur, 1));
+    xmlBufBackToBuffer(buffer);
+
+    if (ret > INT_MAX)
+        return(-1);
+    return((int) ret);
 }
 
 /**
@@ -499,7 +512,7 @@ htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc,
     if (handler == NULL)
        handler = xmlFindCharEncodingHandler("ascii");
 
-    /* 
+    /*
      * save the content to a temp buffer.
      */
     buf = xmlOutputBufferCreateFile(out, handler);
@@ -595,11 +608,11 @@ htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
 
     xmlOutputBufferFlush(buf);
     if (buf->conv != NULL) {
-       *size = buf->conv->use;
-       *mem = xmlStrndup(buf->conv->content, *size);
+       *size = xmlBufUse(buf->conv);
+       *mem = xmlStrndup(xmlBufContent(buf->conv), *size);
     } else {
-       *size = buf->buffer->use;
-       *mem = xmlStrndup(buf->buffer->content, *size);
+       *size = xmlBufUse(buf->buffer);
+       *mem = xmlStrndup(xmlBufContent(buf->buffer), *size);
     }
     (void)xmlOutputBufferClose(buf);
 }
@@ -621,7 +634,7 @@ htmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
 
 /************************************************************************
  *                                                                     *
- *             Dumping HTML tree content to an I/O output buffer       *
+ *             Dumping HTML tree content to an I/O output buffer       *
  *                                                                     *
  ************************************************************************/
 
@@ -632,7 +645,7 @@ void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur);
  * @buf:  the HTML buffer output
  * @doc:  the document
  * @encoding:  the encoding string
- * 
+ *
  * TODO: check whether encoding is needed
  *
  * Dump the HTML document DTD, if any.
@@ -650,14 +663,14 @@ htmlDtdDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
     xmlOutputBufferWriteString(buf, (const char *)cur->name);
     if (cur->ExternalID != NULL) {
        xmlOutputBufferWriteString(buf, " PUBLIC ");
-       xmlBufferWriteQuotedString(buf->buffer, cur->ExternalID);
+       xmlBufWriteQuotedString(buf->buffer, cur->ExternalID);
        if (cur->SystemID != NULL) {
            xmlOutputBufferWriteString(buf, " ");
-           xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
-       } 
+           xmlBufWriteQuotedString(buf->buffer, cur->SystemID);
+       }
     }  else if (cur->SystemID != NULL) {
        xmlOutputBufferWriteString(buf, " SYSTEM ");
-       xmlBufferWriteQuotedString(buf->buffer, cur->SystemID);
+       xmlBufWriteQuotedString(buf->buffer, cur->SystemID);
     }
     xmlOutputBufferWriteString(buf, ">\n");
 }
@@ -677,9 +690,10 @@ htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur,
     xmlChar *value;
 
     /*
-     * TODO: The html output method should not escape a & character
-     *       occurring in an attribute value immediately followed by
-     *       a { character (see Section B.7.1 of the HTML 4.0 Recommendation).
+     * The html output method should not escape a & character
+     * occurring in an attribute value immediately followed by
+     * a { character (see Section B.7.1 of the HTML 4.0 Recommendation).
+     * This is implemented in xmlEncodeEntitiesReentrant
      */
 
     if (cur == NULL) {
@@ -702,20 +716,51 @@ htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur,
                 (!xmlStrcasecmp(cur->name, BAD_CAST "src")) ||
                 ((!xmlStrcasecmp(cur->name, BAD_CAST "name")) &&
                  (!xmlStrcasecmp(cur->parent->name, BAD_CAST "a"))))) {
-               xmlChar *escaped;
                xmlChar *tmp = value;
+               /* xmlURIEscapeStr() escapes '"' so it can be safely used. */
+               xmlBufCCat(buf->buffer, "\"");
 
                while (IS_BLANK_CH(*tmp)) tmp++;
 
-               escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+");
-               if (escaped != NULL) {
-                   xmlBufferWriteQuotedString(buf->buffer, escaped);
-                   xmlFree(escaped);
-               } else {
-                   xmlBufferWriteQuotedString(buf->buffer, value);
+               /* URI Escape everything, except server side includes. */
+               for ( ; ; ) {
+                   xmlChar *escaped;
+                   xmlChar endChar;
+                   xmlChar *end = NULL;
+                   xmlChar *start = (xmlChar *)xmlStrstr(tmp, BAD_CAST "<!--");
+                   if (start != NULL) {
+                       end = (xmlChar *)xmlStrstr(tmp, BAD_CAST "-->");
+                       if (end != NULL) {
+                           *start = '\0';
+                       }
+                   }
+
+                   /* Escape the whole string, or until start (set to '\0'). */
+                   escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+");
+                   if (escaped != NULL) {
+                       xmlBufCat(buf->buffer, escaped);
+                       xmlFree(escaped);
+                   } else {
+                       xmlBufCat(buf->buffer, tmp);
+                   }
+
+                   if (end == NULL) { /* Everything has been written. */
+                       break;
+                   }
+
+                   /* Do not escape anything within server side includes. */
+                   *start = '<'; /* Restore the first character of "<!--". */
+                   end += 3; /* strlen("-->") */
+                   endChar = *end;
+                   *end = '\0';
+                   xmlBufCat(buf->buffer, start);
+                   *end = endChar;
+                   tmp = end;
                }
+
+               xmlBufCCat(buf->buffer, "\"");
            } else {
-               xmlBufferWriteQuotedString(buf->buffer, value);
+               xmlBufWriteQuotedString(buf->buffer, value);
            }
            xmlFree(value);
        } else  {
@@ -1105,7 +1150,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) {
 
     if ((cur == NULL) || (filename == NULL))
         return(-1);
-       
+
     xmlInitParser();
 
     encoding = (const char *) htmlGetMetaEncoding(cur);
@@ -1136,7 +1181,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) {
     if (handler == NULL)
        handler = xmlFindCharEncodingHandler("ascii");
 
-    /* 
+    /*
      * save the content to a temp buffer.
      */
     buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
@@ -1156,7 +1201,7 @@ htmlSaveFile(const char *filename, xmlDocPtr cur) {
  * @encoding: the document encoding
  *
  * Dump an HTML document to a file using a given encoding.
- * 
+ *
  * returns: the number of byte written or -1 in case of failure.
  */
 int
@@ -1200,7 +1245,7 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
     if (handler == NULL)
        handler = xmlFindCharEncodingHandler("ascii");
 
-    /* 
+    /*
      * save the content to a temp buffer.
      */
     buf = xmlOutputBufferCreateFilename(filename, handler, 0);
@@ -1220,7 +1265,7 @@ htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
  *
  * Dump an HTML document to a file using a given encoding
  * and formatting returns/spaces are added.
- * 
+ *
  * returns: the number of byte written or -1 in case of failure.
  */
 int
diff --git a/INSTALL b/INSTALL
index 7d1c323..007e939 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,8 +1,8 @@
 Installation Instructions
 *************************
 
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
 
    Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -226,6 +226,11 @@ order to use an ANSI C compiler:
 
 and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 
+   HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved.  Use GNU `make'
+instead.
+
    On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 a workaround.  If GNU CC is not installed, it is therefore recommended
@@ -304,9 +309,10 @@ causes the specified `gcc' to be used as the C compiler (unless it is
 overridden in the site shell script).
 
 Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf bug.  Until the bug is fixed you can use this workaround:
+an Autoconf limitation.  Until the limitation is lifted, you can use
+this workaround:
 
-     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
 `configure' Invocation
 ======================
@@ -362,4 +368,3 @@ operates.
 
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
-
index f82cefa..70720f3 100644 (file)
@@ -2,23 +2,25 @@
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = include . doc example xstc @PYTHON_SUBDIR@
+SUBDIRS = include . doc example xstc $(PYTHON_SUBDIR)
 
 DIST_SUBDIRS = include . doc example python xstc
 
-INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@ @LZMA_CFLAGS@
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include
+
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS)
 
 noinst_PROGRAMS=testSchemas testRelax testSAX testHTML testXPath testURI \
                 testThreads testC14N testAutomata testRegexp \
                 testReader testapi testModule runtest runsuite testchar \
-               testdict runxmlconf testrecurse
+               testdict runxmlconf testrecurse testlimits
 
 bin_PROGRAMS = xmllint xmlcatalog
 
 bin_SCRIPTS=xml2-config
 
 lib_LTLIBRARIES = libxml2.la
-libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+libxml2_la_LIBADD = $(ICU_LIBS) $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD)
 
 if USE_VERSION_SCRIPT
 LIBXML2_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxml2.syms
@@ -26,35 +28,37 @@ else
 LIBXML2_VERSION_SCRIPT =
 endif
 
-libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ \
-                     $(LIBXML2_VERSION_SCRIPT) \
-                    -version-info @LIBXML_VERSION_INFO@ \
-                    @MODULE_PLATFORM_LIBS@
+libxml2_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) \
+                    $(LIBXML2_VERSION_SCRIPT) \
+                    -version-info $(LIBXML_VERSION_INFO) \
+                    $(MODULE_PLATFORM_LIBS)
+
+if WITH_SAX1_SOURCES
+docb_sources = DOCBparser.c
+else
+docb_sources =
+endif
 
 if WITH_TRIO_SOURCES
-libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c  \
-               parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
-               valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
-               xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
-               catalog.c globals.c threads.c c14n.c xmlstring.c \
-               xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
-               triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
-               xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
-               xmlmodule.c schematron.c xzlib.c
+trio_sources = triostr.c trio.c
 else
+trio_sources =
+endif
+
 libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c  \
                parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
                valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
-               xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
-               catalog.c globals.c threads.c c14n.c xmlstring.c \
+               xpointer.c xinclude.c nanohttp.c nanoftp.c \
+               $(docb_sources) \
+               catalog.c globals.c threads.c c14n.c xmlstring.c buf.c \
                xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+               $(trio_sources) \
                xmlreader.c relaxng.c dict.c SAX2.c \
                xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
                xmlmodule.c schematron.c xzlib.c
-endif
 
 DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+LDADDS = $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD)
 
 
 man_MANS = xml2-config.1 libxml.3
@@ -65,32 +69,37 @@ m4data_DATA = libxml.m4
 runtest_SOURCES=runtest.c
 runtest_LDFLAGS = 
 runtest_DEPENDENCIES = $(DEPS)
-runtest_LDADD= @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS)
+runtest_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
 
 testrecurse_SOURCES=testrecurse.c
 testrecurse_LDFLAGS = 
 testrecurse_DEPENDENCIES = $(DEPS)
-testrecurse_LDADD= @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS)
+testrecurse_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
+
+testlimits_SOURCES=testlimits.c
+testlimits_LDFLAGS = 
+testlimits_DEPENDENCIES = $(DEPS)
+testlimits_LDADD= $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
 
 testchar_SOURCES=testchar.c
 testchar_LDFLAGS = 
 testchar_DEPENDENCIES = $(DEPS)
-testchar_LDADD= @RDL_LIBS@ $(LDADDS)
+testchar_LDADD= $(RDL_LIBS) $(LDADDS)
 
 testdict_SOURCES=testdict.c
 testdict_LDFLAGS = 
 testdict_DEPENDENCIES = $(DEPS)
-testdict_LDADD= @RDL_LIBS@ $(LDADDS)
+testdict_LDADD= $(RDL_LIBS) $(LDADDS)
 
 runsuite_SOURCES=runsuite.c
 runsuite_LDFLAGS = 
 runsuite_DEPENDENCIES = $(DEPS)
-runsuite_LDADD= @RDL_LIBS@ $(LDADDS)
+runsuite_LDADD= $(RDL_LIBS) $(LDADDS)
 
 xmllint_SOURCES=xmllint.c
 xmllint_LDFLAGS = 
 xmllint_DEPENDENCIES = $(DEPS)
-xmllint_LDADD=  @RDL_LIBS@ $(LDADDS)
+xmllint_LDADD=  $(RDL_LIBS) $(LDADDS)
 
 testSAX_SOURCES=testSAX.c
 testSAX_LDFLAGS = 
@@ -105,7 +114,7 @@ testHTML_LDADD= $(LDADDS)
 xmlcatalog_SOURCES=xmlcatalog.c
 xmlcatalog_LDFLAGS = 
 xmlcatalog_DEPENDENCIES = $(DEPS)
-xmlcatalog_LDADD= @RDL_LIBS@ $(LDADDS)
+xmlcatalog_LDADD = $(RDL_LIBS) $(LDADDS)
 
 testXPath_SOURCES=testXPath.c
 testXPath_LDFLAGS = 
@@ -117,10 +126,14 @@ testC14N_LDFLAGS =
 testC14N_DEPENDENCIES = $(DEPS)
 testC14N_LDADD= $(LDADDS)
 
-testThreads_SOURCES=testThreads@THREADS_W32@.c
+if THREADS_W32
+testThreads_SOURCES = testThreadsWin32.c
+else
+testThreads_SOURCES = testThreads.c
+endif
 testThreads_LDFLAGS = 
 testThreads_DEPENDENCIES = $(DEPS)
-testThreads_LDADD= @BASE_THREAD_LIBS@  $(LDADDS)
+testThreads_LDADD= $(BASE_THREAD_LIBS) $(LDADDS)
 
 testURI_SOURCES=testURI.c
 testURI_LDFLAGS = 
@@ -172,6 +185,8 @@ testapi.c: $(srcdir)/gentest.py
        -@(if [ "$(PYTHON)" != "" ] ; then \
            $(PYTHON) $(srcdir)/gentest.py $(srcdir) ; fi )
 
+BUILT_SOURCES = testapi.c
+
 testapi_SOURCES=testapi.c
 testapi_LDFLAGS = 
 testapi_DEPENDENCIES = $(DEPS)
@@ -188,28 +203,25 @@ runxmlconf_LDADD= $(LDADDS)
 #testOOM_LDADD= $(LDADDS)
 
 runtests:
+       [ -d test   ] || $(LN_S) $(srcdir)/test   .
+       [ -d result ] || $(LN_S) $(srcdir)/result .
        $(CHECKER) ./runtest$(EXEEXT) && $(CHECKER) ./testrecurse$(EXEEXT) &&$(CHECKER) ./testapi$(EXEEXT) && $(CHECKER) ./testchar$(EXEEXT)&& $(CHECKER) ./testdict$(EXEEXT) && $(CHECKER) ./runxmlconf$(EXEEXT)
-       @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \
-           $(MAKE) MAKEFLAGS+=--silent tests ; fi)
+       @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \
+           $(MAKE) tests ; fi)
 
 check: all runtests
 
-check-valgrind: all
+check-valgrind valgrind: all
        @echo '## Running the regression tests under Valgrind'
        @echo '## Go get a cup of coffee it is gonna take a while ...'
-       $(MAKE) CHECKER='valgrind -q' check
+       $(MAKE) CHECKER='valgrind -q' runtests
 
 testall : tests SVGtests SAXtests
 
-tests: XMLtests XMLenttests NStests IDtests Errtests APItests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@  @TEST_VALID@ URItests @TEST_PATTERN@ @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_SCHEMATRON@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@
-       @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \
-           $(MAKE) MAKEFLAGS+=--silent tests ; fi)
-       @(cd doc/examples ; $(MAKE) MAKEFLAGS+=--silent tests)
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       @echo '## Go get a cup of coffee it is gonna take a while ...'
-       $(MAKE) CHECKER='valgrind -q' tests
+tests: XMLtests XMLenttests NStests IDtests Errtests APItests $(READER_TEST) $(TEST_SAX) $(TEST_PUSH) $(TEST_HTML) $(TEST_PHTML) $(TEST_VALID) URItests $(TEST_PATTERN) $(TEST_XPATH) $(TEST_XPTR) $(TEST_XINCLUDE) $(TEST_C14N) $(TEST_DEBUG) $(TEST_CATALOG) $(TEST_REGEXPS) $(TEST_SCHEMAS) $(TEST_SCHEMATRON) $(TEST_THREADS) Timingtests $(TEST_VTIME) $(PYTHON_TESTS) $(TEST_MODULES)
+       @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \
+           $(MAKE) tests ; fi)
+       @(cd doc/examples ; $(MAKE) tests)
 
 APItests: testapi$(EXEEXT)
        @echo "## Running the API regression tests this may take a little while"
@@ -1115,7 +1127,7 @@ SchemasPythonTests:
            echo "## It is normal to see 11 errors reported" ; \
            $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \
          fi)
-       @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" MAKEFLAGS+=--silent pytests ; fi)
+       @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" pytests ; fi)
 
 Patterntests: xmllint$(EXEEXT)
        @(echo > .memdump)
@@ -1147,12 +1159,12 @@ ModuleTests: testModule$(EXEEXT) testdso.la
 
 cleanup:
        -@(find . -name .\#\* -exec rm {} \;)
-       -@(find . -name \*.gcda -o *.gcno -exec rm {} \;)
-       -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm {} \;)
+       -@(find . -name \*.gcda -o -name \*.gcno -exec rm -f {} \;)
+       -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm -f {} \;)
 
 dist-hook: cleanup libxml2.spec
        -cp libxml2.spec $(distdir)
-       (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -)
+       (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos os400 vms VxWorks bakefile test result) | (cd $(distdir); tar xf -)
 
 dist-source: distdir
        $(AMTAR) -chof - --exclude Tests --exclude test --exclude result $(distdir) | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-sources+"`.tar.gz
@@ -1183,7 +1195,8 @@ xml2Conf.sh: xml2Conf.sh.in Makefile
               < $(srcdir)/xml2Conf.sh.in > xml2Conf.tmp \
        && mv xml2Conf.tmp xml2Conf.sh
 
-CLEANFILES=xml2Conf.sh *.gcda *.gcno
+CLEANFILES = runxmlconf.log test.out xml2Conf.sh *.gcda *.gcno *.res
+DISTCLEANFILES = COPYING missing.lst
 
 confexecdir=$(libdir)
 confexec_DATA = xml2Conf.sh
@@ -1194,17 +1207,21 @@ EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \
             check-xsddata-test-suite.py check-xinclude-test-suite.py \
              example/Makefile.am example/gjobread.c example/gjobs.xml \
             $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \
+            libxml2-config.cmake.in \
             trionan.c trionan.h triostr.c triostr.h trio.c trio.h \
-            triop.h triodef.h libxml.h elfgcchack.h xzlib.h \
-            testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
+            triop.h triodef.h libxml.h elfgcchack.h xzlib.h buf.h \
+            enc.h save.h testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
             dbgen.pl dbgenattr.pl regressions.py regressions.xml \
-            README.tests Makefile.tests libxml2.syms \
+            README.tests Makefile.tests libxml2.syms timsort.h \
             $(CVS_EXTRA_DIST)
 
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libxml-2.0.pc
 
+cmakedir = $(libdir)/cmake/libxml2
+cmake_DATA = libxml2-config.cmake
+
 #
 # Install the tests program sources as examples 
 #
@@ -1213,13 +1230,13 @@ DOC_MODULE=libxml2-$(VERSION)
 EXAMPLES_DIR=$(BASE_DIR)/$(DOC_MODULE)/examples
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
-       -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
-       @MKDIR_P@ $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
+       $(MKDIR_P) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+       -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+       $(MKDIR_P) $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
 
 uninstall-local:
        rm -f $(DESTDIR)$(EXAMPLES_DIR)/testXPath.c
index 6e88cc9..fbe49ec 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -43,29 +87,31 @@ noinst_PROGRAMS = testSchemas$(EXEEXT) testRelax$(EXEEXT) \
        testAutomata$(EXEEXT) testRegexp$(EXEEXT) testReader$(EXEEXT) \
        testapi$(EXEEXT) testModule$(EXEEXT) runtest$(EXEEXT) \
        runsuite$(EXEEXT) testchar$(EXEEXT) testdict$(EXEEXT) \
-       runxmlconf$(EXEEXT) testrecurse$(EXEEXT)
+       runxmlconf$(EXEEXT) testrecurse$(EXEEXT) testlimits$(EXEEXT)
 bin_PROGRAMS = xmllint$(EXEEXT) xmlcatalog$(EXEEXT)
 subdir = .
-DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
+       $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/configure $(am__configure_deps) \
+       $(srcdir)/config.h.in $(srcdir)/libxml.spec.in \
+       $(srcdir)/libxml-2.0.pc.in \
        $(srcdir)/libxml-2.0-uninstalled.pc.in \
-       $(srcdir)/libxml-2.0.pc.in $(srcdir)/libxml.spec.in \
-       $(srcdir)/xml2-config.in $(top_srcdir)/configure AUTHORS \
-       COPYING ChangeLog INSTALL NEWS TODO config.guess config.sub \
-       depcomp install-sh ltmain.sh missing
+       $(srcdir)/libxml2-config.cmake.in $(srcdir)/xml2-config.in \
+       depcomp COPYING TODO config.guess config.sub install-sh \
+       missing ltmain.sh
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = libxml2.spec xml2-config libxml-2.0.pc \
-       libxml-2.0-uninstalled.pc
+CONFIG_CLEAN_FILES = libxml2.spec libxml-2.0.pc \
+       libxml-2.0-uninstalled.pc libxml2-config.cmake xml2-config
 CONFIG_CLEAN_VPATH_FILES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
@@ -88,58 +134,49 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
        "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
-       "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(confexecdir)" \
-       "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)"
+       "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(cmakedir)" \
+       "$(DESTDIR)$(confexecdir)" "$(DESTDIR)$(m4datadir)" \
+       "$(DESTDIR)$(pkgconfigdir)"
 LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
 am__DEPENDENCIES_1 =
-libxml2_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+libxml2_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am__libxml2_la_SOURCES_DIST = SAX.c entities.c encoding.c error.c \
        parserInternals.c parser.c tree.c hash.c list.c xmlIO.c \
        xmlmemory.c uri.c valid.c xlink.c HTMLparser.c HTMLtree.c \
        debugXML.c xpath.c xpointer.c xinclude.c nanohttp.c nanoftp.c \
        DOCBparser.c catalog.c globals.c threads.c c14n.c xmlstring.c \
-       xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
-       xmlreader.c relaxng.c dict.c SAX2.c xmlwriter.c legacy.c \
-       chvalid.c pattern.c xmlsave.c xmlmodule.c schematron.c xzlib.c \
-       triostr.c trio.c
-@WITH_TRIO_SOURCES_FALSE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \
-@WITH_TRIO_SOURCES_FALSE@      encoding.lo error.lo \
-@WITH_TRIO_SOURCES_FALSE@      parserInternals.lo parser.lo tree.lo \
-@WITH_TRIO_SOURCES_FALSE@      hash.lo list.lo xmlIO.lo xmlmemory.lo \
-@WITH_TRIO_SOURCES_FALSE@      uri.lo valid.lo xlink.lo \
-@WITH_TRIO_SOURCES_FALSE@      HTMLparser.lo HTMLtree.lo debugXML.lo \
-@WITH_TRIO_SOURCES_FALSE@      xpath.lo xpointer.lo xinclude.lo \
-@WITH_TRIO_SOURCES_FALSE@      nanohttp.lo nanoftp.lo DOCBparser.lo \
-@WITH_TRIO_SOURCES_FALSE@      catalog.lo globals.lo threads.lo \
-@WITH_TRIO_SOURCES_FALSE@      c14n.lo xmlstring.lo xmlregexp.lo \
-@WITH_TRIO_SOURCES_FALSE@      xmlschemas.lo xmlschemastypes.lo \
-@WITH_TRIO_SOURCES_FALSE@      xmlunicode.lo xmlreader.lo relaxng.lo \
-@WITH_TRIO_SOURCES_FALSE@      dict.lo SAX2.lo xmlwriter.lo \
-@WITH_TRIO_SOURCES_FALSE@      legacy.lo chvalid.lo pattern.lo \
-@WITH_TRIO_SOURCES_FALSE@      xmlsave.lo xmlmodule.lo schematron.lo \
-@WITH_TRIO_SOURCES_FALSE@      xzlib.lo
-@WITH_TRIO_SOURCES_TRUE@am_libxml2_la_OBJECTS = SAX.lo entities.lo \
-@WITH_TRIO_SOURCES_TRUE@       encoding.lo error.lo \
-@WITH_TRIO_SOURCES_TRUE@       parserInternals.lo parser.lo tree.lo \
-@WITH_TRIO_SOURCES_TRUE@       hash.lo list.lo xmlIO.lo xmlmemory.lo \
-@WITH_TRIO_SOURCES_TRUE@       uri.lo valid.lo xlink.lo HTMLparser.lo \
-@WITH_TRIO_SOURCES_TRUE@       HTMLtree.lo debugXML.lo xpath.lo \
-@WITH_TRIO_SOURCES_TRUE@       xpointer.lo xinclude.lo nanohttp.lo \
-@WITH_TRIO_SOURCES_TRUE@       nanoftp.lo DOCBparser.lo catalog.lo \
-@WITH_TRIO_SOURCES_TRUE@       globals.lo threads.lo c14n.lo \
-@WITH_TRIO_SOURCES_TRUE@       xmlstring.lo xmlregexp.lo \
-@WITH_TRIO_SOURCES_TRUE@       xmlschemas.lo xmlschemastypes.lo \
-@WITH_TRIO_SOURCES_TRUE@       xmlunicode.lo triostr.lo trio.lo \
-@WITH_TRIO_SOURCES_TRUE@       xmlreader.lo relaxng.lo dict.lo \
-@WITH_TRIO_SOURCES_TRUE@       SAX2.lo xmlwriter.lo legacy.lo \
-@WITH_TRIO_SOURCES_TRUE@       chvalid.lo pattern.lo xmlsave.lo \
-@WITH_TRIO_SOURCES_TRUE@       xmlmodule.lo schematron.lo xzlib.lo
+       buf.c xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+       triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
+       xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c xmlmodule.c \
+       schematron.c xzlib.c
+@WITH_SAX1_SOURCES_TRUE@am__objects_1 = DOCBparser.lo
+@WITH_TRIO_SOURCES_TRUE@am__objects_2 = triostr.lo trio.lo
+am_libxml2_la_OBJECTS = SAX.lo entities.lo encoding.lo error.lo \
+       parserInternals.lo parser.lo tree.lo hash.lo list.lo xmlIO.lo \
+       xmlmemory.lo uri.lo valid.lo xlink.lo HTMLparser.lo \
+       HTMLtree.lo debugXML.lo xpath.lo xpointer.lo xinclude.lo \
+       nanohttp.lo nanoftp.lo $(am__objects_1) catalog.lo globals.lo \
+       threads.lo c14n.lo xmlstring.lo buf.lo xmlregexp.lo \
+       xmlschemas.lo xmlschemastypes.lo xmlunicode.lo \
+       $(am__objects_2) xmlreader.lo relaxng.lo dict.lo SAX2.lo \
+       xmlwriter.lo legacy.lo chvalid.lo pattern.lo xmlsave.lo \
+       xmlmodule.lo schematron.lo xzlib.lo
 libxml2_la_OBJECTS = $(am_libxml2_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+am__v_lt_1 = 
 libxml2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(libxml2_la_LDFLAGS) $(LDFLAGS) -o $@
@@ -152,7 +189,10 @@ testdso_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_runsuite_OBJECTS = runsuite.$(OBJEXT)
 runsuite_OBJECTS = $(am_runsuite_OBJECTS)
-am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(top_builddir)/libxml2.la \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
 runsuite_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(runsuite_LDFLAGS) $(LDFLAGS) -o $@
@@ -211,7 +251,9 @@ testSchemas_OBJECTS = $(am_testSchemas_OBJECTS)
 testSchemas_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(testSchemas_LDFLAGS) $(LDFLAGS) -o $@
-am_testThreads_OBJECTS = testThreads@THREADS_W32@.$(OBJEXT)
+am__testThreads_SOURCES_DIST = testThreads.c testThreadsWin32.c
+@THREADS_W32_FALSE@am_testThreads_OBJECTS = testThreads.$(OBJEXT)
+@THREADS_W32_TRUE@am_testThreads_OBJECTS = testThreadsWin32.$(OBJEXT)
 testThreads_OBJECTS = $(am_testThreads_OBJECTS)
 testThreads_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -241,6 +283,11 @@ testdict_OBJECTS = $(am_testdict_OBJECTS)
 testdict_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(testdict_LDFLAGS) $(LDFLAGS) -o $@
+am_testlimits_OBJECTS = testlimits.$(OBJEXT)
+testlimits_OBJECTS = $(am_testlimits_OBJECTS)
+testlimits_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(testlimits_LDFLAGS) $(LDFLAGS) -o $@
 am_testrecurse_OBJECTS = testrecurse.$(OBJEXT)
 testrecurse_OBJECTS = $(am_testrecurse_OBJECTS)
 testrecurse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -257,6 +304,18 @@ xmllint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(xmllint_LDFLAGS) $(LDFLAGS) -o $@
 SCRIPTS = $(bin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -267,22 +326,18 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(libxml2_la_SOURCES) $(testdso_la_SOURCES) \
        $(runsuite_SOURCES) $(runtest_SOURCES) $(runxmlconf_SOURCES) \
        $(testAutomata_SOURCES) $(testC14N_SOURCES) \
@@ -291,44 +346,76 @@ SOURCES = $(libxml2_la_SOURCES) $(testdso_la_SOURCES) \
        $(testRelax_SOURCES) $(testSAX_SOURCES) $(testSchemas_SOURCES) \
        $(testThreads_SOURCES) $(testURI_SOURCES) $(testXPath_SOURCES) \
        $(testapi_SOURCES) $(testchar_SOURCES) $(testdict_SOURCES) \
-       $(testrecurse_SOURCES) $(xmlcatalog_SOURCES) \
-       $(xmllint_SOURCES)
+       $(testlimits_SOURCES) $(testrecurse_SOURCES) \
+       $(xmlcatalog_SOURCES) $(xmllint_SOURCES)
 DIST_SOURCES = $(am__libxml2_la_SOURCES_DIST) $(testdso_la_SOURCES) \
        $(runsuite_SOURCES) $(runtest_SOURCES) $(runxmlconf_SOURCES) \
        $(testAutomata_SOURCES) $(testC14N_SOURCES) \
        $(testHTML_SOURCES) $(testModule_SOURCES) \
        $(testReader_SOURCES) $(testRegexp_SOURCES) \
        $(testRelax_SOURCES) $(testSAX_SOURCES) $(testSchemas_SOURCES) \
-       $(testThreads_SOURCES) $(testURI_SOURCES) $(testXPath_SOURCES) \
-       $(testapi_SOURCES) $(testchar_SOURCES) $(testdict_SOURCES) \
+       $(am__testThreads_SOURCES_DIST) $(testURI_SOURCES) \
+       $(testXPath_SOURCES) $(testapi_SOURCES) $(testchar_SOURCES) \
+       $(testdict_SOURCES) $(testlimits_SOURCES) \
        $(testrecurse_SOURCES) $(xmlcatalog_SOURCES) \
        $(xmllint_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 man1dir = $(mandir)/man1
 man3dir = $(mandir)/man3
 NROFF = nroff
 MANS = $(man_MANS)
-DATA = $(confexec_DATA) $(m4data_DATA) $(pkgconfig_DATA)
+DATA = $(cmake_DATA) $(confexec_DATA) $(m4data_DATA) $(pkgconfig_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-       distdir dist dist-all distcheck
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+       cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+       $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+CSCOPE = cscope
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
   sed_first='s,^\([^/]*\)/.*$$,\1,'; \
@@ -356,13 +443,15 @@ am__relativize = \
   reldir="$$dir2"
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -399,6 +488,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -443,6 +533,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -454,7 +547,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -479,7 +571,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -512,6 +603,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -586,68 +678,69 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 ACLOCAL_AMFLAGS = -I m4
-SUBDIRS = include . doc example xstc @PYTHON_SUBDIR@
+SUBDIRS = include . doc example xstc $(PYTHON_SUBDIR)
 DIST_SUBDIRS = include . doc example python xstc
-INCLUDES = -I$(top_builddir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@ @LZMA_CFLAGS@
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS) $(LZMA_CFLAGS)
 bin_SCRIPTS = xml2-config
 lib_LTLIBRARIES = libxml2.la
-libxml2_la_LIBADD = @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+libxml2_la_LIBADD = $(ICU_LIBS) $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD)
 @USE_VERSION_SCRIPT_FALSE@LIBXML2_VERSION_SCRIPT = 
 @USE_VERSION_SCRIPT_TRUE@LIBXML2_VERSION_SCRIPT = $(VERSION_SCRIPT_FLAGS)$(srcdir)/libxml2.syms
-libxml2_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ \
-                     $(LIBXML2_VERSION_SCRIPT) \
-                    -version-info @LIBXML_VERSION_INFO@ \
-                    @MODULE_PLATFORM_LIBS@
-
-@WITH_TRIO_SOURCES_FALSE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c  \
-@WITH_TRIO_SOURCES_FALSE@              parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
-@WITH_TRIO_SOURCES_FALSE@              valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
-@WITH_TRIO_SOURCES_FALSE@              xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
-@WITH_TRIO_SOURCES_FALSE@              catalog.c globals.c threads.c c14n.c xmlstring.c \
-@WITH_TRIO_SOURCES_FALSE@              xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
-@WITH_TRIO_SOURCES_FALSE@              xmlreader.c relaxng.c dict.c SAX2.c \
-@WITH_TRIO_SOURCES_FALSE@              xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
-@WITH_TRIO_SOURCES_FALSE@              xmlmodule.c schematron.c xzlib.c
-
-@WITH_TRIO_SOURCES_TRUE@libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c  \
-@WITH_TRIO_SOURCES_TRUE@               parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
-@WITH_TRIO_SOURCES_TRUE@               valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
-@WITH_TRIO_SOURCES_TRUE@               xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c \
-@WITH_TRIO_SOURCES_TRUE@               catalog.c globals.c threads.c c14n.c xmlstring.c \
-@WITH_TRIO_SOURCES_TRUE@               xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
-@WITH_TRIO_SOURCES_TRUE@               triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c \
-@WITH_TRIO_SOURCES_TRUE@               xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
-@WITH_TRIO_SOURCES_TRUE@               xmlmodule.c schematron.c xzlib.c
+libxml2_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) \
+                    $(LIBXML2_VERSION_SCRIPT) \
+                    -version-info $(LIBXML_VERSION_INFO) \
+                    $(MODULE_PLATFORM_LIBS)
+
+@WITH_SAX1_SOURCES_FALSE@docb_sources = 
+@WITH_SAX1_SOURCES_TRUE@docb_sources = DOCBparser.c
+@WITH_TRIO_SOURCES_FALSE@trio_sources = 
+@WITH_TRIO_SOURCES_TRUE@trio_sources = triostr.c trio.c
+libxml2_la_SOURCES = SAX.c entities.c encoding.c error.c parserInternals.c  \
+               parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c  \
+               valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c  \
+               xpointer.c xinclude.c nanohttp.c nanoftp.c \
+               $(docb_sources) \
+               catalog.c globals.c threads.c c14n.c xmlstring.c buf.c \
+               xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c \
+               $(trio_sources) \
+               xmlreader.c relaxng.c dict.c SAX2.c \
+               xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c \
+               xmlmodule.c schematron.c xzlib.c
 
 DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ $(ICONV_LIBS) @M_LIBS@ @WIN32_EXTRA_LIBADD@
+LDADDS = $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(LZMA_LIBS) $(ICONV_LIBS) $(M_LIBS) $(WIN32_EXTRA_LIBADD)
 man_MANS = xml2-config.1 libxml.3
 m4datadir = $(datadir)/aclocal
 m4data_DATA = libxml.m4
 runtest_SOURCES = runtest.c
 runtest_LDFLAGS = 
 runtest_DEPENDENCIES = $(DEPS)
-runtest_LDADD = @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS)
+runtest_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
 testrecurse_SOURCES = testrecurse.c
 testrecurse_LDFLAGS = 
 testrecurse_DEPENDENCIES = $(DEPS)
-testrecurse_LDADD = @BASE_THREAD_LIBS@ @RDL_LIBS@ $(LDADDS)
+testrecurse_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
+testlimits_SOURCES = testlimits.c
+testlimits_LDFLAGS = 
+testlimits_DEPENDENCIES = $(DEPS)
+testlimits_LDADD = $(BASE_THREAD_LIBS) $(RDL_LIBS) $(LDADDS)
 testchar_SOURCES = testchar.c
 testchar_LDFLAGS = 
 testchar_DEPENDENCIES = $(DEPS)
-testchar_LDADD = @RDL_LIBS@ $(LDADDS)
+testchar_LDADD = $(RDL_LIBS) $(LDADDS)
 testdict_SOURCES = testdict.c
 testdict_LDFLAGS = 
 testdict_DEPENDENCIES = $(DEPS)
-testdict_LDADD = @RDL_LIBS@ $(LDADDS)
+testdict_LDADD = $(RDL_LIBS) $(LDADDS)
 runsuite_SOURCES = runsuite.c
 runsuite_LDFLAGS = 
 runsuite_DEPENDENCIES = $(DEPS)
-runsuite_LDADD = @RDL_LIBS@ $(LDADDS)
+runsuite_LDADD = $(RDL_LIBS) $(LDADDS)
 xmllint_SOURCES = xmllint.c
 xmllint_LDFLAGS = 
 xmllint_DEPENDENCIES = $(DEPS)
-xmllint_LDADD = @RDL_LIBS@ $(LDADDS)
+xmllint_LDADD = $(RDL_LIBS) $(LDADDS)
 testSAX_SOURCES = testSAX.c
 testSAX_LDFLAGS = 
 testSAX_DEPENDENCIES = $(DEPS)
@@ -659,7 +752,7 @@ testHTML_LDADD = $(LDADDS)
 xmlcatalog_SOURCES = xmlcatalog.c
 xmlcatalog_LDFLAGS = 
 xmlcatalog_DEPENDENCIES = $(DEPS)
-xmlcatalog_LDADD = @RDL_LIBS@ $(LDADDS)
+xmlcatalog_LDADD = $(RDL_LIBS) $(LDADDS)
 testXPath_SOURCES = testXPath.c
 testXPath_LDFLAGS = 
 testXPath_DEPENDENCIES = $(DEPS)
@@ -668,10 +761,11 @@ testC14N_SOURCES = testC14N.c
 testC14N_LDFLAGS = 
 testC14N_DEPENDENCIES = $(DEPS)
 testC14N_LDADD = $(LDADDS)
-testThreads_SOURCES = testThreads@THREADS_W32@.c
+@THREADS_W32_FALSE@testThreads_SOURCES = testThreads.c
+@THREADS_W32_TRUE@testThreads_SOURCES = testThreadsWin32.c
 testThreads_LDFLAGS = 
 testThreads_DEPENDENCIES = $(DEPS)
-testThreads_LDADD = @BASE_THREAD_LIBS@  $(LDADDS)
+testThreads_LDADD = $(BASE_THREAD_LIBS) $(LDADDS)
 testURI_SOURCES = testURI.c
 testURI_LDFLAGS = 
 testURI_DEPENDENCIES = $(DEPS)
@@ -703,6 +797,7 @@ testModule_LDADD = $(LDADDS)
 noinst_LTLIBRARIES = testdso.la
 testdso_la_SOURCES = testdso.c
 testdso_la_LDFLAGS = -module -no-undefined -avoid-version -rpath $(libdir)
+BUILT_SOURCES = testapi.c
 testapi_SOURCES = testapi.c
 testapi_LDFLAGS = 
 testapi_DEPENDENCIES = $(DEPS)
@@ -711,7 +806,8 @@ runxmlconf_SOURCES = runxmlconf.c
 runxmlconf_LDFLAGS = 
 runxmlconf_DEPENDENCIES = $(DEPS)
 runxmlconf_LDADD = $(LDADDS)
-CLEANFILES = xml2Conf.sh *.gcda *.gcno
+CLEANFILES = runxmlconf.log test.out xml2Conf.sh *.gcda *.gcno *.res
+DISTCLEANFILES = COPYING missing.lst
 confexecdir = $(libdir)
 confexec_DATA = xml2Conf.sh
 CVS_EXTRA_DIST = 
@@ -721,15 +817,18 @@ EXTRA_DIST = xml2-config.in xml2Conf.sh.in libxml.spec.in libxml2.spec \
             check-xsddata-test-suite.py check-xinclude-test-suite.py \
              example/Makefile.am example/gjobread.c example/gjobs.xml \
             $(man_MANS) libxml-2.0.pc.in libxml-2.0-uninstalled.pc.in \
+            libxml2-config.cmake.in \
             trionan.c trionan.h triostr.c triostr.h trio.c trio.h \
-            triop.h triodef.h libxml.h elfgcchack.h xzlib.h \
-            testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
+            triop.h triodef.h libxml.h elfgcchack.h xzlib.h buf.h \
+            enc.h save.h testThreadsWin32.c genUnicode.py TODO_SCHEMAS \
             dbgen.pl dbgenattr.pl regressions.py regressions.xml \
-            README.tests Makefile.tests libxml2.syms \
+            README.tests Makefile.tests libxml2.syms timsort.h \
             $(CVS_EXTRA_DIST)
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libxml-2.0.pc
+cmakedir = $(libdir)/cmake/libxml2
+cmake_DATA = libxml2-config.cmake
 
 #
 # Install the tests program sources as examples 
@@ -744,12 +843,12 @@ EXAMPLES_DIR = $(BASE_DIR)/$(DOC_MODULE)/examples
 #
 LCOV = /usr/bin/lcov
 GENHTML = /usr/bin/genhtml
-all: config.h
+all: $(BUILT_SOURCES) config.h
        $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
-am--refresh:
+am--refresh: Makefile
        @:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
@@ -785,10 +884,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-       @if test ! -f $@; then \
-         rm -f stamp-h1; \
-         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-       else :; fi
+       @if test ! -f $@; then rm -f stamp-h1; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
@@ -802,15 +899,17 @@ distclean-hdr:
        -rm -f config.h stamp-h1
 libxml2.spec: $(top_builddir)/config.status $(srcdir)/libxml.spec.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
-xml2-config: $(top_builddir)/config.status $(srcdir)/xml2-config.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
 libxml-2.0.pc: $(top_builddir)/config.status $(srcdir)/libxml-2.0.pc.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
 libxml-2.0-uninstalled.pc: $(top_builddir)/config.status $(srcdir)/libxml-2.0-uninstalled.pc.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
+libxml2-config.cmake: $(top_builddir)/config.status $(srcdir)/libxml2-config.cmake.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+xml2-config: $(top_builddir)/config.status $(srcdir)/xml2-config.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+
 install-libLTLIBRARIES: $(lib_LTLIBRARIES)
        @$(NORMAL_INSTALL)
-       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
        @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
        list2=; for p in $$list; do \
          if test -f $$p; then \
@@ -818,6 +917,8 @@ install-libLTLIBRARIES: $(lib_LTLIBRARIES)
          else :; fi; \
        done; \
        test -z "$$list2" || { \
+         echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
          echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
        }
@@ -833,35 +934,46 @@ uninstall-libLTLIBRARIES:
 
 clean-libLTLIBRARIES:
        -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
+       @list='$(lib_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
 
 clean-noinstLTLIBRARIES:
        -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) 
+       @list='$(noinst_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libxml2.la: $(libxml2_la_OBJECTS) $(libxml2_la_DEPENDENCIES) $(EXTRA_libxml2_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(libxml2_la_LINK) -rpath $(libdir) $(libxml2_la_OBJECTS) $(libxml2_la_LIBADD) $(LIBS)
-testdso.la: $(testdso_la_OBJECTS) $(testdso_la_DEPENDENCIES) 
+
+testdso.la: $(testdso_la_OBJECTS) $(testdso_la_DEPENDENCIES) $(EXTRA_testdso_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(testdso_la_LINK)  $(testdso_la_OBJECTS) $(testdso_la_LIBADD) $(LIBS)
 install-binPROGRAMS: $(bin_PROGRAMS)
        @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
        for p in $$list; do echo "$$p $$p"; done | \
        sed 's/$(EXEEXT)$$//' | \
-       while read p p1; do if test -f $$p || test -f $$p1; \
-         then echo "$$p"; echo "$$p"; else :; fi; \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
        done | \
-       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
            -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
        sed 'N;N;N;s,\n, ,g' | \
        $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
@@ -882,7 +994,8 @@ uninstall-binPROGRAMS:
        @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
        files=`for p in $$list; do echo "$$p"; done | \
          sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-             -e 's/$$/$(EXEEXT)/' `; \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
        test -n "$$list" || exit 0; \
        echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
        cd "$(DESTDIR)$(bindir)" && rm -f $$files
@@ -904,73 +1017,101 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-runsuite$(EXEEXT): $(runsuite_OBJECTS) $(runsuite_DEPENDENCIES) 
+
+runsuite$(EXEEXT): $(runsuite_OBJECTS) $(runsuite_DEPENDENCIES) $(EXTRA_runsuite_DEPENDENCIES) 
        @rm -f runsuite$(EXEEXT)
        $(AM_V_CCLD)$(runsuite_LINK) $(runsuite_OBJECTS) $(runsuite_LDADD) $(LIBS)
-runtest$(EXEEXT): $(runtest_OBJECTS) $(runtest_DEPENDENCIES) 
+
+runtest$(EXEEXT): $(runtest_OBJECTS) $(runtest_DEPENDENCIES) $(EXTRA_runtest_DEPENDENCIES) 
        @rm -f runtest$(EXEEXT)
        $(AM_V_CCLD)$(runtest_LINK) $(runtest_OBJECTS) $(runtest_LDADD) $(LIBS)
-runxmlconf$(EXEEXT): $(runxmlconf_OBJECTS) $(runxmlconf_DEPENDENCIES) 
+
+runxmlconf$(EXEEXT): $(runxmlconf_OBJECTS) $(runxmlconf_DEPENDENCIES) $(EXTRA_runxmlconf_DEPENDENCIES) 
        @rm -f runxmlconf$(EXEEXT)
        $(AM_V_CCLD)$(runxmlconf_LINK) $(runxmlconf_OBJECTS) $(runxmlconf_LDADD) $(LIBS)
-testAutomata$(EXEEXT): $(testAutomata_OBJECTS) $(testAutomata_DEPENDENCIES) 
+
+testAutomata$(EXEEXT): $(testAutomata_OBJECTS) $(testAutomata_DEPENDENCIES) $(EXTRA_testAutomata_DEPENDENCIES) 
        @rm -f testAutomata$(EXEEXT)
        $(AM_V_CCLD)$(testAutomata_LINK) $(testAutomata_OBJECTS) $(testAutomata_LDADD) $(LIBS)
-testC14N$(EXEEXT): $(testC14N_OBJECTS) $(testC14N_DEPENDENCIES) 
+
+testC14N$(EXEEXT): $(testC14N_OBJECTS) $(testC14N_DEPENDENCIES) $(EXTRA_testC14N_DEPENDENCIES) 
        @rm -f testC14N$(EXEEXT)
        $(AM_V_CCLD)$(testC14N_LINK) $(testC14N_OBJECTS) $(testC14N_LDADD) $(LIBS)
-testHTML$(EXEEXT): $(testHTML_OBJECTS) $(testHTML_DEPENDENCIES) 
+
+testHTML$(EXEEXT): $(testHTML_OBJECTS) $(testHTML_DEPENDENCIES) $(EXTRA_testHTML_DEPENDENCIES) 
        @rm -f testHTML$(EXEEXT)
        $(AM_V_CCLD)$(testHTML_LINK) $(testHTML_OBJECTS) $(testHTML_LDADD) $(LIBS)
-testModule$(EXEEXT): $(testModule_OBJECTS) $(testModule_DEPENDENCIES) 
+
+testModule$(EXEEXT): $(testModule_OBJECTS) $(testModule_DEPENDENCIES) $(EXTRA_testModule_DEPENDENCIES) 
        @rm -f testModule$(EXEEXT)
        $(AM_V_CCLD)$(testModule_LINK) $(testModule_OBJECTS) $(testModule_LDADD) $(LIBS)
-testReader$(EXEEXT): $(testReader_OBJECTS) $(testReader_DEPENDENCIES) 
+
+testReader$(EXEEXT): $(testReader_OBJECTS) $(testReader_DEPENDENCIES) $(EXTRA_testReader_DEPENDENCIES) 
        @rm -f testReader$(EXEEXT)
        $(AM_V_CCLD)$(testReader_LINK) $(testReader_OBJECTS) $(testReader_LDADD) $(LIBS)
-testRegexp$(EXEEXT): $(testRegexp_OBJECTS) $(testRegexp_DEPENDENCIES) 
+
+testRegexp$(EXEEXT): $(testRegexp_OBJECTS) $(testRegexp_DEPENDENCIES) $(EXTRA_testRegexp_DEPENDENCIES) 
        @rm -f testRegexp$(EXEEXT)
        $(AM_V_CCLD)$(testRegexp_LINK) $(testRegexp_OBJECTS) $(testRegexp_LDADD) $(LIBS)
-testRelax$(EXEEXT): $(testRelax_OBJECTS) $(testRelax_DEPENDENCIES) 
+
+testRelax$(EXEEXT): $(testRelax_OBJECTS) $(testRelax_DEPENDENCIES) $(EXTRA_testRelax_DEPENDENCIES) 
        @rm -f testRelax$(EXEEXT)
        $(AM_V_CCLD)$(testRelax_LINK) $(testRelax_OBJECTS) $(testRelax_LDADD) $(LIBS)
-testSAX$(EXEEXT): $(testSAX_OBJECTS) $(testSAX_DEPENDENCIES) 
+
+testSAX$(EXEEXT): $(testSAX_OBJECTS) $(testSAX_DEPENDENCIES) $(EXTRA_testSAX_DEPENDENCIES) 
        @rm -f testSAX$(EXEEXT)
        $(AM_V_CCLD)$(testSAX_LINK) $(testSAX_OBJECTS) $(testSAX_LDADD) $(LIBS)
-testSchemas$(EXEEXT): $(testSchemas_OBJECTS) $(testSchemas_DEPENDENCIES) 
+
+testSchemas$(EXEEXT): $(testSchemas_OBJECTS) $(testSchemas_DEPENDENCIES) $(EXTRA_testSchemas_DEPENDENCIES) 
        @rm -f testSchemas$(EXEEXT)
        $(AM_V_CCLD)$(testSchemas_LINK) $(testSchemas_OBJECTS) $(testSchemas_LDADD) $(LIBS)
-testThreads$(EXEEXT): $(testThreads_OBJECTS) $(testThreads_DEPENDENCIES) 
+
+testThreads$(EXEEXT): $(testThreads_OBJECTS) $(testThreads_DEPENDENCIES) $(EXTRA_testThreads_DEPENDENCIES) 
        @rm -f testThreads$(EXEEXT)
        $(AM_V_CCLD)$(testThreads_LINK) $(testThreads_OBJECTS) $(testThreads_LDADD) $(LIBS)
-testURI$(EXEEXT): $(testURI_OBJECTS) $(testURI_DEPENDENCIES) 
+
+testURI$(EXEEXT): $(testURI_OBJECTS) $(testURI_DEPENDENCIES) $(EXTRA_testURI_DEPENDENCIES) 
        @rm -f testURI$(EXEEXT)
        $(AM_V_CCLD)$(testURI_LINK) $(testURI_OBJECTS) $(testURI_LDADD) $(LIBS)
-testXPath$(EXEEXT): $(testXPath_OBJECTS) $(testXPath_DEPENDENCIES) 
+
+testXPath$(EXEEXT): $(testXPath_OBJECTS) $(testXPath_DEPENDENCIES) $(EXTRA_testXPath_DEPENDENCIES) 
        @rm -f testXPath$(EXEEXT)
        $(AM_V_CCLD)$(testXPath_LINK) $(testXPath_OBJECTS) $(testXPath_LDADD) $(LIBS)
-testapi$(EXEEXT): $(testapi_OBJECTS) $(testapi_DEPENDENCIES) 
+
+testapi$(EXEEXT): $(testapi_OBJECTS) $(testapi_DEPENDENCIES) $(EXTRA_testapi_DEPENDENCIES) 
        @rm -f testapi$(EXEEXT)
        $(AM_V_CCLD)$(testapi_LINK) $(testapi_OBJECTS) $(testapi_LDADD) $(LIBS)
-testchar$(EXEEXT): $(testchar_OBJECTS) $(testchar_DEPENDENCIES) 
+
+testchar$(EXEEXT): $(testchar_OBJECTS) $(testchar_DEPENDENCIES) $(EXTRA_testchar_DEPENDENCIES) 
        @rm -f testchar$(EXEEXT)
        $(AM_V_CCLD)$(testchar_LINK) $(testchar_OBJECTS) $(testchar_LDADD) $(LIBS)
-testdict$(EXEEXT): $(testdict_OBJECTS) $(testdict_DEPENDENCIES) 
+
+testdict$(EXEEXT): $(testdict_OBJECTS) $(testdict_DEPENDENCIES) $(EXTRA_testdict_DEPENDENCIES) 
        @rm -f testdict$(EXEEXT)
        $(AM_V_CCLD)$(testdict_LINK) $(testdict_OBJECTS) $(testdict_LDADD) $(LIBS)
-testrecurse$(EXEEXT): $(testrecurse_OBJECTS) $(testrecurse_DEPENDENCIES) 
+
+testlimits$(EXEEXT): $(testlimits_OBJECTS) $(testlimits_DEPENDENCIES) $(EXTRA_testlimits_DEPENDENCIES) 
+       @rm -f testlimits$(EXEEXT)
+       $(AM_V_CCLD)$(testlimits_LINK) $(testlimits_OBJECTS) $(testlimits_LDADD) $(LIBS)
+
+testrecurse$(EXEEXT): $(testrecurse_OBJECTS) $(testrecurse_DEPENDENCIES) $(EXTRA_testrecurse_DEPENDENCIES) 
        @rm -f testrecurse$(EXEEXT)
        $(AM_V_CCLD)$(testrecurse_LINK) $(testrecurse_OBJECTS) $(testrecurse_LDADD) $(LIBS)
-xmlcatalog$(EXEEXT): $(xmlcatalog_OBJECTS) $(xmlcatalog_DEPENDENCIES) 
+
+xmlcatalog$(EXEEXT): $(xmlcatalog_OBJECTS) $(xmlcatalog_DEPENDENCIES) $(EXTRA_xmlcatalog_DEPENDENCIES) 
        @rm -f xmlcatalog$(EXEEXT)
        $(AM_V_CCLD)$(xmlcatalog_LINK) $(xmlcatalog_OBJECTS) $(xmlcatalog_LDADD) $(LIBS)
-xmllint$(EXEEXT): $(xmllint_OBJECTS) $(xmllint_DEPENDENCIES) 
+
+xmllint$(EXEEXT): $(xmllint_OBJECTS) $(xmllint_DEPENDENCIES) $(EXTRA_xmllint_DEPENDENCIES) 
        @rm -f xmllint$(EXEEXT)
        $(AM_V_CCLD)$(xmllint_LINK) $(xmllint_OBJECTS) $(xmllint_LDADD) $(LIBS)
 install-binSCRIPTS: $(bin_SCRIPTS)
        @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
        @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
@@ -998,9 +1139,7 @@ uninstall-binSCRIPTS:
        @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
        files=`for p in $$list; do echo "$$p"; done | \
               sed -e 's,.*/,,;$(transform)'`; \
-       test -n "$$list" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -1013,6 +1152,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HTMLtree.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SAX2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buf.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c14n.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chvalid.Plo@am__quote@
@@ -1044,13 +1184,15 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testRelax.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSAX.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testSchemas.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreads@THREADS_W32@.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreads.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testThreadsWin32.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testURI.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testXPath.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testapi.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testchar.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdict.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdso.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testlimits.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testrecurse.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@
@@ -1080,26 +1222,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -1111,11 +1250,18 @@ distclean-libtool:
        -rm -f libtool config.lt
 install-man1: $(man_MANS)
        @$(NORMAL_INSTALL)
-       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-       @list=''; test -n "$(man1dir)" || exit 0; \
-       { for i in $$list; do echo "$$i"; done; \
-       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-         sed -n '/\.1[a-z]*$$/p'; \
+       @list1=''; \
+       list2='$(man_MANS)'; \
+       test -n "$(man1dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.1[a-z]*$$/p'; \
+       fi; \
        } | while read p; do \
          if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; echo "$$p"; \
@@ -1144,16 +1290,21 @@ uninstall-man1:
          sed -n '/\.1[a-z]*$$/p'; \
        } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
              -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-       test -z "$$files" || { \
-         echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
-         cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+       dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
 install-man3: $(man_MANS)
        @$(NORMAL_INSTALL)
-       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
-       @list=''; test -n "$(man3dir)" || exit 0; \
-       { for i in $$list; do echo "$$i"; done; \
-       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-         sed -n '/\.3[a-z]*$$/p'; \
+       @list1=''; \
+       list2='$(man_MANS)'; \
+       test -n "$(man3dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.3[a-z]*$$/p'; \
+       fi; \
        } | while read p; do \
          if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; echo "$$p"; \
@@ -1182,13 +1333,35 @@ uninstall-man3:
          sed -n '/\.3[a-z]*$$/p'; \
        } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
              -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-       test -z "$$files" || { \
-         echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
-         cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
+       dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+install-cmakeDATA: $(cmake_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(cmake_DATA)'; test -n "$(cmakedir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(cmakedir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(cmakedir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cmakedir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(cmakedir)" || exit $$?; \
+       done
+
+uninstall-cmakeDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(cmake_DATA)'; test -n "$(cmakedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(cmakedir)'; $(am__uninstall_files_from_dir)
 install-confexecDATA: $(confexec_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(confexecdir)" || $(MKDIR_P) "$(DESTDIR)$(confexecdir)"
        @list='$(confexec_DATA)'; test -n "$(confexecdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(confexecdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(confexecdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -1202,13 +1375,14 @@ uninstall-confexecDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(confexec_DATA)'; test -n "$(confexecdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(confexecdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(confexecdir)" && rm -f $$files
+       dir='$(DESTDIR)$(confexecdir)'; $(am__uninstall_files_from_dir)
 install-m4dataDATA: $(m4data_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(m4datadir)" || $(MKDIR_P) "$(DESTDIR)$(m4datadir)"
        @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(m4datadir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(m4datadir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -1222,13 +1396,14 @@ uninstall-m4dataDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(m4data_DATA)'; test -n "$(m4datadir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(m4datadir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(m4datadir)" && rm -f $$files
+       dir='$(DESTDIR)$(m4datadir)'; $(am__uninstall_files_from_dir)
 install-pkgconfigDATA: $(pkgconfig_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
        @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -1242,27 +1417,28 @@ uninstall-pkgconfigDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+       dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -1277,57 +1453,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -1343,12 +1474,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -1360,15 +1486,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -1377,24 +1499,33 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+       test ! -s cscope.files \
+         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+       -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
 
 distdir: $(DISTFILES)
-       @list='$(MANS)'; if test -n "$$list"; then \
-         list=`for p in $$list; do \
-           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-         if test -n "$$list" && \
-           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
-           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
-           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-           echo "       typically \`make maintainer-clean' will remove them" >&2; \
-           exit 1; \
-         else :; fi; \
-       else :; fi
        $(am__remove_distdir)
        test -d "$(distdir)" || mkdir "$(distdir)"
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -1428,13 +1559,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -1466,36 +1594,36 @@ distdir: $(DISTFILES)
        || chmod -R a+r "$(distdir)"
 dist-gzip: distdir
        tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-       $(am__remove_distdir)
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__post_remove_distdir)
 
-dist-lzma: distdir
-       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
-       $(am__remove_distdir)
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+       $(am__post_remove_distdir)
 
 dist-xz: distdir
-       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
-       $(am__remove_distdir)
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+       $(am__post_remove_distdir)
 
 dist-tarZ: distdir
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-shar: distdir
        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
 dist-zip: distdir
        -rm -f $(distdir).zip
        zip -rq $(distdir).zip $(distdir)
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
 
-dist dist-all: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
+dist dist-all:
+       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+       $(am__post_remove_distdir)
 
 # This target untars the dist file and tries a VPATH configuration.  Then
 # it guarantees that the distribution is self-contained by making another
@@ -1506,8 +1634,8 @@ distcheck: dist
          GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
        *.tar.bz2*) \
          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-       *.tar.lzma*) \
-         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.lz*) \
+         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
        *.tar.xz*) \
          xz -dc $(distdir).tar.xz | $(am__untar) ;;\
        *.tar.Z*) \
@@ -1517,9 +1645,9 @@ distcheck: dist
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
-       chmod -R a-w $(distdir); chmod a+w $(distdir)
-       mkdir $(distdir)/_build
-       mkdir $(distdir)/_inst
+       chmod -R a-w $(distdir)
+       chmod u+w $(distdir)
+       mkdir $(distdir)/_build $(distdir)/_inst
        chmod a-w $(distdir)
        test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
@@ -1527,6 +1655,7 @@ distcheck: dist
          && am__cwd=`pwd` \
          && $(am__cd) $(distdir)/_build \
          && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -1550,13 +1679,21 @@ distcheck: dist
          && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
          && cd "$$am__cwd" \
          || exit 1
-       $(am__remove_distdir)
+       $(am__post_remove_distdir)
        @(echo "$(distdir) archives ready for distribution: "; \
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-       @$(am__cd) '$(distuninstallcheck_dir)' \
-       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+       @test -n '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: trying to run $@ with an empty' \
+              '$$(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       $(am__cd) '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
           || { echo "ERROR: files left after uninstall:" ; \
                if test -n "$(DESTDIR)"; then \
                  echo "  (check DESTDIR support)"; \
@@ -1573,17 +1710,19 @@ distcleancheck: distclean
               $(distcleancheck_listfiles) ; \
               exit 1; } >&2
 check-am: all-am
-check: check-recursive
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
 all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \
                config.h
 install-binPROGRAMS: install-libLTLIBRARIES
 
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(confexecdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(cmakedir)" "$(DESTDIR)$(confexecdir)" "$(DESTDIR)$(m4datadir)" "$(DESTDIR)$(pkgconfigdir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
-install: install-recursive
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -1593,10 +1732,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -1605,10 +1749,12 @@ clean-generic:
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
        -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-recursive
 
 clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
@@ -1634,8 +1780,8 @@ info: info-recursive
 
 info-am:
 
-install-data-am: install-data-local install-m4dataDATA install-man \
-       install-pkgconfigDATA
+install-data-am: install-cmakeDATA install-data-local \
+       install-m4dataDATA install-man install-pkgconfigDATA
 
 install-dvi: install-dvi-recursive
 
@@ -1685,25 +1831,26 @@ ps: ps-recursive
 ps-am:
 
 uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
-       uninstall-confexecDATA uninstall-libLTLIBRARIES \
-       uninstall-local uninstall-m4dataDATA uninstall-man \
-       uninstall-pkgconfigDATA
+       uninstall-cmakeDATA uninstall-confexecDATA \
+       uninstall-libLTLIBRARIES uninstall-local uninstall-m4dataDATA \
+       uninstall-man uninstall-pkgconfigDATA
 
 uninstall-man: uninstall-man1 uninstall-man3
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
-       ctags-recursive install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am am--refresh check check-am clean clean-binPROGRAMS \
-       clean-generic clean-libLTLIBRARIES clean-libtool \
-       clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags \
-       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \
-       dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \
-       distclean distclean-compile distclean-generic distclean-hdr \
-       distclean-libtool distclean-tags distcleancheck distdir \
-       distuninstallcheck dvi dvi-am html html-am info info-am \
-       install install-am install-binPROGRAMS install-binSCRIPTS \
+.MAKE: $(am__recursive_targets) all check install install-am \
+       install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+       am--refresh check check-am clean clean-binPROGRAMS \
+       clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \
+       clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscope \
+       cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+       dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
+       dist-zip distcheck distclean distclean-compile \
+       distclean-generic distclean-hdr distclean-libtool \
+       distclean-tags distcleancheck distdir distuninstallcheck dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-binSCRIPTS install-cmakeDATA \
        install-confexecDATA install-data install-data-am \
        install-data-local install-dvi install-dvi-am install-exec \
        install-exec-am install-html install-html-am install-info \
@@ -1713,9 +1860,9 @@ uninstall-man: uninstall-man1 uninstall-man3
        install-strip installcheck installcheck-am installdirs \
        installdirs-am maintainer-clean maintainer-clean-generic \
        mostlyclean mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am uninstall-binPROGRAMS \
-       uninstall-binSCRIPTS uninstall-confexecDATA \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \
+       uninstall-cmakeDATA uninstall-confexecDATA \
        uninstall-libLTLIBRARIES uninstall-local uninstall-m4dataDATA \
        uninstall-man uninstall-man1 uninstall-man3 \
        uninstall-pkgconfigDATA
@@ -1738,28 +1885,25 @@ testapi.c: $(srcdir)/gentest.py
 #testOOM_LDADD= $(LDADDS)
 
 runtests:
+       [ -d test   ] || $(LN_S) $(srcdir)/test   .
+       [ -d result ] || $(LN_S) $(srcdir)/result .
        $(CHECKER) ./runtest$(EXEEXT) && $(CHECKER) ./testrecurse$(EXEEXT) &&$(CHECKER) ./testapi$(EXEEXT) && $(CHECKER) ./testchar$(EXEEXT)&& $(CHECKER) ./testdict$(EXEEXT) && $(CHECKER) ./runxmlconf$(EXEEXT)
-       @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \
-           $(MAKE) MAKEFLAGS+=--silent tests ; fi)
+       @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \
+           $(MAKE) tests ; fi)
 
 check: all runtests
 
-check-valgrind: all
+check-valgrind valgrind: all
        @echo '## Running the regression tests under Valgrind'
        @echo '## Go get a cup of coffee it is gonna take a while ...'
-       $(MAKE) CHECKER='valgrind -q' check
+       $(MAKE) CHECKER='valgrind -q' runtests
 
 testall : tests SVGtests SAXtests
 
-tests: XMLtests XMLenttests NStests IDtests Errtests APItests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@  @TEST_VALID@ URItests @TEST_PATTERN@ @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_SCHEMATRON@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@ @TEST_MODULES@
-       @(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; \
-           $(MAKE) MAKEFLAGS+=--silent tests ; fi)
-       @(cd doc/examples ; $(MAKE) MAKEFLAGS+=--silent tests)
-
-valgrind:
-       @echo '## Running the regression tests under Valgrind'
-       @echo '## Go get a cup of coffee it is gonna take a while ...'
-       $(MAKE) CHECKER='valgrind -q' tests
+tests: XMLtests XMLenttests NStests IDtests Errtests APItests $(READER_TEST) $(TEST_SAX) $(TEST_PUSH) $(TEST_HTML) $(TEST_PHTML) $(TEST_VALID) URItests $(TEST_PATTERN) $(TEST_XPATH) $(TEST_XPTR) $(TEST_XINCLUDE) $(TEST_C14N) $(TEST_DEBUG) $(TEST_CATALOG) $(TEST_REGEXPS) $(TEST_SCHEMAS) $(TEST_SCHEMATRON) $(TEST_THREADS) Timingtests $(TEST_VTIME) $(PYTHON_TESTS) $(TEST_MODULES)
+       @(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \
+           $(MAKE) tests ; fi)
+       @(cd doc/examples ; $(MAKE) tests)
 
 APItests: testapi$(EXEEXT)
        @echo "## Running the API regression tests this may take a little while"
@@ -2665,7 +2809,7 @@ SchemasPythonTests:
            echo "## It is normal to see 11 errors reported" ; \
            $(CHECKER) $(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \
          fi)
-       @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" MAKEFLAGS+=--silent pytests ; fi)
+       @(if [ -x $(PYTHON) -a -d xstc ] ; then cd xstc ; $(MAKE) CHECKER="$(CHECKER)" pytests ; fi)
 
 Patterntests: xmllint$(EXEEXT)
        @(echo > .memdump)
@@ -2697,12 +2841,12 @@ ModuleTests: testModule$(EXEEXT) testdso.la
 
 cleanup:
        -@(find . -name .\#\* -exec rm {} \;)
-       -@(find . -name \*.gcda -o *.gcno -exec rm {} \;)
-       -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm {} \;)
+       -@(find . -name \*.gcda -o -name \*.gcno -exec rm -f {} \;)
+       -@(find . -name \*.orig -o -name \*.rej -o -name \*.old -exec rm -f {} \;)
 
 dist-hook: cleanup libxml2.spec
        -cp libxml2.spec $(distdir)
-       (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos vms VxWorks bakefile test result) | (cd $(distdir); tar xf -)
+       (cd $(srcdir) ; tar -cf - --exclude CVS --exclude .svn --exclude .git win32 macos os400 vms VxWorks bakefile test result) | (cd $(distdir); tar xf -)
 
 dist-source: distdir
        $(AMTAR) -chof - --exclude Tests --exclude test --exclude result $(distdir) | GZIP=$(GZIP_ENV) gzip -c >`echo "$(distdir)" | sed "s+libxml2+libxml2-sources+"`.tar.gz
@@ -2728,13 +2872,13 @@ xml2Conf.sh: xml2Conf.sh.in Makefile
        && mv xml2Conf.tmp xml2Conf.sh
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
-       -@INSTALL@ -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
-       @MKDIR_P@ $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
+       $(MKDIR_P) $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+       -$(INSTALL) -m 0644 $(srcdir)/Copyright $(DESTDIR)$(BASE_DIR)/$(DOC_MODULE)
+       $(MKDIR_P) $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/xmllint.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testSAX.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testHTML.c $(DESTDIR)$(EXAMPLES_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/testXPath.c $(DESTDIR)$(EXAMPLES_DIR)
 
 uninstall-local:
        rm -f $(DESTDIR)$(EXAMPLES_DIR)/testXPath.c
diff --git a/NEWS b/NEWS
index cdfdda6..8027d55 100644 (file)
--- a/NEWS
+++ b/NEWS
   Note that this is automatically generated from the news webpage at:
        http://xmlsoft.org/news.html
 
-Items not finished and worked on, get in touch with the list if you want
-to help those   - More testing on RelaxNG
-   - Finishing up XML
-  Schemas
-
 The change log at 
 ChangeLog.html
  describes the recents commits
-to the SVN at 
-http://svn.gnome.org/viewvc/libxml2/trunk/
+to the GIT at 
+http://git.gnome.org/browse/libxml2/
  code base.Here is the list of public releases:
+2.9.2: Oct 16 2014:
+   - Security:
+  Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),
+  CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)
+  
+   - Bug Fixes:
+  fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),
+  xmlmemory: handle realloc properly (Yegor Yefremov),
+  Python generator bug raised by the const change (Daniel Veillard),
+  Windows Critical sections not released correctly (Daniel Veillard),
+  Parser error on repeated recursive entity expansion containing &lt; (Daniel Veillard),
+  xpointer : fixing Null Pointers (Gaurav Gupta),
+  Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),
+  parser bug on misformed namespace attributes (Dennis Filder),
+  Pointer dereferenced before null check (Daniel Veillard),
+  Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),
+  Possible overflow in HTMLParser.c (Daniel Veillard),
+  python/tests/sync.py assumes Python dictionaries are ordered (John Beck),
+  Fix Enum check and missing break (Gaurav Gupta),
+  xmlIO: Handle error returns from dup() (Philip Withnall),
+  Fix a problem properly saving URIs (Daniel Veillard),
+  wrong error column in structured error when parsing attribute values (Juergen Keil),
+  wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),
+  no error column in structured error handler for xml schema validation errors (Juergen Keil),
+  Couple of Missing Null checks (Gaurav Gupta),
+  Add couple of missing Null checks (Daniel Veillard),
+  xmlschemastypes: Fix potential array overflow (Philip Withnall),
+  runtest: Fix a memory leak on parse failure (Philip Withnall),
+  xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),
+  xmlcatalog: Fix a memory leak on quit (Philip Withnall),
+  HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),
+  Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),
+  Avoid Possible Null Pointer in trio.c (Gaurav Gupta),
+  Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),
+  XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),
+  Fix various Missing Null checks (Gaurav Gupta),
+  Fix a potential NULL dereference (Daniel Veillard),
+  Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),
+  Add a missing argument check (Gaurav Gupta),
+  Adding a check in case of allocation error (Gaurav Gupta),
+  xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),
+  Adding some missing NULL checks (Gaurav),
+  Fixes for xmlInitParserCtxt (Daniel Veillard),
+  Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),
+  erroneously ignores a validation error if no error callback set (Daniel Veillard),
+  xmllint was not parsing the --c14n11 flag (Sérgio Batista),
+  Avoid Possible null pointer dereference in memory debug mode (Gaurav),
+  Avoid Double Null Check (Gaurav),
+  Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),
+  Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),
+  Avoid a possible NULL pointer dereference (Gaurav),
+  Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),
+  Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),
+  fixing a ptotential uninitialized access (Daniel Veillard),
+  Fix an fd leak in an error case (Daniel Veillard),
+  Missing initialization for the catalog module (Daniel Veillard),
+  Handling of XPath function arguments in error case (Nick Wellnhofer),
+  Fix a couple of missing NULL checks (Gaurav),
+  Avoid a possibility of dangling encoding handler (Gaurav),
+  Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),
+  Fix a bug loading some compressed files (Mike Alexander),
+  Fix XPath node comparison bug (Gaurav),
+  Type mismatch in xmlschemas.c (Gaurav),
+  Type mismatch in xmlschemastypes.c (Gaurav),
+  Avoid a deadcode in catalog.c (Daniel Veillard),
+  run close socket on Solaris, same as we do on other platforms (Denis Pauk),
+  Fix pointer dereferenced before null check (Gaurav),
+  Fix a potential NULL dereference in tree code (Daniel Veillard),
+  Fix potential NULL pointer dereferences in regexp code (Gaurav),
+  xmllint --pretty crashed without following numeric argument (Tim Galeckas),
+  Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),
+  Fix XPath '//' optimization with predicates (Nick Wellnhofer),
+  Clear up a potential NULL dereference (Daniel Veillard),
+  Fix a possible NULL dereference (Gaurav),
+  Avoid crash if allocation fails (Daniel Veillard),
+  Remove occasional leading space in XPath number formatting (Daniel Veillard),
+  Fix handling of mmap errors (Daniel Veillard),
+  Catch malloc error and exit accordingly (Daniel Veillard),
+  missing else in xlink.c (Ami Fischman),
+  Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),
+  Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),
+  properly quote the namespace uris written out during c14n (Aleksey Sanin),
+  Remove premature XInclude check on URI being relative (Alexey Neyman),
+  Fix missing break on last() function for attributes (dcb),
+  Do not URI escape in server side includes (Romain Bondue),
+  Fix an error in xmlCleanupParser (Alexander Pastukhov)
+  
+   - Documentation:
+  typo in error messages "colon are forbidden from..." (Daniel Veillard),
+  Fix a link to James SAX documentation old page (Daniel Veillard),
+  Fix typos in relaxng.c (Jan Pokorný),
+  Fix a doc typo (Daniel Veillard),
+  Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),
+  Add limitations about encoding conversion (Daniel Veillard),
+  Fix typos in xmlschemas{,types}.c (Jan Pokorný),
+  Fix incorrect spelling entites->entities (Jan Pokorný),
+  Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)
+  
+   - Portability:
+  AC_CONFIG_FILES and executable bit (Roumen Petrov),
+  remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),
+  fix some tabs mixing incompatible with python3 (Roumen Petrov),
+  Visual Studio 14 CTP defines snprintf() (Francis Dupont),
+  OS400: do not try to copy unexisting doc files (Patrick Monnerat),
+  OS400: use either configure.ac or configure.in. (Patrick Monnerat),
+  os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),
+  OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),
+  OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),
+  OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),
+  OS400: include in distribution tarball. (Patrick Monnerat),
+  OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),
+  OS400: Add compilation scripts. (Patrick Monnerat),
+  OS400: ILE RPG language header files. (Patrick Monnerat),
+  OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),
+  OS400: UTF8<-->EBCDIC wrappers for system and external library calls (Patrick Monnerat),
+  OS400: Easy character transcoding support (Patrick Monnerat),
+  OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),
+  OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),
+  Fix building when configuring without xpath and xptr (Daniel Veillard),
+  configure: Add --with-python-install-dir (Jonas Eriksson),
+  Fix compilation with minimum and xinclude. (Nicolas Le Cam),
+  Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),
+  Fix compilation with minimum and schematron. (Nicolas Le Cam),
+  Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),
+  Don't use xmlValidateName() when not available. (Nicolas Le Cam),
+  Fix a portability issue on Windows (Longstreth Jon),
+  Various portability patches for OpenVMS (Jacob (Jouk) Jansen),
+  Use specific macros for portability to OS/400 (Patrick Monnerat),
+  Add macros needed for OS/400 portability (Patrick Monnerat),
+  Portability patch for fopen on OS/400 (Patrick Monnerat),
+  Portability fixes for OS/400 (Patrick Monnerat),
+  Improve va_list portability (Patrick Monnerat),
+  Portability fix (Patrick Monnerat),
+  Portability fix (Patrick Monnerat),
+  Generic portability fix (Patrick Monnerat),
+  Shortening lines in headers (Patrick Monnerat),
+  build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),
+  build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),
+  fix some tabs mixing incompatible with python3 (Daniel Veillard),
+  add additional defines checks for support "./configure --with-minimum" (Denis Pauk),
+  Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),
+  python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),
+  python: Fix compiler warnings when building python3 bindings (Armin K),
+  Fix for compilation with python 2.6.8 (Petr Sumbera)
+  
+   - Improvements:
+  win32/libxml2.def.src after rebuild in doc (Roumen Petrov),
+  elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),
+  elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),
+  Provide cmake module (Samuel Martin),
+  Fix a couple of issues raised by make dist (Daniel Veillard),
+  Fix and add const qualifiers (Kurt Roeckx),
+  Preparing for upcoming release of 2.9.2 (Daniel Veillard),
+  Fix zlib and lzma libraries check via command line (Dmitriy),
+  wrong error column in structured error when parsing end tag (Juergen Keil),
+  doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),
+  Add methods for python3 iterator (Ron Angeles),
+  Support element node traversal in document fragments. (Kyle VanderBeek),
+  xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),
+  Added macros for argument casts (Eric Zurcher),
+  adding init calls to xml and html Read parsing entry points (Daniel Veillard),
+  Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),
+  Implement choice for name classes on attributes (Shaun McCance),
+  Two small namespace tweaks (Daniel Veillard),
+  xmllint --memory should fail on empty files (Daniel Veillard),
+  Cast encoding name to char pointer to match arg type (Nikolay Sivov)
+  
+   - Cleanups:
+  Removal of old configure.in (Daniel Veillard),
+  Unreachable code in tree.c (Gaurav Gupta),
+  Remove a couple of dead conditions (Gaurav Gupta),
+  Avoid some dead code and cleanup in relaxng.c (Gaurav),
+  Drop not needed checks (Denis Pauk),
+  Fix a wrong test (Daniel Veillard)
+  
+
+
+2.9.1: Apr 19 2013:
+   -  Features:
+    Support for Python3 (Daniel Veillard),
+    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)
+  
+   -  Documentation:
+    Add documentation for xmllint --xpath (Daniel Veillard),
+    Fix the URL of the SAX documentation from James (Daniel Veillard),
+    Fix spelling of "length". (Michael Wood)
+  
+   -  Portability:
+    Fix python bindings with versions older than 2.7 (Daniel Veillard),
+    rebuild docs:Makefile.am (Roumen Petrov),
+    elfgcchack.h after rebuild in doc (Roumen Petrov),
+    elfgcchack for buf module (Roumen Petrov),
+    Fix a uneeded and wrong extra link parameter (Daniel Veillard),
+    Few cleanup patches for Windows (Denis Pauk),
+    Fix rpmbuild --nocheck (Mark Salter),
+    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),
+    Fix Broken multi-arch support in xml2-config (Daniel Veillard),
+    Fix a portability issue for GCC < 3.4.0 (Daniel Veillard),
+    Windows build fixes (Daniel Richard),
+    Fix a thread portability problem (Friedrich Haubensak),
+    Downgrade autoconf requirement to 2.63 (Daniel Veillard)
+  
+   -  Bug Fixes:
+    Fix a linking error for python bindings (Daniel Veillard),
+    Fix a couple of return without value (Jüri Aedla),
+    Improve the hashing functions (Daniel Franke),
+    Improve handling of xmlStopParser() (Daniel Veillard),
+    Remove risk of lockup in dictionary initialization (Daniel Veillard),
+    Activate detection of encoding in external subset (Daniel Veillard),
+    Fix an output buffer flushing conversion bug (Mikhail Titov),
+    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),
+    Fix configure cannot remove messages (Gilles Espinasse),
+    fix schema validation in combination with xsi:nil (Daniel Veillard),
+    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),
+    Fix a few problems with setEntityLoader (Alexey Neyman),
+    Detect excessive entities expansion upon replacement (Daniel Veillard),
+    Fix the flushing out of raw buffers on encoding conversions (Daniel,
+Veillard),
+    Fix some buffer conversion issues (Daniel Veillard),
+    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,
+Veillard),
+    Fix an error in the progressive DTD parsing code (Dan Winship),
+    xmllint should not load DTD by default when using the reader (Daniel,
+Veillard),
+    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),
+    Fix potential out of bound access (Daniel Veillard),
+    Fix large parse of file from memory (Daniel Veillard),
+    Fix a bug in the nsclean option of the parser (Daniel Veillard),
+    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,
+Veillard),
+    Remove potential calls to exit() (Daniel Veillard)
+  
+   -  Improvements:
+    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),
+    Fix tree iterators broken by 2to3 script (Daniel Veillard),
+    update all tests for Python3 and Python2 (Daniel Veillard),
+    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),
+    Fix compilation on Python3 (Daniel Veillard),
+    Converting apibuild.py to python3 (Daniel Veillard),
+    First pass at starting porting to python3 (Daniel Veillard),
+    updated configure.in for python3 (Daniel Veillard),
+    Add support for xpathRegisterVariable in Python (Shaun McCance),
+    Added a regression tests from bug 694228 data (Daniel Veillard),
+    Cache presence of '<' in entities content (Daniel Veillard),
+    Avoid extra processing on entities (Daniel Veillard),
+    Python binding for xmlRegisterInputCallback (Alexey Neyman),
+    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),
+    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),
+    Adding streaming validation to runtest checks (Daniel Veillard),
+    Add a --pushsmall option to xmllint (Daniel Veillard)
+  
+   -  Cleanups:
+    Switched comment in file to UTF-8 encoding (Daniel Veillard),
+    Extend gitignore (Daniel Veillard),
+    Silent the new python test on input (Alexey Neyman),
+    Cleanup of a duplicate test (Daniel Veillard),
+    Cleanup on duplicate test expressions (Daniel Veillard),
+    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,
+Gansterer),
+    Spec cleanups and a fix for multiarch support (Daniel Veillard),
+    Silence a clang warning (Daniel Veillard),
+    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),
+    rand_seed should be static in dict.c (Wouter Van Rooy),
+    Fix typos in parser comments (Jan Pokorný)
+  
+
+
+2.9.0: Sep 11 2012:
+   -  Features:
+    A few new API entry points,
+    More resilient push parser mode,
+    A lot of portability improvement,
+    Faster XPath evaluation
+  
+   -  Documentation:
+    xml2-config.1 markup error (Christian Weisgerber),
+    libxml(3) manpage typo fix (John Bradshaw),
+    More cleanups to the documentation part of libxml2 (Daniel Richard G)
+  
+   -  Portability:
+    Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),
+    fix builds not having stdint.h (Rob Richards),
+    GetProcAddressA is available only on WinCE (Daniel Veillard),
+    More updates and cleanups on autotools and Makefiles (Daniel Richard G),
+    More changes for Win32 compilation (Eric Zurcher),
+    Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),
+    Bundles all generated files for python into the distribution (Daniel Richard G),
+    Fix compiler warnings of wincecompat.c (Patrick Gansterer),
+    Fix non __GNUC__ build (Patrick Gansterer),
+    Fix windows unicode build (Patrick Gansterer),
+    clean redefinition of {v}snprintf in C-source (Roumen Petrov),
+    use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),
+    fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),
+    Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),
+    Various "make distcheck" and portability fixups (Daniel Richard G),
+    Fix compilation on older Visual Studio (Daniel Veillard)
+  
+   -  Bug Fixes:
+    Change the XPath code to percolate allocation errors (Daniel Veillard),
+    Fix reuse of xmlInitParser (Daniel Veillard),
+    Fix potential crash on entities errors (Daniel Veillard),
+    initialize var (Rob Richards),
+    Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),
+    Fix problem with specific and generic error handlers (Pietro Cerutti),
+    Avoid a potential infinite recursion (Daniel Veillard),
+    Fix an XSD error when generating internal automata (Daniel Veillard),
+    Patch for xinclude of text using multibyte characters (Vitaly Ostanin),
+    Fix a segfault on XSD validation on pattern error (Daniel Veillard),
+    Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),
+    Add a missing element check (Daniel Veillard),
+    Adding various checks on node type though the API (Daniel Veillard),
+    Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),
+    Fix make dist to include new private header files (Daniel Veillard),
+    More fixups on the push parser behaviour (Daniel Veillard),
+    Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),
+    Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),
+    Fixup limits parser (Daniel Veillard),
+    Do not fetch external parsed entities (Daniel Veillard),
+    Fix an error in previous commit (Aron Xu),
+    Fix entities local buffers size problems (Daniel Veillard),
+    Fix parser local buffers size problems (Daniel Veillard),
+    Fix a failure to report xmlreader parsing failures (Daniel Veillard)
+  
+   -  Improvements:
+    Keep libxml2.syms when running "make distclean" (Daniel Veillard),
+    Allow to set the quoting character of an xmlWriter (Csaba Raduly),
+    Keep non-significant blanks node in HTML parser (Daniel Veillard),
+    Add a forbidden variable error number and message to XPath (Daniel Veillard),
+    Support long path names on WNT (Michael Stahl),
+    Improve HTML escaping of attribute on output (Daniel Veillard),
+    Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),
+    Switching XPath node sorting to Timsort (Vojtech Fried),
+    Optimizing '//' in XPath expressions (Nick Wellnhofer),
+    Expose xmlBufShrink in the public tree API (Daniel Veillard),
+    Visible HTML elements close the head tag (Conrad Irwin),
+    Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),
+    Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),
+    minimize use of HAVE_CONFIG_H (Roumen Petrov),
+    fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),
+    Add support for big line numbers in error reporting (Daniel Veillard),
+    Avoid using xmlBuffer for serialization (Daniel Veillard),
+    Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),
+    Provide new accessors for xmlOutputBuffer (Daniel Veillard),
+    Improvements for old buffer compatibility (Daniel Veillard),
+    Expand the limit test program (Daniel Veillard),
+    Improve error reporting on parser errors (Daniel Veillard),
+    Implement some default limits in the XPath module (Daniel Veillard),
+    Introduce some default parser limits (Daniel Veillard),
+    Cleanups and new limit APIs for dictionaries (Daniel Veillard),
+    Fixup for buf.c (Daniel Veillard),
+    Cleanup URI module memory allocation code (Daniel Veillard),
+    Extend testlimits (Daniel Veillard),
+    More avoid quadratic behaviour (Daniel Veillard),
+    Impose a reasonable limit on PI size (Daniel Veillard),
+    first version of testlimits new test (Daniel Veillard),
+    Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),
+    Impose a reasonable limit on comment size (Daniel Veillard),
+    Impose a reasonable limit on attribute size (Daniel Veillard),
+    Harden the buffer code and make it more compatible (Daniel Veillard),
+    More cleanups for input/buffers code (Daniel Veillard),
+    Cleanup function xmlBufResetInput(), to set input from Buffer (Daniel Veillard)
+    Swicth the test program for characters to new input buffers (Daniel Veillard),
+    Convert the HTML tree module to the new buffers (Daniel Veillard),
+    Convert of the HTML parser to new input buffers (Daniel Veillard),
+    Convert the writer to new output buffer and save APIs (Daniel Veillard),
+    Convert XMLReader to the new input buffers (Daniel Veillard),
+    New saving functions using xmlBuf and conversion (Daniel Veillard),
+    Provide new xmlBuf based saving functions (Daniel Veillard),
+    Convert XInclude to the new input buffers (Daniel Veillard),
+    Convert catalog code to the new input buffers (Daniel Veillard),
+    Convert C14N to the new Input buffer (Daniel Veillard),
+    Convert xmlIO.c to the new input and output buffers (Daniel Veillard),
+    Convert XML parser to the new input buffers (Daniel Veillard),
+    Incompatible change to the Input and Output buffers (Daniel Veillard),
+    Adding new encoding function to deal with the new structures (Daniel Veillard),
+    Convert XPath to xmlBuf (Daniel Veillard),
+    Adding a new buf module for buffers (Daniel Veillard),
+    Memory error within SAX2 reuse common framework (Daniel Veillard),
+    Fix xmllint --xpath node initialization (Daniel Veillard)
+  
+   -  Cleanups:
+    Various cleanups to avoid compiler warnings (Daniel Veillard),
+    Big space and tab cleanup (Daniel Veillard),
+    Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),
+    Second round of cleanups for LibXML2 docs/examples (Daniel Richard),
+    Remove all .cvsignore as they are not used anymore (Daniel Veillard),
+    Fix a Timsort function helper comment (Daniel Veillard),
+    Small cleanup for valgrind target (Daniel Veillard),
+    Patch for portability of latin characters in C files (Daniel Veillard),
+    Cleanup some of the parser code (Daniel Veillard),
+    Fix a variable name in comment (Daniel Veillard),
+    Regenerated testapi.c (Daniel Veillard),
+    Regenerating docs and API files (Daniel Veillard),
+    Small cleanup of unused variables in test (Daniel Veillard),
+    Expand .gitignore with more files (Daniel Veillard)
+  
+
+
+2.8.0: May 23 2012:
+   - Features:
+  add lzma compression support (Anders F Bjorklund)
+  
+   - Documentation:
+    xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä),
+    Update README.tests (Daniel Veillard),
+    URI handling code is not OOM resilient (Daniel Veillard),
+    Fix an error in comment (Daniel Veillard),
+    Fixed bug #617016 (Daniel Mustieles),
+    Fixed two typos in the README document (Daniel Neel),
+    add generated html files (Anders F Bjorklund),
+    Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard),
+    Improve documentation a bit (Daniel Veillard),
+    Updated URL for lxml python bindings (Daniel Veillard)
+  
+   - Portability:
+    Restore code for Windows compilation (Daniel Veillard),
+    Remove git error message during configure (Christian Dywan),
+    xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer),
+    remove a bashism in confgure.in (John Hein),
+    undef ERROR if already defined (Patrick R. Gansterer),
+    Fix library problems with mingw-w64 (Michael Cronenworth),
+    fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards),
+    prefer native threads on win32 (Sam Thursfield),
+    Allow to compile with Visual Studio 2010 (Thomas Lemm),
+    Fix mingw's snprintf configure check (Andoni Morales),
+    fixed a 64bit big endian issue (Marcus Meissner),
+    Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard),
+    Fix windows build from lzma addition (Rob Richards),
+    autogen: Only check for libtoolize (Colin Walters),
+    Fix the Windows build files (Patrick von Reth),
+    634846 Remove a linking option breaking Windows VC10 (Daniel Veillard),
+    599241 fix an initialization problem on Win64 (Andrew W. Nosenko),
+    fix win build (Rob Richards)
+  
+   - Bug fixes:
+    Part for rand_r checking missing (Daniel Veillard),
+    Cleanup on randomization (Daniel Veillard),
+    Fix undefined reference in python module (Pacho Ramos),
+    Fix a race in xmlNewInputStream (Daniel Veillard),
+    Fix weird streaming RelaxNG errors (Noam),
+    Fix various bugs in new code raised by the API checking (Daniel Veillard),
+    Fix various problems with "make dist" (Daniel Veillard),
+    Fix a memory leak in the xzlib code (Daniel Veillard),
+    HTML parser error with <noscript> in the <head> (Denis Pauk),
+    XSD: optional element in complex type extension (Remi Gacogne),
+    Fix html serialization error and htmlSetMetaEncoding() (Daniel Veillard),
+    Fix a wrong return value in previous patch (Daniel Veillard),
+    Fix an uninitialized variable use (Daniel Veillard),
+    Fix a compilation problem with --minimum (Brandon Slack),
+    Remove redundant and ungarded include of resolv.h (Daniel Veillard),
+    xinclude with parse="text" does not use the entity loader (Shaun McCance),
+    Allow to parse 1 byte HTML files (Denis Pauk),
+    Patch that fixes the skipping of the HTML_PARSE_NOIMPLIED flag (Martin Schröder),
+    Avoid memory leak if xmlParserInputBufferCreateIO fails (Lin Yi-Li),
+    Prevent an infinite loop when dumping a node with encoding problems (Timothy Elliott),
+    xmlParseNodeInContext problems with an empty document (Tim Elliott),
+    HTML element position is not detected propperly (Pavel Andrejs),
+    Fix an off by one pointer access (Jüri Aedla),
+    Try to fix a problem with entities in SAX mode (Daniel Veillard),
+    Fix a crash with xmllint --path on empty results (Daniel Veillard),
+    Fixed bug #667946 (Daniel Mustieles),
+    Fix a logic error in Schemas Component Constraints (Ryan Sleevi),
+    Fix a wrong enum type use in Schemas Types (Nico Weber),
+    Fix SAX2 builder in case of undefined attributes namespace (Daniel Veillard),
+    Fix SAX2 builder in case of undefined element namespaces (Daniel Veillard),
+    fix reference to STDOUT_FILENO on MSVC (Tay Ray Chuan),
+    fix a pair of possible out of array char references (Daniel Veillard),
+    Fix an allocation error when copying entities (Daniel Veillard),
+    Make sure the parser returns when getting a Stop order (Chris Evans),
+    Fix some potential problems on reallocation failures(parser.c) (Xia Xinfeng),
+    Fix a schema type duration comparison overflow (Daniel Veillard),
+    Fix an unimplemented part in RNG value validation (Daniel Veillard),
+    Fix missing error status in XPath evaluation (Daniel Veillard),
+    Hardening of XPath evaluation (Daniel Veillard),
+    Fix an off by one error in encoding (Daniel Veillard),
+    Fix RELAX NG include bug #655288 (Shaun McCance),
+    Fix XSD validation bug #630130 (Toyoda Eizi),
+    Fix some potential problems on reallocation failures (Chris Evans),
+    __xmlRaiseError: fix use of the structured callback channel (Dmitry V. Levin),
+    __xmlRaiseError: fix the structured callback channel's data initialization (Dmitry V. Levin),
+    Fix memory corruption when xmlParseBalancedChunkMemoryInternal is called from xmlParseBalancedChunk (Rob Richards),
+    Small fix for previous commit (Daniel Veillard),
+    Fix a potential freeing error in XPath (Daniel Veillard),
+    Fix a potential memory access error (Daniel Veillard),
+    Reactivate the shared library versionning script (Daniel Veillard)
+  
+   - Improvements:
+    use mingw C99 compatible functions {v}snprintf instead those from MSVC runtime (Roumen Petrov),
+    New symbols added for the next release (Daniel Veillard),
+    xmlTextReader bails too quickly on error (Andy Lutomirski),
+    Use a hybrid allocation scheme in xmlNodeSetContent (Conrad Irwin),
+    Use buffers when constructing string node lists. (Conrad Irwin),
+    Add HTML parser support for HTML5 meta charset encoding declaration (Denis Pauk),
+    wrong message for double hyphen in comment XML error (Bryan Henderson),
+    Fix "make tst" to grab lzma lib too (Daniel Veillard),
+    Add "whereis" command to xmllint shell (Ryan),
+    Improve xmllint shell (Ryan),
+    add function xmlTextReaderRelaxNGValidateCtxt() (Noam Postavsky),
+    Add --system support to autogen.sh (Daniel Veillard),
+    Add hash randomization to hash and dict structures (Daniel Veillard),
+    included xzlib in dist (Anders F Bjorklund),
+    move xz/lzma helpers to separate included files (Anders F Bjorklund),
+    add generated devhelp files (Anders F Bjorklund),
+    add XML_WITH_LZMA to api (Anders F Bjorklund),
+    autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters),
+    Improve the error report on undefined REFs (Daniel Veillard),
+    Add exception for new W3C PI xml-model (Daniel Veillard),
+    Add options to ignore the internal encoding (Daniel Veillard),
+    testapi: use the right type for the check (Stefan Kost),
+    various: handle return values of write calls (Stefan Kost),
+    testWriter: xmlTextWriterWriteFormatElement wants an int instead of a long int (Stefan Kost),
+    runxmlconf: update to latest testsuite version (Stefan Kost),
+    configure: add -Wno-long-long to CFLAGS (Stefan Kost),
+    configure: support silent automake rules if possible (Stefan Kost),
+    xmlmemory: add a cast as size_t has no portable printf modifier (Stefan Kost),
+    __xmlRaiseError: remove redundant schannel initialization (Dmitry V. Levin),
+    __xmlRaiseError: do cheap code check early (Dmitry V. Levin)
+  
+   - Cleanups:
+    Cleanups before 2.8.0-rc2 (Daniel Veillard),
+    Avoid an extra operation (Daniel Veillard),
+    Remove vestigial de-ANSI-fication support. (Javier Jardón),
+    autogen.sh: Fix typo (Javier Jardón),
+    Do not use unsigned but unsigned int (Daniel Veillard),
+    Remove two references to u_short (Daniel Veillard),
+    Fix -Wempty-body warning from clang (Nico Weber),
+    Cleanups of lzma support (Daniel Veillard),
+    Augment the list of ignored files (Daniel Veillard),
+    python: remove unused variable (Stefan Kost),
+    python: flag two unused args (Stefan Kost),
+    configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost),
+    xpath: remove unused variable (Stefan Kost)
+  
+
+
+2.7.8: Nov 4 2010:
+   -  Features:
+    480323 add code to plug in ICU converters by default (Giuseppe Iuculano),
+    Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg)
+  
+   -  Documentation:
+    Fix devhelp documentation installation (Mike Hommey),
+    Fix web site encoding problems (Daniel Veillard),
+    Fix a couple of typo in HTML parser error messages (Michael Day),
+    Forgot to update the news page for 0.7.7 (Daniel Veillard)
+  
+   -  Portability:
+    607273 Fix python detection on MSys/Windows (LRN),
+    614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer),
+    Fix compilation with Clang (Koop Mast),
+    Fix Win32 build (Rob Richards)
+  
+   -  Bug Fixes:
+    595789 fix a remaining potential Solaris problem (Daniel Veillard),
+    617468 fix progressive HTML parsing with style using "'" (Denis Pauk),
+    616478 Fix xmllint shell write command (Gwenn Kahz),
+    614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile),
+    627987 Fix XSD IDC errors in imported schemas (Jim Panetta),
+    629325 XPath rounding errors first cleanup (Phil Shafer),
+    630140 fix iso995x encoding error (Daniel Veillard),
+    make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard),
+    Fix a change of semantic on XPath preceding and following axis (Daniel Veillard),
+    Fix a potential segfault due to weak symbols on pthreads (Mike Hommey),
+    Fix a leak in XPath compilation (Daniel Veillard),
+    Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard),
+    Avoid a descriptor leak in catalog loading code (Carlo Bramini),
+    Fix a small bug in XPath evaluation code (Marius Wachtler),
+    Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard),
+    Fix errors in XSD double validation check (Csaba Raduly),
+    Fix handling of apos in URIs (Daniel Veillard),
+    xmlTextReaderReadOuterXml should handle DTD (Rob Richards),
+    Autogen.sh needs to create m4 directory (Rob Richards)
+  
+   -  Improvements:
+    606592 update language ID parser to RFC 5646 (Daniel Veillard),
+    Sort python generated stubs (Mike Hommey),
+    Add an HTML parser option to avoid a default doctype (Daniel Veillard)
+  
+   -  Cleanups:
+    618831 don't ship generated files in git (Adrian Bunk),
+    Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk),
+    Various cleanups on encoding handling (Daniel Veillard),
+    Fix xmllint to use format=1 for default formatting (Adam Spragg),
+    Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg),
+    Cleanup encoding pointer comparison (Nikolay Sivov),
+    Small code cleanup on previous patch (Daniel Veillard)
+  
+
+
+2.7.7: Mar 15 2010:
+   -  Improvements:
+    Adding a --xpath option to xmllint (Daniel Veillard),
+    Make HTML parser non-recursive (Eugene Pimenov)
+  
+   -  Portability:
+    relaxng.c: cast to allow compilation with sun studio 11 (Ben Walton),
+    Fix build failure on Sparc solaris (Roumen Petrov),
+    use autoreconf in autogen.sh (Daniel Veillard),
+    Fix build with mingw (Roumen Petrov),
+    Upgrade some of the configure and autogen (Daniel Veillard),
+    Fix relaxNG tests in runtest for Windows runtest.c: initialize ret (Rob Richards),
+    Fix a const warning in xmlNodeSetBase (Martin Trappel),
+    Fix python generator to not use deprecated xmllib (Daniel Veillard),
+    Update some automake files (Daniel Veillard),
+    598785 Fix nanohttp on Windows (spadix)
+  
+   -  Bug Fixes:
+    libxml violates the zlib interface and crashes (Mark Adler),
+    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
+    Fix  missing win32 libraries in libxml-2.0.pc (Volker Grabsch),
+    Fix detection of python linker flags (Daniel Macks),
+    fix build error in libxml2/python (Paul Smith),
+    ChunkParser: Incorrect decoding of small xml files (Raul Hudea),
+    htmlCheckEncoding doesn't update input-end after shrink (Eugene Pimenov),
+    Fix a missing #ifdef (Daniel Veillard),
+    Fix encoding selection for xmlParseInNodeContext (Daniel Veillard),
+    xmlPreviousElementSibling mistake (François Delyon),
+    608773 add a missing check in xmlGROW (Daniel Veillard),
+    Fix xmlParseInNodeContext for HTML content (Daniel Veillard),
+    Fix lost namespace when copying node * tree.c: reconcile namespace if not found (Rob Richards),
+    Fix some missing commas in HTML element lists (Eugene Pimenov),
+    Correct variable type to unsigned (Nikolay Sivov),
+    Recognize ID attribute in HTML without DOCTYPE (Daniel Veillard),
+    Fix memory leak in xmlXPathEvalExpression() (Martin),
+    Fix an init bug in global.c (Kai Henning),
+    Fix xmlNodeSetBase() comment (Daniel Veillard),
+    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
+    Don't give default HTML boolean attribute values in parser (Daniel Veillard),
+    xmlCtxtResetLastError should reset ctxt-errNo (Daniel Veillard)
+  
+   -  Cleanups:
+    Cleanup a couple of weirdness in HTML parser (Eugene Pimenov)
+  
+
+
 2.7.6: Oct  6 2009:
    -  Bug Fixes:
      Restore thread support in default configuration (Andrew W. Nosenko),
@@ -1325,7 +1955,8 @@ http://www.w3.org/TR/xmlschema-2/
  code, beware, all
 interfaces are likely to change, there is huge holes, it is clearly a work in
 progress and don't even think of putting this code in a production system,
-it's actually not compiled in by default. The real fixes are:   - a couple of bugs or limitations introduced in 2.4.20
+it's actually not compiled in by default. The real fixes are:
+   - a couple of bugs or limitations introduced in 2.4.20
    - patches for Borland C++ and MSC by Igor
    - some fixes on XPath strings and conformance patches by Richard
   Jinks
@@ -1567,7 +2198,8 @@ it's actually not compiled in by default. The real fixes are:   - a couple of bu
 
 
 2.3.9: May 19 2001:
-Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #54891 and another patch from Jonas Borgström
+Lots of bugfixes, and added a basic SGML catalog support:
+   - HTML push bugfix #54891 and another patch from Jonas Borgstrom
    - some serious speed optimization again
    - some documentation cleanups
    - trying to get better linking on Solaris (-R)
@@ -1809,7 +2441,8 @@ Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #
     about &#38; charref parsing
    - 2.1.0 also ease the upgrade from libxml v1 to the recent version. it
     also contains numerous fixes and enhancements:
-    added xmlStopParser() to stop parsing
+    
+      added xmlStopParser() to stop parsing
       improved a lot parsing speed when there is large CDATA blocs
       includes XPath patches provided by Picdar Technology
       tried to fix as much as possible DTD validation and namespace
@@ -1817,6 +2450,7 @@ Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #
       output to a given encoding has been added/tested
       lot of various fixes
     
+  
    - added xmlStopParser() to stop parsing
    - improved a lot parsing speed when there is large CDATA blocs
    - includes XPath patches provided by Picdar Technology
@@ -1865,7 +2499,8 @@ Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #
     upgrade page
    - Some interfaces may changes (especially a bit about encoding).
    - the updates includes:
-    fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+    
+      fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
         handled now
       Better handling of entities, especially well-formedness checking
         and proper PEref extensions in external subsets
@@ -1874,6 +2509,7 @@ Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #
       change
         structures to accommodate DOM
     
+  
    - fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
         handled now
    - Better handling of entities, especially well-formedness checking
diff --git a/SAX.c b/SAX.c
index 8e5d460..292af57 100644 (file)
--- a/SAX.c
+++ b/SAX.c
@@ -41,7 +41,7 @@
 void
 initxmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr, int warning)
 {
-    
+
     if(hdlr->initialized == 1)
        return;
 
diff --git a/SAX2.c b/SAX2.c
index c5676b3..ffef3e1 100644 (file)
--- a/SAX2.c
+++ b/SAX2.c
@@ -45,7 +45,7 @@
  *> values "system" and "public".  I have made the default be "system" to
  *> match yours.
  */
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
  */
 static void
 xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) {
+    xmlStructuredErrorFunc schannel = NULL;
+    const char *str1 = "out of memory\n";
+
     if (ctxt != NULL) {
-       if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
-           ctxt->sax->error(ctxt->userData, "%s: out of memory\n", msg);
+       ctxt->errNo = XML_ERR_NO_MEMORY;
+       if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
+           schannel = ctxt->sax->serror;
+       __xmlRaiseError(schannel,
+                       ctxt->vctxt.error, ctxt->vctxt.userData,
+                       ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
+                       XML_ERR_ERROR, NULL, 0, (const char *) str1,
+                       NULL, NULL, 0, 0,
+                       msg, (const char *) str1, NULL);
        ctxt->errNo = XML_ERR_NO_MEMORY;
        ctxt->instate = XML_PARSER_EOF;
        ctxt->disableSAX = 1;
+    } else {
+       __xmlRaiseError(schannel,
+                       NULL, NULL,
+                       ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
+                       XML_ERR_ERROR, NULL, 0, (const char *) str1,
+                       NULL, NULL, 0, 0,
+                       msg, (const char *) str1, NULL);
     }
 }
 
@@ -126,7 +143,7 @@ xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
     if (ctxt != NULL)
        ctxt->errNo = error;
     __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
-                    XML_ERR_FATAL, NULL, 0, 
+                    XML_ERR_FATAL, NULL, 0,
                    (const char *) str1, (const char *) str2,
                    NULL, 0, 0, msg, str1, str2);
     if (ctxt != NULL) {
@@ -157,7 +174,7 @@ xmlWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
     if (ctxt != NULL)
        ctxt->errNo = error;
     __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
-                    XML_ERR_WARNING, NULL, 0, 
+                    XML_ERR_WARNING, NULL, 0,
                    (const char *) str1, NULL,
                    NULL, 0, 0, msg, str1);
 }
@@ -182,7 +199,7 @@ xmlNsErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
     if (ctxt != NULL)
        ctxt->errNo = error;
     __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
-                    XML_ERR_ERROR, NULL, 0, 
+                    XML_ERR_ERROR, NULL, 0,
                    (const char *) str1, (const char *) str2,
                    NULL, 0, 0, msg, str1, str2);
 }
@@ -206,7 +223,7 @@ xmlNsWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
     if (ctxt != NULL)
        ctxt->errNo = error;
     __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
-                    XML_ERR_WARNING, NULL, 0, 
+                    XML_ERR_WARNING, NULL, 0,
                    (const char *) str1, (const char *) str2,
                    NULL, 0, 0, msg, str1, str2);
 }
@@ -240,7 +257,7 @@ xmlSAX2GetSystemId(void *ctx)
 {
     xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
     if ((ctx == NULL) || (ctxt->input == NULL)) return(NULL);
-    return((const xmlChar *) ctxt->input->filename); 
+    return((const xmlChar *) ctxt->input->filename);
 }
 
 /**
@@ -355,7 +372,7 @@ xmlSAX2InternalSubset(void *ctx, const xmlChar *name,
        xmlFreeDtd(dtd);
        ctxt->myDoc->intSubset = NULL;
     }
-    ctxt->myDoc->intSubset = 
+    ctxt->myDoc->intSubset =
        xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID);
     if (ctxt->myDoc->intSubset == NULL)
         xmlSAX2ErrMemory(ctxt, "xmlSAX2InternalSubset");
@@ -394,6 +411,7 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
        xmlParserInputPtr input = NULL;
        xmlCharEncoding enc;
        int oldcharset;
+       const xmlChar *oldencoding;
 
        /*
         * Ask the Entity resolver to load the damn thing
@@ -415,6 +433,8 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
        oldinputMax = ctxt->inputMax;
        oldinputTab = ctxt->inputTab;
        oldcharset = ctxt->charset;
+       oldencoding = ctxt->encoding;
+       ctxt->encoding = NULL;
 
        ctxt->inputTab = (xmlParserInputPtr *)
                         xmlMalloc(5 * sizeof(xmlParserInputPtr));
@@ -425,6 +445,7 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
            ctxt->inputMax = oldinputMax;
            ctxt->inputTab = oldinputTab;
            ctxt->charset = oldcharset;
+           ctxt->encoding = oldencoding;
            return;
        }
        ctxt->inputNr = 0;
@@ -470,6 +491,11 @@ xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
        ctxt->inputMax = oldinputMax;
        ctxt->inputTab = oldinputTab;
        ctxt->charset = oldcharset;
+       if ((ctxt->encoding != NULL) &&
+           ((ctxt->dict == NULL) ||
+            (!xmlDictOwns(ctxt->dict, ctxt->encoding))))
+           xmlFree((xmlChar *) ctxt->encoding);
+       ctxt->encoding = oldencoding;
        /* ctxt->wellFormed = oldwellFormed; */
     }
 }
@@ -574,6 +600,7 @@ xmlSAX2GetEntity(void *ctx, const xmlChar *name)
         * parse the external entity
         */
        xmlNodePtr children;
+       unsigned long oldnbent = ctxt->nbentities;
 
         val = xmlParseCtxtExternalEntity(ctxt, ret->URI,
                                         ret->ExternalID, &children);
@@ -586,8 +613,11 @@ xmlSAX2GetEntity(void *ctx, const xmlChar *name)
            return(NULL);
        }
        ret->owner = 1;
-       if (ret->checked == 0)
-           ret->checked = 1;
+       if (ret->checked == 0) {
+           ret->checked = (ctxt->nbentities - oldnbent + 1) * 2;
+           if ((ret->content != NULL) && (xmlStrchr(ret->content, '<')))
+               ret->checked |= 1;
+       }
     }
     return(ret);
 }
@@ -621,8 +651,8 @@ xmlSAX2GetParameterEntity(void *ctx, const xmlChar *name)
 /**
  * xmlSAX2EntityDecl:
  * @ctx: the user data (XML parser context)
- * @name:  the entity name 
- * @type:  the entity type 
+ * @name:  the entity name
+ * @type:  the entity type
  * @publicId: The public ID of the entity
  * @systemId: The system ID of the entity
  * @content: the entity value (without processing).
@@ -657,7 +687,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
                base = ctxt->input->filename;
            if (base == NULL)
                base = ctxt->directory;
-       
+
            URI = xmlBuildURI(systemId, (const xmlChar *) base);
            ent->URI = URI;
        }
@@ -666,7 +696,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
                              systemId, content);
        if ((ent == NULL) && (ctxt->pedantic) &&
            (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-           ctxt->sax->warning(ctxt->userData, 
+           ctxt->sax->warning(ctxt->userData,
             "Entity(%s) already defined in the external subset\n", name);
        if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
            xmlChar *URI;
@@ -676,7 +706,7 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
                base = ctxt->input->filename;
            if (base == NULL)
                base = ctxt->directory;
-       
+
            URI = xmlBuildURI(systemId, (const xmlChar *) base);
            ent->URI = URI;
        }
@@ -691,8 +721,8 @@ xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
  * xmlSAX2AttributeDecl:
  * @ctx: the user data (XML parser context)
  * @elem:  the name of the element
- * @fullname:  the attribute name 
- * @type:  the attribute type 
+ * @fullname:  the attribute name
+ * @type:  the attribute type
  * @def:  the type of default value
  * @defaultValue: the attribute default value
  * @tree:  the tree of enumerated value set
@@ -735,7 +765,7 @@ xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname,
               (xmlAttributeDefault) def, defaultValue, tree);
     else if (ctxt->inSubset == 2)
        attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, elem,
-          name, prefix, (xmlAttributeType) type, 
+          name, prefix, (xmlAttributeType) type,
           (xmlAttributeDefault) def, defaultValue, tree);
     else {
         xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
@@ -761,8 +791,8 @@ xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname,
 /**
  * xmlSAX2ElementDecl:
  * @ctx: the user data (XML parser context)
- * @name:  the element name 
- * @type:  the element type 
+ * @name:  the element name
+ * @type:  the element type
  * @content: the element value tree
  *
  * An element definition has been parsed
@@ -883,7 +913,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
                        publicId, systemId, notationName);
        if ((ent == NULL) && (ctxt->pedantic) &&
            (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-           ctxt->sax->warning(ctxt->userData, 
+           ctxt->sax->warning(ctxt->userData,
             "Entity(%s) already defined in the internal subset\n", name);
        if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
            xmlChar *URI;
@@ -893,7 +923,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
                base = ctxt->input->filename;
            if (base == NULL)
                base = ctxt->directory;
-       
+
            URI = xmlBuildURI(systemId, (const xmlChar *) base);
            ent->URI = URI;
        }
@@ -903,7 +933,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
                        publicId, systemId, notationName);
        if ((ent == NULL) && (ctxt->pedantic) &&
            (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-           ctxt->sax->warning(ctxt->userData, 
+           ctxt->sax->warning(ctxt->userData,
             "Entity(%s) already defined in the external subset\n", name);
        if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
            xmlChar *URI;
@@ -913,7 +943,7 @@ xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
                base = ctxt->input->filename;
            if (base == NULL)
                base = ctxt->directory;
-       
+
            URI = xmlBuildURI(systemId, (const xmlChar *) base);
            ent->URI = URI;
        }
@@ -964,12 +994,12 @@ xmlSAX2StartDocument(void *ctx)
 #ifdef LIBXML_HTML_ENABLED
        if (ctxt->myDoc == NULL)
            ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
-       ctxt->myDoc->properties = XML_DOC_HTML;
-       ctxt->myDoc->parseFlags = ctxt->options;
        if (ctxt->myDoc == NULL) {
            xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
            return;
        }
+       ctxt->myDoc->properties = XML_DOC_HTML;
+       ctxt->myDoc->parseFlags = ctxt->options;
 #else
         xmlGenericError(xmlGenericErrorContext,
                "libxml2 built without HTML support\n");
@@ -1048,7 +1078,7 @@ xmlSAX2EndDocument(void *ctx)
     }
 }
 
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 /**
  * xmlSAX2AttributeInternal:
  * @ctx: the user data (XML parser context)
@@ -1147,6 +1177,12 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
                                          0,0,0);
            ctxt->depth--;
+           if (val == NULL) {
+               xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
+               if (name != NULL)
+                   xmlFree(name);
+               return;
+           }
        } else {
            val = (xmlChar *) value;
        }
@@ -1157,12 +1193,12 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            uri = xmlParseURI((const char *)val);
            if (uri == NULL) {
                if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-                   ctxt->sax->warning(ctxt->userData, 
+                   ctxt->sax->warning(ctxt->userData,
                         "xmlns: %s not a valid URI\n", val);
            } else {
                if (uri->scheme == NULL) {
                    if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
-                       ctxt->sax->warning(ctxt->userData, 
+                       ctxt->sax->warning(ctxt->userData,
                             "xmlns: URI %s is not absolute\n", val);
                }
                xmlFreeURI(uri);
@@ -1182,7 +1218,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
                                           ctxt->node, prefix, nsret, val);
 #endif /* LIBXML_VALID_ENABLED */
-       if (name != NULL) 
+       if (name != NULL)
            xmlFree(name);
        if (nval != NULL)
            xmlFree(nval);
@@ -1204,7 +1240,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            if (val == NULL) {
                xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
                xmlFree(ns);
-               if (name != NULL) 
+               if (name != NULL)
                    xmlFree(name);
                return;
            }
@@ -1245,7 +1281,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
                                           ctxt->node, prefix, nsret, value);
 #endif /* LIBXML_VALID_ENABLED */
-       if (name != NULL) 
+       if (name != NULL)
            xmlFree(name);
        if (nval != NULL)
            xmlFree(nval);
@@ -1311,7 +1347,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
 #ifdef LIBXML_VALID_ENABLED
     if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
         ctxt->myDoc && ctxt->myDoc->intSubset) {
-       
+
        /*
         * If we don't substitute entities, the validation should be
         * done on a value with replaced entities anyway.
@@ -1323,7 +1359,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
            val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
                                          0,0,0);
            ctxt->depth--;
-           
+
            if (val == NULL)
                ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
                                ctxt->myDoc, ctxt->node, ret, value);
@@ -1380,7 +1416,7 @@ xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
 error:
     if (nval != NULL)
        xmlFree(nval);
-    if (ns != NULL) 
+    if (ns != NULL)
        xmlFree(ns);
 }
 
@@ -1479,7 +1515,7 @@ process_external_subset:
                 *  - this is a namespace prefix
                 *  - the user required for completion in the tree
                 *    like XSLT
-                *  - there isn't already an attribute definition 
+                *  - there isn't already an attribute definition
                 *    in the internal subset overriding it.
                 */
                if (((attr->prefix != NULL) &&
@@ -1568,17 +1604,17 @@ xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts)
     /*
      * First check on validity:
      */
-    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && 
+    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
         ((ctxt->myDoc->intSubset == NULL) ||
-        ((ctxt->myDoc->intSubset->notations == NULL) && 
+        ((ctxt->myDoc->intSubset->notations == NULL) &&
          (ctxt->myDoc->intSubset->elements == NULL) &&
-         (ctxt->myDoc->intSubset->attributes == NULL) && 
+         (ctxt->myDoc->intSubset->attributes == NULL) &&
          (ctxt->myDoc->intSubset->entities == NULL)))) {
        xmlErrValid(ctxt, XML_ERR_NO_DTD,
          "Validation failed: no DTD found !", NULL, NULL);
        ctxt->validate = 0;
     }
-       
+
 
     /*
      * Split the full name into a namespace prefix and the tag name
@@ -1766,7 +1802,7 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
     else
        xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name);
 #endif
-    
+
     /* Capture end position and add node */
     if (cur != NULL && ctxt->record_info) {
       ctxt->nodeInfo->end_pos = ctxt->input->cur - ctxt->input->base;
@@ -1783,7 +1819,7 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
                                             cur);
 #endif /* LIBXML_VALID_ENABLED */
 
-    
+
     /*
      * end of parsing of this node.
      */
@@ -1792,15 +1828,15 @@ xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
 #endif
     nodePop(ctxt);
 }
-#endif /* LIBXML_SAX1_ENABLED || LIBXML_HTML_ENABLE */
+#endif /* LIBXML_SAX1_ENABLED || LIBXML_HTML_ENABLED || LIBXML_LEGACY_ENABLED */
 
 /*
  * xmlSAX2TextNode:
  * @ctxt:  the parser context
  * @str:  the input string
  * @len: the string length
- * 
- * Remove the entities from an attribute value
+ *
+ * Callback for a text node
  *
  * Returns the newly allocated string or NULL if not needed or error
  */
@@ -1833,7 +1869,7 @@ xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
 
        if ((len < (int) (2 * sizeof(void *))) &&
            (ctxt->options & XML_PARSE_COMPACT)) {
-           /* store the string in the node overrithing properties and nsDef */
+           /* store the string in the node overriding properties and nsDef */
            xmlChar *tmp = (xmlChar *) &(ret->properties);
            memcpy(tmp, str, len);
            tmp[len] = 0;
@@ -1865,8 +1901,17 @@ skip:
     } else
        ret->content = (xmlChar *) intern;
 
-    if (ctxt->input != NULL)
-        ret->line = ctxt->input->line;
+    if (ctxt->linenumbers) {
+       if (ctxt->input != NULL) {
+           if (ctxt->input->line < 65535)
+               ret->line = (short) ctxt->input->line;
+           else {
+               ret->line = 65535;
+               if (ctxt->options & XML_PARSE_BIG_LINES)
+                   ret->psvi = (void *) (long) ctxt->input->line;
+           }
+       }
+    }
 
     if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
        xmlRegisterNodeDefaultValue(ret);
@@ -1879,7 +1924,7 @@ skip:
  * @ctxt:  the parser context
  * @str:  the input string
  * @len: the string length
- * 
+ *
  * Remove the entities from an attribute value
  *
  * Returns the newly allocated string or NULL if not needed or error
@@ -1945,7 +1990,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
        memset(ret, 0, sizeof(xmlAttr));
        ret->type = XML_ATTRIBUTE_NODE;
 
-       ret->parent = ctxt->node; 
+       ret->parent = ctxt->node;
        ret->doc = ctxt->myDoc;
        ret->ns = namespace;
 
@@ -1969,7 +2014,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
            xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
     } else {
        if (ctxt->dictNames)
-           ret = xmlNewNsPropEatName(ctxt->node, namespace, 
+           ret = xmlNewNsPropEatName(ctxt->node, namespace,
                                      (xmlChar *) localname, NULL);
        else
            ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL);
@@ -2055,7 +2100,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
                    xmlChar *nvalnorm;
                    xmlChar fn[50];
                    xmlChar *fullname;
-                   
+
                    fullname = xmlBuildQName(localname, prefix, fn, 50);
                    if (fullname != NULL) {
                        ctxt->vctxt.valid = 1;
@@ -2106,6 +2151,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
             */
            if (dup == NULL)
                dup = xmlStrndup(value, valueend - value);
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef LIBXML_VALID_ENABLED
            if (xmlValidateNCName(dup, 1) != 0) {
                xmlErrValid(ctxt, XML_DTD_XMLID_VALUE,
@@ -2113,6 +2159,7 @@ xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
                            (const char *) dup, NULL);
            }
 #endif
+#endif
            xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
        } else if (xmlIsID(ctxt->myDoc, ctxt->node, ret)) {
            /* might be worth duplicate entry points and not copy */
@@ -2162,6 +2209,7 @@ xmlSAX2StartElementNs(void *ctx,
     xmlNodePtr parent;
     xmlNsPtr last = NULL, ns;
     const xmlChar *uri, *pref;
+    xmlChar *lname = NULL;
     int i, j;
 
     if (ctx == NULL) return;
@@ -2169,18 +2217,32 @@ xmlSAX2StartElementNs(void *ctx,
     /*
      * First check on validity:
      */
-    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) && 
+    if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
         ((ctxt->myDoc->intSubset == NULL) ||
-        ((ctxt->myDoc->intSubset->notations == NULL) && 
+        ((ctxt->myDoc->intSubset->notations == NULL) &&
          (ctxt->myDoc->intSubset->elements == NULL) &&
-         (ctxt->myDoc->intSubset->attributes == NULL) && 
+         (ctxt->myDoc->intSubset->attributes == NULL) &&
          (ctxt->myDoc->intSubset->entities == NULL)))) {
-       xmlErrValid(ctxt, XML_ERR_NO_DTD,
+       xmlErrValid(ctxt, XML_DTD_NO_DTD,
          "Validation failed: no DTD found !", NULL, NULL);
        ctxt->validate = 0;
     }
 
     /*
+     * Take care of the rare case of an undefined namespace prefix
+     */
+    if ((prefix != NULL) && (URI == NULL)) {
+        if (ctxt->dictNames) {
+           const xmlChar *fullname;
+
+           fullname = xmlDictQLookup(ctxt->dict, prefix, localname);
+           if (fullname != NULL)
+               localname = fullname;
+       } else {
+           lname = xmlBuildQName(localname, prefix, NULL, 0);
+       }
+    }
+    /*
      * allocate the node
      */
     if (ctxt->freeElems != NULL) {
@@ -2193,7 +2255,10 @@ xmlSAX2StartElementNs(void *ctx,
        if (ctxt->dictNames)
            ret->name = localname;
        else {
-           ret->name = xmlStrdup(localname);
+           if (lname == NULL)
+               ret->name = xmlStrdup(localname);
+           else
+               ret->name = lname;
            if (ret->name == NULL) {
                xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
                return;
@@ -2203,10 +2268,13 @@ xmlSAX2StartElementNs(void *ctx,
            xmlRegisterNodeDefaultValue(ret);
     } else {
        if (ctxt->dictNames)
-           ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, 
+           ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
                                       (xmlChar *) localname, NULL);
-       else
+       else if (lname == NULL)
            ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
+       else
+           ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
+                                      (xmlChar *) lname, NULL);
        if (ret == NULL) {
            xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
            return;
@@ -2313,8 +2381,33 @@ xmlSAX2StartElementNs(void *ctx,
      */
     if (nb_attributes > 0) {
         for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
+           /*
+            * Handle the rare case of an undefined atribute prefix
+            */
+           if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) {
+               if (ctxt->dictNames) {
+                   const xmlChar *fullname;
+
+                   fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
+                                             attributes[j]);
+                   if (fullname != NULL) {
+                       xmlSAX2AttributeNs(ctxt, fullname, NULL,
+                                          attributes[j+3], attributes[j+4]);
+                       continue;
+                   }
+               } else {
+                   lname = xmlBuildQName(attributes[j], attributes[j+1],
+                                         NULL, 0);
+                   if (lname != NULL) {
+                       xmlSAX2AttributeNs(ctxt, lname, NULL,
+                                          attributes[j+3], attributes[j+4]);
+                       xmlFree(lname);
+                       continue;
+                   }
+               }
+           }
            xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
-                              attributes[j+3], attributes[j+4]);
+                              attributes[j+3], attributes[j+4]);
        }
     }
 
@@ -2385,7 +2478,7 @@ xmlSAX2EndElementNs(void *ctx,
  * @ctx: the user data (XML parser context)
  * @name:  The entity name
  *
- * called when an entity xmlSAX2Reference is detected. 
+ * called when an entity xmlSAX2Reference is detected.
  */
 void
 xmlSAX2Reference(void *ctx, const xmlChar *name)
@@ -2485,12 +2578,16 @@ xmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
                       (xmlDictOwns(ctxt->dict, lastChild->content))) {
                lastChild->content = xmlStrdup(lastChild->content);
            }
+           if (lastChild->content == NULL) {
+               xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: xmlStrdup returned NULL");
+               return;
+           }
             if (((size_t)ctxt->nodelen + (size_t)len > XML_MAX_TEXT_LENGTH) &&
                 ((ctxt->options & XML_PARSE_HUGE) == 0)) {
                 xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node");
                 return;
             }
-           if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len || 
+           if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len ||
                (size_t)ctxt->nodemem + (size_t)len > SIZE_T_MAX / 2) {
                 xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
                 return;
index 4ff672e..7ad8630 100644 (file)
@@ -2,8 +2,8 @@ dnl Like AC_TRY_EVAL but also errors out if the compiler generates
 dnl _any_ output. Some compilers might issue warnings which we want
 dnl to catch.
 AC_DEFUN([AC_TRY_EVAL2],
-[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AC_FD_CC; dnl
-(eval [$]$1) 2>&AC_FD_CC; _out=`eval [$]$1 2>&1` && test "x$_out" = x; }])
+[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AS_MESSAGE_LOG_FD; dnl
+(eval [$]$1) 2>&AS_MESSAGE_LOG_FD; _out=`eval [$]$1 2>&1` && test "x$_out" = x; }])
 
 dnl Like AC_TRY_COMPILE but calls AC_TRY_EVAL2 instead of AC_TRY_EVAL
 AC_DEFUN([AC_TRY_COMPILE2],
@@ -19,8 +19,8 @@ if AC_TRY_EVAL2(ac_compile); then
   ifelse([$3], , :, [rm -rf conftest*
   $3])
 else
-  echo "configure: failed program was:" >&AC_FD_CC
-  cat conftest.$ac_ext >&AC_FD_CC
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
 ifelse([$4], , , [  rm -rf conftest*
   $4
 ])dnl
index fcf3076..51ce905 100644 (file)
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.13.4 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 # PARTICULAR PURPOSE.
 
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes ],
+                    [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+       AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+       AC_MSG_RESULT([no])
+       m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       $3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+
+# PKG_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable pkgconfigdir as the location where a module
+# should install pkg-config .pc files. By default the directory is
+# $libdir/pkgconfig, but the default can be changed by passing
+# DIRECTORY. The user can override through the --with-pkgconfigdir
+# parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+    [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_INSTALLDIR
+
+
+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable noarch_pkgconfigdir as the location where a
+# module should install arch-independent pkg-config .pc files. By
+# default the directory is $datadir/pkgconfig, but the default can be
+# changed by passing DIRECTORY. The user can override through the
+# --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+    [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_NOARCH_INSTALLDIR
+
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -31,10 +232,10 @@ To do so, use the procedure documented by the package, typically `autoreconf'.])
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.13'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
+m4_if([$1], [1.13.4], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -50,22 +251,22 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.13.4])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
 #
 # Of course, Automake must honor this variable whenever it calls a
 # tool from the auxiliary directory.  The problem is that $srcdir (and
@@ -84,7 +285,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 #
 # The reason of the latter failure is that $top_srcdir and $ac_aux_dir
 # are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
 # start a VPATH build or use an absolute $srcdir.
 #
 # So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -110,22 +311,19 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 9
-
 # AM_CONDITIONAL(NAME, SHELL-CONDITION)
 # -------------------------------------
 # Define a conditional.
 AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
 AC_SUBST([$1_TRUE])dnl
 AC_SUBST([$1_FALSE])dnl
 _AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -144,16 +342,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
 
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
 # will think it sees a *use*, and therefore will trigger all it's
 # C support machinery.  Also note that it means that autoscan, seeing
@@ -163,7 +359,7 @@ fi])])
 # _AM_DEPENDENCIES(NAME)
 # ----------------------
 # See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
 # We try a few techniques and use that to set a single cache variable.
 #
 # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -176,12 +372,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
 AC_REQUIRE([AM_MAKE_INCLUDE])dnl
 AC_REQUIRE([AM_DEP_TRACK])dnl
 
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
-       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                   [depcc="$$1"   am_compiler_list=])
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
 
 AC_CACHE_CHECK([dependency style of $depcc],
                [am_cv_$1_dependencies_compiler_type],
@@ -189,8 +386,9 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -229,16 +427,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -247,16 +445,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -304,7 +502,7 @@ AM_CONDITIONAL([am__fastdep$1], [
 # AM_SET_DEPDIR
 # -------------
 # Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
 AC_DEFUN([AM_SET_DEPDIR],
 [AC_REQUIRE([AM_SET_LEADING_DOT])dnl
 AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -314,34 +512,39 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 # AM_DEP_TRACK
 # ------------
 AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-#serial 5
 
 # _AM_OUTPUT_DEPENDENCY_COMMANDS
 # ------------------------------
 AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 [{
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -354,7 +557,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -366,21 +569,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`AS_DIRNAME(["$file"])`
@@ -398,7 +599,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
 # This macro should only be invoked once -- use via AC_REQUIRE.
 #
 # This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
+# is enabled.  FIXME.  This creates each '.P' file that we will
 # need in order to bootstrap the dependency handling code.
 AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 [AC_CONFIG_COMMANDS([depfiles],
@@ -406,29 +607,14 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
      [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
 ])
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
-
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 16
-
 # This macro actually does too much.  Some checks are only needed if
 # your package does certain things.  But this isn't really a big deal.
 
@@ -444,7 +630,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
 # arguments mandatory, and then we can depend on a new Autoconf
 # release and drop the old call support.
 AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.62])dnl
+[AC_PREREQ([2.65])dnl
 dnl Autoconf wants to disallow AM_ names.  We explicitly allow
 dnl the ones we care about.
 m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@@ -473,31 +659,40 @@ AC_SUBST([CYGPATH_W])
 # Define the identity of the package.
 dnl Distinguish between old-style and new-style calls.
 m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
  AC_SUBST([PACKAGE], [$1])dnl
  AC_SUBST([VERSION], [$2])],
 [_AM_SET_OPTIONS([$1])dnl
 dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
   [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
  AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
  AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
 
 _AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
 
 # Some tools Automake needs.
 AC_REQUIRE([AM_SANITY_CHECK])dnl
 AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
 AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
 AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
 AC_REQUIRE([AC_PROG_AWK])dnl
@@ -508,28 +703,32 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
                             [_AM_PROG_TAR([v7])])])
 _AM_IF_OPTION([no-dependencies],,
 [AC_PROVIDE_IFELSE([AC_PROG_CC],
-                 [_AM_DEPENDENCIES(CC)],
-                 [define([AC_PROG_CC],
-                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+                 [_AM_DEPENDENCIES([CC])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                 [_AM_DEPENDENCIES(CXX)],
-                 [define([AC_PROG_CXX],
-                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
 AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                 [_AM_DEPENDENCIES(OBJC)],
-                 [define([AC_PROG_OBJC],
-                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
 AC_CONFIG_COMMANDS_PRE(dnl
 [m4_provide_if([_AM_COMPILER_EXEEXT],
   [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
 ])
 
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
 dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
 dnl mangled by Autoconf and run in a shell conditional statement.
 m4_define([_AC_COMPILER_EXEEXT],
@@ -557,7 +756,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -576,16 +775,14 @@ if test x"${install_sh}" != xset; then
     install_sh="\${SHELL} $am_aux_dir/install-sh"
   esac
 fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
 
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # Check whether the underlying file-system supports filenames
 # with a leading dot.  For instance MS-DOS doesn't.
 AC_DEFUN([AM_SET_LEADING_DOT],
@@ -601,14 +798,12 @@ AC_SUBST([am__leading_dot])])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
-
 # AM_MAKE_INCLUDE()
 # -----------------
 # Check to see how make treats includes.
@@ -626,7 +821,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -653,15 +848,12 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 6
-
 # AM_MISSING_PROG(NAME, PROGRAM)
 # ------------------------------
 AC_DEFUN([AM_MISSING_PROG],
@@ -669,11 +861,10 @@ AC_DEFUN([AM_MISSING_PROG],
 $1=${$1-"${am_missing_run}$2"}
 AC_SUBST($1)])
 
-
 # AM_MISSING_HAS_RUN
 # ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
 AC_DEFUN([AM_MISSING_HAS_RUN],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
 AC_REQUIRE_AUX_FILE([missing])dnl
@@ -686,63 +877,35 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
-  [[\\/$]]* | ?:[[\\/]]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
-
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
 AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -755,22 +918,16 @@ AC_DEFUN([_AM_IF_OPTION],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
-
 # AM_SANITY_CHECK
 # ---------------
 AC_DEFUN([AM_SANITY_CHECK],
 [AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -781,32 +938,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
-    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+       && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$[2]" = conftest.file
    )
 then
@@ -816,36 +981,85 @@ else
    AC_MSG_ERROR([newly created file is older than distributed files!
 Check your system clock])
 fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
 
-# Copyright (C) 2009  Free Software Foundation, Inc.
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 1
-
 # AM_SILENT_RULES([DEFAULT])
 # --------------------------
 # Enable less verbose build rules; with the default set to DEFAULT
-# (`yes' being less verbose, `no' or empty being verbose).
+# ("yes" being less verbose, "no" or empty being verbose).
 AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules],
-[  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')])
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
 esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
 AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
 AM_BACKSLASH='\'
 AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -853,34 +1067,32 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 
 # AM_PROG_INSTALL_STRIP
 # ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
 # specify the program used to strip binaries.  This is especially
 # annoying in cross-compiling environments, where the build's strip
 # is unlikely to handle the host's binaries.
 # Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
 # STRIPPROG with the value of the STRIP variable (set by the user).
 AC_DEFUN([AM_PROG_INSTALL_STRIP],
 [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
 if test "$cross_compiling" != no; then
   AC_CHECK_TOOL([STRIP], [strip], :)
 fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
 # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
@@ -888,24 +1100,22 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
-
 # _AM_PROG_TAR(FORMAT)
 # --------------------
 # Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
 #
 # Substitute a variable $(am__tar) that is a command
 # writing to stdout a FORMAT-tarball containing the directory
@@ -915,75 +1125,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # Substitute a variable $(am__untar) that extract such
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
+#
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
 _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
 
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
 
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
   rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
 
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
 AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
diff --git a/buf.c b/buf.c
new file mode 100644 (file)
index 0000000..6efc7b6
--- /dev/null
+++ b/buf.c
@@ -0,0 +1,1304 @@
+/*
+ * buf.c: memory buffers for libxml2
+ *
+ * new buffer structures and entry points to simplify the maintainance
+ * of libxml2 and ensure we keep good control over memory allocations
+ * and stay 64 bits clean.
+ * The new entry point use the xmlBufPtr opaque structure and
+ * xmlBuf...() counterparts to the old xmlBuf...() functions
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <string.h> /* for memset() only ! */
+#include <limits.h>
+#ifdef HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <libxml/tree.h>
+#include <libxml/globals.h>
+#include <libxml/tree.h>
+#include "buf.h"
+
+#define WITH_BUFFER_COMPAT
+
+/**
+ * xmlBuf:
+ *
+ * A buffer structure. The base of the structure is somehow compatible
+ * with struct _xmlBuffer to limit risks on application which accessed
+ * directly the input->buf->buffer structures.
+ */
+
+struct _xmlBuf {
+    xmlChar *content;          /* The buffer content UTF8 */
+    unsigned int compat_use;    /* for binary compatibility */
+    unsigned int compat_size;   /* for binary compatibility */
+    xmlBufferAllocationScheme alloc; /* The realloc method */
+    xmlChar *contentIO;                /* in IO mode we may have a different base */
+    size_t use;                        /* The buffer size used */
+    size_t size;               /* The buffer size */
+    xmlBufferPtr buffer;        /* wrapper for an old buffer */
+    int error;                  /* an error code if a failure occured */
+};
+
+#ifdef WITH_BUFFER_COMPAT
+/*
+ * Macro for compatibility with xmlBuffer to be used after an xmlBuf
+ * is updated. This makes sure the compat fields are updated too.
+ */
+#define UPDATE_COMPAT(buf)                                 \
+     if (buf->size < INT_MAX) buf->compat_size = buf->size; \
+     else buf->compat_size = INT_MAX;                      \
+     if (buf->use < INT_MAX) buf->compat_use = buf->use; \
+     else buf->compat_use = INT_MAX;
+
+/*
+ * Macro for compatibility with xmlBuffer to be used in all the xmlBuf
+ * entry points, it checks that the compat fields have not been modified
+ * by direct call to xmlBuffer function from code compiled before 2.9.0 .
+ */
+#define CHECK_COMPAT(buf)                                  \
+     if (buf->size != (size_t) buf->compat_size)           \
+         if (buf->compat_size < INT_MAX)                   \
+            buf->size = buf->compat_size;                  \
+     if (buf->use != (size_t) buf->compat_use)             \
+         if (buf->compat_use < INT_MAX)                            \
+            buf->use = buf->compat_use;
+
+#else /* ! WITH_BUFFER_COMPAT */
+#define UPDATE_COMPAT(buf)
+#define CHECK_COMPAT(buf)
+#endif /* WITH_BUFFER_COMPAT */
+
+/**
+ * xmlBufMemoryError:
+ * @extra:  extra informations
+ *
+ * Handle an out of memory condition
+ * To be improved...
+ */
+static void
+xmlBufMemoryError(xmlBufPtr buf, const char *extra)
+{
+    __xmlSimpleError(XML_FROM_BUFFER, XML_ERR_NO_MEMORY, NULL, NULL, extra);
+    if ((buf) && (buf->error == 0))
+        buf->error = XML_ERR_NO_MEMORY;
+}
+
+/**
+ * xmlBufOverflowError:
+ * @extra:  extra informations
+ *
+ * Handle a buffer overflow error
+ * To be improved...
+ */
+static void
+xmlBufOverflowError(xmlBufPtr buf, const char *extra)
+{
+    __xmlSimpleError(XML_FROM_BUFFER, XML_BUF_OVERFLOW, NULL, NULL, extra);
+    if ((buf) && (buf->error == 0))
+        buf->error = XML_BUF_OVERFLOW;
+}
+
+
+/**
+ * xmlBufCreate:
+ *
+ * routine to create an XML buffer.
+ * returns the new structure.
+ */
+xmlBufPtr
+xmlBufCreate(void) {
+    xmlBufPtr ret;
+
+    ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
+    if (ret == NULL) {
+       xmlBufMemoryError(NULL, "creating buffer");
+        return(NULL);
+    }
+    ret->compat_use = 0;
+    ret->use = 0;
+    ret->error = 0;
+    ret->buffer = NULL;
+    ret->size = xmlDefaultBufferSize;
+    ret->compat_size = xmlDefaultBufferSize;
+    ret->alloc = xmlBufferAllocScheme;
+    ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
+    if (ret->content == NULL) {
+       xmlBufMemoryError(ret, "creating buffer");
+       xmlFree(ret);
+        return(NULL);
+    }
+    ret->content[0] = 0;
+    ret->contentIO = NULL;
+    return(ret);
+}
+
+/**
+ * xmlBufCreateSize:
+ * @size: initial size of buffer
+ *
+ * routine to create an XML buffer.
+ * returns the new structure.
+ */
+xmlBufPtr
+xmlBufCreateSize(size_t size) {
+    xmlBufPtr ret;
+
+    ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
+    if (ret == NULL) {
+       xmlBufMemoryError(NULL, "creating buffer");
+        return(NULL);
+    }
+    ret->compat_use = 0;
+    ret->use = 0;
+    ret->error = 0;
+    ret->buffer = NULL;
+    ret->alloc = xmlBufferAllocScheme;
+    ret->size = (size ? size+2 : 0);         /* +1 for ending null */
+    ret->compat_size = (int) ret->size;
+    if (ret->size){
+        ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
+        if (ret->content == NULL) {
+           xmlBufMemoryError(ret, "creating buffer");
+            xmlFree(ret);
+            return(NULL);
+        }
+        ret->content[0] = 0;
+    } else
+       ret->content = NULL;
+    ret->contentIO = NULL;
+    return(ret);
+}
+
+/**
+ * xmlBufDetach:
+ * @buf:  the buffer
+ *
+ * Remove the string contained in a buffer and give it back to the
+ * caller. The buffer is reset to an empty content.
+ * This doesn't work with immutable buffers as they can't be reset.
+ *
+ * Returns the previous string contained by the buffer.
+ */
+xmlChar *
+xmlBufDetach(xmlBufPtr buf) {
+    xmlChar *ret;
+
+    if (buf == NULL)
+        return(NULL);
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
+        return(NULL);
+    if (buf->buffer != NULL)
+        return(NULL);
+    if (buf->error)
+        return(NULL);
+
+    ret = buf->content;
+    buf->content = NULL;
+    buf->size = 0;
+    buf->use = 0;
+    buf->compat_use = 0;
+    buf->compat_size = 0;
+
+    return ret;
+}
+
+
+/**
+ * xmlBufCreateStatic:
+ * @mem: the memory area
+ * @size:  the size in byte
+ *
+ * routine to create an XML buffer from an immutable memory area.
+ * The area won't be modified nor copied, and is expected to be
+ * present until the end of the buffer lifetime.
+ *
+ * returns the new structure.
+ */
+xmlBufPtr
+xmlBufCreateStatic(void *mem, size_t size) {
+    xmlBufPtr ret;
+
+    if ((mem == NULL) || (size == 0))
+        return(NULL);
+
+    ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
+    if (ret == NULL) {
+       xmlBufMemoryError(NULL, "creating buffer");
+        return(NULL);
+    }
+    if (size < INT_MAX) {
+        ret->compat_use = size;
+        ret->compat_size = size;
+    } else {
+        ret->compat_use = INT_MAX;
+        ret->compat_size = INT_MAX;
+    }
+    ret->use = size;
+    ret->size = size;
+    ret->alloc = XML_BUFFER_ALLOC_IMMUTABLE;
+    ret->content = (xmlChar *) mem;
+    ret->error = 0;
+    ret->buffer = NULL;
+    return(ret);
+}
+
+/**
+ * xmlBufGetAllocationScheme:
+ * @buf:  the buffer
+ *
+ * Get the buffer allocation scheme
+ *
+ * Returns the scheme or -1 in case of error
+ */
+int
+xmlBufGetAllocationScheme(xmlBufPtr buf) {
+    if (buf == NULL) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufGetAllocationScheme: buf == NULL\n");
+#endif
+        return(-1);
+    }
+    return(buf->alloc);
+}
+
+/**
+ * xmlBufSetAllocationScheme:
+ * @buf:  the buffer to tune
+ * @scheme:  allocation scheme to use
+ *
+ * Sets the allocation scheme for this buffer
+ *
+ * returns 0 in case of success and -1 in case of failure
+ */
+int
+xmlBufSetAllocationScheme(xmlBufPtr buf,
+                          xmlBufferAllocationScheme scheme) {
+    if ((buf == NULL) || (buf->error != 0)) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufSetAllocationScheme: buf == NULL or in error\n");
+#endif
+        return(-1);
+    }
+    if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
+        (buf->alloc == XML_BUFFER_ALLOC_IO))
+        return(-1);
+    if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
+        (scheme == XML_BUFFER_ALLOC_EXACT) ||
+        (scheme == XML_BUFFER_ALLOC_HYBRID) ||
+        (scheme == XML_BUFFER_ALLOC_IMMUTABLE)) {
+       buf->alloc = scheme;
+        if (buf->buffer)
+            buf->buffer->alloc = scheme;
+        return(0);
+    }
+    /*
+     * Switching a buffer ALLOC_IO has the side effect of initializing
+     * the contentIO field with the current content
+     */
+    if (scheme == XML_BUFFER_ALLOC_IO) {
+        buf->alloc = XML_BUFFER_ALLOC_IO;
+        buf->contentIO = buf->content;
+    }
+    return(-1);
+}
+
+/**
+ * xmlBufFree:
+ * @buf:  the buffer to free
+ *
+ * Frees an XML buffer. It frees both the content and the structure which
+ * encapsulate it.
+ */
+void
+xmlBufFree(xmlBufPtr buf) {
+    if (buf == NULL) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufFree: buf == NULL\n");
+#endif
+       return;
+    }
+
+    if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
+        (buf->contentIO != NULL)) {
+        xmlFree(buf->contentIO);
+    } else if ((buf->content != NULL) &&
+        (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) {
+        xmlFree(buf->content);
+    }
+    xmlFree(buf);
+}
+
+/**
+ * xmlBufEmpty:
+ * @buf:  the buffer
+ *
+ * empty a buffer.
+ */
+void
+xmlBufEmpty(xmlBufPtr buf) {
+    if ((buf == NULL) || (buf->error != 0)) return;
+    if (buf->content == NULL) return;
+    CHECK_COMPAT(buf)
+    buf->use = 0;
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) {
+        buf->content = BAD_CAST "";
+    } else if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
+               (buf->contentIO != NULL)) {
+        size_t start_buf = buf->content - buf->contentIO;
+
+       buf->size += start_buf;
+        buf->content = buf->contentIO;
+        buf->content[0] = 0;
+    } else {
+        buf->content[0] = 0;
+    }
+    UPDATE_COMPAT(buf)
+}
+
+/**
+ * xmlBufShrink:
+ * @buf:  the buffer to dump
+ * @len:  the number of xmlChar to remove
+ *
+ * Remove the beginning of an XML buffer.
+ * NOTE that this routine behaviour differs from xmlBufferShrink()
+ * as it will return 0 on error instead of -1 due to size_t being
+ * used as the return type.
+ *
+ * Returns the number of byte removed or 0 in case of failure
+ */
+size_t
+xmlBufShrink(xmlBufPtr buf, size_t len) {
+    if ((buf == NULL) || (buf->error != 0)) return(0);
+    CHECK_COMPAT(buf)
+    if (len == 0) return(0);
+    if (len > buf->use) return(0);
+
+    buf->use -= len;
+    if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
+        ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL))) {
+       /*
+        * we just move the content pointer, but also make sure
+        * the perceived buffer size has shrinked accordingly
+        */
+        buf->content += len;
+       buf->size -= len;
+
+        /*
+        * sometimes though it maybe be better to really shrink
+        * on IO buffers
+        */
+       if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
+           size_t start_buf = buf->content - buf->contentIO;
+           if (start_buf >= buf->size) {
+               memmove(buf->contentIO, &buf->content[0], buf->use);
+               buf->content = buf->contentIO;
+               buf->content[buf->use] = 0;
+               buf->size += start_buf;
+           }
+       }
+    } else {
+       memmove(buf->content, &buf->content[len], buf->use);
+       buf->content[buf->use] = 0;
+    }
+    UPDATE_COMPAT(buf)
+    return(len);
+}
+
+/**
+ * xmlBufGrowInternal:
+ * @buf:  the buffer
+ * @len:  the minimum free size to allocate
+ *
+ * Grow the available space of an XML buffer, @len is the target value
+ * Error checking should be done on buf->error since using the return
+ * value doesn't work that well
+ *
+ * Returns 0 in case of error or the length made available otherwise
+ */
+static size_t
+xmlBufGrowInternal(xmlBufPtr buf, size_t len) {
+    size_t size;
+    xmlChar *newbuf;
+
+    if ((buf == NULL) || (buf->error != 0)) return(0);
+    CHECK_COMPAT(buf)
+
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
+    if (buf->use + len < buf->size)
+        return(buf->size - buf->use);
+
+    /*
+     * Windows has a BIG problem on realloc timing, so we try to double
+     * the buffer size (if that's enough) (bug 146697)
+     * Apparently BSD too, and it's probably best for linux too
+     * On an embedded system this may be something to change
+     */
+#if 1
+    if (buf->size > (size_t) len)
+        size = buf->size * 2;
+    else
+        size = buf->use + len + 100;
+#else
+    size = buf->use + len + 100;
+#endif
+
+    if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
+        size_t start_buf = buf->content - buf->contentIO;
+
+       newbuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + size);
+       if (newbuf == NULL) {
+           xmlBufMemoryError(buf, "growing buffer");
+           return(0);
+       }
+       buf->contentIO = newbuf;
+       buf->content = newbuf + start_buf;
+    } else {
+       newbuf = (xmlChar *) xmlRealloc(buf->content, size);
+       if (newbuf == NULL) {
+           xmlBufMemoryError(buf, "growing buffer");
+           return(0);
+       }
+       buf->content = newbuf;
+    }
+    buf->size = size;
+    UPDATE_COMPAT(buf)
+    return(buf->size - buf->use);
+}
+
+/**
+ * xmlBufGrow:
+ * @buf:  the buffer
+ * @len:  the minimum free size to allocate
+ *
+ * Grow the available space of an XML buffer, @len is the target value
+ * This is been kept compatible with xmlBufferGrow() as much as possible
+ *
+ * Returns -1 in case of error or the length made available otherwise
+ */
+int
+xmlBufGrow(xmlBufPtr buf, int len) {
+    size_t ret;
+
+    if ((buf == NULL) || (len < 0)) return(-1);
+    if (len == 0)
+        return(0);
+    ret = xmlBufGrowInternal(buf, len);
+    if (buf->error != 0)
+        return(-1);
+    return((int) ret);
+}
+
+/**
+ * xmlBufInflate:
+ * @buf:  the buffer
+ * @len:  the minimum extra free size to allocate
+ *
+ * Grow the available space of an XML buffer, adding at least @len bytes
+ *
+ * Returns 0 if successful or -1 in case of error
+ */
+int
+xmlBufInflate(xmlBufPtr buf, size_t len) {
+    if (buf == NULL) return(-1);
+    xmlBufGrowInternal(buf, len + buf->size);
+    if (buf->error)
+        return(-1);
+    return(0);
+}
+
+/**
+ * xmlBufDump:
+ * @file:  the file output
+ * @buf:  the buffer to dump
+ *
+ * Dumps an XML buffer to  a FILE *.
+ * Returns the number of #xmlChar written
+ */
+size_t
+xmlBufDump(FILE *file, xmlBufPtr buf) {
+    size_t ret;
+
+    if ((buf == NULL) || (buf->error != 0)) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufDump: buf == NULL or in error\n");
+#endif
+       return(0);
+    }
+    if (buf->content == NULL) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufDump: buf->content == NULL\n");
+#endif
+       return(0);
+    }
+    CHECK_COMPAT(buf)
+    if (file == NULL)
+       file = stdout;
+    ret = fwrite(buf->content, sizeof(xmlChar), buf->use, file);
+    return(ret);
+}
+
+/**
+ * xmlBufContent:
+ * @buf:  the buffer
+ *
+ * Function to extract the content of a buffer
+ *
+ * Returns the internal content
+ */
+
+xmlChar *
+xmlBufContent(const xmlBuf *buf)
+{
+    if ((!buf) || (buf->error))
+        return NULL;
+
+    return(buf->content);
+}
+
+/**
+ * xmlBufEnd:
+ * @buf:  the buffer
+ *
+ * Function to extract the end of the content of a buffer
+ *
+ * Returns the end of the internal content or NULL in case of error
+ */
+
+xmlChar *
+xmlBufEnd(xmlBufPtr buf)
+{
+    if ((!buf) || (buf->error))
+        return NULL;
+    CHECK_COMPAT(buf)
+
+    return(&buf->content[buf->use]);
+}
+
+/**
+ * xmlBufAddLen:
+ * @buf:  the buffer
+ * @len:  the size which were added at the end
+ *
+ * Sometime data may be added at the end of the buffer without
+ * using the xmlBuf APIs that is used to expand the used space
+ * and set the zero terminating at the end of the buffer
+ *
+ * Returns -1 in case of error and 0 otherwise
+ */
+int
+xmlBufAddLen(xmlBufPtr buf, size_t len) {
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (len > (buf->size - buf->use))
+        return(-1);
+    buf->use += len;
+    UPDATE_COMPAT(buf)
+    if (buf->size > buf->use)
+        buf->content[buf->use] = 0;
+    else
+        return(-1);
+    return(0);
+}
+
+/**
+ * xmlBufErase:
+ * @buf:  the buffer
+ * @len:  the size to erase at the end
+ *
+ * Sometime data need to be erased at the end of the buffer
+ *
+ * Returns -1 in case of error and 0 otherwise
+ */
+int
+xmlBufErase(xmlBufPtr buf, size_t len) {
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (len > buf->use)
+        return(-1);
+    buf->use -= len;
+    buf->content[buf->use] = 0;
+    UPDATE_COMPAT(buf)
+    return(0);
+}
+
+/**
+ * xmlBufLength:
+ * @buf:  the buffer
+ *
+ * Function to get the length of a buffer
+ *
+ * Returns the length of data in the internal content
+ */
+
+size_t
+xmlBufLength(const xmlBufPtr buf)
+{
+    if ((!buf) || (buf->error))
+        return 0;
+    CHECK_COMPAT(buf)
+
+    return(buf->use);
+}
+
+/**
+ * xmlBufUse:
+ * @buf:  the buffer
+ *
+ * Function to get the length of a buffer
+ *
+ * Returns the length of data in the internal content
+ */
+
+size_t
+xmlBufUse(const xmlBufPtr buf)
+{
+    if ((!buf) || (buf->error))
+        return 0;
+    CHECK_COMPAT(buf)
+
+    return(buf->use);
+}
+
+/**
+ * xmlBufAvail:
+ * @buf:  the buffer
+ *
+ * Function to find how much free space is allocated but not
+ * used in the buffer. It does not account for the terminating zero
+ * usually needed
+ *
+ * Returns the amount or 0 if none or an error occured
+ */
+
+size_t
+xmlBufAvail(const xmlBufPtr buf)
+{
+    if ((!buf) || (buf->error))
+        return 0;
+    CHECK_COMPAT(buf)
+
+    return(buf->size - buf->use);
+}
+
+/**
+ * xmlBufIsEmpty:
+ * @buf:  the buffer
+ *
+ * Tell if a buffer is empty
+ *
+ * Returns 0 if no, 1 if yes and -1 in case of error
+ */
+int
+xmlBufIsEmpty(const xmlBufPtr buf)
+{
+    if ((!buf) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+
+    return(buf->use == 0);
+}
+
+/**
+ * xmlBufResize:
+ * @buf:  the buffer to resize
+ * @size:  the desired size
+ *
+ * Resize a buffer to accommodate minimum size of @size.
+ *
+ * Returns  0 in case of problems, 1 otherwise
+ */
+int
+xmlBufResize(xmlBufPtr buf, size_t size)
+{
+    unsigned int newSize;
+    xmlChar* rebuf = NULL;
+    size_t start_buf;
+
+    if ((buf == NULL) || (buf->error))
+        return(0);
+    CHECK_COMPAT(buf)
+
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
+
+    /* Don't resize if we don't have to */
+    if (size < buf->size)
+        return 1;
+
+    /* figure out new size */
+    switch (buf->alloc){
+       case XML_BUFFER_ALLOC_IO:
+       case XML_BUFFER_ALLOC_DOUBLEIT:
+           /*take care of empty case*/
+           newSize = (buf->size ? buf->size*2 : size + 10);
+           while (size > newSize) {
+               if (newSize > UINT_MAX / 2) {
+                   xmlBufMemoryError(buf, "growing buffer");
+                   return 0;
+               }
+               newSize *= 2;
+           }
+           break;
+       case XML_BUFFER_ALLOC_EXACT:
+           newSize = size+10;
+           break;
+        case XML_BUFFER_ALLOC_HYBRID:
+            if (buf->use < BASE_BUFFER_SIZE)
+                newSize = size;
+            else {
+                newSize = buf->size * 2;
+                while (size > newSize) {
+                    if (newSize > UINT_MAX / 2) {
+                        xmlBufMemoryError(buf, "growing buffer");
+                        return 0;
+                    }
+                    newSize *= 2;
+                }
+            }
+            break;
+
+       default:
+           newSize = size+10;
+           break;
+    }
+
+    if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
+        start_buf = buf->content - buf->contentIO;
+
+        if (start_buf > newSize) {
+           /* move data back to start */
+           memmove(buf->contentIO, buf->content, buf->use);
+           buf->content = buf->contentIO;
+           buf->content[buf->use] = 0;
+           buf->size += start_buf;
+       } else {
+           rebuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + newSize);
+           if (rebuf == NULL) {
+               xmlBufMemoryError(buf, "growing buffer");
+               return 0;
+           }
+           buf->contentIO = rebuf;
+           buf->content = rebuf + start_buf;
+       }
+    } else {
+       if (buf->content == NULL) {
+           rebuf = (xmlChar *) xmlMallocAtomic(newSize);
+       } else if (buf->size - buf->use < 100) {
+           rebuf = (xmlChar *) xmlRealloc(buf->content, newSize);
+        } else {
+           /*
+            * if we are reallocating a buffer far from being full, it's
+            * better to make a new allocation and copy only the used range
+            * and free the old one.
+            */
+           rebuf = (xmlChar *) xmlMallocAtomic(newSize);
+           if (rebuf != NULL) {
+               memcpy(rebuf, buf->content, buf->use);
+               xmlFree(buf->content);
+               rebuf[buf->use] = 0;
+           }
+       }
+       if (rebuf == NULL) {
+           xmlBufMemoryError(buf, "growing buffer");
+           return 0;
+       }
+       buf->content = rebuf;
+    }
+    buf->size = newSize;
+    UPDATE_COMPAT(buf)
+
+    return 1;
+}
+
+/**
+ * xmlBufAdd:
+ * @buf:  the buffer to dump
+ * @str:  the #xmlChar string
+ * @len:  the number of #xmlChar to add
+ *
+ * Add a string range to an XML buffer. if len == -1, the length of
+ * str is recomputed.
+ *
+ * Returns 0 successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len) {
+    unsigned int needSize;
+
+    if ((str == NULL) || (buf == NULL) || (buf->error))
+       return -1;
+    CHECK_COMPAT(buf)
+
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
+    if (len < -1) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufAdd: len < 0\n");
+#endif
+       return -1;
+    }
+    if (len == 0) return 0;
+
+    if (len < 0)
+        len = xmlStrlen(str);
+
+    if (len < 0) return -1;
+    if (len == 0) return 0;
+
+    needSize = buf->use + len + 2;
+    if (needSize > buf->size){
+        if (!xmlBufResize(buf, needSize)){
+           xmlBufMemoryError(buf, "growing buffer");
+            return XML_ERR_NO_MEMORY;
+        }
+    }
+
+    memmove(&buf->content[buf->use], str, len*sizeof(xmlChar));
+    buf->use += len;
+    buf->content[buf->use] = 0;
+    UPDATE_COMPAT(buf)
+    return 0;
+}
+
+/**
+ * xmlBufAddHead:
+ * @buf:  the buffer
+ * @str:  the #xmlChar string
+ * @len:  the number of #xmlChar to add
+ *
+ * Add a string range to the beginning of an XML buffer.
+ * if len == -1, the length of @str is recomputed.
+ *
+ * Returns 0 successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len) {
+    unsigned int needSize;
+
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
+    if (str == NULL) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufAddHead: str == NULL\n");
+#endif
+       return -1;
+    }
+    if (len < -1) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufAddHead: len < 0\n");
+#endif
+       return -1;
+    }
+    if (len == 0) return 0;
+
+    if (len < 0)
+        len = xmlStrlen(str);
+
+    if (len <= 0) return -1;
+
+    if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
+        size_t start_buf = buf->content - buf->contentIO;
+
+       if (start_buf > (unsigned int) len) {
+           /*
+            * We can add it in the space previously shrinked
+            */
+           buf->content -= len;
+            memmove(&buf->content[0], str, len);
+           buf->use += len;
+           buf->size += len;
+           UPDATE_COMPAT(buf)
+           return(0);
+       }
+    }
+    needSize = buf->use + len + 2;
+    if (needSize > buf->size){
+        if (!xmlBufResize(buf, needSize)){
+           xmlBufMemoryError(buf, "growing buffer");
+            return XML_ERR_NO_MEMORY;
+        }
+    }
+
+    memmove(&buf->content[len], &buf->content[0], buf->use);
+    memmove(&buf->content[0], str, len);
+    buf->use += len;
+    buf->content[buf->use] = 0;
+    UPDATE_COMPAT(buf)
+    return 0;
+}
+
+/**
+ * xmlBufCat:
+ * @buf:  the buffer to add to
+ * @str:  the #xmlChar string
+ *
+ * Append a zero terminated string to an XML buffer.
+ *
+ * Returns 0 successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufCat(xmlBufPtr buf, const xmlChar *str) {
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
+    if (str == NULL) return -1;
+    return xmlBufAdd(buf, str, -1);
+}
+
+/**
+ * xmlBufCCat:
+ * @buf:  the buffer to dump
+ * @str:  the C char string
+ *
+ * Append a zero terminated C string to an XML buffer.
+ *
+ * Returns 0 successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufCCat(xmlBufPtr buf, const char *str) {
+    const char *cur;
+
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
+    if (str == NULL) {
+#ifdef DEBUG_BUFFER
+        xmlGenericError(xmlGenericErrorContext,
+               "xmlBufCCat: str == NULL\n");
+#endif
+       return -1;
+    }
+    for (cur = str;*cur != 0;cur++) {
+        if (buf->use  + 10 >= buf->size) {
+            if (!xmlBufResize(buf, buf->use+10)){
+               xmlBufMemoryError(buf, "growing buffer");
+                return XML_ERR_NO_MEMORY;
+            }
+        }
+        buf->content[buf->use++] = *cur;
+    }
+    buf->content[buf->use] = 0;
+    UPDATE_COMPAT(buf)
+    return 0;
+}
+
+/**
+ * xmlBufWriteCHAR:
+ * @buf:  the XML buffer
+ * @string:  the string to add
+ *
+ * routine which manages and grows an output buffer. This one adds
+ * xmlChars at the end of the buffer.
+ *
+ * Returns 0 if successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string) {
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
+        return(-1);
+    return(xmlBufCat(buf, string));
+}
+
+/**
+ * xmlBufWriteChar:
+ * @buf:  the XML buffer output
+ * @string:  the string to add
+ *
+ * routine which manage and grows an output buffer. This one add
+ * C chars at the end of the array.
+ *
+ * Returns 0 if successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufWriteChar(xmlBufPtr buf, const char *string) {
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
+        return(-1);
+    return(xmlBufCCat(buf, string));
+}
+
+
+/**
+ * xmlBufWriteQuotedString:
+ * @buf:  the XML buffer output
+ * @string:  the string to add
+ *
+ * routine which manage and grows an output buffer. This one writes
+ * a quoted or double quoted #xmlChar string, checking first if it holds
+ * quote or double-quotes internally
+ *
+ * Returns 0 if successful, a positive error code number otherwise
+ *         and -1 in case of internal or API error.
+ */
+int
+xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string) {
+    const xmlChar *cur, *base;
+    if ((buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
+        return(-1);
+    if (xmlStrchr(string, '\"')) {
+        if (xmlStrchr(string, '\'')) {
+#ifdef DEBUG_BUFFER
+           xmlGenericError(xmlGenericErrorContext,
+ "xmlBufWriteQuotedString: string contains quote and double-quotes !\n");
+#endif
+           xmlBufCCat(buf, "\"");
+            base = cur = string;
+            while(*cur != 0){
+                if(*cur == '"'){
+                    if (base != cur)
+                        xmlBufAdd(buf, base, cur - base);
+                    xmlBufAdd(buf, BAD_CAST "&quot;", 6);
+                    cur++;
+                    base = cur;
+                }
+                else {
+                    cur++;
+                }
+            }
+            if (base != cur)
+                xmlBufAdd(buf, base, cur - base);
+           xmlBufCCat(buf, "\"");
+       }
+        else{
+           xmlBufCCat(buf, "\'");
+            xmlBufCat(buf, string);
+           xmlBufCCat(buf, "\'");
+        }
+    } else {
+        xmlBufCCat(buf, "\"");
+        xmlBufCat(buf, string);
+        xmlBufCCat(buf, "\"");
+    }
+    return(0);
+}
+
+/**
+ * xmlBufFromBuffer:
+ * @buffer: incoming old buffer to convert to a new one
+ *
+ * Helper routine to switch from the old buffer structures in use
+ * in various APIs. It creates a wrapper xmlBufPtr which will be
+ * used for internal processing until the xmlBufBackToBuffer() is
+ * issued.
+ *
+ * Returns a new xmlBufPtr unless the call failed and NULL is returned
+ */
+xmlBufPtr
+xmlBufFromBuffer(xmlBufferPtr buffer) {
+    xmlBufPtr ret;
+
+    if (buffer == NULL)
+        return(NULL);
+
+    ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
+    if (ret == NULL) {
+       xmlBufMemoryError(NULL, "creating buffer");
+        return(NULL);
+    }
+    ret->use = buffer->use;
+    ret->size = buffer->size;
+    ret->compat_use = buffer->use;
+    ret->compat_size = buffer->size;
+    ret->error = 0;
+    ret->buffer = buffer;
+    ret->alloc = buffer->alloc;
+    ret->content = buffer->content;
+    ret->contentIO = buffer->contentIO;
+
+    return(ret);
+}
+
+/**
+ * xmlBufBackToBuffer:
+ * @buf: new buffer wrapping the old one
+ *
+ * Function to be called once internal processing had been done to
+ * update back the buffer provided by the user. This can lead to
+ * a failure in case the size accumulated in the xmlBuf is larger
+ * than what an xmlBuffer can support on 64 bits (INT_MAX)
+ * The xmlBufPtr @buf wrapper is deallocated by this call in any case.
+ *
+ * Returns the old xmlBufferPtr unless the call failed and NULL is returned
+ */
+xmlBufferPtr
+xmlBufBackToBuffer(xmlBufPtr buf) {
+    xmlBufferPtr ret;
+
+    if ((buf == NULL) || (buf->error))
+        return(NULL);
+    CHECK_COMPAT(buf)
+    if (buf->buffer == NULL) {
+        xmlBufFree(buf);
+        return(NULL);
+    }
+
+    ret = buf->buffer;
+    /*
+     * What to do in case of error in the buffer ???
+     */
+    if (buf->use > INT_MAX) {
+        /*
+         * Worse case, we really allocated and used more than the
+         * maximum allowed memory for an xmlBuffer on this architecture.
+         * Keep the buffer but provide a truncated size value.
+         */
+        xmlBufOverflowError(buf, "Used size too big for xmlBuffer");
+        ret->use = INT_MAX;
+        ret->size = INT_MAX;
+    } else if (buf->size > INT_MAX) {
+        /*
+         * milder case, we allocated more than the maximum allowed memory
+         * for an xmlBuffer on this architecture, but used less than the
+         * limit.
+         * Keep the buffer but provide a truncated size value.
+         */
+        xmlBufOverflowError(buf, "Allocated size too big for xmlBuffer");
+        ret->size = INT_MAX;
+    }
+    ret->use = (int) buf->use;
+    ret->size = (int) buf->size;
+    ret->alloc = buf->alloc;
+    ret->content = buf->content;
+    ret->contentIO = buf->contentIO;
+    xmlFree(buf);
+    return(ret);
+}
+
+/**
+ * xmlBufMergeBuffer:
+ * @buf: an xmlBufPtr
+ * @buffer: the buffer to consume into @buf
+ *
+ * The content of @buffer is appended to @buf and @buffer is freed
+ *
+ * Returns -1 in case of error, 0 otherwise, in any case @buffer is freed
+ */
+int
+xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer) {
+    int ret = 0;
+
+    if ((buf == NULL) || (buf->error)) {
+       xmlBufferFree(buffer);
+        return(-1);
+    }
+    CHECK_COMPAT(buf)
+    if ((buffer != NULL) && (buffer->content != NULL) &&
+             (buffer->use > 0)) {
+        ret = xmlBufAdd(buf, buffer->content, buffer->use);
+    }
+    xmlBufferFree(buffer);
+    return(ret);
+}
+
+/**
+ * xmlBufResetInput:
+ * @buf: an xmlBufPtr
+ * @input: an xmlParserInputPtr
+ *
+ * Update the input to use the current set of pointers from the buffer.
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+int
+xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input) {
+    if ((input == NULL) || (buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    input->base = input->cur = buf->content;
+    input->end = &buf->content[buf->use];
+    return(0);
+}
+
+/**
+ * xmlBufGetInputBase:
+ * @buf: an xmlBufPtr
+ * @input: an xmlParserInputPtr
+ *
+ * Get the base of the @input relative to the beginning of the buffer
+ *
+ * Returns the size_t corresponding to the displacement
+ */
+size_t
+xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input) {
+    size_t base;
+
+    if ((input == NULL) || (buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    base = input->base - buf->content;
+    /*
+     * We could do some pointer arythmetic checks but that's probably
+     * sufficient.
+     */
+    if (base > buf->size) {
+        xmlBufOverflowError(buf, "Input reference outside of the buffer");
+        base = 0;
+    }
+    return(base);
+}
+
+/**
+ * xmlBufSetInputBaseCur:
+ * @buf: an xmlBufPtr
+ * @input: an xmlParserInputPtr
+ * @base: the base value relative to the beginning of the buffer
+ * @cur: the cur value relative to the beginning of the buffer
+ *
+ * Update the input to use the base and cur relative to the buffer
+ * after a possible reallocation of its content
+ *
+ * Returns -1 in case of error, 0 otherwise
+ */
+int
+xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input,
+                      size_t base, size_t cur) {
+    if ((input == NULL) || (buf == NULL) || (buf->error))
+        return(-1);
+    CHECK_COMPAT(buf)
+    input->base = &buf->content[base];
+    input->cur = input->base + cur;
+    input->end = &buf->content[buf->use];
+    return(0);
+}
+
+#define bottom_buf
+#include "elfgcchack.h"
diff --git a/buf.h b/buf.h
new file mode 100644 (file)
index 0000000..ebdc978
--- /dev/null
+++ b/buf.h
@@ -0,0 +1,72 @@
+/*
+ * Summary: Internal Interfaces for memory buffers in libxml2
+ * Description: this module describes most of the new xmlBuf buffer
+ *              entry points, those are private routines, with a
+ *              few exceptions exported in tree.h. This was added
+ *              in 2.9.0.
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_BUF_H__
+#define __XML_BUF_H__
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+xmlBufPtr xmlBufCreate(void);
+xmlBufPtr xmlBufCreateSize(size_t size);
+xmlBufPtr xmlBufCreateStatic(void *mem, size_t size);
+
+int xmlBufSetAllocationScheme(xmlBufPtr buf,
+                              xmlBufferAllocationScheme scheme);
+int xmlBufGetAllocationScheme(xmlBufPtr buf);
+
+void xmlBufFree(xmlBufPtr buf);
+void xmlBufEmpty(xmlBufPtr buf);
+
+/* size_t xmlBufShrink(xmlBufPtr buf, size_t len); */
+int xmlBufGrow(xmlBufPtr buf, int len);
+int xmlBufInflate(xmlBufPtr buf, size_t len);
+int xmlBufResize(xmlBufPtr buf, size_t len);
+
+int xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len);
+int xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len);
+int xmlBufCat(xmlBufPtr buf, const xmlChar *str);
+int xmlBufCCat(xmlBufPtr buf, const char *str);
+int xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string);
+int xmlBufWriteChar(xmlBufPtr buf, const char *string);
+int xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string);
+
+size_t xmlBufAvail(const xmlBufPtr buf);
+size_t xmlBufLength(const xmlBufPtr buf);
+/* size_t xmlBufUse(const xmlBufPtr buf); */
+int xmlBufIsEmpty(const xmlBufPtr buf);
+int xmlBufAddLen(xmlBufPtr buf, size_t len);
+int xmlBufErase(xmlBufPtr buf, size_t len);
+
+/* const xmlChar * xmlBufContent(const xmlBuf *buf); */
+/* const xmlChar * xmlBufEnd(xmlBufPtr buf); */
+
+xmlChar * xmlBufDetach(xmlBufPtr buf);
+
+size_t xmlBufDump(FILE *file, xmlBufPtr buf);
+
+xmlBufPtr xmlBufFromBuffer(xmlBufferPtr buffer);
+xmlBufferPtr xmlBufBackToBuffer(xmlBufPtr buf);
+int xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer);
+
+int xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input);
+size_t xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input);
+int xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input,
+                          size_t base, size_t cur);
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_BUF_H__ */
+
diff --git a/c14n.c b/c14n.c
index 9c3cad2..ca77f92 100644 (file)
--- a/c14n.c
+++ b/c14n.c
@@ -1,12 +1,12 @@
 /*
- * "Canonical XML" implementation 
+ * "Canonical XML" implementation
  * http://www.w3.org/TR/xml-c14n
- * 
+ *
  * "Exclusive XML Canonicalization" implementation
  * http://www.w3.org/TR/xml-exc-c14n
  *
  * See Copyright for the status of this software.
- * 
+ *
  * Author: Aleksey Sanin <aleksey@aleksey.com>
  */
 #define IN_LIBXML
@@ -27,6 +27,8 @@
 #include <libxml/xpathInternals.h>
 #include <libxml/c14n.h>
 
+#include "buf.h"
+
 /************************************************************************
  *                                                                     *
  *             Some declaration better left private ATM                *
@@ -44,7 +46,7 @@ typedef struct _xmlC14NVisibleNsStack {
     int nsPrevStart;        /* the begginning of the stack for previous visible node */
     int nsPrevEnd;          /* the end of the stack for previous visible node */
     int nsMax;              /* size of the array as allocated */
-    xmlNsPtr   *nsTab;     /* array of ns in no particular order */          
+    xmlNsPtr   *nsTab;     /* array of ns in no particular order */
     xmlNodePtr *nodeTab;   /* array of nodes in no particular order */
 } xmlC14NVisibleNsStack, *xmlC14NVisibleNsStackPtr;
 
@@ -52,7 +54,7 @@ typedef struct _xmlC14NCtx {
     /* input parameters */
     xmlDocPtr doc;
     xmlC14NIsVisibleCallback is_visible_callback;
-    void* user_data;    
+    void* user_data;
     int with_comments;
     xmlOutputBufferPtr buf;
 
@@ -60,7 +62,7 @@ typedef struct _xmlC14NCtx {
     xmlC14NPosition pos;
     int parent_is_doc;
     xmlC14NVisibleNsStackPtr ns_rendered;
-    
+
     /* C14N mode */
     xmlC14NMode mode;
 
@@ -73,17 +75,17 @@ typedef struct _xmlC14NCtx {
 
 static xmlC14NVisibleNsStackPtr        xmlC14NVisibleNsStackCreate     (void);
 static void     xmlC14NVisibleNsStackDestroy   (xmlC14NVisibleNsStackPtr cur);
-static void     xmlC14NVisibleNsStackAdd           (xmlC14NVisibleNsStackPtr cur, 
+static void     xmlC14NVisibleNsStackAdd           (xmlC14NVisibleNsStackPtr cur,
                                                  xmlNsPtr ns,
                                                  xmlNodePtr node);
-static void                    xmlC14NVisibleNsStackSave       (xmlC14NVisibleNsStackPtr cur,
+static void                    xmlC14NVisibleNsStackSave       (xmlC14NVisibleNsStackPtr cur,
                                                                 xmlC14NVisibleNsStackPtr state);
-static void                    xmlC14NVisibleNsStackRestore    (xmlC14NVisibleNsStackPtr cur,
+static void                    xmlC14NVisibleNsStackRestore    (xmlC14NVisibleNsStackPtr cur,
                                                                 xmlC14NVisibleNsStackPtr state);
-static void                    xmlC14NVisibleNsStackShift      (xmlC14NVisibleNsStackPtr cur);
-static int                     xmlC14NVisibleNsStackFind       (xmlC14NVisibleNsStackPtr cur, 
+static void                    xmlC14NVisibleNsStackShift      (xmlC14NVisibleNsStackPtr cur);
+static int                     xmlC14NVisibleNsStackFind       (xmlC14NVisibleNsStackPtr cur,
                                                                 xmlNsPtr ns);
-static int                     xmlExcC14NVisibleNsStackFind    (xmlC14NVisibleNsStackPtr cur, 
+static int                     xmlExcC14NVisibleNsStackFind    (xmlC14NVisibleNsStackPtr cur,
                                                                 xmlNsPtr ns,
                                                                 xmlC14NCtxPtr ctx);
 
@@ -105,26 +107,26 @@ typedef enum {
 static xmlChar *xmlC11NNormalizeString(const xmlChar * input,
                                        xmlC14NNormalizationMode mode);
 
-#define        xmlC11NNormalizeAttr( a ) \
+#define        xmlC11NNormalizeAttr( a ) \
     xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
-#define        xmlC11NNormalizeComment( a ) \
+#define        xmlC11NNormalizeComment( a ) \
     xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
-#define        xmlC11NNormalizePI( a ) \
+#define        xmlC11NNormalizePI( a ) \
     xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
-#define        xmlC11NNormalizeText( a ) \
+#define        xmlC11NNormalizeText( a ) \
     xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
 
-#define        xmlC14NIsVisible( ctx, node, parent ) \
+#define        xmlC14NIsVisible( ctx, node, parent ) \
      (((ctx)->is_visible_callback != NULL) ? \
        (ctx)->is_visible_callback((ctx)->user_data, \
                (xmlNodePtr)(node), (xmlNodePtr)(parent)) : 1)
 
-#define        xmlC14NIsExclusive( ctx ) \
+#define        xmlC14NIsExclusive( ctx ) \
     ( (ctx)->mode == XML_C14N_EXCLUSIVE_1_0 )
 
 /************************************************************************
  *                                                                     *
- *             Some factorized error routines                          *
+ *             Some factorized error routines                          *
  *                                                                     *
  ************************************************************************/
 
@@ -249,25 +251,25 @@ xmlC14NErr(xmlC14NCtxPtr ctxt, xmlNodePtr node, int error,
  ************************************************************************/
 #define XML_NAMESPACES_DEFAULT         16
 
-static int                     
+static int
 xmlC14NIsNodeInNodeset(xmlNodeSetPtr nodes, xmlNodePtr node, xmlNodePtr parent) {
     if((nodes != NULL) && (node != NULL)) {
        if(node->type != XML_NAMESPACE_DECL) {
            return(xmlXPathNodeSetContains(nodes, node));
        } else {
            xmlNs ns;
-           
-           memcpy(&ns, node, sizeof(ns)); 
-           
+
+           memcpy(&ns, node, sizeof(ns));
+
            /* this is a libxml hack! check xpath.c for details */
            if((parent != NULL) && (parent->type == XML_ATTRIBUTE_NODE)) {
                ns.next = (xmlNsPtr)parent->parent;
            } else {
-               ns.next = (xmlNsPtr)parent; 
+               ns.next = (xmlNsPtr)parent;
            }
 
-           /* 
-            * If the input is an XPath node-set, then the node-set must explicitly 
+           /*
+            * If the input is an XPath node-set, then the node-set must explicitly
             * contain every node to be rendered to the canonical form.
             */
            return(xmlXPathNodeSetContains(nodes, (xmlNodePtr)&ns));
@@ -305,12 +307,12 @@ xmlC14NVisibleNsStackDestroy(xmlC14NVisibleNsStackPtr cur) {
     }
     memset(cur, 0, sizeof(xmlC14NVisibleNsStack));
     xmlFree(cur);
-    
+
 }
 
-static void 
+static void
 xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node) {
-    if((cur == NULL) || 
+    if((cur == NULL) ||
        ((cur->nsTab == NULL) && (cur->nodeTab != NULL)) ||
        ((cur->nsTab != NULL) && (cur->nodeTab == NULL))) {
         xmlC14NErrParam("adding namespace to stack");
@@ -328,9 +330,9 @@ xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr n
        memset(cur->nodeTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
         cur->nsMax = XML_NAMESPACES_DEFAULT;
     } else if(cur->nsMax == cur->nsCurEnd) {
-       void *tmp;      
+       void *tmp;
        int tmpSize;
-       
+
        tmpSize = 2 * cur->nsMax;
        tmp = xmlRealloc(cur->nsTab, tmpSize * sizeof(xmlNsPtr));
        if (tmp == NULL) {
@@ -360,7 +362,7 @@ xmlC14NVisibleNsStackSave(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr
         xmlC14NErrParam("saving namespaces stack");
        return;
     }
-    
+
     state->nsCurEnd = cur->nsCurEnd;
     state->nsPrevStart = cur->nsPrevStart;
     state->nsPrevEnd = cur->nsPrevEnd;
@@ -377,7 +379,7 @@ xmlC14NVisibleNsStackRestore(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStack
     cur->nsPrevEnd = state->nsPrevEnd;
 }
 
-static void 
+static void
 xmlC14NVisibleNsStackShift(xmlC14NVisibleNsStackPtr cur) {
     if(cur == NULL) {
         xmlC14NErrParam("shifting namespaces stack");
@@ -400,7 +402,7 @@ xmlC14NStrEqual(const xmlChar *str1, const xmlChar *str2) {
 
 /**
  * xmlC14NVisibleNsStackFind:
- * @ctx:               the C14N context 
+ * @ctx:               the C14N context
  * @ns:                        the namespace to check
  *
  * Checks whether the given namespace was already rendered or not
@@ -414,14 +416,14 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
     const xmlChar *prefix;
     const xmlChar *href;
     int has_empty_ns;
-        
+
     if(cur == NULL) {
         xmlC14NErrParam("searching namespaces stack (c14n)");
         return (0);
     }
 
     /*
-     * if the default namespace xmlns="" is not defined yet then 
+     * if the default namespace xmlns="" is not defined yet then
      * we do not want to print it out
      */
     prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
@@ -432,7 +434,7 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
        int start = (has_empty_ns) ? 0 : cur->nsPrevStart;
         for (i = cur->nsCurEnd - 1; i >= start; --i) {
             xmlNsPtr ns1 = cur->nsTab[i];
-           
+
            if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
                return(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL));
            }
@@ -441,20 +443,20 @@ xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
     return(has_empty_ns);
 }
 
-static int                     
+static int
 xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx) {
     int i;
     const xmlChar *prefix;
     const xmlChar *href;
     int has_empty_ns;
-        
+
     if(cur == NULL) {
         xmlC14NErrParam("searching namespaces stack (exc c14n)");
         return (0);
     }
 
     /*
-     * if the default namespace xmlns="" is not defined yet then 
+     * if the default namespace xmlns="" is not defined yet then
      * we do not want to print it out
      */
     prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
@@ -465,10 +467,10 @@ xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NC
        int start = 0;
         for (i = cur->nsCurEnd - 1; i >= start; --i) {
             xmlNsPtr ns1 = cur->nsTab[i];
-           
+
            if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
                if(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)) {
-                   return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i]));
+                   return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i]));
                } else {
                    return(0);
                }
@@ -483,8 +485,8 @@ xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NC
 
 /**
  * xmlC14NIsXmlNs:
- * @ns:                the namespace to check
- *             
+ * @ns:                the namespace to check
+ *
  * Checks whether the given namespace is a default "xml:" namespace
  * with href="http://www.w3.org/XML/1998/namespace"
  *
@@ -504,7 +506,7 @@ xmlC14NIsXmlNs(xmlNsPtr ns)
 /**
  * xmlC14NNsCompare:
  * @ns1:               the pointer to first namespace
- * @ns2:               the pointer to second namespace
+ * @ns2:               the pointer to second namespace
  *
  * Compares the namespaces by names (prefixes).
  *
@@ -527,7 +529,7 @@ xmlC14NNsCompare(xmlNsPtr ns1, xmlNsPtr ns2)
 /**
  * xmlC14NPrintNamespaces:
  * @ns:                        the pointer to namespace
- * @ctx:               the C14N context
+ * @ctx:               the C14N context
  *
  * Prints the given namespace to the output buffer from C14N context.
  *
@@ -545,52 +547,53 @@ xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx)
     if (ns->prefix != NULL) {
         xmlOutputBufferWriteString(ctx->buf, " xmlns:");
         xmlOutputBufferWriteString(ctx->buf, (const char *) ns->prefix);
-        xmlOutputBufferWriteString(ctx->buf, "=\"");
+        xmlOutputBufferWriteString(ctx->buf, "=");
     } else {
-        xmlOutputBufferWriteString(ctx->buf, " xmlns=\"");
+        xmlOutputBufferWriteString(ctx->buf, " xmlns=");
     }
     if(ns->href != NULL) {
-       xmlOutputBufferWriteString(ctx->buf, (const char *) ns->href);
+       xmlBufWriteQuotedString(ctx->buf->buffer, ns->href);
+    } else {
+       xmlOutputBufferWriteString(ctx->buf, "\"\"");
     }
-    xmlOutputBufferWriteString(ctx->buf, "\"");
     return (1);
 }
 
 /**
  * xmlC14NProcessNamespacesAxis:
- * @ctx:               the C14N context
+ * @ctx:               the C14N context
  * @node:              the current node
  *
  * Prints out canonical namespace axis of the current node to the
- * buffer from C14N context as follows 
+ * buffer from C14N context as follows
  *
  * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
  *
  * Namespace Axis
- * Consider a list L containing only namespace nodes in the 
- * axis and in the node-set in lexicographic order (ascending). To begin 
- * processing L, if the first node is not the default namespace node (a node 
- * with no namespace URI and no local name), then generate a space followed 
+ * Consider a list L containing only namespace nodes in the
+ * axis and in the node-set in lexicographic order (ascending). To begin
+ * processing L, if the first node is not the default namespace node (a node
+ * with no namespace URI and no local name), then generate a space followed
  * by xmlns="" if and only if the following conditions are met:
  *    - the element E that owns the axis is in the node-set
- *    - The nearest ancestor element of E in the node-set has a default 
- *         namespace node in the node-set (default namespace nodes always 
+ *    - The nearest ancestor element of E in the node-set has a default
+ *         namespace node in the node-set (default namespace nodes always
  *      have non-empty values in XPath)
- * The latter condition eliminates unnecessary occurrences of xmlns="" in 
- * the canonical form since an element only receives an xmlns="" if its 
- * default namespace is empty and if it has an immediate parent in the 
- * canonical form that has a non-empty default namespace. To finish 
- * processing  L, simply process every namespace node in L, except omit 
- * namespace node with local name xml, which defines the xml prefix, 
+ * The latter condition eliminates unnecessary occurrences of xmlns="" in
+ * the canonical form since an element only receives an xmlns="" if its
+ * default namespace is empty and if it has an immediate parent in the
+ * canonical form that has a non-empty default namespace. To finish
+ * processing  L, simply process every namespace node in L, except omit
+ * namespace node with local name xml, which defines the xml prefix,
  * if its string value is http://www.w3.org/XML/1998/namespace.
  *
  * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
- * Canonical XML applied to a document subset requires the search of the 
- * ancestor nodes of each orphan element node for attributes in the xml 
- * namespace, such as xml:lang and xml:space. These are copied into the 
- * element node except if a declaration of the same attribute is already 
- * in the attribute axis of the element (whether or not it is included in 
- * the document subset). This search and copying are omitted from the 
+ * Canonical XML applied to a document subset requires the search of the
+ * ancestor nodes of each orphan element node for attributes in the xml
+ * namespace, such as xml:lang and xml:space. These are copied into the
+ * element node except if a declaration of the same attribute is already
+ * in the attribute axis of the element (whether or not it is included in
+ * the document subset). This search and copying are omitted from the
  * Exclusive XML Canonicalization method.
  *
  * Returns 0 on success or -1 on fail.
@@ -603,7 +606,7 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     xmlListPtr list;
     int already_rendered;
     int has_empty_ns = 0;
-    
+
     if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
         xmlC14NErrParam("processing namespaces axis (c14n)");
         return (-1);
@@ -622,29 +625,29 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     for(n = cur; n != NULL; n = n->parent) {
        for(ns = n->nsDef; ns != NULL; ns = ns->next) {
            tmp = xmlSearchNs(cur->doc, cur, ns->prefix);
-           
+
            if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
                already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
                if(visible) {
-                   xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
+           xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
                }
                if(!already_rendered) {
-                   xmlListInsert(list, ns); 
+                   xmlListInsert(list, ns);
                }
-               if(xmlStrlen(ns->prefix) == 0) {
+               if(xmlStrlen(ns->prefix) == 0) {
                    has_empty_ns = 1;
                }
            }
        }
     }
-       
+
     /**
-     * if the first node is not the default namespace node (a node with no 
-     * namespace URI and no local name), then generate a space followed by 
+     * if the first node is not the default namespace node (a node with no
+     * namespace URI and no local name), then generate a space followed by
      * xmlns="" if and only if the following conditions are met:
      *  - the element E that owns the axis is in the node-set
-     *  - the nearest ancestor element of E in the node-set has a default 
-     *     namespace node in the node-set (default namespace nodes always 
+     *  - the nearest ancestor element of E in the node-set has a default
+     *     namespace node in the node-set (default namespace nodes always
      *     have non-empty values in XPath)
      */
     if(visible && !has_empty_ns) {
@@ -652,17 +655,17 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
 
         memset(&ns_default, 0, sizeof(ns_default));
         if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
-           xmlC14NPrintNamespaces(&ns_default, ctx);
+           xmlC14NPrintNamespaces(&ns_default, ctx);
        }
     }
-       
-    
-    /* 
-     * print out all elements from list 
+
+
+    /*
+     * print out all elements from list
      */
     xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
 
-    /* 
+    /*
      * Cleanup
      */
     xmlListDelete(list);
@@ -672,28 +675,28 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
 
 /**
  * xmlExcC14NProcessNamespacesAxis:
- * @ctx:               the C14N context
+ * @ctx:               the C14N context
  * @node:              the current node
  *
  * Prints out exclusive canonical namespace axis of the current node to the
- * buffer from C14N context as follows 
+ * buffer from C14N context as follows
  *
  * Exclusive XML Canonicalization
  * http://www.w3.org/TR/xml-exc-c14n
  *
- * If the element node is in the XPath subset then output the node in 
- * accordance with Canonical XML except for namespace nodes which are 
+ * If the element node is in the XPath subset then output the node in
+ * accordance with Canonical XML except for namespace nodes which are
  * rendered as follows:
  *
  * 1. Render each namespace node iff:
- *    * it is visibly utilized by the immediate parent element or one of 
+ *    * it is visibly utilized by the immediate parent element or one of
  *      its attributes, or is present in InclusiveNamespaces PrefixList, and
- *    * its prefix and value do not appear in ns_rendered. ns_rendered is 
- *      obtained by popping the state stack in order to obtain a list of 
- *      prefixes and their values which have already been rendered by 
+ *    * its prefix and value do not appear in ns_rendered. ns_rendered is
+ *      obtained by popping the state stack in order to obtain a list of
+ *      prefixes and their values which have already been rendered by
  *      an output ancestor of the namespace node's parent element.
- * 2. Append the rendered namespace node to the list ns_rendered of namespace 
- * nodes rendered by output ancestors. Push ns_rendered on state stack and 
+ * 2. Append the rendered namespace node to the list ns_rendered of namespace
+ * nodes rendered by output ancestors. Push ns_rendered on state stack and
  * recurse.
  * 3. After the recursion returns, pop thestate stack.
  *
@@ -710,7 +713,7 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     int has_empty_ns = 0;
     int has_visibly_utilized_empty_ns = 0;
     int has_empty_ns_in_inclusive_list = 0;
-        
+
     if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
         xmlC14NErrParam("processing namespaces axis (exc c14n)");
         return (-1);
@@ -731,15 +734,15 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
         return (-1);
     }
 
-    /* 
+    /*
      * process inclusive namespaces:
-     * All namespace nodes appearing on inclusive ns list are 
+     * All namespace nodes appearing on inclusive ns list are
      * handled as provided in Canonical XML
      */
     if(ctx->inclusive_ns_prefixes != NULL) {
-       xmlChar *prefix; 
+       xmlChar *prefix;
        int i;
-       
+
        for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
            prefix = ctx->inclusive_ns_prefixes[i];
            /*
@@ -750,23 +753,23 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
                 prefix = NULL;
                has_empty_ns_in_inclusive_list = 1;
             }
-       
-           ns = xmlSearchNs(cur->doc, cur, prefix);        
+
+           ns = xmlSearchNs(cur->doc, cur, prefix);
            if((ns != NULL) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
                already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
                if(visible) {
-                   xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
+                   xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
                }
                if(!already_rendered) {
-                   xmlListInsert(list, ns); 
+                   xmlListInsert(list, ns);
                }
-               if(xmlStrlen(ns->prefix) == 0) {
+               if(xmlStrlen(ns->prefix) == 0) {
                    has_empty_ns = 1;
                }
            }
        }
     }
-    
+
     /* add node namespace */
     if(cur->ns != NULL) {
        ns = cur->ns;
@@ -775,32 +778,32 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
        has_visibly_utilized_empty_ns = 1;
     }
     if((ns != NULL) && !xmlC14NIsXmlNs(ns)) {
-       if(visible && xmlC14NIsVisible(ctx, ns, cur)) { 
+       if(visible && xmlC14NIsVisible(ctx, ns, cur)) {
            if(!xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, ns, ctx)) {
                xmlListInsert(list, ns);
            }
        }
        if(visible) {
-           xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); 
+           xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
        }
        if(xmlStrlen(ns->prefix) == 0) {
            has_empty_ns = 1;
        }
     }
-    
-        
+
+
     /* add attributes */
     for(attr = cur->properties; attr != NULL; attr = attr->next) {
-        /* 
+        /*
          * we need to check that attribute is visible and has non
-         * default namespace (XML Namespaces: "default namespaces 
-        * do not apply directly to attributes")         
+         * default namespace (XML Namespaces: "default namespaces
+        * do not apply directly to attributes")
          */
        if((attr->ns != NULL) && !xmlC14NIsXmlNs(attr->ns) && xmlC14NIsVisible(ctx, attr, cur)) {
            already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, attr->ns, ctx);
-           xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur); 
+           xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur);
            if(!already_rendered && visible) {
-               xmlListInsert(list, attr->ns); 
+               xmlListInsert(list, attr->ns);
            }
            if(xmlStrlen(attr->ns->prefix) == 0) {
                has_empty_ns = 1;
@@ -813,33 +816,33 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     /*
      * Process xmlns=""
      */
-    if(visible && has_visibly_utilized_empty_ns && 
+    if(visible && has_visibly_utilized_empty_ns &&
            !has_empty_ns && !has_empty_ns_in_inclusive_list) {
         static xmlNs ns_default;
 
         memset(&ns_default, 0, sizeof(ns_default));
-       
+
         already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default, ctx);
        if(!already_rendered) {
-           xmlC14NPrintNamespaces(&ns_default, ctx);
+           xmlC14NPrintNamespaces(&ns_default, ctx);
        }
     } else if(visible && !has_empty_ns && has_empty_ns_in_inclusive_list) {
         static xmlNs ns_default;
 
         memset(&ns_default, 0, sizeof(ns_default));
         if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
-           xmlC14NPrintNamespaces(&ns_default, ctx);
+           xmlC14NPrintNamespaces(&ns_default, ctx);
        }
     }
 
-    
 
-    /* 
-     * print out all elements from list 
+
+    /*
+     * print out all elements from list
      */
     xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
 
-    /* 
+    /*
      * Cleanup
      */
     xmlListDelete(list);
@@ -849,8 +852,8 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
 
 /**
  * xmlC14NIsXmlAttr:
- * @attr:              the attr to check
- *             
+ * @attr:              the attr to check
+ *
  * Checks whether the given attribute is a default "xml:" namespace
  * with href="http://www.w3.org/XML/1998/namespace"
  *
@@ -861,7 +864,7 @@ xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
 static int
 xmlC14NIsXmlAttr(xmlAttrPtr attr)
 {
-    return ((attr->ns != NULL) && 
+    return ((attr->ns != NULL) &&
            (xmlC14NIsXmlNs(attr->ns) != 0));
 }
 
@@ -869,7 +872,7 @@ xmlC14NIsXmlAttr(xmlAttrPtr attr)
 /**
  * xmlC14NAttrsCompare:
  * @attr1:             the pointer tls o first attr
- * @attr2:             the pointer to second attr
+ * @attr2:             the pointer to second attr
  *
  * Prints the given attribute to the output buffer from C14N context.
  *
@@ -893,7 +896,7 @@ xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
         return (xmlStrcmp(attr1->name, attr2->name));
     }
 
-    /* 
+    /*
      * Attributes in the default namespace are first
      * because the default namespace is not applied to
      * unqualified attributes
@@ -918,10 +921,10 @@ xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
 /**
  * xmlC14NPrintAttrs:
  * @attr:              the pointer to attr
- * @ctx:               the C14N context
+ * @ctx:               the C14N context
  *
  * Prints out canonical attribute urrent node to the
- * buffer from C14N context as follows 
+ * buffer from C14N context as follows
  *
  * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
  *
@@ -968,7 +971,7 @@ xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx)
  * xmlC14NFindHiddenParentAttr:
  *
  * Finds an attribute in a hidden parent node.
- * 
+ *
  * Returns a pointer to the attribute node (if found) or NULL otherwise.
  */
 static xmlAttrPtr
@@ -996,7 +999,7 @@ xmlC14NFindHiddenParentAttr(xmlC14NCtxPtr ctx, xmlNodePtr cur, const xmlChar * n
  */
 static xmlAttrPtr
 xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
-{    
+{
     xmlChar * res = NULL;
     xmlNodePtr cur;
     xmlAttrPtr attr;
@@ -1028,9 +1031,9 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
 
                 xmlC14NErrInternal("processing xml:base attribute - can't get attr value");
                 return (NULL);
-            } 
+            }
 
-            /* we need to add '/' if our current base uri ends with '..' or '.' 
+            /* we need to add '/' if our current base uri ends with '..' or '.'
             to ensure that we are forced to go "up" all the time */
             tmp_str_len = xmlStrlen(tmp_str);
             if(tmp_str_len > 1 && tmp_str[tmp_str_len - 2] == '.') {
@@ -1047,7 +1050,7 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
             }
 
             /* build uri */
-            tmp_str2 = xmlBuildURI(res, tmp_str); 
+            tmp_str2 = xmlBuildURI(res, tmp_str);
             if(tmp_str2 == NULL) {
                 xmlFree(tmp_str);
                 xmlFree(res);
@@ -1080,7 +1083,7 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
         xmlC14NErrInternal("processing xml:base attribute - can't construct attribute");
         return (NULL);
     }
+
     /* done */
     xmlFree(res);
     return (attr);
@@ -1088,33 +1091,33 @@ xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
 
 /**
  * xmlC14NProcessAttrsAxis:
- * @ctx:               the C14N context
+ * @ctx:               the C14N context
  * @cur:               the current node
  * @parent_visible:    the visibility of parent node
  * @all_parents_visible: the visibility of all parent nodes
  *
  * Prints out canonical attribute axis of the current node to the
- * buffer from C14N context as follows 
+ * buffer from C14N context as follows
  *
  * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
  *
- * Attribute Axis 
- * In lexicographic order (ascending), process each node that 
+ * Attribute Axis
+ * In lexicographic order (ascending), process each node that
  * is in the element's attribute axis and in the node-set.
- * 
- * The processing of an element node E MUST be modified slightly 
- * when an XPath node-set is given as input and the element's 
+ *
+ * The processing of an element node E MUST be modified slightly
+ * when an XPath node-set is given as input and the element's
  * parent is omitted from the node-set.
  *
  *
  * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
  *
- * Canonical XML applied to a document subset requires the search of the 
- * ancestor nodes of each orphan element node for attributes in the xml 
- * namespace, such as xml:lang and xml:space. These are copied into the 
- * element node except if a declaration of the same attribute is already 
- * in the attribute axis of the element (whether or not it is included in 
- * the document subset). This search and copying are omitted from the 
+ * Canonical XML applied to a document subset requires the search of the
+ * ancestor nodes of each orphan element node for attributes in the xml
+ * namespace, such as xml:lang and xml:space. These are copied into the
+ * element node except if a declaration of the same attribute is already
+ * in the attribute axis of the element (whether or not it is included in
+ * the document subset). This search and copying are omitted from the
  * Exclusive XML Canonicalization method.
  *
  * Returns 0 on success or -1 on fail.
@@ -1123,9 +1126,9 @@ static int
 xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
 {
     xmlAttrPtr attr;
-    xmlListPtr list;    
+    xmlListPtr list;
     xmlAttrPtr attrs_to_delete = NULL;
-    
+
     /* special processing for 1.1 spec */
     xmlAttrPtr xml_base_attr = NULL;
     xmlAttrPtr xml_lang_attr = NULL;
@@ -1147,19 +1150,19 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
 
     switch(ctx->mode) {
     case XML_C14N_1_0:
-        /* The processing of an element node E MUST be modified slightly when an XPath node-set is 
-         * given as input and the element's parent is omitted from the node-set. The method for processing 
-         * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's 
-         * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such 
-         * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes, 
-         * remove any that are in E's attribute axis (whether or not they are in the node-set). Then, 
-         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in 
-         * the node-set. The result of visiting the attribute axis is computed by processing the attribute 
-         * nodes in this merged attribute list. 
+        /* The processing of an element node E MUST be modified slightly when an XPath node-set is
+         * given as input and the element's parent is omitted from the node-set. The method for processing
+         * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's
+         * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such
+         * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes,
+         * remove any that are in E's attribute axis (whether or not they are in the node-set). Then,
+         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
+         * the node-set. The result of visiting the attribute axis is computed by processing the attribute
+         * nodes in this merged attribute list.
          */
-    
-        /* 
-         * Add all visible attributes from current node. 
+
+        /*
+         * Add all visible attributes from current node.
          */
         attr = cur->properties;
         while (attr != NULL) {
@@ -1170,16 +1173,16 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
             attr = attr->next;
         }
 
-        /* 
+        /*
          * Handle xml attributes
          */
-        if (parent_visible && (cur->parent != NULL) && 
-            (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent))) 
+        if (parent_visible && (cur->parent != NULL) &&
+            (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent)))
         {
             xmlNodePtr tmp;
 
             /*
-             * If XPath node-set is not specified then the parent is always 
+             * If XPath node-set is not specified then the parent is always
              * visible!
              */
             tmp = cur->parent;
@@ -1200,12 +1203,12 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
         /* done */
         break;
     case XML_C14N_EXCLUSIVE_1_0:
-        /* attributes in the XML namespace, such as xml:lang and xml:space 
-         * are not imported into orphan nodes of the document subset 
+        /* attributes in the XML namespace, such as xml:lang and xml:space
+         * are not imported into orphan nodes of the document subset
          */
 
-        /* 
-         * Add all visible attributes from current node. 
+        /*
+         * Add all visible attributes from current node.
          */
         attr = cur->properties;
         while (attr != NULL) {
@@ -1219,36 +1222,36 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
         /* do nothing special for xml attributes */
         break;
     case XML_C14N_1_1:
-        /* The processing of an element node E MUST be modified slightly when an XPath node-set is 
-         * given as input and some of the element's ancestors are omitted from the node-set. 
+        /* The processing of an element node E MUST be modified slightly when an XPath node-set is
+         * given as input and some of the element's ancestors are omitted from the node-set.
          *
-         * Simple inheritable attributes are attributes that have a value that requires at most a simple 
-         * redeclaration. This redeclaration is done by supplying a new value in the child axis. The 
-         * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done 
-         * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes 
+         * Simple inheritable attributes are attributes that have a value that requires at most a simple
+         * redeclaration. This redeclaration is done by supplying a new value in the child axis. The
+         * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done
+         * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes
          * are xml:lang and xml:space.
-         * 
-         * The method for processing the attribute axis of an element E in the node-set is hence enhanced. 
-         * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple 
-         * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they 
-         * are in the node-set). From this list of attributes, any simple inheritable attributes that are 
-         * already in E's attribute axis (whether or not they are in the node-set) are removed. Then, 
-         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in 
-         * the node-set. The result of visiting the attribute axis is computed by processing the attribute 
+         *
+         * The method for processing the attribute axis of an element E in the node-set is hence enhanced.
+         * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple
+         * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they
+         * are in the node-set). From this list of attributes, any simple inheritable attributes that are
+         * already in E's attribute axis (whether or not they are in the node-set) are removed. Then,
+         * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
+         * the node-set. The result of visiting the attribute axis is computed by processing the attribute
          * nodes in this merged attribute list.
-         * 
-         * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is 
+         *
+         * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is
          * performed.
-         * 
-         * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond 
+         *
+         * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond
          * a simple redeclaration.
-         * 
-         * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed 
+         *
+         * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed
          * as ordinary attributes.
          */
 
-        /* 
-         * Add all visible attributes from current node. 
+        /*
+         * Add all visible attributes from current node.
          */
         attr = cur->properties;
         while (attr != NULL) {
@@ -1265,7 +1268,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
                 if((!matched) && (xml_lang_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "lang")) {
                     xml_lang_attr = attr;
                     matched = 1;
-                } 
+                }
                 if((!matched) && (xml_space_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "space")) {
                     xml_space_attr = attr;
                     matched = 1;
@@ -1282,11 +1285,11 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
                     xmlListInsert(list, attr);
                 }
             }
-         
+
             /* move to the next one */
             attr = attr->next;
         }
-            
+
         /* special processing for XML attribute kiks in only when we have invisible parents */
         if ((parent_visible)) {
 
@@ -1311,7 +1314,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
             }
             if(xml_base_attr != NULL) {
                 xml_base_attr = xmlC14NFixupBaseAttr(ctx, xml_base_attr);
-                if(xml_base_attr != NULL) {                    
+                if(xml_base_attr != NULL) {
                     xmlListInsert(list, xml_base_attr);
 
                     /* note that we MUST delete returned attr node ourselves! */
@@ -1325,12 +1328,12 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
         break;
     }
 
-    /* 
-     * print out all elements from list 
+    /*
+     * print out all elements from list
      */
     xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs, (const void *) ctx);
 
-    /* 
+    /*
      * Cleanup
      */
     xmlFreePropList(attrs_to_delete);
@@ -1338,7 +1341,7 @@ xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
     return (0);
 }
 
-/** 
+/**
  * xmlC14NCheckForRelativeNamespaces:
  * @ctx:               the C14N context
  * @cur:               the current element node
@@ -1388,23 +1391,23 @@ xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur)
 
 /**
  * xmlC14NProcessElementNode:
- * @ctx:               the pointer to C14N context object
+ * @ctx:               the pointer to C14N context object
  * @cur:               the node to process
  * @visible:    this node is visible
  * @all_parents_visible: whether all the parents of this node are visible
- *             
+ *
  * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
  *
  * Element Nodes
- * If the element is not in the node-set, then the result is obtained 
- * by processing the namespace axis, then the attribute axis, then 
- * processing the child nodes of the element that are in the node-set 
- * (in document order). If the element is in the node-set, then the result 
- * is an open angle bracket (<), the element QName, the result of 
- * processing the namespace axis, the result of processing the attribute 
- * axis, a close angle bracket (>), the result of processing the child 
- * nodes of the element that are in the node-set (in document order), an 
- * open angle bracket, a forward slash (/), the element QName, and a close 
+ * If the element is not in the node-set, then the result is obtained
+ * by processing the namespace axis, then the attribute axis, then
+ * processing the child nodes of the element that are in the node-set
+ * (in document order). If the element is in the node-set, then the result
+ * is an open angle bracket (<), the element QName, the result of
+ * processing the namespace axis, the result of processing the attribute
+ * axis, a close angle bracket (>), the result of processing the child
+ * nodes of the element that are in the node-set (in document order), an
+ * open angle bracket, a forward slash (/), the element QName, and a close
  * angle bracket.
  *
  * Returns non-negative value on success or negative value on fail
@@ -1421,7 +1424,7 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
         return (-1);
     }
 
-    /* 
+    /*
      * Check relative relative namespaces:
      * implementations of XML canonicalization MUST report an operation
      * failure on documents containing relative namespace URIs.
@@ -1432,13 +1435,13 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     }
 
 
-    /* 
+    /*
      * Save ns_rendered stack position
      */
     memset(&state, 0, sizeof(state));
     xmlC14NVisibleNsStackSave(ctx->ns_rendered, &state);
 
-    if (visible) {     
+    if (visible) {
         if (ctx->parent_is_doc) {
            /* save this flag into the stack */
            parent_is_doc = ctx->parent_is_doc;
@@ -1468,14 +1471,14 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
     if(visible) {
        xmlC14NVisibleNsStackShift(ctx->ns_rendered);
     }
-    
+
     ret = xmlC14NProcessAttrsAxis(ctx, cur, visible);
     if (ret < 0) {
        xmlC14NErrInternal("processing attributes axis");
-       return (-1);
+       return (-1);
     }
 
-    if (visible) { 
+    if (visible) {
         xmlOutputBufferWriteString(ctx->buf, ">");
     }
     if (cur->children != NULL) {
@@ -1501,7 +1504,7 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
         }
     }
 
-    /* 
+    /*
      * Restore ns_rendered stack position
      */
     xmlC14NVisibleNsStackRestore(ctx->ns_rendered, &state);
@@ -1510,9 +1513,9 @@ xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
 
 /**
  * xmlC14NProcessNode:
- * @ctx:               the pointer to C14N context object
+ * @ctx:               the pointer to C14N context object
  * @cur:               the node to process
- *             
+ *
  * Processes the given node
  *
  * Returns non-negative value on success or negative value on fail
@@ -1537,9 +1540,9 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
         case XML_TEXT_NODE:
             /*
              * Text Nodes
-             * the string value, except all ampersands are replaced 
-             * by &amp;, all open angle brackets (<) are replaced by &lt;, all closing 
-             * angle brackets (>) are replaced by &gt;, and all #xD characters are 
+             * the string value, except all ampersands are replaced
+             * by &amp;, all open angle brackets (<) are replaced by &lt;, all closing
+             * angle brackets (>) are replaced by &gt;, and all #xD characters are
              * replaced by &#xD;.
              */
             /* cdata sections are processed as text nodes */
@@ -1559,16 +1562,16 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
             }
             break;
         case XML_PI_NODE:
-            /* 
-             * Processing Instruction (PI) Nodes- 
-             * The opening PI symbol (<?), the PI target name of the node, 
-             * a leading space and the string value if it is not empty, and 
-             * the closing PI symbol (?>). If the string value is empty, 
-             * then the leading space is not added. Also, a trailing #xA is 
-             * rendered after the closing PI symbol for PI children of the 
-             * root node with a lesser document order than the document 
-             * element, and a leading #xA is rendered before the opening PI 
-             * symbol of PI children of the root node with a greater document 
+            /*
+             * Processing Instruction (PI) Nodes-
+             * The opening PI symbol (<?), the PI target name of the node,
+             * a leading space and the string value if it is not empty, and
+             * the closing PI symbol (?>). If the string value is empty,
+             * then the leading space is not added. Also, a trailing #xA is
+             * rendered after the closing PI symbol for PI children of the
+             * root node with a lesser document order than the document
+             * element, and a leading #xA is rendered before the opening PI
+             * symbol of PI children of the root node with a greater document
              * order than the document element.
              */
             if (visible) {
@@ -1607,17 +1610,17 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
         case XML_COMMENT_NODE:
             /*
              * Comment Nodes
-             * Nothing if generating canonical XML without  comments. For 
-             * canonical XML with comments, generate the opening comment 
-             * symbol (<!--), the string value of the node, and the 
-             * closing comment symbol (-->). Also, a trailing #xA is rendered 
-             * after the closing comment symbol for comment children of the 
-             * root node with a lesser document order than the document 
-             * element, and a leading #xA is rendered before the opening 
-             * comment symbol of comment children of the root node with a 
-             * greater document order than the document element. (Comment 
-             * children of the root node represent comments outside of the 
-             * top-level document element and outside of the document type 
+             * Nothing if generating canonical XML without  comments. For
+             * canonical XML with comments, generate the opening comment
+             * symbol (<!--), the string value of the node, and the
+             * closing comment symbol (-->). Also, a trailing #xA is rendered
+             * after the closing comment symbol for comment children of the
+             * root node with a lesser document order than the document
+             * element, and a leading #xA is rendered before the opening
+             * comment symbol of comment children of the root node with a
+             * greater document order than the document element. (Comment
+             * children of the root node represent comments outside of the
+             * top-level document element and outside of the document type
              * declaration).
              */
             if (visible && ctx->with_comments) {
@@ -1687,8 +1690,8 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
         case XML_XINCLUDE_START:
         case XML_XINCLUDE_END:
 #endif
-            /* 
-             * should be ignored according to "W3C Canonical XML" 
+            /*
+             * should be ignored according to "W3C Canonical XML"
              */
             break;
         default:
@@ -1701,9 +1704,9 @@ xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
 
 /**
  * xmlC14NProcessNodeList:
- * @ctx:               the pointer to C14N context object
+ * @ctx:               the pointer to C14N context object
  * @cur:               the node to start from
- *             
+ *
  * Processes all nodes in the row starting from cur.
  *
  * Returns non-negative value on success or negative value on fail
@@ -1728,7 +1731,7 @@ xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur)
 /**
  * xmlC14NFreeCtx:
  * @ctx: the pointer to C14N context object
- *             
+ *
  * Cleanups the C14N context object.
  */
 
@@ -1748,27 +1751,27 @@ xmlC14NFreeCtx(xmlC14NCtxPtr ctx)
 
 /**
  * xmlC14NNewCtx:
- * @doc:               the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible 
+ * @doc:               the XML document for canonization
+ * @is_visible_callback:the function to use to determine is node visible
  *                     or not
- * @user_data:                 the first parameter for @is_visible_callback function
+ * @user_data:         the first parameter for @is_visible_callback function
  *                     (in most cases, it is nodes set)
  * @mode:   the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixe the list of inclusive namespace prefixes 
+ * @inclusive_ns_prefixe the list of inclusive namespace prefixes
  *                     ended with a NULL or NULL if there is no
- *                     inclusive namespaces (only for ` 
+ *                     inclusive namespaces (only for `
  *                     canonicalization)
- * @with_comments:     include comments in the result (!=0) or not (==0)
- * @buf:               the output buffer to store canonical XML; this 
+ * @with_comments:     include comments in the result (!=0) or not (==0)
+ * @buf:               the output buffer to store canonical XML; this
  *                     buffer MUST have encoder==NULL because C14N requires
  *                     UTF-8 output
- *             
+ *
  * Creates new C14N context object to store C14N parameters.
  *
  * Returns pointer to newly created object (success) or NULL (fail)
  */
 static xmlC14NCtxPtr
-xmlC14NNewCtx(xmlDocPtr doc,  
+xmlC14NNewCtx(xmlDocPtr doc,
              xmlC14NIsVisibleCallback is_visible_callback, void* user_data,
               xmlC14NMode mode, xmlChar ** inclusive_ns_prefixes,
               int with_comments, xmlOutputBufferPtr buf)
@@ -1840,28 +1843,28 @@ xmlC14NNewCtx(xmlDocPtr doc,
 
 /**
  * xmlC14NExecute:
- * @doc:               the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible 
+ * @doc:               the XML document for canonization
+ * @is_visible_callback:the function to use to determine is node visible
  *                     or not
- * @user_data:                 the first parameter for @is_visible_callback function
+ * @user_data:         the first parameter for @is_visible_callback function
  *                     (in most cases, it is nodes set)
  * @mode:      the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes 
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
  *                     ended with a NULL or NULL if there is no
- *                     inclusive namespaces (only for exclusive 
+ *                     inclusive namespaces (only for exclusive
  *                     canonicalization, ignored otherwise)
- * @with_comments:     include comments in the result (!=0) or not (==0)
- * @buf:               the output buffer to store canonical XML; this 
+ * @with_comments:     include comments in the result (!=0) or not (==0)
+ * @buf:               the output buffer to store canonical XML; this
  *                     buffer MUST have encoder==NULL because C14N requires
  *                     UTF-8 output
- *             
+ *
  * Dumps the canonized image of given XML document into the provided buffer.
  * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
  * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
  *
- * Returns non-negative value on success or a negative value on fail  
+ * Returns non-negative value on success or a negative value on fail
  */
-int            
+int
 xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
         void* user_data, int mode, xmlChar **inclusive_ns_prefixes,
         int with_comments, xmlOutputBufferPtr buf) {
@@ -1875,15 +1878,15 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
         return (-1);
     }
 
-    /* for backward compatibility, we have to have "mode" as "int" 
+    /* for backward compatibility, we have to have "mode" as "int"
        and here we check that user gives valid value */
     switch(mode) {
     case XML_C14N_1_0:
     case XML_C14N_EXCLUSIVE_1_0:
-    case XML_C14N_1_1: 
+    case XML_C14N_1_1:
          c14n_mode = (xmlC14NMode)mode;
          break;
-    default:       
+    default:
         xmlC14NErrParam("invalid mode for executing c14n");
         return (-1);
     }
@@ -1897,7 +1900,7 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
         return (-1);
     }
 
-    ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data, 
+    ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data,
                    c14n_mode, inclusive_ns_prefixes,
                     with_comments, buf);
     if (ctx == NULL) {
@@ -1908,12 +1911,12 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
 
 
 
-    /*  
+    /*
      * Root Node
-     * The root node is the parent of the top-level document element. The 
-     * result of processing each of its child nodes that is in the node-set 
-     * in document order. The root node does not generate a byte order mark, 
-     * XML declaration, nor anything from within the document type 
+     * The root node is the parent of the top-level document element. The
+     * result of processing each of its child nodes that is in the node-set
+     * in document order. The root node does not generate a byte order mark,
+     * XML declaration, nor anything from within the document type
      * declaration.
      */
     if (doc->children != NULL) {
@@ -1935,7 +1938,7 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
         return (-1);
     }
 
-    /* 
+    /*
      * Cleanup
      */
     xmlC14NFreeCtx(ctx);
@@ -1944,30 +1947,30 @@ xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
 
 /**
  * xmlC14NDocSaveTo:
- * @doc:               the XML document for canonization
- * @nodes:             the nodes set to be included in the canonized image
- *                     or NULL if all document nodes should be included
+ * @doc:               the XML document for canonization
+ * @nodes:             the nodes set to be included in the canonized image
+ *             or NULL if all document nodes should be included
  * @mode:              the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes 
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
  *                     ended with a NULL or NULL if there is no
- *                     inclusive namespaces (only for exclusive 
+ *                     inclusive namespaces (only for exclusive
  *                     canonicalization, ignored otherwise)
- * @with_comments:     include comments in the result (!=0) or not (==0)
- * @buf:               the output buffer to store canonical XML; this 
+ * @with_comments:     include comments in the result (!=0) or not (==0)
+ * @buf:               the output buffer to store canonical XML; this
  *                     buffer MUST have encoder==NULL because C14N requires
  *                     UTF-8 output
- *             
+ *
  * Dumps the canonized image of given XML document into the provided buffer.
  * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
  * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
  *
- * Returns non-negative value on success or a negative value on fail  
+ * Returns non-negative value on success or a negative value on fail
  */
 int
 xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
                  int mode, xmlChar ** inclusive_ns_prefixes,
                  int with_comments, xmlOutputBufferPtr buf) {
-    return(xmlC14NExecute(doc, 
+    return(xmlC14NExecute(doc,
                        (xmlC14NIsVisibleCallback)xmlC14NIsNodeInNodeset,
                        nodes,
                        mode,
@@ -1979,24 +1982,24 @@ xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
 
 /**
  * xmlC14NDocDumpMemory:
- * @doc:               the XML document for canonization
- * @nodes:             the nodes set to be included in the canonized image
- *                     or NULL if all document nodes should be included
+ * @doc:               the XML document for canonization
+ * @nodes:             the nodes set to be included in the canonized image
+ *             or NULL if all document nodes should be included
  * @mode:              the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes 
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
  *                     ended with a NULL or NULL if there is no
- *                     inclusive namespaces (only for exclusive 
+ *                     inclusive namespaces (only for exclusive
  *                     canonicalization, ignored otherwise)
- * @with_comments:     include comments in the result (!=0) or not (==0)
- * @doc_txt_ptr:       the memory pointer for allocated canonical XML text;
+ * @with_comments:     include comments in the result (!=0) or not (==0)
+ * @doc_txt_ptr:       the memory pointer for allocated canonical XML text;
  *                     the caller of this functions is responsible for calling
- *                     xmlFree() to free allocated memory 
- *             
+ *                     xmlFree() to free allocated memory
+ *
  * Dumps the canonized image of given XML document into memory.
  * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
  * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
  *
- * Returns the number of bytes written on success or a negative value on fail  
+ * Returns the number of bytes written on success or a negative value on fail
  */
 int
 xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
@@ -2014,7 +2017,7 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
     *doc_txt_ptr = NULL;
 
     /*
-     * create memory buffer with UTF8 (default) encoding 
+     * create memory buffer with UTF8 (default) encoding
      */
     buf = xmlAllocOutputBuffer(NULL);
     if (buf == NULL) {
@@ -2033,9 +2036,9 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
         return (-1);
     }
 
-    ret = buf->buffer->use;
+    ret = xmlBufUse(buf->buffer);
     if (ret > 0) {
-        *doc_txt_ptr = xmlStrndup(buf->buffer->content, ret);
+        *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->buffer), ret);
     }
     (void) xmlOutputBufferClose(buf);
 
@@ -2048,26 +2051,26 @@ xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
 
 /**
  * xmlC14NDocSave:
- * @doc:               the XML document for canonization
- * @nodes:             the nodes set to be included in the canonized image
- *                     or NULL if all document nodes should be included
+ * @doc:               the XML document for canonization
+ * @nodes:             the nodes set to be included in the canonized image
+ *             or NULL if all document nodes should be included
  * @mode:              the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes 
+ * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
  *                     ended with a NULL or NULL if there is no
- *                     inclusive namespaces (only for exclusive 
+ *                     inclusive namespaces (only for exclusive
  *                     canonicalization, ignored otherwise)
- * @with_comments:     include comments in the result (!=0) or not (==0)
- * @filename:          the filename to store canonical XML image
- * @compression:       the compression level (zlib requred): 
+ * @with_comments:     include comments in the result (!=0) or not (==0)
+ * @filename:          the filename to store canonical XML image
+ * @compression:       the compression level (zlib requred):
  *                             -1 - libxml default,
- *                              0 - uncompressed, 
+ *                              0 - uncompressed,
  *                             >0 - compression level
- *             
+ *
  * Dumps the canonized image of given XML document into the file.
  * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
  * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
  *
- * Returns the number of bytes written success or a negative value on fail  
+ * Returns the number of bytes written success or a negative value on fail
  */
 int
 xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
@@ -2086,7 +2089,7 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
         compression = xmlGetCompressMode();
 #endif
 
-    /* 
+    /*
      * save the content to a temp buffer, use default UTF8 encoding.
      */
     buf = xmlOutputBufferCreateFilename(filename, NULL, compression);
@@ -2106,8 +2109,8 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
         return (-1);
     }
 
-    /* 
-     * get the numbers of bytes written 
+    /*
+     * get the numbers of bytes written
      */
     ret = xmlOutputBufferClose(buf);
     return (ret);
@@ -2121,14 +2124,14 @@ xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
 #define growBufferReentrant() {                                                \
     buffer_size *= 2;                                                  \
     buffer = (xmlChar *)                                               \
-               xmlRealloc(buffer, buffer_size * sizeof(xmlChar));      \
+               xmlRealloc(buffer, buffer_size * sizeof(xmlChar));      \
     if (buffer == NULL) {                                              \
        xmlC14NErrMemory("growing buffer");                             \
        return(NULL);                                                   \
     }                                                                  \
 }
 
-/** 
+/**
  * xmlC11NNormalizeString:
  * @input:             the input string
  * @mode:              the normalization mode (attribute, comment, PI or text)
index fb586c1..5773db3 100644 (file)
--- a/catalog.c
+++ b/catalog.c
@@ -1,5 +1,5 @@
 /**
- * catalog.c: set of generic Catalog related routines 
+ * catalog.c: set of generic Catalog related routines
  *
  * Reference:  SGML Open Technical Resolution TR9401:1997.
  *             http://www.jclark.com/sp/catalog.htm
@@ -41,6 +41,8 @@
 #include <libxml/threads.h>
 #include <libxml/globals.h>
 
+#include "buf.h"
+
 #define MAX_DELEGATE   50
 #define MAX_CATAL_DEPTH        50
 
@@ -60,7 +62,7 @@
  *> values "system" and "public".  I have made the default be "system" to
  *> match yours.
  */
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -82,10 +84,12 @@ static char XML_XML_DEFAULT_CATALOG[256] = "file:///etc/xml/catalog";
 #define GetModuleHandleA GetModuleHandle
 #define GetModuleFileNameA GetModuleFileName
 #else
+#if !defined(_WINDOWS_)
 void* __stdcall GetModuleHandleA(const char*);
 unsigned long __stdcall GetModuleFileNameA(void*, char*, unsigned long);
 #endif
 #endif
+#endif
 
 static xmlChar *xmlCatalogNormalizePublic(const xmlChar *pubID);
 static int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename);
@@ -206,7 +210,7 @@ static int xmlCatalogInitialized = 0;
 
 /************************************************************************
  *                                                                     *
- *                     Catalog error handlers                          *
+ *                     Catalog error handlers                          *
  *                                                                     *
  ************************************************************************/
 
@@ -259,9 +263,9 @@ xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
  * @name:  name of the entry
  * @value:  value of the entry
  * @prefer:  the PUBLIC vs. SYSTEM current preference value
- * @group:  for members of a group, the group entry 
+ * @group:  for members of a group, the group entry
  *
- * create a new Catalog entry, this type is shared both by XML and 
+ * create a new Catalog entry, this type is shared both by XML and
  * SGML catalogs, but the acceptable types values differs.
  *
  * Returns the xmlCatalogEntryPtr or NULL in case of error
@@ -399,7 +403,7 @@ xmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) {
  * @type:  type of catalog
  * @prefer:  the PUBLIC vs. SYSTEM current preference value
  *
- * create a new Catalog, this type is shared both by XML and 
+ * create a new Catalog, this type is shared both by XML and
  * SGML catalogs, but the acceptable types values differs.
  *
  * Returns the xmlCatalogPtr or NULL in case of error
@@ -567,7 +571,7 @@ static void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog,
                        xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE);
                        if (xns != NULL)
                            xmlSetNsProp(node, xns, BAD_CAST "base",
-                                        cur->value);
+                                        cur->value);
                    }
                    switch (cur->prefer) {
                        case XML_CATA_PREFER_NONE:
@@ -685,7 +689,7 @@ BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
     xmlAddChild((xmlNodePtr) doc, catalog);
 
     xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL);
-    
+
     /*
      * reserialize it
      */
@@ -822,7 +826,7 @@ xmlCatalogUnWrapURN(const xmlChar *urn) {
     if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1))
        return(NULL);
     urn += sizeof(XML_URN_PUBID) - 1;
-    
+
     while (*urn != 0) {
        if (i > sizeof(result) - 4)
            break;
@@ -912,10 +916,7 @@ xmlParseCatalogFile(const char *filename) {
 
     inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
     inputStream->buf = buf;
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end = 
-       &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+    xmlBufResetInput(buf->buffer, inputStream);
 
     inputPush(ctxt, inputStream);
     if ((ctxt->directory == NULL) && (directory == NULL))
@@ -938,7 +939,7 @@ xmlParseCatalogFile(const char *filename) {
         ctxt->myDoc = NULL;
     }
     xmlFreeParserCtxt(ctxt);
-    
+
     return(ret);
 }
 
@@ -990,9 +991,14 @@ xmlLoadFileContent(const char *filename)
         return (NULL);
     }
 #endif
-    content = xmlMallocAtomic(size + 10);
+    content = (xmlChar*)xmlMallocAtomic(size + 10);
     if (content == NULL) {
         xmlCatalogErrMemory("allocating catalog data");
+#ifdef HAVE_STAT
+       close(fd);
+#else
+       fclose(fd);
+#endif
         return (NULL);
     }
 #ifdef HAVE_STAT
@@ -1328,7 +1334,7 @@ xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
  *
  * Parses the catalog file to extract the XML tree and then analyze the
  * tree to build a list of Catalog entries corresponding to this catalog
- * 
+ *
  * Returns the resulting Catalog entries list
  */
 static xmlCatalogEntryPtr
@@ -1396,14 +1402,14 @@ xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
  * @catal:  an existing but incomplete catalog entry
  *
  * Fetch and parse the subcatalog referenced by an entry
- * 
+ *
  * Returns 0 in case of success, -1 otherwise
  */
 static int
 xmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) {
     xmlCatalogEntryPtr doc;
 
-    if (catal == NULL) 
+    if (catal == NULL)
        return(-1);
     if (catal->URL == NULL)
        return(-1);
@@ -1495,7 +1501,7 @@ xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
     xmlCatalogEntryType typ;
     int doregister = 0;
 
-    if ((catal == NULL) || 
+    if ((catal == NULL) ||
        ((catal->type != XML_CATA_CATALOG) &&
         (catal->type != XML_CATA_BROKEN_CATALOG)))
        return(-1);
@@ -1548,7 +1554,7 @@ xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
                                       NULL, catal->prefer, NULL);
     if (doregister) {
         catal->type = XML_CATA_CATALOG;
-       cur = xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
+       cur = (xmlCatalogEntryPtr)xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
        if (cur != NULL)
            cur->children = catal->children;
     }
@@ -1571,7 +1577,7 @@ xmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) {
     xmlCatalogEntryPtr cur;
     int ret = 0;
 
-    if ((catal == NULL) || 
+    if ((catal == NULL) ||
        ((catal->type != XML_CATA_CATALOG) &&
         (catal->type != XML_CATA_BROKEN_CATALOG)))
        return(-1);
@@ -1786,7 +1792,7 @@ xmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
                    }
                    if (nbList < MAX_DELEGATE)
                        delegates[nbList++] = cur->URL;
-                           
+
                    if (cur->children == NULL) {
                        xmlFetchXMLCatalogFile(cur);
                    }
@@ -1999,7 +2005,7 @@ xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
     xmlChar *ret = NULL;
     xmlChar *urnID = NULL;
     xmlChar *normid;
-    
+
     if (catal == NULL)
         return(NULL);
     if ((pubID == NULL) && (sysID == NULL))
@@ -2008,7 +2014,7 @@ xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
     normid = xmlCatalogNormalizePublic(pubID);
     if (normid != NULL)
         pubID = (*normid != 0 ? normid : NULL);
-    
+
     if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
        urnID = xmlCatalogUnWrapURN(pubID);
        if (xmlDebugCatalogs) {
@@ -2088,7 +2094,7 @@ static xmlChar *
 xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
     xmlChar *ret = NULL;
     xmlChar *urnID = NULL;
-    
+
     if (catal == NULL)
         return(NULL);
     if (URI == NULL)
@@ -2148,7 +2154,7 @@ xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
  */
 static const xmlChar *
 xmlParseSGMLCatalogComment(const xmlChar *cur) {
-    if ((cur[0] != '-') || (cur[1] != '-')) 
+    if ((cur[0] != '-') || (cur[1] != '-'))
        return(cur);
     SKIP(2);
     while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-'))))
@@ -2683,7 +2689,7 @@ xmlLoadACatalog(const char *filename)
 
 
     first = content;
-   
+
     while ((*first != 0) && (*first != '-') && (*first != '<') &&
           (!(((*first >= 'A') && (*first <= 'Z')) ||
              ((*first >= 'a') && (*first <= 'z')))))
@@ -2778,7 +2784,7 @@ xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) {
 
     if ((sysID == NULL) || (catal == NULL))
        return(NULL);
-    
+
     if (xmlDebugCatalogs)
        xmlGenericError(xmlGenericErrorContext,
                "Resolve sysID %s\n", sysID);
@@ -2813,7 +2819,7 @@ xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) {
 
     if ((pubID == NULL) || (catal == NULL))
        return(NULL);
-    
+
     if (xmlDebugCatalogs)
        xmlGenericError(xmlGenericErrorContext,
                "Resolve pubID %s\n", pubID);
@@ -2932,7 +2938,7 @@ xmlACatalogDump(xmlCatalogPtr catal, FILE *out) {
     } else {
        xmlHashScan(catal->sgml,
                    (xmlHashScanner) xmlCatalogDumpEntry, out);
-    } 
+    }
 }
 #endif /* LIBXML_OUTPUT_ENABLED */
 
@@ -2940,7 +2946,7 @@ xmlACatalogDump(xmlCatalogPtr catal, FILE *out) {
  * xmlACatalogAdd:
  * @catal:  a Catalog
  * @type:  the type of record to add to the catalog
- * @orig:  the system, public or prefix to match 
+ * @orig:  the system, public or prefix to match
  * @replace:  the replacement value for the match
  *
  * Add an entry in the catalog, it may overwrite existing but
@@ -2999,7 +3005,7 @@ xmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) {
                (xmlHashDeallocator) xmlFreeCatalogEntry);
        if (res == 0)
            res = 1;
-    } 
+    }
     return(res);
 }
 
@@ -3058,7 +3064,7 @@ xmlCatalogIsEmpty(xmlCatalogPtr catal) {
            return(1);
        if (res < 0)
            return(-1);
-    } 
+    }
     return(0);
 }
 
@@ -3081,7 +3087,7 @@ xmlInitializeCatalogData(void) {
     if (xmlCatalogInitialized != 0)
        return;
 
-    if (getenv("XML_DEBUG_CATALOG")) 
+    if (getenv("XML_DEBUG_CATALOG"))
        xmlDebugCatalogs = 1;
     xmlCatalogMutex = xmlNewRMutex();
 
@@ -3102,7 +3108,7 @@ xmlInitializeCatalog(void) {
     xmlInitializeCatalogData();
     xmlRMutexLock(xmlCatalogMutex);
 
-    if (getenv("XML_DEBUG_CATALOG")) 
+    if (getenv("XML_DEBUG_CATALOG"))
        xmlDebugCatalogs = 1;
 
     if (xmlDefaultCatalog == NULL) {
@@ -3125,12 +3131,12 @@ xmlInitializeCatalog(void) {
                        unsigned long len = GetModuleFileNameA(hmodule, buf, 255);
                        if (len != 0) {
                                char* p = &(buf[len]);
-                               while (*p != '\\' && p > buf) 
+                               while (*p != '\\' && p > buf)
                                        p--;
                                if (p != buf) {
                                        xmlChar* uri;
                                        strncpy(p, "\\..\\etc\\catalog", 255 - (p - buf));
-                                       uri = xmlCanonicPath(buf);
+                                       uri = xmlCanonicPath((const xmlChar*)buf);
                                        if (uri != NULL) {
                                                strncpy(XML_XML_DEFAULT_CATALOG, uri, 255);
                                                xmlFree(uri);
@@ -3144,15 +3150,15 @@ xmlInitializeCatalog(void) {
            catalogs = XML_XML_DEFAULT_CATALOG;
 #endif
 
-       catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, 
+       catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
                xmlCatalogDefaultPrefer);
        if (catal != NULL) {
-           /* the XML_CATALOG_FILES envvar is allowed to contain a 
+           /* the XML_CATALOG_FILES envvar is allowed to contain a
               space-separated list of entries. */
            cur = catalogs;
            nextent = &catal->xml;
            while (*cur != '\0') {
-               while (xmlIsBlank_ch(*cur)) 
+               while (xmlIsBlank_ch(*cur))
                    cur++;
                if (*cur != 0) {
                    paths = cur;
@@ -3245,7 +3251,7 @@ xmlLoadCatalogs(const char *pathss) {
                cur++;
            path = xmlStrndup((const xmlChar *)paths, cur - paths);
 #ifdef _WIN32
-        iLen = strlen(path);
+        iLen = strlen((const char*)path);
         for(i = 0; i < iLen; i++) {
             if(path[i] == '\\') {
                 path[i] = '/';
@@ -3277,7 +3283,7 @@ xmlCatalogCleanup(void) {
        xmlGenericError(xmlGenericErrorContext,
                "Catalogs cleanup\n");
     if (xmlCatalogXMLFiles != NULL)
-       xmlHashFree(xmlCatalogXMLFiles, 
+       xmlHashFree(xmlCatalogXMLFiles,
                    (xmlHashDeallocator)xmlFreeCatalogHashEntryList);
     xmlCatalogXMLFiles = NULL;
     if (xmlDefaultCatalog != NULL)
@@ -3392,7 +3398,7 @@ xmlCatalogDump(FILE *out) {
 /**
  * xmlCatalogAdd:
  * @type:  the type of record to add to the catalog
- * @orig:  the system, public or prefix to match 
+ * @orig:  the system, public or prefix to match
  * @replace:  the replacement value for the match
  *
  * Add an entry in the catalog, it may overwrite existing but
@@ -3423,7 +3429,7 @@ xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace)
 
        xmlRMutexUnlock(xmlCatalogMutex);
        return(0);
-    } 
+    }
 
     res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace);
     xmlRMutexUnlock(xmlCatalogMutex);
@@ -3549,8 +3555,8 @@ xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer) {
                xmlGenericError(xmlGenericErrorContext,
                        "Setting catalog preference to SYSTEM\n");
                break;
-           case XML_CATA_PREFER_NONE:
-               break;
+           default:
+               return(ret);
        }
     }
     xmlCatalogDefaultPrefer = prefer;
@@ -3611,7 +3617,7 @@ xmlCatalogFreeLocal(void *catalogs) {
  *
  * Returns the updated list
  */
-void * 
+void *
 xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
     xmlCatalogEntryPtr catal, add;
 
@@ -3631,7 +3637,7 @@ xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
        return(catalogs);
 
     catal = (xmlCatalogEntryPtr) catalogs;
-    if (catal == NULL) 
+    if (catal == NULL)
        return((void *) add);
 
     while (catal->next != NULL)
@@ -3646,7 +3652,7 @@ xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
  * @pubID:  the public ID string
  * @sysID:  the system ID string
  *
- * Do a complete resolution lookup of an External Identifier using a 
+ * Do a complete resolution lookup of an External Identifier using a
  * document's private catalog list
  *
  * Returns the URI of the resource or NULL if not found, it must be freed
@@ -3691,7 +3697,7 @@ xmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID,
  * @catalogs:  a document's list of catalogs
  * @URI:  the URI
  *
- * Do a complete resolution lookup of an URI using a 
+ * Do a complete resolution lookup of an URI using a
  * document's private catalog list
  *
  * Returns the URI of the resource or NULL if not found, it must be freed
@@ -3752,7 +3758,7 @@ xmlCatalogGetSystem(const xmlChar *sysID) {
 
     if (sysID == NULL)
        return(NULL);
-    
+
     /*
      * Check first the XML catalogs
      */
@@ -3796,7 +3802,7 @@ xmlCatalogGetPublic(const xmlChar *pubID) {
 
     if (pubID == NULL)
        return(NULL);
-    
+
     /*
      * Check first the XML catalogs
      */
old mode 100755 (executable)
new mode 100644 (file)
index 00dd962..06e8db0
--- a/chvalid.c
+++ b/chvalid.c
@@ -46,109 +46,109 @@ const unsigned char xmlIsPubidChar_tab[256] = {
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00 };
 
-static const xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131}, 
-    {0x134, 0x13e}, {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3}, 
-    {0x1cd, 0x1f0}, {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8}, 
-    {0x2bb, 0x2c1}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c}, 
-    {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da}, 
-    {0x3dc, 0x3dc}, {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3}, 
-    {0x401, 0x40c}, {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481}, 
-    {0x490, 0x4c4}, {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb}, 
-    {0x4ee, 0x4f5}, {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559}, 
-    {0x561, 0x586}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, 
-    {0x641, 0x64a}, {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce}, 
-    {0x6d0, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939}, 
-    {0x93d, 0x93d}, {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, 
-    {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, 
-    {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, 
-    {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, 
-    {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, 
-    {0xa72, 0xa74}, {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91}, 
-    {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, 
-    {0xabd, 0xabd}, {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, 
-    {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39}, 
-    {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a}, 
-    {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, 
-    {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, 
-    {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, 
-    {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, 
-    {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, 
-    {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, 
-    {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e}, 
-    {0xe30, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82}, 
-    {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, 
-    {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, 
-    {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0}, 
-    {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47}, 
-    {0xf49, 0xf69}, {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100}, 
-    {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c}, 
-    {0x110e, 0x1112}, {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140}, 
-    {0x114c, 0x114c}, {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155}, 
-    {0x1159, 0x1159}, {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165}, 
-    {0x1167, 0x1167}, {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173}, 
-    {0x1175, 0x1175}, {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab}, 
-    {0x11ae, 0x11af}, {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2}, 
-    {0x11eb, 0x11eb}, {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b}, 
-    {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, 
-    {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, 
-    {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, 
-    {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, 
-    {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, 
-    {0x2126, 0x2126}, {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182}, 
+static const xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131},
+    {0x134, 0x13e}, {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3},
+    {0x1cd, 0x1f0}, {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8},
+    {0x2bb, 0x2c1}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c},
+    {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da},
+    {0x3dc, 0x3dc}, {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3},
+    {0x401, 0x40c}, {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481},
+    {0x490, 0x4c4}, {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb},
+    {0x4ee, 0x4f5}, {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559},
+    {0x561, 0x586}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a},
+    {0x641, 0x64a}, {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce},
+    {0x6d0, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939},
+    {0x93d, 0x93d}, {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990},
+    {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9},
+    {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a},
+    {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33},
+    {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e},
+    {0xa72, 0xa74}, {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91},
+    {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9},
+    {0xabd, 0xabd}, {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10},
+    {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39},
+    {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a},
+    {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c},
+    {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5},
+    {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
+    {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c},
+    {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
+    {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10},
+    {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e},
+    {0xe30, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82},
+    {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d},
+    {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5},
+    {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0},
+    {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47},
+    {0xf49, 0xf69}, {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100},
+    {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c},
+    {0x110e, 0x1112}, {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140},
+    {0x114c, 0x114c}, {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155},
+    {0x1159, 0x1159}, {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165},
+    {0x1167, 0x1167}, {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173},
+    {0x1175, 0x1175}, {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab},
+    {0x11ae, 0x11af}, {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2},
+    {0x11eb, 0x11eb}, {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b},
+    {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45},
+    {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b},
+    {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc},
+    {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3},
+    {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc},
+    {0x2126, 0x2126}, {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182},
     {0x3041, 0x3094}, {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
 const xmlChRangeGroup xmlIsBaseCharGroup =
        {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
 
-static const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff}, 
+static const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff},
     {0xe000, 0xfffd}};
 static const xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
 const xmlChRangeGroup xmlIsCharGroup =
        {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
 
-static const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345}, 
-    {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, 
-    {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, 
-    {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df}, 
-    {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903}, 
-    {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954}, 
-    {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be}, 
-    {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, 
-    {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c}, 
-    {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48}, 
-    {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc}, 
-    {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03}, 
-    {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, 
-    {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, 
-    {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, 
-    {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, 
-    {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, 
-    {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, 
-    {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e}, 
-    {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd}, 
-    {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, 
-    {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b}, 
-    {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7}, 
-    {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f}, 
+static const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
+    {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
+    {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
+    {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
+    {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
+    {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
+    {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
+    {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
+    {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
+    {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
+    {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
+    {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
+    {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
+    {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
+    {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
+    {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
+    {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
+    {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
+    {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
+    {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
+    {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
+    {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
+    {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
+    {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
     {0x3099, 0x3099}, {0x309a, 0x309a}};
 const xmlChRangeGroup xmlIsCombiningGroup =
        {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
 
-static const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669}, 
-    {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, 
-    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, 
-    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, 
+static const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669},
+    {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f},
+    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f},
+    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
     {0xf20, 0xf29}};
 const xmlChRangeGroup xmlIsDigitGroup =
        {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
 
-static const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0}, 
-    {0x2d1, 0x2d1}, {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46}, 
-    {0xec6, 0xec6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e}, 
+static const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0},
+    {0x2d1, 0x2d1}, {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46},
+    {0xec6, 0xec6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e},
     {0x30fc, 0x30fe}};
 const xmlChRangeGroup xmlIsExtenderGroup =
        {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
 
-static const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007}, 
+static const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
     {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
 const xmlChRangeGroup xmlIsIdeographicGroup =
        {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
index dc84c68..b79252d 100755 (executable)
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2013-06-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -17,26 +15,22 @@ timestamp='2009-11-20'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches@gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner.
 #
 # You can get the latest version of this script from:
 # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,8 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -139,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       LIBC=gnu
+
+       eval $set_cc_for_build
+       cat <<-EOF > $dummy.c
+       #include <features.h>
+       #if defined(__UCLIBC__)
+       LIBC=uclibc
+       #elif defined(__dietlibc__)
+       LIBC=dietlibc
+       #else
+       LIBC=gnu
+       #endif
+       EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       ;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
        # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
        # switched to ELF, *-*-netbsd* would select the old
        # object file format.  This provides both forward
@@ -180,7 +194,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                fi
                ;;
            *)
-               os=netbsd
+               os=netbsd
                ;;
        esac
        # The OS release
@@ -201,6 +215,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
        echo "${machine}-${os}${release}"
        exit ;;
+    *:Bitrig:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+       exit ;;
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
@@ -223,7 +241,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
                ;;
        *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
                ;;
        esac
        # According to Compaq, /usr/sbin/psrinfo has been available on
@@ -269,7 +287,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
        echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       exitcode=$?
+       trap '' 0
+       exit $exitcode ;;
     Alpha\ *:Windows_NT*:*)
        # How do we know it's Interix rather than the generic POSIX subsystem?
        # Should we change UNAME_MACHINE based on the output of uname instead
@@ -295,12 +316,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        echo s390-ibm-zvmoe
        exit ;;
     *:OS400:*:*)
-        echo powerpc-ibm-os400
+       echo powerpc-ibm-os400
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
        echo arm-acorn-riscix${UNAME_RELEASE}
        exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
        echo arm-unknown-riscos
        exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -394,23 +415,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
        echo m68k-atari-mint${UNAME_RELEASE}
-        exit ;;
+       exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-        echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint${UNAME_RELEASE}
        exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-        echo m68k-milan-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-milan-mint${UNAME_RELEASE}
+       exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-        echo m68k-hades-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-hades-mint${UNAME_RELEASE}
+       exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-        echo m68k-unknown-mint${UNAME_RELEASE}
-        exit ;;
+       echo m68k-unknown-mint${UNAME_RELEASE}
+       exit ;;
     m68k:machten:*:*)
        echo m68k-apple-machten${UNAME_RELEASE}
        exit ;;
@@ -480,8 +501,8 @@ EOF
        echo m88k-motorola-sysv3
        exit ;;
     AViiON:dgux:*:*)
-        # DG/UX returns AViiON for all architectures
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       # DG/UX returns AViiON for all architectures
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
        if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
        then
            if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -494,7 +515,7 @@ EOF
        else
            echo i586-dg-dgux${UNAME_RELEASE}
        fi
-       exit ;;
+       exit ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
        echo m88k-dolphin-sysv3
        exit ;;
@@ -551,7 +572,7 @@ EOF
                echo rs6000-ibm-aix3.2
        fi
        exit ;;
-    *:AIX:*:[456])
+    *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
@@ -594,52 +615,52 @@ EOF
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case "${sc_cpu_version}" in
+                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     532)                      # CPU_PA_RISC2_0
+                       case "${sc_kernel_bits}" in
+                         32) HP_ARCH="hppa2.0n" ;;
+                         64) HP_ARCH="hppa2.0w" ;;
                          '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
+                       esac ;;
+                   esac
                fi
                if [ "${HP_ARCH}" = "" ]; then
                    eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
+                   sed 's/^            //' << EOF >$dummy.c
 
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
 
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
 
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
+                   switch (cpu)
+                       {
+                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+                       case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+                           switch (bits)
+                               {
+                               case 64: puts ("hppa2.0w"); break;
+                               case 32: puts ("hppa2.0n"); break;
+                               default: puts ("hppa2.0"); break;
+                               } break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+                           puts ("hppa2.0"); break;
+               #endif
+                       default: puts ("hppa1.0"); break;
+                       }
+                   exit (0);
+               }
 EOF
                    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -730,22 +751,22 @@ EOF
        exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
        echo c1-convex-bsd
-        exit ;;
+       exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
        if getsysinfo -f scalar_acc
        then echo c32-convex-bsd
        else echo c2-convex-bsd
        fi
-        exit ;;
+       exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
        echo c34-convex-bsd
-        exit ;;
+       exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
        echo c38-convex-bsd
-        exit ;;
+       exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
        echo c4-convex-bsd
-        exit ;;
+       exit ;;
     CRAY*Y-MP:*:*:*)
        echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
@@ -769,14 +790,14 @@ EOF
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-        exit ;;
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
     5000:UNIX_System_V:4.*:*)
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
        echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -788,30 +809,35 @@ EOF
        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit ;;
     *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case ${UNAME_PROCESSOR} in
            amd64)
                echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
            *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
        esac
        exit ;;
     i*:CYGWIN*:*)
        echo ${UNAME_MACHINE}-pc-cygwin
        exit ;;
+    *:MINGW64*:*)
+       echo ${UNAME_MACHINE}-pc-mingw64
+       exit ;;
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
+    i*:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
     i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
        exit ;;
     i*:PW*:*)
        echo ${UNAME_MACHINE}-pc-pw32
        exit ;;
     *:Interix*:*)
-       case ${UNAME_MACHINE} in
+       case ${UNAME_MACHINE} in
            x86)
                echo i586-pc-interix${UNAME_RELEASE}
                exit ;;
@@ -848,15 +874,22 @@ EOF
        exit ;;
     *:GNU:*:*)
        # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
+    aarch64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     alpha:Linux:*:*)
        case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
          EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -866,52 +899,56 @@ EOF
          EV6)   UNAME_MACHINE=alphaev6 ;;
          EV67)  UNAME_MACHINE=alphaev67 ;;
          EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
+       esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     arm*:Linux:*:*)
        eval $set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo ${UNAME_MACHINE}-unknown-linux-gnu
+           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+           else
+               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+           fi
        fi
        exit ;;
     avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     cris:Linux:*:*)
-       echo cris-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
     crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
     frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     i*86:Linux:*:*)
-       LIBC=gnu
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
        exit ;;
     ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
        eval $set_cc_for_build
@@ -930,51 +967,63 @@ EOF
        #endif
 EOF
        eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
        ;;
+    or1k:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-gnu
+       echo sparc-unknown-linux-${LIBC}
        exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
+       echo hppa64-unknown-linux-${LIBC}
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
+         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+         *)    echo hppa-unknown-linux-${LIBC} ;;
        esac
        exit ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
+       echo powerpc64-unknown-linux-${LIBC}
        exit ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
+       echo powerpc-unknown-linux-${LIBC}
+       exit ;;
+    ppc64le:Linux:*:*)
+       echo powerpc64le-unknown-linux-${LIBC}
+       exit ;;
+    ppcle:Linux:*:*)
+       echo powerpcle-unknown-linux-${LIBC}
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
+       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
+    tile*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-gnu
+       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
        exit ;;
     x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -983,11 +1032,11 @@ EOF
        echo i386-sequent-sysv4
        exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
-        # Unixware is an offshoot of SVR4, but it has its own version
-        # number series starting with 2...
-        # I am not positive that other SVR4 systems won't match this,
+       # Unixware is an offshoot of SVR4, but it has its own version
+       # number series starting with 2...
+       # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
-        # Use sysv4.2uw... so that sysv4* matches it.
+       # Use sysv4.2uw... so that sysv4* matches it.
        echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
        exit ;;
     i*86:OS/2:*:*)
@@ -1019,7 +1068,7 @@ EOF
        fi
        exit ;;
     i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
        case `/bin/uname -X | grep "^Machine"` in
            *486*)           UNAME_MACHINE=i486 ;;
            *Pentium)        UNAME_MACHINE=i586 ;;
@@ -1047,13 +1096,13 @@ EOF
        exit ;;
     pc:*:*:*)
        # Left here for compatibility:
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
-        # the processor, so we play safe by assuming i586.
+       # uname -m prints for DJGPP always 'pc', but it prints nothing about
+       # the processor, so we play safe by assuming i586.
        # Note: whatever this is, it MUST be the same as what config.sub
        # prints for the "djgpp" host, or else GDB configury will decide that
        # this is a cross-build.
        echo i586-pc-msdosdjgpp
-        exit ;;
+       exit ;;
     Intel:Mach:3*:*)
        echo i386-pc-mach3
        exit ;;
@@ -1088,8 +1137,8 @@ EOF
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
          && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && { echo i486-ncr-sysv4; exit; } ;;
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4; exit; } ;;
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
        OS_REL='.3'
        test -r /etc/.relid \
@@ -1132,10 +1181,10 @@ EOF
                echo ns32k-sni-sysv
        fi
        exit ;;
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
-        echo i586-unisys-sysv4
-        exit ;;
+    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+       echo i586-unisys-sysv4
+       exit ;;
     *:UNIX_System_V:4*:FTX*)
        # From Gerald Hewes <hewes@openmarket.com>.
        # How about differentiating between stratus architectures? -djm
@@ -1161,11 +1210,11 @@ EOF
        exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
+               echo mips-nec-sysv${UNAME_RELEASE}
        else
-               echo mips-unknown-sysv${UNAME_RELEASE}
+               echo mips-unknown-sysv${UNAME_RELEASE}
        fi
-        exit ;;
+       exit ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
        echo powerpc-be-beos
        exit ;;
@@ -1178,6 +1227,9 @@ EOF
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
        echo i586-pc-haiku
        exit ;;
+    x86_64:Haiku:*:*)
+       echo x86_64-unknown-haiku
+       exit ;;
     SX-4:SUPER-UX:*:*)
        echo sx4-nec-superux${UNAME_RELEASE}
        exit ;;
@@ -1204,19 +1256,21 @@ EOF
        exit ;;
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       case $UNAME_PROCESSOR in
-           i386)
-               eval $set_cc_for_build
-               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                     grep IS_64BIT_ARCH >/dev/null
-                 then
-                     UNAME_PROCESSOR="x86_64"
-                 fi
-               fi ;;
-           unknown) UNAME_PROCESSOR=powerpc ;;
-       esac
+       eval $set_cc_for_build
+       if test "$UNAME_PROCESSOR" = unknown ; then
+           UNAME_PROCESSOR=powerpc
+       fi
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               case $UNAME_PROCESSOR in
+                   i386) UNAME_PROCESSOR=x86_64 ;;
+                   powerpc) UNAME_PROCESSOR=powerpc64 ;;
+               esac
+           fi
+       fi
        echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1230,7 +1284,10 @@ EOF
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NEO-?:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
        echo nse-tandem-nsk${UNAME_RELEASE}
        exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
@@ -1275,13 +1332,13 @@ EOF
        echo pdp10-unknown-its
        exit ;;
     SEI:*:*:SEIUX)
-        echo mips-sei-seiux${UNAME_RELEASE}
+       echo mips-sei-seiux${UNAME_RELEASE}
        exit ;;
     *:DragonFly:*:*)
        echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
        exit ;;
     *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
        case "${UNAME_MACHINE}" in
            A*) echo alpha-dec-vms ; exit ;;
            I*) echo ia64-dec-vms ; exit ;;
@@ -1299,11 +1356,11 @@ EOF
     i*86:AROS:*:*)
        echo ${UNAME_MACHINE}-pc-aros
        exit ;;
+    x86_64:VMkernel:*:*)
+       echo ${UNAME_MACHINE}-unknown-esx
+       exit ;;
 esac
 
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
 eval $set_cc_for_build
 cat >$dummy.c <<EOF
 #ifdef _SEQUENT_
@@ -1321,11 +1378,11 @@ main ()
 #include <sys/param.h>
   printf ("m68k-sony-newsos%s\n",
 #ifdef NEWSOS4
-          "4"
+       "4"
 #else
-         ""
+       ""
 #endif
-         ); exit (0);
+       ); exit (0);
 #endif
 #endif
 
index 4b080ba..eaef4d4 100644 (file)
@@ -1,4 +1,7 @@
-/* config.h.in.  Generated from configure.in by autoheader.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Type cast for the gethostbyname() argument */
+#undef GETHOSTBYNAME_ARG_CAST
 
 /* Define to 1 if you have the <ansidecl.h> header file. */
 #undef HAVE_ANSIDECL_H
@@ -69,6 +72,9 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define to 1 if you have the `isascii' function. */
+#undef HAVE_ISASCII
+
 /* Define if isinf is there */
 #undef HAVE_ISINF
 
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* mmap() is no good without munmap() */
+#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP)
+#  undef /**/ HAVE_MMAP
+#endif
+
 /* Define to 1 if you have the <nan.h> header file. */
 #undef HAVE_NAN_H
 
 /* Define if <pthread.h> is there */
 #undef HAVE_PTHREAD_H
 
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
 /* Define to 1 if you have the `rand' function. */
 #undef HAVE_RAND
 
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* Type cast for the send() function 2nd arg */
+#undef SEND_ARG2_CAST
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
 /* Support for IPv6 */
 #undef SUPPORT_IP6
 
+/* Define if va_list is an array type */
+#undef VA_LIST_IS_ARRAY
+
 /* Version number of package */
 #undef VERSION
 
 /* Determine what socket length (socklen_t) data type is */
 #undef XML_SOCKLEN_T
 
+/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#undef _UINT32_T
+
 /* Using the Win32 Socket implementation */
 #undef _WINSOCKAPI_
 
 /* ss_family is not defined here, use __ss_family instead */
 #undef ss_family
+
+/* Define to the type of an unsigned integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint32_t
index 2a55a50..c765b34 100755 (executable)
@@ -1,38 +1,31 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-#   Free Software Foundation, Inc.
+#   Copyright 1992-2013 Free Software Foundation, Inc.
 
-timestamp='2009-11-20'
+timestamp='2013-04-24'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches with a ChangeLog entry to config-patches@gnu.org.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -75,8 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+Copyright 1992-2013 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -123,13 +115,18 @@ esac
 # Here we must recognize all the valid KERNEL-OS combinations.
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -152,12 +149,12 @@ case $os in
        -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
        -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
        -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze)
+       -apple | -axis | -knuth | -cray | -microblaze*)
                os=
                basic_machine=$1
                ;;
-        -bluegene*)
-               os=-cnk
+       -bluegene*)
+               os=-cnk
                ;;
        -sim | -cisco | -oki | -wec | -winbond)
                os=
@@ -173,10 +170,10 @@ case $os in
                os=-chorusos
                basic_machine=$1
                ;;
-       -chorusrdb)
-               os=-chorusrdb
+       -chorusrdb)
+               os=-chorusrdb
                basic_machine=$1
-               ;;
+               ;;
        -hiux*)
                os=-hiuxwe2
                ;;
@@ -221,6 +218,12 @@ case $os in
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -lynx*178)
+               os=-lynxos178
+               ;;
+       -lynx*5)
+               os=-lynxos5
+               ;;
        -lynx*)
                os=-lynxos
                ;;
@@ -245,20 +248,27 @@ case $basic_machine in
        # Some are omitted here because they have special meanings below.
        1750a | 580 \
        | a29k \
+       | aarch64 | aarch64_be \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | arc | arceb \
+       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+       | avr | avr32 \
+       | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
        | fido | fr30 | frv \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
        | i370 | i860 | i960 | ia64 \
        | ip2k | iq2000 \
+       | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep | metag \
+       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
        | mips | mipsbe | mipseb | mipsel | mipsle \
        | mips16 \
        | mips64 | mips64el \
@@ -276,34 +286,45 @@ case $basic_machine in
        | mipsisa64r2 | mipsisa64r2el \
        | mipsisa64sb1 | mipsisa64sb1el \
        | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipsr5900 | mipsr5900el \
        | mipstx39 | mipstx39el \
        | mn10200 | mn10300 \
        | moxie \
        | mt \
        | msp430 \
-       | nios | nios2 \
+       | nds32 | nds32le | nds32be \
+       | nios | nios2 | nios2eb | nios2el \
        | ns16k | ns32k \
-       | or32 \
+       | open8 \
+       | or1k | or32 \
        | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
-       | rx \
+       | rl78 | rx \
        | score \
        | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
        | sh64 | sh64le \
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
+       | spu \
+       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
        | ubicom32 \
-       | v850 | v850e \
+       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
        | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
                basic_machine=$basic_machine-unknown
                ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-               # Motorola 68HC11/12.
+       c54x)
+               basic_machine=tic54x-unknown
+               ;;
+       c55x)
+               basic_machine=tic55x-unknown
+               ;;
+       c6x)
+               basic_machine=tic6x-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
                basic_machine=$basic_machine-unknown
                os=-none
                ;;
@@ -313,6 +334,21 @@ case $basic_machine in
                basic_machine=mt-unknown
                ;;
 
+       strongarm | thumb | xscale)
+               basic_machine=arm-unknown
+               ;;
+       xgate)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       xscaleeb)
+               basic_machine=armeb-unknown
+               ;;
+
+       xscaleel)
+               basic_machine=armel-unknown
+               ;;
+
        # We use `pc' rather than `unknown'
        # because (1) that's what they normally are, and
        # (2) the word "unknown" tends to confuse beginning users.
@@ -327,25 +363,30 @@ case $basic_machine in
        # Recognize the basic CPU types with company name.
        580-* \
        | a29k-* \
+       | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | be32-* | be64-* \
        | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
        | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | hexagon-* \
        | i*86-* | i860-* | i960-* | ia64-* \
        | ip2k-* | iq2000-* \
+       | le32-* | le64-* \
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+       | microblaze-* | microblazeel-* \
        | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
        | mips16-* \
        | mips64-* | mips64el-* \
@@ -363,29 +404,34 @@ case $basic_machine in
        | mipsisa64r2-* | mipsisa64r2el-* \
        | mipsisa64sb1-* | mipsisa64sb1el-* \
        | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipsr5900-* | mipsr5900el-* \
        | mipstx39-* | mipstx39el-* \
        | mmix-* \
        | mt-* \
        | msp430-* \
-       | nios-* | nios2-* \
+       | nds32-* | nds32le-* | nds32be-* \
+       | nios-* | nios2-* | nios2eb-* | nios2el-* \
        | none-* | np1-* | ns16k-* | ns32k-* \
+       | open8-* \
        | orion-* \
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
-       | romp-* | rs6000-* | rx-* \
+       | rl78-* | romp-* | rs6000-* | rx-* \
        | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
        | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
        | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+       | tahoe-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile*-* \
        | tron-* \
        | ubicom32-* \
-       | v850-* | v850e-* | vax-* \
+       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+       | vax-* \
        | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
        | ymp-* \
        | z8k-* | z80-*)
@@ -410,7 +456,7 @@ case $basic_machine in
                basic_machine=a29k-amd
                os=-udi
                ;;
-       abacus)
+       abacus)
                basic_machine=abacus-unknown
                ;;
        adobe68k)
@@ -480,11 +526,20 @@ case $basic_machine in
                basic_machine=powerpc-ibm
                os=-cnk
                ;;
+       c54x-*)
+               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c55x-*)
+               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       c6x-*)
+               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        c90)
                basic_machine=c90-cray
                os=-unicos
                ;;
-        cegcc)
+       cegcc)
                basic_machine=arm-unknown
                os=-cegcc
                ;;
@@ -516,7 +571,7 @@ case $basic_machine in
                basic_machine=craynv-cray
                os=-unicosmp
                ;;
-       cr16)
+       cr16 | cr16-*)
                basic_machine=cr16-unknown
                os=-elf
                ;;
@@ -674,7 +729,6 @@ case $basic_machine in
        i370-ibm* | ibm*)
                basic_machine=i370-ibm
                ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
        i*86v32)
                basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
                os=-sysv32
@@ -732,9 +786,13 @@ case $basic_machine in
                basic_machine=ns32k-utek
                os=-sysv
                ;;
-        microblaze)
+       microblaze*)
                basic_machine=microblaze-xilinx
                ;;
+       mingw64)
+               basic_machine=x86_64-pc
+               os=-mingw64
+               ;;
        mingw32)
                basic_machine=i386-pc
                os=-mingw32
@@ -771,10 +829,18 @@ case $basic_machine in
        ms1-*)
                basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
                ;;
+       msys)
+               basic_machine=i386-pc
+               os=-msys
+               ;;
        mvs)
                basic_machine=i370-ibm
                os=-mvs
                ;;
+       nacl)
+               basic_machine=le32-unknown
+               os=-nacl
+               ;;
        ncr3000)
                basic_machine=i486-ncr
                os=-sysv4
@@ -839,6 +905,12 @@ case $basic_machine in
        np1)
                basic_machine=np1-gould
                ;;
+       neo-tandem)
+               basic_machine=neo-tandem
+               ;;
+       nse-tandem)
+               basic_machine=nse-tandem
+               ;;
        nsr-tandem)
                basic_machine=nsr-tandem
                ;;
@@ -921,9 +993,10 @@ case $basic_machine in
                ;;
        power)  basic_machine=power-ibm
                ;;
-       ppc)    basic_machine=powerpc-unknown
+       ppc | ppcbe)    basic_machine=powerpc-unknown
                ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+       ppc-* | ppcbe-*)
+               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
        ppcle | powerpclittle | ppc-le | powerpc-little)
                basic_machine=powerpcle-unknown
@@ -933,7 +1006,7 @@ case $basic_machine in
                ;;
        ppc64)  basic_machine=powerpc64-unknown
                ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+       ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
        ppc64le | powerpc64little | ppc64-le | powerpc64-little)
                basic_machine=powerpc64le-unknown
@@ -948,7 +1021,11 @@ case $basic_machine in
                basic_machine=i586-unknown
                os=-pw32
                ;;
-       rdos)
+       rdos | rdos64)
+               basic_machine=x86_64-pc
+               os=-rdos
+               ;;
+       rdos32)
                basic_machine=i386-pc
                os=-rdos
                ;;
@@ -1017,6 +1094,9 @@ case $basic_machine in
                basic_machine=i860-stratus
                os=-sysv4
                ;;
+       strongarm-* | thumb-*)
+               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        sun2)
                basic_machine=m68000-sun
                ;;
@@ -1073,20 +1153,8 @@ case $basic_machine in
                basic_machine=t90-cray
                os=-unicos
                ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
        tile*)
-               basic_machine=tile-unknown
+               basic_machine=$basic_machine-unknown
                os=-linux-gnu
                ;;
        tx39)
@@ -1156,6 +1224,9 @@ case $basic_machine in
        xps | xps100)
                basic_machine=xps100-honeywell
                ;;
+       xscale-* | xscalee[bl]-*)
+               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+               ;;
        ymp)
                basic_machine=ymp-cray
                os=-unicos
@@ -1253,11 +1324,11 @@ esac
 if [ x"$os" != x"" ]
 then
 case $os in
-        # First match some system type aliases
-        # that might get confused with valid system types.
+       # First match some system type aliases
+       # that might get confused with valid system types.
        # -solaris* is a basic system type, with this one exception.
-        -auroraux)
-               os=-auroraux
+       -auroraux)
+               os=-auroraux
                ;;
        -solaris1 | -solaris1.*)
                os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -1281,20 +1352,21 @@ case $os in
        -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
              | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* \
+             | -sym* | -kopensolaris* | -plan9* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
              | -aos* | -aros* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
              | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
              | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1341,7 +1413,7 @@ case $os in
        -opened*)
                os=-openedition
                ;;
-        -os400*)
+       -os400*)
                os=-os400
                ;;
        -wince*)
@@ -1390,7 +1462,7 @@ case $os in
        -sinix*)
                os=-sysv4
                ;;
-        -tpf*)
+       -tpf*)
                os=-tpf
                ;;
        -triton*)
@@ -1426,15 +1498,14 @@ case $os in
        -aros*)
                os=-aros
                ;;
-       -kaos*)
-               os=-kaos
-               ;;
        -zvmoe)
                os=-zvmoe
                ;;
        -dicos*)
                os=-dicos
                ;;
+       -nacl*)
+               ;;
        -none)
                ;;
        *)
@@ -1457,10 +1528,10 @@ else
 # system, and we'll never get to this point.
 
 case $basic_machine in
-        score-*)
+       score-*)
                os=-elf
                ;;
-        spu-*)
+       spu-*)
                os=-elf
                ;;
        *-acorn)
@@ -1472,8 +1543,20 @@ case $basic_machine in
        arm*-semi)
                os=-aout
                ;;
-        c4x-* | tic4x-*)
-               os=-coff
+       c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       hexagon-*)
+               os=-elf
+               ;;
+       tic54x-*)
+               os=-coff
+               ;;
+       tic55x-*)
+               os=-coff
+               ;;
+       tic6x-*)
+               os=-coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
@@ -1493,14 +1576,11 @@ case $basic_machine in
                ;;
        m68000-sun)
                os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
                ;;
        m68*-cisco)
                os=-aout
                ;;
-        mep-*)
+       mep-*)
                os=-elf
                ;;
        mips*-cisco)
@@ -1509,6 +1589,9 @@ case $basic_machine in
        mips*-*)
                os=-elf
                ;;
+       or1k-*)
+               os=-elf
+               ;;
        or32-*)
                os=-coff
                ;;
@@ -1527,7 +1610,7 @@ case $basic_machine in
        *-ibm)
                os=-aix
                ;;
-       *-knuth)
+       *-knuth)
                os=-mmixware
                ;;
        *-wec)
index e152273..d63dce1 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,11 +1,9 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.69.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -134,6 +132,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -167,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -220,21 +244,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -336,6 +364,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -457,6 +493,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -491,16 +531,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -512,28 +552,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -642,15 +662,16 @@ TEST_REGEXPS
 WITH_REGEXPS
 TEST_SCHEMAS
 WITH_SCHEMAS
-TEST_SCHEMATRON
-WITH_SCHEMATRON
 WITH_ISO8859X
+ICU_LIBS
 WITH_ICU
 WITH_ICONV
 WITH_OUTPUT
 TEST_XPATH
 XPATH_OBJ
 WITH_XPATH
+TEST_SCHEMATRON
+WITH_SCHEMATRON
 TEST_XINCLUDE
 XINCLUDE_OBJ
 WITH_XINCLUDE
@@ -675,6 +696,8 @@ WITH_HTML
 TEST_PUSH
 WITH_PUSH
 TEST_SAX
+WITH_SAX1_SOURCES_FALSE
+WITH_SAX1_SOURCES_TRUE
 WITH_SAX1
 TEST_PATTERN
 WITH_PATTERN
@@ -687,7 +710,9 @@ WITH_HTTP
 FTP_OBJ
 WITH_FTP
 WITH_TREE
-THREADS_W32
+THREADS_W32_FALSE
+THREADS_W32_TRUE
+WITH_THREAD_ALLOC
 TEST_THREADS
 THREAD_CFLAGS
 WITH_THREADS
@@ -728,7 +753,8 @@ MANIFEST_TOOL
 RANLIB
 ac_ct_AR
 AR
-LN_S
+DLLTOOL
+OBJDUMP
 NM
 ac_ct_DUMPBIN
 DUMPBIN
@@ -738,20 +764,21 @@ EGREP
 GREP
 SED
 LIBTOOL
-OBJDUMP
-DLLTOOL
-AS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
 XSLTPROC
 XMLLINT
 WGET
 PERL
 TAR
 MV
-RM
 CPP
+LN_S
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -767,6 +794,8 @@ CFLAGS
 CC
 AM_BACKSLASH
 AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 am__untar
 am__tar
 AMTAR
@@ -876,6 +905,7 @@ with_output
 with_pattern
 with_push
 with_python
+with_python_install_dir
 with_reader
 with_readline
 with_regexps
@@ -906,7 +936,12 @@ CFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
-CPP'
+CPP
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+LZMA_CFLAGS
+LZMA_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1362,8 +1397,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1525,22 +1558,24 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-silent-rules          less verbose build output (undo: `make V=1')
-  --disable-silent-rules         verbose build output (undo: `make V=0')
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-fast-install[=PKGS]
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
-  --enable-rebuild-docs[=yes/no]  rebuild some generated docs [default=yes]
+  --enable-rebuild-docs[=yes/no]  rebuild some generated docs [default=no]
   --enable-ipv6[=yes/no]  enables compilation of IPv6 code [default=yes]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-pic              try to use only PIC/non-PIC objects [default=use
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-sysroot=DIR Search for dependent libraries within DIR
@@ -1568,6 +1603,8 @@ Optional Packages:
   --with-pattern          add the xmlPattern selection interface (on)
   --with-push             add the PUSH parser interfaces (on)
   --with-python[=DIR]     build Python bindings if found
+  --with-python-install-dir=DIR
+                          install Python bindings in DIR
   --with-reader           add the xmlReader parsing interface (on)
   --with-readline=DIR     use readline in DIR
   --with-regexps          add Regular Expressions support (on)
@@ -1597,6 +1634,13 @@ Some influential environment variables:
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  LZMA_CFLAGS C compiler flags for LZMA, overriding pkg-config
+  LZMA_LIBS   linker flags for LZMA, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1665,9 +1709,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1780,7 +1824,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2025,12 +2069,66 @@ fi
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_find_uintX_t LINENO BITS VAR
+# ------------------------------------
+# Finds an unsigned integer type with width BITS, setting cache variable VAR
+# accordingly.
+ac_fn_c_find_uintX_t ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+$as_echo_n "checking for uint$2_t... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+     # Order is important - never check a type that is potentially smaller
+     # than half of the expected target width.
+     for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
+        'unsigned long long int' 'unsigned short int' 'unsigned char'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  case $ac_type in #(
+  uint$2_t) :
+    eval "$3=yes" ;; #(
+  *) :
+    eval "$3=\$ac_type" ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"; then :
+
+else
+  break
+fi
+     done
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_find_uintX_t
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2377,6 +2475,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
+
 ac_config_headers="$ac_config_headers config.h"
 
 
@@ -2482,8 +2581,8 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 LIBXML_MAJOR_VERSION=2
-LIBXML_MINOR_VERSION=8
-LIBXML_MICRO_VERSION=0
+LIBXML_MINOR_VERSION=9
+LIBXML_MICRO_VERSION=2
 LIBXML_MICRO_VERSION_SUFFIX=
 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION$LIBXML_MICRO_VERSION_SUFFIX
 LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION
@@ -2524,7 +2623,7 @@ fi
 
 VERSION=${LIBXML_VERSION}
 
-am__api_version='1.11'
+am__api_version='1.13'
 
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
@@ -2563,7 +2662,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -2621,9 +2720,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
 # Reject unsafe characters in $srcdir or the absolute working directory
 # name.  Accept space and tab only in the latter.
 am_lf='
@@ -2634,32 +2730,40 @@ case `pwd` in
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
-    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
 esac
 
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
 # arguments.  Must try -L first in case configure is actually a
 # symlink; some systems play weird games with the mod time of symlinks
 # (eg FreeBSD returns the mod time of the symlink's containing
 # directory).
 if (
-   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t "$srcdir/configure" conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" "$LINENO" 5
-   fi
-
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
    test "$2" = conftest.file
    )
 then
@@ -2671,6 +2775,16 @@ Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
 test "$program_prefix" != NONE &&
   program_transform_name="s&^&$program_prefix&;$program_transform_name"
 # Use a double $ so make ignores it.
@@ -2693,12 +2807,12 @@ if test x"${MISSING+set}" != xset; then
   esac
 fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
   am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
 fi
 
 if test x"${install_sh}" != xset; then
@@ -2710,10 +2824,10 @@ if test x"${install_sh}" != xset; then
   esac
 fi
 
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'.  However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
 # tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
 if test "$cross_compiling" != no; then
   if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -2732,7 +2846,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2772,7 +2886,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2823,7 +2937,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
           case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
             'mkdir (GNU coreutils) '* | \
             'mkdir (coreutils) '* | \
@@ -2852,12 +2966,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
 $as_echo "$MKDIR_P" >&6; }
 
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
-  [\\/$]* | ?:[\\/]*) ;;
-  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -2876,7 +2984,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2940,6 +3048,45 @@ else
 fi
 rmdir .tst 2>/dev/null
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 if test "`cd $srcdir && pwd`" != "`pwd`"; then
   # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
   # is not polluted with repeated "-I."
@@ -2961,6 +3108,7 @@ fi
 
 
 # Define the identity of the package.
+
  PACKAGE=libxml2
  VERSION=$VERSION
 
@@ -2990,13 +3138,24 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 
 MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
 
 
 
@@ -3011,11 +3170,38 @@ if test "${enable_silent_rules+set}" = set; then :
   enableval=$enable_silent_rules;
 fi
 
-case $enable_silent_rules in
-yes) AM_DEFAULT_VERBOSITY=0;;
-no)  AM_DEFAULT_VERBOSITY=1;;
-*)   AM_DEFAULT_VERBOSITY=0;;
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
 esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
 AM_BACKSLASH='\'
 
 
@@ -3041,7 +3227,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3081,7 +3267,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3134,7 +3320,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3175,7 +3361,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3233,7 +3419,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3277,7 +3463,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3723,8 +3909,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3827,7 +4012,7 @@ am__quote=
 _am_result=none
 # First try GNU make style include.
 echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
 case `$am_make -s -f confmf 2> /dev/null` in #(
 *the\ am__doit\ target*)
   am__include=include
@@ -3860,6 +4045,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3882,8 +4068,9 @@ else
   # We make a subdir and do the tests there.  Otherwise we can end up
   # making bogus files that we don't know about and never remove.  For
   # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named `D' -- because `-MD' means `put the output
-  # in D'.
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3917,16 +4104,16 @@ else
     : > sub/conftest.c
     for i in 1 2 3 4 5 6; do
       echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
     done
     echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 
-    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
     # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle `-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
     am__obj=sub/conftest.${OBJEXT-o}
     am__minus_obj="-o $am__obj"
     case $depmode in
@@ -3935,16 +4122,16 @@ else
       test "$am__universal" = false || continue
       ;;
     nosideeffect)
-      # after this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
       if test "x$enable_dependency_tracking" = xyes; then
        continue
       else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
-      # This compiler won't grok `-c -o', but also, the minuso test has
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
       am__obj=conftest.${OBJEXT-o}
@@ -3999,6 +4186,17 @@ fi
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -4137,47 +4335,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-# Extract the first word of "rm", so it can be a program name with args.
-set dummy rm; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_RM+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $RM in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_RM="$RM" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  test -z "$ac_cv_path_RM" && ac_cv_path_RM="/bin/rm"
-  ;;
-esac
-fi
-RM=$ac_cv_path_RM
-if test -n "$RM"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5
-$as_echo "$RM" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
 # Extract the first word of "mv", so it can be a program name with args.
 set dummy mv; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4196,7 +4353,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4237,7 +4394,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4278,7 +4435,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4319,7 +4476,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_WGET="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4360,7 +4517,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XMLLINT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4401,7 +4558,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
 
 
 
-enable_win32_dll=yes
-
-case $host in
-*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
-set dummy ${ac_tool_prefix}as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AS"; then
-  ac_cv_prog_AS="$AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AS="${ac_tool_prefix}as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-AS=$ac_cv_prog_AS
-if test -n "$AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
-$as_echo "$AS" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
 
-fi
-if test -z "$ac_cv_prog_AS"; then
-  ac_ct_AS=$AS
-  # Extract the first word of "as", so it can be a program name with args.
-set dummy as; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AS+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AS"; then
-  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AS="as"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-ac_ct_AS=$ac_cv_prog_ac_ct_AS
-if test -n "$ac_ct_AS"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
-$as_echo "$ac_ct_AS" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
 
-  if test "x$ac_ct_AS" = x; then
-    AS="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AS=$ac_ct_AS
-  fi
-else
-  AS="$ac_cv_prog_AS"
-fi
 
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
-set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_DLLTOOL+:} false; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$DLLTOOL"; then
-  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4547,12 +4617,13 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-fi
-DLLTOOL=$ac_cv_prog_DLLTOOL
-if test -n "$DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
-$as_echo "$DLLTOOL" >&6; }
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -4560,26 +4631,28 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_DLLTOOL"; then
-  ac_ct_DLLTOOL=$DLLTOOL
-  # Extract the first word of "dlltool", so it can be a program name with args.
-set dummy dlltool; ac_word=$2
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_DLLTOOL"; then
-  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -4587,19 +4660,20 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-fi
-ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
-if test -n "$ac_ct_DLLTOOL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
-$as_echo "$ac_ct_DLLTOOL" >&6; }
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_DLLTOOL" = x; then
-    DLLTOOL="false"
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -4607,127 +4681,27 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    DLLTOOL=$ac_ct_DLLTOOL
-  fi
-else
-  DLLTOOL="$ac_cv_prog_DLLTOOL"
-fi
-
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
-set dummy ${ac_tool_prefix}objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$OBJDUMP"; then
-  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
   fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-OBJDUMP=$ac_cv_prog_OBJDUMP
-if test -n "$OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
-$as_echo "$OBJDUMP" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
 fi
-if test -z "$ac_cv_prog_OBJDUMP"; then
-  ac_ct_OBJDUMP=$OBJDUMP
-  # Extract the first word of "objdump", so it can be a program name with args.
-set dummy objdump; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_OBJDUMP"; then
-  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_OBJDUMP="objdump"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
 fi
-fi
-ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
-if test -n "$ac_ct_OBJDUMP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
-$as_echo "$ac_ct_OBJDUMP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
 fi
 
-  if test "x$ac_ct_OBJDUMP" = x; then
-    OBJDUMP="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    OBJDUMP=$ac_ct_OBJDUMP
-  fi
-else
-  OBJDUMP="$ac_cv_prog_OBJDUMP"
-fi
-
-  ;;
-esac
-
-test -z "$AS" && AS=as
-
-
-
-
-
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-
-
-
-
-
-test -z "$OBJDUMP" && OBJDUMP=objdump
-
-
-
-
-
-
-
 case `pwd` in
   *\ * | *\    *)
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -4736,8 +4710,8 @@ esac
 
 
 
-macro_version='2.4'
-macro_revision='1.3293'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -4844,7 +4818,7 @@ do
     for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+      as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
 case `"$ac_path_SED" --version 2>&1` in
@@ -4920,7 +4894,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4986,7 +4960,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -5053,7 +5027,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -5309,7 +5283,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5353,7 +5327,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5434,17 +5408,6 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
 $as_echo "$lt_cv_nm_interface" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
-
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
@@ -5511,6 +5474,11 @@ else
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -5550,7 +5518,7 @@ else
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
              test $i != 17 # 1/2 MB should be enough
       do
@@ -5772,7 +5740,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5812,7 +5780,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5854,6 +5822,9 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 
 
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
 if ${lt_cv_deplibs_check_method+:} false; then :
@@ -5976,7 +5947,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -6115,7 +6086,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6155,7 +6126,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6198,6 +6169,9 @@ test -z "$DLLTOOL" && DLLTOOL=dlltool
 
 
 
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
 $as_echo_n "checking how to associate runtime and link libraries... " >&6; }
 if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
@@ -6256,7 +6230,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6300,7 +6274,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6425,7 +6399,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6465,7 +6439,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6524,7 +6498,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6564,7 +6538,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6614,13 +6588,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -6767,6 +6741,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -7055,7 +7030,7 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
@@ -7073,7 +7048,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_i386"
            ;;
-         ppc64-*linux*|powerpc64-*linux*)
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -7092,7 +7070,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         ppc*-*linux*|powerpc*-*linux*)
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -7155,7 +7136,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
@@ -7166,7 +7147,20 @@ sparc*-*solaris*)
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
        if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
          LD="${LD-ld} -64"
@@ -7199,7 +7193,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7239,7 +7233,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7319,7 +7313,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7359,7 +7353,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7411,7 +7405,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7451,7 +7445,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7503,7 +7497,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7543,7 +7537,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7595,7 +7589,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7635,7 +7629,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7687,7 +7681,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7727,7 +7721,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7806,7 +7800,13 @@ else
        $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
          -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&5
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&5
@@ -7817,6 +7817,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
 if ${lt_cv_ld_exported_symbols_list+:} false; then :
@@ -7849,6 +7850,7 @@ rm -f core conftest.err conftest.$ac_objext \
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
 $as_echo_n "checking for -force_load linker flag... " >&6; }
 if ${lt_cv_ld_force_load+:} false; then :
@@ -7870,7 +7872,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&5
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&5
@@ -8070,6 +8074,8 @@ done
         enable_dlopen=no
 
 
+  enable_win32_dll=no
+
 
             # Check whether --enable-shared was given.
 if test "${enable_shared+set}" = set; then :
@@ -8136,7 +8142,22 @@ fi
 
 # Check whether --with-pic was given.
 if test "${with_pic+set}" = set; then :
-  withval=$with_pic; pic_mode="$withval"
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+       IFS="$lt_save_ifs"
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
 else
   pic_mode=default
 fi
@@ -8214,6 +8235,10 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
 
+
+
+
+
 test -z "$LN_S" && LN_S="ln -s"
 
 
@@ -8673,7 +8698,9 @@ lt_prog_compiler_static=
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       lt_prog_compiler_wl='-Xlinker '
-      lt_prog_compiler_pic='-Xcompiler -fPIC'
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
       ;;
     esac
   else
@@ -8764,18 +8791,33 @@ lt_prog_compiler_static=
        ;;
       *)
        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ F* | *Sun*Fortran*)
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
          # Sun Fortran 8.3 passes all unrecognized flags to the linker
          lt_prog_compiler_pic='-KPIC'
          lt_prog_compiler_static='-Bstatic'
          lt_prog_compiler_wl=''
          ;;
+       *Sun\ F* | *Sun*Fortran*)
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Qoption ld '
+         ;;
        *Sun\ C*)
          # Sun C 5.9
          lt_prog_compiler_pic='-KPIC'
          lt_prog_compiler_static='-Bstatic'
          lt_prog_compiler_wl='-Wl,'
          ;;
+        *Intel*\ [CF]*Compiler*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fPIC'
+         lt_prog_compiler_static='-static'
+         ;;
+       *Portland\ Group*)
+         lt_prog_compiler_wl='-Wl,'
+         lt_prog_compiler_pic='-fpic'
+         lt_prog_compiler_static='-Bstatic'
+         ;;
        esac
        ;;
       esac
@@ -9137,7 +9179,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   hardcode_direct=no
   hardcode_direct_absolute=no
   hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
   hardcode_libdir_separator=
   hardcode_minus_L=no
   hardcode_shlibpath_var=unsupported
@@ -9387,8 +9428,7 @@ _LT_EOF
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
-         hardcode_libdir_flag_spec=
-         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
          archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          if test "x$supports_anon_versioning" = xyes; then
            archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
@@ -9767,6 +9807,7 @@ fi
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
        enable_shared_with_static_runtimes=yes
+       exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
        export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
        # Don't use ranlib
        old_postinstall_cmds='chmod 644 $oldlib'
@@ -9812,6 +9853,7 @@ fi
   hardcode_shlibpath_var=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
   else
     whole_archive_flag_spec=''
   fi
@@ -9840,10 +9882,6 @@ fi
       hardcode_shlibpath_var=no
       ;;
 
-    freebsd1*)
-      ld_shlibs=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -9856,7 +9894,7 @@ fi
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       hardcode_direct=yes
       hardcode_minus_L=yes
@@ -9895,7 +9933,6 @@ fi
       fi
       if test "$with_gnu_ld" = no; then
        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_flag_spec_ld='+b $libdir'
        hardcode_libdir_separator=:
        hardcode_direct=yes
        hardcode_direct_absolute=yes
@@ -10519,11 +10556,6 @@ esac
 
 
 
-
-
-
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
 $as_echo_n "checking dynamic linker characteristics... " >&6; }
 
@@ -10613,7 +10645,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -10622,7 +10654,7 @@ aix3*)
   ;;
 
 aix[4-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -10687,7 +10719,7 @@ beos*)
   ;;
 
 bsdi[45]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -10826,7 +10858,7 @@ darwin* | rhapsody*)
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -10834,10 +10866,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -10845,7 +10873,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[123]*) objformat=aout ;;
+    freebsd[23].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -10863,7 +10891,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[01]* | freebsdelf3.[01]*)
@@ -10883,17 +10911,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -10954,7 +10983,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[3-9]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -10970,7 +10999,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
        if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
+               version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
        fi ;;
@@ -11007,9 +11036,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11095,7 +11124,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -11164,7 +11193,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11189,7 +11218,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -11213,7 +11242,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -11244,7 +11273,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -11254,7 +11283,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -12036,6 +12065,8 @@ CC="$lt_save_CC"
 
 
 
+
+
         ac_config_commands="$ac_config_commands libtool"
 
 
@@ -12066,7 +12097,7 @@ fi
 
 
 _cppflags="${CPPFLAGS}"
-_ldflags="${LDFLAGS}"
+_libs="${LIBS}"
 
 
 # Check whether --with-c14n was given.
@@ -12201,6 +12232,12 @@ if test "${with_python+set}" = set; then :
 fi
 
 
+# Check whether --with-python_install_dir was given.
+if test "${with_python_install_dir+set}" = set; then :
+  withval=$with_python_install_dir;
+fi
+
+
 # Check whether --with-reader was given.
 if test "${with_reader+set}" = set; then :
   withval=$with_reader;
@@ -12213,7 +12250,7 @@ if test "${with_readline+set}" = set; then :
   if test "$withval" != "no" -a "$withval" != "yes"; then
     RDL_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 
 fi
@@ -12309,7 +12346,7 @@ if test "${with_zlib+set}" = set; then :
   if test "$withval" != "no" -a "$withval" != "yes"; then
     Z_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 
 fi
@@ -12321,7 +12358,7 @@ if test "${with_lzma+set}" = set; then :
   if test "$withval" != "no" -a "$withval" != "yes"; then
     LZMA_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 
 fi
@@ -12338,7 +12375,10 @@ if test "${enable_rebuild_docs+set}" = set; then :
   enableval=$enable_rebuild_docs;
 fi
 
- if test "$enable_rebuild_docs" = "no"; then
+if test "$enable_rebuild_docs" = "yes" -a "$srcdir" != "."; then
+  as_fn_error $? "cannot rebuild docs when builddir != srcdir" "$LINENO" 5
+fi
+ if test "$enable_rebuild_docs" = "yes" -o "$USER" = "veillard"; then
   REBUILD_DOCS_TRUE=
   REBUILD_DOCS_FALSE='#'
 else
@@ -12355,6 +12395,7 @@ fi
 if test "$with_schematron" = "yes"
 then
     with_pattern=yes
+    with_tree=yes
     with_xpath=yes
 fi
 if test "$with_reader" = "yes"
@@ -12521,7 +12562,9 @@ if test "x$ac_cv_header_zlib_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_ZLIB_H 1
 _ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5
+ SAVE_LDFLAGS="${LDFLAGS}"
+        LDFLAGS="-L${Z_DIR}/lib"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gzread in -lz" >&5
 $as_echo_n "checking for gzread in -lz... " >&6; }
 if ${ac_cv_lib_z_gzread+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -12576,6 +12619,7 @@ $as_echo "#define HAVE_LIBZ 1" >>confdefs.h
            fi
 fi
 
+        LDFLAGS="${SAVE_LDFLAGS}"
 fi
 
 done
@@ -12593,14 +12637,94 @@ WITH_LZMA=0
 if test "$with_lzma" = "no"; then
     echo "Disabling compression support"
 else
-    for ac_header in lzma.h
+    # Try pkg-config first so that static linking works.
+    # If this succeeeds, we ignore the WITH_LZMA directory.
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LZMA" >&5
+$as_echo_n "checking for LZMA... " >&6; }
+
+if test -n "$LZMA_CFLAGS"; then
+    pkg_cv_LZMA_CFLAGS="$LZMA_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblzma\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "liblzma") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LZMA_CFLAGS=`$PKG_CONFIG --cflags "liblzma" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LZMA_LIBS"; then
+    pkg_cv_LZMA_LIBS="$LZMA_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liblzma\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "liblzma") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LZMA_LIBS=`$PKG_CONFIG --libs "liblzma" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LZMA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liblzma" 2>&1`
+        else
+               LZMA_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liblzma" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LZMA_PKG_ERRORS" >&5
+
+       have_liblzma=no
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       have_liblzma=no
+else
+       LZMA_CFLAGS=$pkg_cv_LZMA_CFLAGS
+       LZMA_LIBS=$pkg_cv_LZMA_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       have_liblzma=yes
+fi
+
+     # If pkg-config failed, fall back to AC_CHECK_LIB. This
+     # will not pick up the necessary LIBS flags for liblzma's
+     # private dependencies, though, so static linking may fail.
+     if test "x$have_liblzma" = "xno"; then
+         for ac_header in lzma.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default"
 if test "x$ac_cv_header_lzma_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_LZMA_H 1
 _ACEOF
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_code in -llzma" >&5
+ SAVE_LDFLAGS="${LDFLAGS}"
+            LDFLAGS="-L${LZMA_DIR}/lib"
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzma_code in -llzma" >&5
 $as_echo_n "checking for lzma_code in -llzma... " >&6; }
 if ${ac_cv_lib_lzma_lzma_code+:} false; then :
   $as_echo_n "(cached) " >&6
 $as_echo "$ac_cv_lib_lzma_lzma_code" >&6; }
 if test "x$ac_cv_lib_lzma_lzma_code" = xyes; then :
 
-
-$as_echo "#define HAVE_LIBLZMA 1" >>confdefs.h
-
-           WITH_LZMA=1
-           if test "x${LZMA_DIR}" != "x"; then
-               LZMA_CFLAGS="-I${LZMA_DIR}/include"
-               LZMA_LIBS="-L${LZMA_DIR}/lib -llzma"
-           else
-               LZMA_LIBS="-llzma"
-           fi
+                have_liblzma=yes
+                if test "x${LZMA_DIR}" != "x"; then
+                    LZMA_CFLAGS="-I${LZMA_DIR}/include"
+                    LZMA_LIBS="-L${LZMA_DIR}/lib -llzma"
+                else
+                    LZMA_LIBS="-llzma"
+                fi
+else
+  have_liblzma=no
 fi
 
+            LDFLAGS="${SAVE_LDFLAGS}"
 fi
 
 done
 
+    fi
+
+    # Found the library via either method?
+    if test "x$have_liblzma" = "xyes"; then
+
+$as_echo "#define HAVE_LIBLZMA 1" >>confdefs.h
+
+        WITH_LZMA=1
+    fi
 fi
 
 
@@ -12661,7 +12794,7 @@ fi
 
 
 CPPFLAGS=${_cppflags}
-LDFLAGS=${_ldflags}
+LIBS=${_libs}
 
 echo Checking headers
 
@@ -13374,6 +13507,24 @@ done
 
 
 
+echo Checking types
+
+ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
+case $ac_cv_c_uint32_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT32_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint32_t $ac_cv_c_uint32_t
+_ACEOF
+;;
+  esac
+
+
+
 echo Checking libraries
 
 for ac_func in strftime
@@ -13491,6 +13642,20 @@ _ACEOF
 fi
 done
 
+for ac_func in isascii mmap munmap putenv
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
 $as_echo_n "checking for va_copy... " >&6; }
@@ -13550,6 +13715,37 @@ $as_echo "#define HAVE___VA_COPY 1" >>confdefs.h
     fi
 fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether va_list is an array type" >&5
+$as_echo_n "checking whether va_list is an array type... " >&6; }
+cat > conftest.$ac_ext <<EOF
+#line 13721 "configure"
+#include "confdefs.h"
+
+#include <stdarg.h>
+void a(va_list * ap) {}
+int main(void) {
+
+va_list ap1, ap2; a(&ap1); ap2 = (va_list) ap1
+; return 0; }
+EOF
+if { (eval echo configure:13731: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+  rm -rf conftest*
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define VA_LIST_IS_ARRAY 1" >>confdefs.h
+
+fi
+rm -f conftest*
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5
 $as_echo_n "checking for library containing gethostent... " >&6; }
 if ${ac_cv_search_gethostent+:} false; then :
@@ -13722,7 +13918,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of socket length (socklen_t)" >&5
 $as_echo_n "checking for type of socket length (socklen_t)... " >&6; }
 cat > conftest.$ac_ext <<EOF
-#line 13725 "configure"
+#line 13921 "configure"
 #include "confdefs.h"
 
 #include <stddef.h>
@@ -13733,7 +13929,7 @@ int main(void) {
 (void)getsockopt (1, 1, 1, NULL, (socklen_t *)NULL)
 ; return 0; }
 EOF
-if { (eval echo configure:13736: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:13932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
   rm -rf conftest*
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: socklen_t *" >&5
@@ -13745,7 +13941,7 @@ else
   rm -rf conftest*
 
   cat > conftest.$ac_ext <<EOF
-#line 13748 "configure"
+#line 13944 "configure"
 #include "confdefs.h"
 
 #include <stddef.h>
@@ -13756,7 +13952,7 @@ int main(void) {
 (void)getsockopt (1, 1, 1, NULL, (size_t *)NULL)
 ; return 0; }
 EOF
-if { (eval echo configure:13759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:13955: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
   rm -rf conftest*
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: size_t *" >&5
@@ -13768,7 +13964,7 @@ else
   rm -rf conftest*
 
     cat > conftest.$ac_ext <<EOF
-#line 13771 "configure"
+#line 13967 "configure"
 #include "confdefs.h"
 
 #include <stddef.h>
@@ -13779,7 +13975,7 @@ int main(void) {
 (void)getsockopt (1, 1, 1, NULL, (int *)NULL)
 ; return 0; }
 EOF
-if { (eval echo configure:13782: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
+if { (eval echo configure:13978: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; _out=`eval $ac_compile 2>&1` && test "x$_out" = x; }; then
   rm -rf conftest*
 
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: int *" >&5
@@ -13805,6 +14001,71 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for const gethostbyname() argument" >&5
+$as_echo_n "checking for const gethostbyname() argument... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <netdb.h>
+int
+main ()
+{
+(void)gethostbyname((const char *)"");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  have_gethostbyname_const_arg=yes
+else
+  have_gethostbyname_const_arg=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gethostbyname_const_arg" >&5
+$as_echo "$have_gethostbyname_const_arg" >&6; }
+if test x"$have_gethostbyname_const_arg" = x"yes"; then
+
+$as_echo "#define GETHOSTBYNAME_ARG_CAST /**/" >>confdefs.h
+
+else
+
+$as_echo "#define GETHOSTBYNAME_ARG_CAST (char *)" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for const send() second argument" >&5
+$as_echo_n "checking for const send() second argument... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/socket.h>
+int
+main ()
+{
+(void)send(1,(const char *)"",1,1);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  have_send_const_arg2=yes
+else
+  have_send_const_arg2=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_send_const_arg2" >&5
+$as_echo "$have_send_const_arg2" >&6; }
+if test x"$have_send_const_arg2" = x"yes"; then
+
+$as_echo "#define SEND_ARG2_CAST /**/" >>confdefs.h
+
+else
+
+$as_echo "#define SEND_ARG2_CAST (char *)" >>confdefs.h
+
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable IPv6" >&5
 $as_echo_n "checking whether to enable IPv6... " >&6; }
@@ -13824,8 +14085,8 @@ if test $enable_ipv6 = yes; then
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-    #include <sys/types.h>
-    #include <sys/socket.h>
+#   include <sys/types.h>
+#   include <sys/socket.h>
 
 int
 main ()
@@ -13859,8 +14120,8 @@ $as_echo_n "checking struct sockaddr::ss_family... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-      #include <sys/types.h>
-      #include <sys/socket.h>
+#     include <sys/types.h>
+#     include <sys/socket.h>
 
 int
 main ()
@@ -13888,8 +14149,8 @@ $as_echo_n "checking broken struct sockaddr::ss_family... " >&6; }
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-        #include <sys/types.h>
-        #include <sys/socket.h>
+#       include <sys/types.h>
+#       include <sys/socket.h>
 
 int
 main ()
@@ -14175,7 +14436,7 @@ if test "$with_python" != "no" ; then
                 if test -x "$PYTHON"
                 then
                     echo Found python in environment PYTHON=$PYTHON
-                    with_python=`$PYTHON -c "import sys; print sys.exec_prefix"`
+                    with_python=`$PYTHON -c "import sys; print(sys.exec_prefix)"`
                 else
                     # Extract the first word of "python python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5", so it can be a program name with args.
 set dummy python python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5; ac_word=$2
@@ -14195,7 +14456,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
     fi
     if test "$PYTHON" != ""
     then
-        PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[0:3]"`
+        PYTHON_VERSION=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_version())"`
+       PYTHON_INCLUDES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_inc())"`
+# does not work as it produce a /usr/lib/python path instead of/usr/lib64/python
+#
+#      PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib())"`
        echo Found Python version $PYTHON_VERSION
     fi
-    if test "$PYTHON_VERSION" != ""
+    if test "$PYTHON_VERSION" != "" -a "$PYTHON_INCLUDES" = ""
     then
-       if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
-          -d $with_python/lib/python$PYTHON_VERSION/site-packages
+       if test -r $with_python/include/python$PYTHON_VERSION/Python.h
        then
            PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
-           PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
        else
            if test -r $prefix/include/python$PYTHON_VERSION/Python.h
            then
                PYTHON_INCLUDES=$prefix/include/python$PYTHON_VERSION
-               PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
            else
                if test -r /usr/include/python$PYTHON_VERSION/Python.h
                then
                    PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
-                   PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
                else
-                   if test -r $with_python/include/Python.h -a \
-                      -d $with_python/lib/site-packages
+                   if test -r $with_python/include/Python.h
                    then
                        PYTHON_INCLUDES=$with_python/include
-                       PYTHON_SITE_PACKAGES=$with_python/lib/site-packages
                    else
                        echo could not find python$PYTHON_VERSION/Python.h or $with_python/include/Python.h
                    fi
                fi
            fi
-           if test ! -d "$PYTHON_SITE_PACKAGES"
-           then
-                   PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
-           fi
        fi
-       PYTHON_LIBS=`python$PYTHON_VERSION-config --ldflags`
     fi
-    if test "$with_python" != ""
+    if test "$with_python_install_dir" != ""
     then
-        pythondir='$(PYTHON_SITE_PACKAGES)'
-    else
-        pythondir='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+       PYTHON_SITE_PACKAGES="$with_python_install_dir"
+    fi
+    if test "$PYTHON_VERSION" != "" -a "$PYTHON_SITE_PACKAGES" = ""
+    then
+       if test -d $libdir/python$PYTHON_VERSION/site-packages
+       then
+           PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
+       else
+           if test -d $with_python/lib/site-packages
+           then
+               PYTHON_SITE_PACKAGES=$with_python/lib/site-packages
+           else
+               PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib())"`
+           fi
+       fi
     fi
+    pythondir='$(PYTHON_SITE_PACKAGES)'
+    PYTHON_LIBS=`python$PYTHON_VERSION-config --ldflags`
 else
     PYTHON=
 fi
@@ -14534,6 +14802,7 @@ WITH_THREADS=0
 THREAD_CFLAGS=""
 TEST_THREADS=""
 THREADS_W32=""
+WITH_THREAD_ALLOC=0
 
 if test "$with_threads" = "no" ; then
     echo Disabling multithreaded support
@@ -14543,7 +14812,7 @@ else
         case $host_os in
        *mingw32*) if test "$with_threads" != "pthread" && test "$with_threads" != "no"; then
                WITH_THREADS="1"
-               THREADS_W32="Win32"
+               THREADS_W32="1"
                THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS"
            fi
        ;;
@@ -14642,7 +14911,7 @@ fi
     fi
 fi
 if test "$with_thread_alloc" = "yes" -a "$WITH_THREADS" = "1" ; then
-    THREAD_CFLAGS="$THREAD_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
+    WITH_THREAD_ALLOC=1
 fi
 
 
 
 
 
+ if test -n "$THREADS_W32"; then
+  THREADS_W32_TRUE=
+  THREADS_W32_FALSE='#'
+else
+  THREADS_W32_TRUE='#'
+  THREADS_W32_FALSE=
+fi
+
 
 if test "$with_history" = "yes" ; then
     echo Enabling xmllint shell history
@@ -14897,6 +15174,14 @@ else
     TEST_SAX=SAXtests
 fi
 
+ if test "${WITH_TRIO}" = "1"; then
+  WITH_SAX1_SOURCES_TRUE=
+  WITH_SAX1_SOURCES_FALSE='#'
+else
+  WITH_SAX1_SOURCES_TRUE='#'
+  WITH_SAX1_SOURCES_FALSE=
+fi
+
 
 
 if test "$with_push" = "no" ; then
 
 
 
+if test "$with_xptr" = "" -a "$with_xpath" = "no" ; then
+    with_xptr=no
+fi
+
+if test "$with_schematron" = "" -a "$with_xpath" = "no" ; then
+    with_schematron=no
+fi
+
+if test "$with_schematron" = "no" ; then
+    echo "Disabling Schematron support"
+    WITH_SCHEMATRON=0
+    TEST_SCHEMATRON=
+else
+    echo "Enabled Schematron support"
+    WITH_SCHEMATRON=1
+    TEST_SCHEMATRON="Schematrontests"
+    with_xpath=yes
+    with_pattern=yes
+    with_schematron=yes
+fi
+
+
+
 if test "$with_xpath" = "no" ; then
     echo Disabling XPATH support
     WITH_XPATH=0
@@ -15196,14 +15504,14 @@ XML_LIBTOOLLIBS="libxml2.la"
 
 
 WITH_ICU=0
+ICU_LIBS=""
 if test "$with_icu" != "yes" ; then
     echo Disabling ICU support
 else
     ICU_CONFIG=icu-config
     if ${ICU_CONFIG} --cflags >/dev/null 2>&1
     then
-        ICU_LIBS=`icu-config --ldflags`
-        LDFLAGS="$LDFLAGS $ICU_LIBS"
+        ICU_LIBS=`${ICU_CONFIG} --ldflags`
         WITH_ICU=1
         echo Enabling ICU support
     else
@@ -15212,6 +15520,7 @@ else
 fi
 
 
+
 WITH_ISO8859X=1
 if test "$WITH_ICONV" != "1" ; then
 if test "$with_iso8859x" = "no" ; then
 fi
 
 
-if test "$with_schematron" = "no" ; then
-    echo "Disabling Schematron support"
-    WITH_SCHEMATRON=0
-    TEST_SCHEMATRON=
-else
-    echo "Enabled Schematron support"
-    WITH_SCHEMATRON=1
-    TEST_SCHEMATRON="Schematrontests"
-    with_xpath=yes
-    with_pattern=yes
-fi
-
-
-
 if test "$with_schemas" = "no" ; then
     echo "Disabling Schemas/Relax-NG support"
     WITH_SCHEMAS=0
@@ -15379,10 +15674,14 @@ RELDATE=`date +'%a %b %e %Y'`
 
 
 rm -f COPYING.LIB COPYING
-ln -s Copyright COPYING
+ln -s $srcdir/Copyright COPYING
 
 # keep on one line for cygwin c.f. #130896
-ac_config_files="$ac_config_files libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py"
+ac_config_files="$ac_config_files libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h libxml-2.0.pc libxml-2.0-uninstalled.pc libxml2-config.cmake"
+
+ac_config_files="$ac_config_files python/setup.py"
+
+ac_config_files="$ac_config_files xml2-config"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -15493,6 +15792,14 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
  if test -n "$EXEEXT"; then
   am__EXEEXT_TRUE=
   am__EXEEXT_FALSE='#'
@@ -15525,6 +15832,14 @@ if test -z "${WITH_TRIO_SOURCES_TRUE}" && test -z "${WITH_TRIO_SOURCES_FALSE}";
   as_fn_error $? "conditional \"WITH_TRIO_SOURCES\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${THREADS_W32_TRUE}" && test -z "${THREADS_W32_FALSE}"; then
+  as_fn_error $? "conditional \"THREADS_W32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITH_SAX1_SOURCES_TRUE}" && test -z "${WITH_SAX1_SOURCES_FALSE}"; then
+  as_fn_error $? "conditional \"WITH_SAX1_SOURCES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
@@ -15823,16 +16138,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -15892,28 +16207,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -15935,7 +16238,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16001,10 +16304,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -16095,7 +16398,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -16129,9 +16432,6 @@ AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
 sed_quote_subst='$sed_quote_subst'
 double_quote_subst='$double_quote_subst'
 delay_variable_subst='$delay_variable_subst'
-AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`'
-DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
-OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
 macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
 macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
 enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
@@ -16140,6 +16440,7 @@ pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
 SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
 ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
 host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
 host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
 host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
@@ -16164,10 +16465,12 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
 lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
 reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
 reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
 deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
 file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
 file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
 want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
 sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
 AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
 AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
@@ -16220,7 +16523,6 @@ with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
 allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
 no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
-hardcode_libdir_flag_spec_ld='`$ECHO "$hardcode_libdir_flag_spec_ld" | $SED "$delay_single_quote_subst"`'
 hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
 hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
 hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
@@ -16274,11 +16576,9 @@ _LTECHO_EOF'
 }
 
 # Quote evaled strings.
-for var in AS \
-DLLTOOL \
-OBJDUMP \
-SHELL \
+for var in SHELL \
 ECHO \
+PATH_SEPARATOR \
 SED \
 GREP \
 EGREP \
@@ -16289,10 +16589,12 @@ LN_S \
 lt_SP2NL \
 lt_NL2SP \
 reload_flag \
+OBJDUMP \
 deplibs_check_method \
 file_magic_cmd \
 file_magic_glob \
 want_nocaseglob \
+DLLTOOL \
 sharedlib_from_linklib_cmd \
 AR \
 AR_FLAGS \
@@ -16327,7 +16629,6 @@ with_gnu_ld \
 allow_undefined_flag \
 no_undefined_flag \
 hardcode_libdir_flag_spec \
-hardcode_libdir_flag_spec_ld \
 hardcode_libdir_separator \
 exclude_expsyms \
 include_expsyms \
     "python/tests/Makefile") CONFIG_FILES="$CONFIG_FILES python/tests/Makefile" ;;
     "xstc/Makefile") CONFIG_FILES="$CONFIG_FILES xstc/Makefile" ;;
     "include/libxml/xmlversion.h") CONFIG_FILES="$CONFIG_FILES include/libxml/xmlversion.h" ;;
-    "xml2-config") CONFIG_FILES="$CONFIG_FILES xml2-config" ;;
     "libxml-2.0.pc") CONFIG_FILES="$CONFIG_FILES libxml-2.0.pc" ;;
     "libxml-2.0-uninstalled.pc") CONFIG_FILES="$CONFIG_FILES libxml-2.0-uninstalled.pc" ;;
+    "libxml2-config.cmake") CONFIG_FILES="$CONFIG_FILES libxml2-config.cmake" ;;
     "python/setup.py") CONFIG_FILES="$CONFIG_FILES python/setup.py" ;;
+    "xml2-config") CONFIG_FILES="$CONFIG_FILES xml2-config" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
@@ -17023,7 +17325,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
 
   case $ac_file$ac_mode in
     "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # Older Autoconf quotes --file arguments for eval, but not when files
   # are listed without --file.  Let's play safe and only enable the eval
   # if we detect the quoting.
   case $CONFIG_FILES in
@@ -17036,7 +17338,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
     # Strip MF so we end up with the name of the file.
     mf=`echo "$mf" | sed -e 's/:.*$//'`
     # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named `Makefile.in', but
+    # We used to match only the files named 'Makefile.in', but
     # some people rename them; so instead we look at the file content.
     # Grep'ing the first line is not enough: some people post-process
     # each Makefile.in and add a new line on top of each file to say so.
@@ -17070,21 +17372,19 @@ $as_echo X"$mf" |
       continue
     fi
     # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running `make'.
+    # from the Makefile without running 'make'.
     DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
     test -z "$DEPDIR" && continue
     am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "am__include" && continue
+    test -z "$am__include" && continue
     am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # When using ansi2knr, U may be empty or an underscore; expand it
-    U=`sed -n 's/^U = //p' < "$mf"`
     # Find all dependency output files, they are included files with
     # $(DEPDIR) in their names.  We invoke sed twice because it is the
     # simplest approach to changing $(DEPDIR) to its actual value in the
     # expansion.
     for file in `sed -n "
       s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
       # Make sure the directory exists.
       test -f "$dirpart/$file" && continue
       fdir=`$as_dirname -- "$file" ||
@@ -17138,8 +17438,8 @@ $as_echo X"$file" |
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -17171,15 +17471,6 @@ available_tags=""
 
 # ### BEGIN LIBTOOL CONFIG
 
-# Assembler program.
-AS=$lt_AS
-
-# DLL creation program.
-DLLTOOL=$lt_DLLTOOL
-
-# Object dumper program.
-OBJDUMP=$lt_OBJDUMP
-
 # Which release of libtool.m4 was used?
 macro_version=$macro_version
 macro_revision=$macro_revision
@@ -17202,6 +17493,9 @@ SHELL=$lt_SHELL
 # An echo program that protects backslashes.
 ECHO=$lt_ECHO
 
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
 # The host system.
 host_alias=$host_alias
 host=$host
@@ -17257,6 +17551,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
 # convert \$build files to toolchain format.
 to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
 # Method to check whether dependent libraries are shared objects.
 deplibs_check_method=$lt_deplibs_check_method
 
@@ -17269,6 +17566,9 @@ file_magic_glob=$lt_file_magic_glob
 # Find potential files using nocaseglob when deplibs_check_method = "file_magic".
 want_nocaseglob=$lt_want_nocaseglob
 
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
 # Command to associate shared and link libraries.
 sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
 
@@ -17497,10 +17797,6 @@ no_undefined_flag=$lt_no_undefined_flag
 # This must work even if \$libdir does not exist
 hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-# If ld is used when linking, flag to hardcode \$libdir into a binary
-# during linking.  This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
 # Whether we need a single "-rpath" flag with a separated argument.
 hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
@@ -17751,6 +18047,8 @@ fi
   chmod +x "$ofile"
 
  ;;
+    "python/setup.py":F) chmod +x python/setup.py ;;
+    "xml2-config":F) chmod +x xml2-config ;;
 
   esac
 done # for ac_tag
@@ -17790,5 +18088,4 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
 
-chmod +x xml2-config python/setup.py
 echo Done configuring
similarity index 84%
rename from configure.in
rename to configure.ac
index 0fb4983..14ac0a8 100644 (file)
@@ -1,13 +1,14 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_PREREQ(2.59)
-AC_INIT(entities.c)
-AM_CONFIG_HEADER(config.h)
+AC_PREREQ([2.63])
+AC_INIT
+AC_CONFIG_SRCDIR([entities.c])
+AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CANONICAL_HOST
 
 LIBXML_MAJOR_VERSION=2
-LIBXML_MINOR_VERSION=8
-LIBXML_MICRO_VERSION=0
+LIBXML_MINOR_VERSION=9
+LIBXML_MICRO_VERSION=2
 LIBXML_MICRO_VERSION_SUFFIX=
 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION$LIBXML_MICRO_VERSION_SUFFIX
 LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION
@@ -58,18 +59,18 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 dnl Checks for programs.
 AC_PROG_CC
 AC_PROG_INSTALL
+AC_PROG_LN_S
 AC_PROG_MKDIR_P
 AC_PROG_CPP
-AC_PATH_PROG(RM, rm, /bin/rm)
 AC_PATH_PROG(MV, mv, /bin/mv)
 AC_PATH_PROG(TAR, tar, /bin/tar)
 AC_PATH_PROG(PERL, perl, /usr/bin/perl)
 AC_PATH_PROG(WGET, wget, /usr/bin/wget)
 AC_PATH_PROG(XMLLINT, xmllint, /usr/bin/xmllint)
 AC_PATH_PROG(XSLTPROC, xsltproc, /usr/bin/xsltproc)
+PKG_PROG_PKG_CONFIG
 
-AC_LIBTOOL_WIN32_DLL
-AM_PROG_LIBTOOL
+LT_INIT
 
 dnl
 dnl if the system support linker version scripts for symbol versioning
@@ -97,7 +98,7 @@ dnl
 dnl zlib option might change flags, so we save them initially
 dnl
 _cppflags="${CPPFLAGS}"
-_ldflags="${LDFLAGS}"
+_libs="${LIBS}"
 
 AC_ARG_WITH(c14n,
 [  --with-c14n             add the Canonicalization support (on)])
@@ -116,11 +117,11 @@ AC_ARG_WITH(history,
 AC_ARG_WITH(html,
 [  --with-html             add the HTML support (on)])
 dnl Specific dir for HTML output ?
-AC_ARG_WITH(html-dir, AC_HELP_STRING([--with-html-dir=path],
+AC_ARG_WITH(html-dir, AS_HELP_STRING([--with-html-dir=path],
             [path to base html directory, default $datadir/doc/html]),
             [HTML_DIR=$withval], [HTML_DIR='$(datadir)/doc'])
 
-AC_ARG_WITH(html-subdir, AC_HELP_STRING([--with-html-subdir=path],
+AC_ARG_WITH(html-subdir, AS_HELP_STRING([--with-html-subdir=path],
             [directory used under html-dir, default $PACKAGE-$VERSION/html]),
             [test "x$withval" != "x" && HTML_DIR="$HTML_DIR/$withval"],
             [HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"])
@@ -147,6 +148,9 @@ AC_ARG_WITH(push,
 [  --with-push             add the PUSH parser interfaces (on)])
 AC_ARG_WITH(python,
 [  --with-python[[=DIR]]     build Python bindings if found])
+AC_ARG_WITH(python_install_dir,
+[  --with-python-install-dir=DIR
+                          install Python bindings in DIR])
 AC_ARG_WITH(reader,
 [  --with-reader           add the xmlReader parsing interface (on)])
 AC_ARG_WITH(readline,
@@ -154,7 +158,7 @@ AC_ARG_WITH(readline,
   if test "$withval" != "no" -a "$withval" != "yes"; then
     RDL_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 ])
 AC_ARG_WITH(regexps,
@@ -190,7 +194,7 @@ AC_ARG_WITH(zlib,
   if test "$withval" != "no" -a "$withval" != "yes"; then
     Z_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 ])
 AC_ARG_WITH(lzma,
@@ -198,15 +202,18 @@ AC_ARG_WITH(lzma,
   if test "$withval" != "no" -a "$withval" != "yes"; then
     LZMA_DIR=$withval
     CPPFLAGS="${CPPFLAGS} -I$withval/include"
-    LDFLAGS="${LDFLAGS} -L$withval/lib"
+    LIBS="${LIBS} -L$withval/lib"
   fi
 ])
 AC_ARG_WITH(coverage,
 [  --with-coverage         build for code coverage with GCC (off)])
 
 AC_ARG_ENABLE(rebuild-docs,
-[  --enable-rebuild-docs[[=yes/no]]  rebuild some generated docs [[default=yes]]])
-AM_CONDITIONAL([REBUILD_DOCS], [test "$enable_rebuild_docs" = "no"])
+[  --enable-rebuild-docs[[=yes/no]]  rebuild some generated docs [[default=no]]])
+if test "$enable_rebuild_docs" = "yes" -a "$srcdir" != "."; then
+  AC_MSG_ERROR([cannot rebuild docs when builddir != srcdir])
+fi
+AM_CONDITIONAL([REBUILD_DOCS], [test "$enable_rebuild_docs" = "yes" -o "$USER" = "veillard"])
 
 dnl
 dnl hard dependancies on options
@@ -219,6 +226,7 @@ fi
 if test "$with_schematron" = "yes"
 then
     with_pattern=yes
+    with_tree=yes
     with_xpath=yes
 fi
 if test "$with_reader" = "yes"
@@ -383,6 +391,8 @@ if test "$with_zlib" = "no"; then
     echo "Disabling compression support"
 else
     AC_CHECK_HEADERS(zlib.h,
+        [SAVE_LDFLAGS="${LDFLAGS}"
+        LDFLAGS="-L${Z_DIR}/lib"
        AC_CHECK_LIB(z, gzread,[
            AC_DEFINE([HAVE_LIBZ], [1], [Have compression library])
            WITH_ZLIB=1
@@ -396,7 +406,8 @@ else
                esac]
            else
                Z_LIBS="-lz"
-           fi]))
+           fi])
+        LDFLAGS="${SAVE_LDFLAGS}"])
 fi
 
 AC_SUBST(Z_CFLAGS)
@@ -411,16 +422,36 @@ WITH_LZMA=0
 if test "$with_lzma" = "no"; then
     echo "Disabling compression support"
 else
-    AC_CHECK_HEADERS(lzma.h,
-       AC_CHECK_LIB(lzma, lzma_code,[
-           AC_DEFINE([HAVE_LIBLZMA], [1], [Have compression library])
-           WITH_LZMA=1
-           if test "x${LZMA_DIR}" != "x"; then
-               LZMA_CFLAGS="-I${LZMA_DIR}/include"
-               LZMA_LIBS="-L${LZMA_DIR}/lib -llzma"
-           else
-               LZMA_LIBS="-llzma"
-           fi]))
+    # Try pkg-config first so that static linking works.
+    # If this succeeeds, we ignore the WITH_LZMA directory.
+    PKG_CHECK_MODULES([LZMA],[liblzma],
+        [have_liblzma=yes],
+        [have_liblzma=no])
+
+     # If pkg-config failed, fall back to AC_CHECK_LIB. This
+     # will not pick up the necessary LIBS flags for liblzma's
+     # private dependencies, though, so static linking may fail.
+     if test "x$have_liblzma" = "xno"; then
+         AC_CHECK_HEADERS(lzma.h,
+           [SAVE_LDFLAGS="${LDFLAGS}"
+            LDFLAGS="-L${LZMA_DIR}/lib"
+            AC_CHECK_LIB(lzma, lzma_code,[
+                have_liblzma=yes
+                if test "x${LZMA_DIR}" != "x"; then
+                    LZMA_CFLAGS="-I${LZMA_DIR}/include"
+                    LZMA_LIBS="-L${LZMA_DIR}/lib -llzma"
+                else
+                    LZMA_LIBS="-llzma"
+                fi],
+                [have_liblzma=no])
+            LDFLAGS="${SAVE_LDFLAGS}"])
+    fi
+
+    # Found the library via either method?
+    if test "x$have_liblzma" = "xyes"; then
+        AC_DEFINE([HAVE_LIBLZMA], [1], [Have compression library])
+        WITH_LZMA=1
+    fi
 fi
 
 AC_SUBST(LZMA_CFLAGS)
@@ -428,7 +459,7 @@ AC_SUBST(LZMA_LIBS)
 AC_SUBST(WITH_LZMA)
 
 CPPFLAGS=${_cppflags}
-LDFLAGS=${_ldflags}
+LIBS=${_libs}
 
 echo Checking headers
 
@@ -500,6 +531,11 @@ AC_CHECK_HEADERS([dl.h])
 AC_CHECK_HEADERS([dlfcn.h])
 
 
+echo Checking types
+
+AC_TYPE_UINT32_T
+
+
 echo Checking libraries
 
 dnl Checks for library functions.
@@ -509,11 +545,17 @@ AC_CHECK_FUNCS(finite isnand fp_class class fpclass)
 AC_CHECK_FUNCS(strftime localtime gettimeofday ftime)
 AC_CHECK_FUNCS(stat _stat signal)
 AC_CHECK_FUNCS(rand rand_r srand time)
+AC_CHECK_FUNCS(isascii mmap munmap putenv)
+
+AH_VERBATIM([HAVE_MUNMAP_AFTER],[/* mmap() is no good without munmap() */
+#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP)
+#  undef /**/ HAVE_MMAP
+#endif])
 
 dnl Checking for va_copy availability
 AC_MSG_CHECKING([for va_copy])
-AC_TRY_LINK([#include <stdarg.h>
-va_list ap1,ap2;], [va_copy(ap1,ap2);],
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
+va_list ap1,ap2;]], [[va_copy(ap1,ap2);]])],
 have_va_copy=yes,
 have_va_copy=no)
 AC_MSG_RESULT($have_va_copy)
@@ -521,8 +563,8 @@ if test x"$have_va_copy" = x"yes"; then
     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
 else
     AC_MSG_CHECKING([for __va_copy])
-    AC_TRY_LINK([#include <stdarg.h>
-    va_list ap1,ap2;], [__va_copy(ap1,ap2);],
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
+    va_list ap1,ap2;]], [[__va_copy(ap1,ap2);]])],
     have___va_copy=yes,
     have___va_copy=no)
     AC_MSG_RESULT($have___va_copy)
@@ -531,6 +573,16 @@ else
     fi
 fi
 
+dnl Checking whether va_list is an array type
+AC_MSG_CHECKING([whether va_list is an array type])
+AC_TRY_COMPILE2([
+#include <stdarg.h>
+void a(va_list * ap) {}],[
+va_list ap1, ap2; a(&ap1); ap2 = (va_list) ap1],[
+  AC_MSG_RESULT(no)],[
+  AC_MSG_RESULT(yes)
+  AC_DEFINE([VA_LIST_IS_ARRAY], [1],[Define if va_list is an array type])])
+
 dnl Checks for inet libraries:
 AC_SEARCH_LIBS(gethostent, [nsl])
 AC_SEARCH_LIBS(setsockopt, [socket net network])
@@ -563,6 +615,37 @@ AC_TRY_COMPILE2([
       XML_SOCKLEN_T="int"])])])
 AC_DEFINE_UNQUOTED(XML_SOCKLEN_T, $XML_SOCKLEN_T, [Determine what socket length (socklen_t) data type is])
 
+dnl Checking if gethostbyname() argument is const.
+AC_MSG_CHECKING([for const gethostbyname() argument])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <netdb.h>]],
+    [[(void)gethostbyname((const char *)"");]])],
+have_gethostbyname_const_arg=yes,
+have_gethostbyname_const_arg=no)
+AC_MSG_RESULT($have_gethostbyname_const_arg)
+if test x"$have_gethostbyname_const_arg" = x"yes"; then
+    AC_DEFINE([GETHOSTBYNAME_ARG_CAST], [],
+      [Type cast for the gethostbyname() argument])
+else
+    AC_DEFINE([GETHOSTBYNAME_ARG_CAST], [(char *)],
+      [Type cast for the gethostbyname() argument])
+fi
+
+dnl Checking if send() second argument is const.
+AC_MSG_CHECKING([for const send() second argument])
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <sys/socket.h>]],
+    [[(void)send(1,(const char *)"",1,1);]])],
+have_send_const_arg2=yes,
+have_send_const_arg2=no)
+AC_MSG_RESULT($have_send_const_arg2)
+if test x"$have_send_const_arg2" = x"yes"; then
+    AC_DEFINE([SEND_ARG2_CAST], [],
+      [Type cast for the send() function 2nd arg])
+else
+    AC_DEFINE([SEND_ARG2_CAST], [(char *)],
+      [Type cast for the send() function 2nd arg])
+fi
+
 dnl ***********************Checking for availability of IPv6*******************
 
 AC_MSG_CHECKING([whether to enable IPv6])
@@ -573,13 +656,13 @@ then
 fi
 if test $enable_ipv6 = yes; then
   have_ipv6=no
-  AC_TRY_COMPILE([
-    #include <sys/types.h>
-    #include <sys/socket.h>
-    ][
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#   include <sys/types.h>
+#   include <sys/socket.h>
+    ]], [[
     struct sockaddr_storage ss;
     socket(AF_INET6, SOCK_STREAM, 0)
-    ],
+    ]])],
     have_ipv6=yes,
     have_ipv6=no
   )
@@ -597,26 +680,26 @@ if test $enable_ipv6 = yes; then
     dnl present.
     dnl ********************************************************************
     AC_MSG_CHECKING([struct sockaddr::ss_family])
-    AC_TRY_COMPILE([
-      #include <sys/types.h>
-      #include <sys/socket.h>
-      ][
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#     include <sys/types.h>
+#     include <sys/socket.h>
+      ]], [[
       struct sockaddr_storage ss ;
       ss.ss_family = 0 ;
-      ],
+      ]])],
       have_ss_family=yes,
       have_ss_family=no
     )
     AC_MSG_RESULT($have_ss_family)
     if test x$have_ss_family = xno ; then
       AC_MSG_CHECKING([broken struct sockaddr::ss_family])
-      AC_TRY_COMPILE([
-        #include <sys/types.h>
-        #include <sys/socket.h>
-        ][
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#       include <sys/types.h>
+#       include <sys/socket.h>
+        ]], [[
         struct sockaddr_storage ss ;
         ss.__ss_family = 0 ;
-        ],
+        ]])],
         have_broken_ss_family=yes,
         have_broken_ss_family=no
       )
@@ -752,7 +835,7 @@ if test "$with_python" != "no" ; then
                 if test -x "$PYTHON"
                 then
                     echo Found python in environment PYTHON=$PYTHON
-                    with_python=`$PYTHON -c "import sys; print sys.exec_prefix"`
+                    with_python=`$PYTHON -c "import sys; print(sys.exec_prefix)"`
                 else
                     AC_PATH_PROG(PYTHON, python python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5)
                fi
@@ -761,50 +844,57 @@ if test "$with_python" != "no" ; then
     fi
     if test "$PYTHON" != ""
     then
-        PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
+        PYTHON_VERSION=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_version())"`
+       PYTHON_INCLUDES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_inc())"`
+# does not work as it produce a /usr/lib/python path instead of/usr/lib64/python
+#
+#      PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib())"`
        echo Found Python version $PYTHON_VERSION
     fi
-    if test "$PYTHON_VERSION" != ""
+    if test "$PYTHON_VERSION" != "" -a "$PYTHON_INCLUDES" = ""
     then
-       if test -r $with_python/include/python$PYTHON_VERSION/Python.h -a \
-          -d $with_python/lib/python$PYTHON_VERSION/site-packages
+       if test -r $with_python/include/python$PYTHON_VERSION/Python.h
        then
            PYTHON_INCLUDES=$with_python/include/python$PYTHON_VERSION
-           PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
        else
            if test -r $prefix/include/python$PYTHON_VERSION/Python.h
            then
                PYTHON_INCLUDES=$prefix/include/python$PYTHON_VERSION
-               PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
            else
                if test -r /usr/include/python$PYTHON_VERSION/Python.h
                then
                    PYTHON_INCLUDES=/usr/include/python$PYTHON_VERSION
-                   PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
                else
-                   if test -r $with_python/include/Python.h -a \
-                      -d $with_python/lib/site-packages
+                   if test -r $with_python/include/Python.h
                    then
                        PYTHON_INCLUDES=$with_python/include
-                       PYTHON_SITE_PACKAGES=$with_python/lib/site-packages
                    else
                        echo could not find python$PYTHON_VERSION/Python.h or $with_python/include/Python.h
                    fi
                fi
            fi
-           if test ! -d "$PYTHON_SITE_PACKAGES"
-           then
-                   PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib()"`
-           fi
        fi
-       PYTHON_LIBS=`python$PYTHON_VERSION-config --ldflags`
     fi
-    if test "$with_python" != ""
+    if test "$with_python_install_dir" != ""
     then
-        pythondir='$(PYTHON_SITE_PACKAGES)'
-    else
-        pythondir='$(libdir)/python$(PYTHON_VERSION)/site-packages'
+       PYTHON_SITE_PACKAGES="$with_python_install_dir"
+    fi
+    if test "$PYTHON_VERSION" != "" -a "$PYTHON_SITE_PACKAGES" = ""
+    then
+       if test -d $libdir/python$PYTHON_VERSION/site-packages
+       then
+           PYTHON_SITE_PACKAGES=$libdir/python$PYTHON_VERSION/site-packages
+       else
+           if test -d $with_python/lib/site-packages
+           then
+               PYTHON_SITE_PACKAGES=$with_python/lib/site-packages
+           else
+               PYTHON_SITE_PACKAGES=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib())"`
+           fi
+       fi
     fi
+    pythondir='$(PYTHON_SITE_PACKAGES)'
+    PYTHON_LIBS=`python$PYTHON_VERSION-config --ldflags`
 else
     PYTHON=
 fi
@@ -939,6 +1029,7 @@ WITH_THREADS=0
 THREAD_CFLAGS=""
 TEST_THREADS=""
 THREADS_W32=""
+WITH_THREAD_ALLOC=0
 
 if test "$with_threads" = "no" ; then
     echo Disabling multithreaded support
@@ -949,7 +1040,7 @@ else
     case $host_os in
        *mingw32*) if test "$with_threads" != "pthread" && test "$with_threads" != "no"; then
                WITH_THREADS="1"
-               THREADS_W32="Win32"
+               THREADS_W32="1"
                THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS"
            fi
        ;;
@@ -1002,7 +1093,7 @@ else
     fi
 fi
 if test "$with_thread_alloc" = "yes" -a "$WITH_THREADS" = "1" ; then
-    THREAD_CFLAGS="$THREAD_CFLAGS -DLIBXML_THREAD_ALLOC_ENABLED"
+    WITH_THREAD_ALLOC=1
 fi
 
 AC_SUBST(THREAD_LIBS)
@@ -1010,7 +1101,8 @@ AC_SUBST(BASE_THREAD_LIBS)
 AC_SUBST(WITH_THREADS)
 AC_SUBST(THREAD_CFLAGS)
 AC_SUBST(TEST_THREADS)
-AC_SUBST(THREADS_W32)
+AC_SUBST(WITH_THREAD_ALLOC)
+AM_CONDITIONAL([THREADS_W32],[test -n "$THREADS_W32"])
 
 dnl
 dnl xmllint shell history
@@ -1134,6 +1226,7 @@ else
     TEST_SAX=SAXtests
 fi
 AC_SUBST(WITH_SAX1)
+AM_CONDITIONAL(WITH_SAX1_SOURCES, test "${WITH_TRIO}" = "1")
 AC_SUBST(TEST_SAX)
 
 if test "$with_push" = "no" ; then
@@ -1262,6 +1355,29 @@ AC_SUBST(WITH_XINCLUDE)
 AC_SUBST(XINCLUDE_OBJ)
 AC_SUBST(TEST_XINCLUDE)
 
+if test "$with_xptr" = "" -a "$with_xpath" = "no" ; then
+    with_xptr=no
+fi
+
+if test "$with_schematron" = "" -a "$with_xpath" = "no" ; then
+    with_schematron=no
+fi
+
+if test "$with_schematron" = "no" ; then
+    echo "Disabling Schematron support"
+    WITH_SCHEMATRON=0
+    TEST_SCHEMATRON=
+else 
+    echo "Enabled Schematron support"
+    WITH_SCHEMATRON=1
+    TEST_SCHEMATRON="Schematrontests"
+    with_xpath=yes
+    with_pattern=yes
+    with_schematron=yes
+fi
+AC_SUBST(WITH_SCHEMATRON)
+AC_SUBST(TEST_SCHEMATRON)
+
 if test "$with_xpath" = "no" ; then
     echo Disabling XPATH support
     WITH_XPATH=0
@@ -1300,10 +1416,10 @@ else
 
     AC_CHECK_HEADER(iconv.h,
        AC_MSG_CHECKING(for iconv)
-       AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],[
+       AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+#include <iconv.h>]],[[
 iconv_t cd = iconv_open ("","");
-iconv (cd, NULL, NULL, NULL, NULL);],[
+iconv (cd, NULL, NULL, NULL, NULL);]])],[
            AC_MSG_RESULT(yes)
            WITH_ICONV=1],[
            AC_MSG_RESULT(no)
@@ -1314,10 +1430,10 @@ iconv (cd, NULL, NULL, NULL, NULL);],[
            LDFLAGS="${LDFLAGS} ${ICONV_LIBS}"
            LIBS="${LIBS} -liconv"
 
-           AC_TRY_LINK([#include <stdlib.h>
-#include <iconv.h>],[
+           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+#include <iconv.h>]],[[
 iconv_t cd = iconv_open ("","");
-iconv (cd, NULL, NULL, NULL, NULL);],[
+iconv (cd, NULL, NULL, NULL, NULL);]])],[
                AC_MSG_RESULT(yes)
                WITH_ICONV=1
                ICONV_LIBS="${ICONV_LIBS} -liconv"
@@ -1330,7 +1446,7 @@ iconv (cd, NULL, NULL, NULL, NULL);],[
        if test "$WITH_ICONV" = "1" ; then
                AC_MSG_CHECKING([for iconv declaration])
                AC_CACHE_VAL(xml_cv_iconv_arg2, [
-                       AC_TRY_COMPILE([#include <stdlib.h>
+                       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
 #include <iconv.h>
 extern
 #ifdef __cplusplus
@@ -1341,7 +1457,7 @@ size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, si
 #else
 size_t iconv();
 #endif
-], [], xml_cv_iconv_arg2="", xml_cv_iconv_arg2="const")])
+]], [])], xml_cv_iconv_arg2="", xml_cv_iconv_arg2="const")])
 
                xml_cv_iconv_decl="extern size_t iconv (iconv_t cd, $xml_cv_iconv_arg2 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
                AC_MSG_RESULT([${xml_xxx:-
@@ -1365,14 +1481,14 @@ XML_LIBTOOLLIBS="libxml2.la"
 AC_SUBST(WITH_ICONV)
 
 WITH_ICU=0
+ICU_LIBS=""
 if test "$with_icu" != "yes" ; then
     echo Disabling ICU support
 else
     ICU_CONFIG=icu-config
     if ${ICU_CONFIG} --cflags >/dev/null 2>&1
     then
-        ICU_LIBS=`icu-config --ldflags`
-        LDFLAGS="$LDFLAGS $ICU_LIBS"
+        ICU_LIBS=`${ICU_CONFIG} --ldflags`
         WITH_ICU=1
         echo Enabling ICU support
     else
@@ -1380,6 +1496,7 @@ else
     fi
 fi
 AC_SUBST(WITH_ICU)
+AC_SUBST(ICU_LIBS)
 
 WITH_ISO8859X=1
 if test "$WITH_ICONV" != "1" ; then
@@ -1390,20 +1507,6 @@ fi
 fi
 AC_SUBST(WITH_ISO8859X)
 
-if test "$with_schematron" = "no" ; then
-    echo "Disabling Schematron support"
-    WITH_SCHEMATRON=0
-    TEST_SCHEMATRON=
-else    
-    echo "Enabled Schematron support"
-    WITH_SCHEMATRON=1
-    TEST_SCHEMATRON="Schematrontests"
-    with_xpath=yes
-    with_pattern=yes
-fi
-AC_SUBST(WITH_SCHEMATRON)
-AC_SUBST(TEST_SCHEMATRON)
-
 if test "$with_schemas" = "no" ; then
     echo "Disabling Schemas/Relax-NG support"
     WITH_SCHEMAS=0
@@ -1550,10 +1653,12 @@ AC_SUBST(RELDATE)
 AC_SUBST(PYTHON_TESTS)
 
 rm -f COPYING.LIB COPYING
-ln -s Copyright COPYING
+ln -s $srcdir/Copyright COPYING
 
 # keep on one line for cygwin c.f. #130896
-AC_OUTPUT(libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h xml2-config libxml-2.0.pc libxml-2.0-uninstalled.pc python/setup.py)
+AC_CONFIG_FILES([libxml2.spec:libxml.spec.in Makefile include/Makefile include/libxml/Makefile doc/Makefile doc/examples/Makefile doc/devhelp/Makefile example/Makefile python/Makefile python/tests/Makefile xstc/Makefile include/libxml/xmlversion.h libxml-2.0.pc libxml-2.0-uninstalled.pc libxml2-config.cmake])
+AC_CONFIG_FILES([python/setup.py], [chmod +x python/setup.py])
+AC_CONFIG_FILES([xml2-config], [chmod +x xml2-config])
+AC_OUTPUT
 
-chmod +x xml2-config python/setup.py
 echo Done configuring
index 3e9ec7a..b05fdff 100644 (file)
@@ -85,7 +85,7 @@ xmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED)
  *
  * Check that a given namespace is in scope on a node.
  *
- * Returns 1 if in scope, -1 in case of argument error, 
+ * Returns 1 if in scope, -1 in case of argument error,
  *         -2 if the namespace is not in scope, and -3 if not on
  *         an ancestor node.
  */
@@ -254,10 +254,12 @@ xmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name)
            xmlDebugErr(ctxt, XML_CHECK_NO_NAME, "Name is NULL");
            return;
        }
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
         if (xmlValidateName(name, 0)) {
            xmlDebugErr3(ctxt, XML_CHECK_NOT_NCNAME,
                         "Name is not an NCName '%s'", (const char *) name);
        }
+#endif
        if ((ctxt->dict != NULL) &&
            (!xmlDictOwns(ctxt->dict, name)) &&
             ((ctxt->doc == NULL) ||
@@ -311,7 +313,7 @@ xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) {
                (node != (xmlNodePtr) node->parent->properties))
                xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
                     "Attr has no prev and not first of attr list\n");
-               
+
         } else if ((node->parent != NULL) && (node->parent->children != node))
            xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
                     "Node has no prev and not first of parent list\n");
@@ -354,7 +356,6 @@ xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) {
        (node->type != XML_ELEMENT_DECL) &&
        (node->type != XML_ATTRIBUTE_DECL) &&
        (node->type != XML_DTD_NODE) &&
-       (node->type != XML_ELEMENT_DECL) &&
        (node->type != XML_HTML_DOCUMENT_NODE) &&
        (node->type != XML_DOCUMENT_NODE)) {
        if (node->content != NULL)
@@ -1068,7 +1069,7 @@ xmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
         return;
     }
     xmlCtxtDumpOneNode(ctxt, node);
-    if ((node->type != XML_NAMESPACE_DECL) && 
+    if ((node->type != XML_NAMESPACE_DECL) &&
         (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) {
         ctxt->depth++;
         xmlCtxtDumpNodeList(ctxt, node->children);
@@ -1603,7 +1604,7 @@ int
 xmlLsCountNode(xmlNodePtr node) {
     int ret = 0;
     xmlNodePtr list = NULL;
-    
+
     if (node == NULL)
        return(0);
 
@@ -1644,7 +1645,7 @@ xmlLsCountNode(xmlNodePtr node) {
            ret = 1;
            break;
     }
-    for (;list != NULL;ret++) 
+    for (;list != NULL;ret++)
         list = list->next;
     return(ret);
 }
@@ -1712,11 +1713,11 @@ xmlLsOneNode(FILE *output, xmlNodePtr node) {
     if (node->type != XML_NAMESPACE_DECL) {
        if (node->properties != NULL)
            fprintf(output, "a");
-       else    
+       else
            fprintf(output, "-");
-       if (node->nsDef != NULL) 
+       if (node->nsDef != NULL)
            fprintf(output, "n");
-       else    
+       else
            fprintf(output, "-");
     }
 
@@ -1786,7 +1787,7 @@ xmlLsOneNode(FILE *output, xmlNodePtr node) {
  * xmlBoolToText:
  * @boolval: a bool to turn into text
  *
- * Convenient way to turn bool into text 
+ * Convenient way to turn bool into text
  *
  * Returns a pointer to either "True" or "False"
  */
@@ -1802,7 +1803,7 @@ xmlBoolToText(int boolval)
 #ifdef LIBXML_XPATH_ENABLED
 /****************************************************************
  *                                                             *
- *             The XML shell related functions                 *
+ *             The XML shell related functions                 *
  *                                                             *
  ****************************************************************/
 
@@ -2053,7 +2054,7 @@ xmlShellBase(xmlShellCtxtPtr ctxt,
     if (node == NULL) {
        fprintf(ctxt->output, "NULL\n");
        return (0);
-    }    
+    }
 
     base = xmlNodeGetBase(node->doc, node);
 
@@ -2280,7 +2281,7 @@ xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
     if (node == NULL) {
        fprintf(ctxt->output, "NULL\n");
        return (0);
-    }    
+    }
     if ((node->type == XML_DOCUMENT_NODE) ||
         (node->type == XML_HTML_DOCUMENT_NODE)) {
         xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node);
@@ -2415,7 +2416,7 @@ xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
     if (node == NULL) {
        fprintf(ctxt->output, "NULL\n");
        return (0);
-    }    
+    }
     if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) {
 #ifdef LIBXML_HTML_ENABLED
         if (node->type == XML_HTML_DOCUMENT_NODE)
@@ -2753,7 +2754,7 @@ xmlShellDu(xmlShellCtxtPtr ctxt,
  * xmlShellPwd:
  * @ctxt:  the shell context
  * @buffer:  the output buffer
- * @node:  a node 
+ * @node:  a node
  * @node2:  unused
  *
  * Implements the XML shell function "pwd"
@@ -2798,7 +2799,7 @@ xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer,
  * @input:  the line reading function
  * @output:  the output FILE*, defaults to stdout if NULL
  *
- * Implements the XML shell 
+ * Implements the XML shell
  * This allow to load, validate, view, modify and save a document
  * using a environment similar to a UNIX commandline.
  */
@@ -2947,7 +2948,7 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
         } else if (!strcmp(command, "save")) {
             xmlShellSave(ctxt, arg, NULL, NULL);
         } else if (!strcmp(command, "write")) {
-           if ((arg == NULL) || (arg[0] == 0))
+           if (arg[0] == 0)
                xmlGenericError(xmlGenericErrorContext,
                         "Write command requires a filename argument\n");
            else
@@ -3242,7 +3243,12 @@ xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
                 ctxt->node = (xmlNodePtr) ctxt->doc;
             } else {
 #ifdef LIBXML_XPATH_ENABLED
+                int l;
+
                 ctxt->pctxt->node = ctxt->node;
+               l = strlen(arg);
+               if ((l >= 2) && (arg[l - 1] == '/'))
+                   arg[l - 1] = 0;
                 list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
 #else
                 list = NULL;
diff --git a/depcomp b/depcomp
index df8eea7..4ebd5b3 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -1,10 +1,9 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -28,9 +27,9 @@ scriptversion=2009-04-28.21; # UTC
 
 case $1 in
   '')
-     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
   -h | --h*)
     cat <<\EOF
 Usage: depcomp [--help] [--version] PROGRAM [ARGS]
@@ -40,11 +39,11 @@ as side-effects.
 
 Environment variables:
   depmode     Dependency tracking mode.
-  source      Source file read by `PROGRAMS ARGS'.
-  object      Object file output by `PROGRAMS ARGS'.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
   DEPDIR      directory where to store dependencies.
   depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputing dependencies.
+  tmpdepfile  Temporary file to use when outputting dependencies.
   libtool     Whether libtool is used (yes/no).
 
 Report bugs to <bug-automake@gnu.org>.
@@ -57,6 +56,66 @@ EOF
     ;;
 esac
 
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='  '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
 if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   echo "depcomp: Variables source, object and depmode must be set" 1>&2
   exit 1
@@ -69,6 +128,9 @@ tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
 
 rm -f "$tmpdepfile"
 
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
 # Some modes work just like other modes, but use different flags.  We
 # parameterize here, but still list the modes in the big case below,
 # to make depend.m4 easier to write.  Note that we *cannot* use a case
@@ -80,18 +142,32 @@ if test "$depmode" = hp; then
 fi
 
 if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
 fi
 
 cygpath_u="cygpath -u -f -"
 if test "$depmode" = msvcmsys; then
-   # This is just like msvisualcpp but w/o cygpath translation.
-   # Just convert the backslash-escaped backslashes to single forward
-   # slashes to satisfy depend.m4
-   cygpath_u="sed s,\\\\\\\\,/,g"
-   depmode=msvisualcpp
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
 fi
 
 case "$depmode" in
@@ -114,8 +190,7 @@ gcc3)
   done
   "$@"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -123,13 +198,17 @@ gcc3)
   ;;
 
 gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
 ## There are various ways to get dependency output from gcc.  Here's
 ## why we pick this rather obscure method:
 ## - Don't want to use -MD because we'd like the dependencies to end
 ##   up in a subdir.  Having to rename by hand is ugly.
 ##   (We might end up doing this anyway to support other compilers.)
 ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
 ## - Using -M directly means running the compiler twice (even worse
 ##   than renaming).
   if test -z "$gccflag"; then
@@ -137,31 +216,31 @@ gcc)
   fi
   "$@" -Wp,"$gccflag$tmpdepfile"
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
   sed -e 's/^[^:]*: / /' \
       -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
+## This next piece of magic avoids the "deleted header file" problem.
 ## The problem is that when a header file which appears in a .P file
 ## is deleted, the dependency causes make to die (because there is
 ## typically no way to rebuild the header).  We avoid this by adding
 ## dummy dependencies for each header file.  Too bad gcc doesn't do
 ## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
+## Some versions of gcc put a space before the ':'.  On the theory
 ## that the space means something, we add a space to the output as
-## well.
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
 ## Some versions of the HPUX 10.20 sed can't process this invocation
 ## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -179,8 +258,7 @@ sgi)
     "$@" -MDupdate "$tmpdepfile"
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -188,43 +266,41 @@ sgi)
 
   if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
     echo "$object : \\" > "$depfile"
-
     # Clip off the initial element (the dependent).  Don't try to be
     # clever and replace this with sed code, as IRIX sed won't handle
     # lines with more than a fixed number of characters (4096 in
     # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
+    # the IRIX cc adds comments like '#:fec' to the end of the
     # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> "$depfile"
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
     echo >> "$depfile"
-
     # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> "$depfile"
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
   else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile"
   ;;
 
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
 aix)
   # The C for AIX Compiler uses -M and outputs the dependencies
   # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
   # start of each line; $object doesn't have directory information.
   # Version 6 uses the directory in both cases.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.u
     tmpdepfile2=$base.u
@@ -237,9 +313,7 @@ aix)
     "$@" -M
   fi
   stat=$?
-
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
     exit $stat
   fi
@@ -248,44 +322,100 @@ aix)
   do
     test -f "$tmpdepfile" && break
   done
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-    # That's a tab and a space in the [].
-    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
   fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
   #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
+  # and will wrap long lines using '\' :
   #    foo.o: sub/foo.c ... \
   #     sub/foo.h ... \
   #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
 
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
     rm -f "$tmpdepfile"
     exit $stat
   fi
@@ -297,8 +427,8 @@ icc)
   sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
   # Some versions of the HPUX 10.20 sed can't process this invocation
   # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-    sed -e 's/$/ :/' >> "$depfile"
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -309,9 +439,8 @@ hp2)
   # 'foo.d', which lands next to the object file, wherever that
   # happens to be.
   # Much of this is similar to the tru64 case; see comments there.
-  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-  test "x$dir" = "x$object" && dir=
-  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  set_dir_from  "$object"
+  set_base_from "$object"
   if test "$libtool" = yes; then
     tmpdepfile1=$dir$base.d
     tmpdepfile2=$dir.libs/$base.d
@@ -322,8 +451,7 @@ hp2)
     "$@" +Maked
   fi
   stat=$?
-  if test $stat -eq 0; then :
-  else
+  if test $stat -ne 0; then
      rm -f "$tmpdepfile1" "$tmpdepfile2"
      exit $stat
   fi
@@ -333,77 +461,107 @@ hp2)
     test -f "$tmpdepfile" && break
   done
   if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add `dependent.h:' lines.
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
     sed -ne '2,${
-              s/^ *//
-              s/ \\*$//
-              s/$/:/
-              p
-            }' "$tmpdepfile" >> "$depfile"
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
   else
-    echo "#dummy" > "$depfile"
+    make_dummy_depfile
   fi
   rm -f "$tmpdepfile" "$tmpdepfile2"
   ;;
 
 tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mechanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
 
 #nosideeffect)
   # This comment above is used by automake to tell side-effect
@@ -422,7 +580,7 @@ dashmstdout)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -442,18 +600,18 @@ dashmstdout)
   done
 
   test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for `:'
+  # Require at least two characters before searching for ':'
   # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
   "$@" $dashmflag |
-    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
   rm -f "$depfile"
   cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
 
@@ -503,12 +661,15 @@ makedepend)
   touch "$tmpdepfile"
   ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
   rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
   rm -f "$tmpdepfile" "$tmpdepfile".bak
   ;;
 
@@ -525,7 +686,7 @@ cpp)
     shift
   fi
 
-  # Remove `-o $object'.
+  # Remove '-o $object'.
   IFS=" "
   for arg
   do
@@ -544,10 +705,10 @@ cpp)
     esac
   done
 
-  "$@" -E |
-    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
-    sed '$ s: \\$::' > "$tmpdepfile"
+  "$@" -E \
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    sed '$ s: \\$::' > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
   cat < "$tmpdepfile" >> "$depfile"
@@ -579,23 +740,23 @@ msvisualcpp)
       shift
       ;;
     "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-       set fnord "$@"
-       shift
-       shift
-       ;;
+        set fnord "$@"
+        shift
+        shift
+        ;;
     *)
-       set fnord "$@" "$arg"
-       shift
-       shift
-       ;;
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
     esac
   done
   "$@" -E 2>/dev/null |
   sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
   rm -f "$depfile"
   echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
-  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
   sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
   rm -f "$tmpdepfile"
   ;;
diff --git a/dict.c b/dict.c
index 6de2f03..5f71d55 100644 (file)
--- a/dict.c
+++ b/dict.c
@@ -19,6 +19,7 @@
 #define IN_LIBXML
 #include "libxml.h"
 
+#include <limits.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
@@ -93,7 +94,7 @@ typedef xmlDictEntry *xmlDictEntryPtr;
 struct _xmlDictEntry {
     struct _xmlDictEntry *next;
     const xmlChar *name;
-    int len;
+    unsigned int len;
     int valid;
     unsigned long okey;
 };
@@ -104,8 +105,8 @@ struct _xmlDictStrings {
     xmlDictStringsPtr next;
     xmlChar *free;
     xmlChar *end;
-    int size;
-    int nbStrings;
+    size_t size;
+    size_t nbStrings;
     xmlChar array[1];
 };
 /*
@@ -115,13 +116,15 @@ struct _xmlDict {
     int ref_counter;
 
     struct _xmlDictEntry *dict;
-    int size;
-    int nbElems;
+    size_t size;
+    unsigned int nbElems;
     xmlDictStringsPtr strings;
 
     struct _xmlDict *subdict;
     /* used for randomization */
     int seed;
+    /* used to impose a limit on size */
+    size_t limit;
 };
 
 /*
@@ -140,7 +143,7 @@ static int xmlDictInitialized = 0;
 /*
  * Internal data for random function, protected by xmlDictMutex
  */
-unsigned int rand_seed = 0;
+static unsigned int rand_seed = 0;
 #endif
 #endif
 
@@ -148,13 +151,28 @@ unsigned int rand_seed = 0;
  * xmlInitializeDict:
  *
  * Do the dictionary mutex initialization.
- * this function is not thread safe, initialization should
- * preferably be done once at startup
+ * this function is deprecated
  *
  * Returns 0 if initialization was already done, and 1 if that
  * call led to the initialization
  */
 int xmlInitializeDict(void) {
+    return(0);
+}
+
+/**
+ * __xmlInitializeDict:
+ *
+ * This function is not public
+ * Do the dictionary mutex initialization.
+ * this function is not thread safe, initialization should
+ * normally be done once at setup when called from xmlOnceInit()
+ * we may also land in this code if thread support is not compiled in
+ *
+ * Returns 0 if initialization was already done, and 1 if that
+ * call led to the initialization
+ */
+int __xmlInitializeDict(void) {
     if (xmlDictInitialized)
         return(1);
 
@@ -180,7 +198,7 @@ int __xmlRandom(void) {
     int ret;
 
     if (xmlDictInitialized == 0)
-        xmlInitializeDict();
+        __xmlInitializeDict();
 
     xmlRMutexLock(xmlDictMutex);
 #ifdef HAVE_RAND_R
@@ -213,17 +231,18 @@ xmlDictCleanup(void) {
  * xmlDictAddString:
  * @dict: the dictionnary
  * @name: the name of the userdata
- * @len: the length of the name, if -1 it is recomputed
+ * @len: the length of the name
  *
  * Add the string to the array[s]
  *
  * Returns the pointer of the local string, or NULL in case of error.
  */
 static const xmlChar *
-xmlDictAddString(xmlDictPtr dict, const xmlChar *name, int namelen) {
+xmlDictAddString(xmlDictPtr dict, const xmlChar *name, unsigned int namelen) {
     xmlDictStringsPtr pool;
     const xmlChar *ret;
-    int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+    size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+    size_t limit = 0;
 
 #ifdef DICT_DEBUG_PATTERNS
     fprintf(stderr, "-");
@@ -233,15 +252,20 @@ xmlDictAddString(xmlDictPtr dict, const xmlChar *name, int namelen) {
        if (pool->end - pool->free > namelen)
            goto found_pool;
        if (pool->size > size) size = pool->size;
+        limit += pool->size;
        pool = pool->next;
     }
     /*
      * Not found, need to allocate
      */
     if (pool == NULL) {
+        if ((dict->limit > 0) && (limit > dict->limit)) {
+            return(NULL);
+        }
+
         if (size == 0) size = 1000;
        else size *= 4; /* exponential growth */
-        if (size < 4 * namelen) 
+        if (size < 4 * namelen)
            size = 4 * namelen; /* just in case ! */
        pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size);
        if (pool == NULL)
@@ -271,19 +295,20 @@ found_pool:
  * @prefix: the prefix of the userdata
  * @plen: the prefix length
  * @name: the name of the userdata
- * @len: the length of the name, if -1 it is recomputed
+ * @len: the length of the name
  *
  * Add the QName to the array[s]
  *
  * Returns the pointer of the local string, or NULL in case of error.
  */
 static const xmlChar *
-xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, int plen,
-                 const xmlChar *name, int namelen)
+xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, unsigned int plen,
+                 const xmlChar *name, unsigned int namelen)
 {
     xmlDictStringsPtr pool;
     const xmlChar *ret;
-    int size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+    size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
+    size_t limit = 0;
 
     if (prefix == NULL) return(xmlDictAddString(dict, name, namelen));
 
@@ -295,12 +320,17 @@ xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, int plen,
        if (pool->end - pool->free > namelen + plen + 1)
            goto found_pool;
        if (pool->size > size) size = pool->size;
+        limit += pool->size;
        pool = pool->next;
     }
     /*
      * Not found, need to allocate
      */
     if (pool == NULL) {
+        if ((dict->limit > 0) && (limit > dict->limit)) {
+            return(NULL);
+        }
+
         if (size == 0) size = 1000;
        else size *= 4; /* exponential growth */
         if (size < 4 * (namelen + plen + 1))
@@ -507,7 +537,7 @@ xmlDictCreate(void) {
     xmlDictPtr dict;
 
     if (!xmlDictInitialized)
-        if (!xmlInitializeDict())
+        if (!__xmlInitializeDict())
             return(NULL);
 
 #ifdef DICT_DEBUG_PATTERNS
@@ -517,6 +547,7 @@ xmlDictCreate(void) {
     dict = xmlMalloc(sizeof(xmlDict));
     if (dict) {
         dict->ref_counter = 1;
+        dict->limit = 0;
 
         dict->size = MIN_DICT_SIZE;
        dict->nbElems = 0;
@@ -574,7 +605,7 @@ xmlDictCreateSub(xmlDictPtr sub) {
 int
 xmlDictReference(xmlDictPtr dict) {
     if (!xmlDictInitialized)
-        if (!xmlInitializeDict())
+        if (!__xmlInitializeDict())
             return(-1);
 
     if (dict == NULL) return -1;
@@ -594,9 +625,9 @@ xmlDictReference(xmlDictPtr dict) {
  * Returns 0 in case of success, -1 in case of failure
  */
 static int
-xmlDictGrow(xmlDictPtr dict, int size) {
+xmlDictGrow(xmlDictPtr dict, size_t size) {
     unsigned long key, okey;
-    int oldsize, i;
+    size_t oldsize, i;
     xmlDictEntryPtr iter, next;
     struct _xmlDictEntry *olddict;
 #ifdef DEBUG_GROW
@@ -713,7 +744,7 @@ xmlDictGrow(xmlDictPtr dict, int size) {
 
 #ifdef DEBUG_GROW
     xmlGenericError(xmlGenericErrorContext,
-           "xmlDictGrow : from %d to %d, %d elems\n", oldsize, size, nbElem);
+           "xmlDictGrow : from %lu to %lu, %u elems\n", oldsize, size, nbElem);
 #endif
 
     return(ret);
@@ -728,7 +759,7 @@ xmlDictGrow(xmlDictPtr dict, int size) {
  */
 void
 xmlDictFree(xmlDictPtr dict) {
-    int i;
+    size_t i;
     xmlDictEntryPtr iter;
     xmlDictEntryPtr next;
     int inside_dict = 0;
@@ -738,7 +769,7 @@ xmlDictFree(xmlDictPtr dict) {
        return;
 
     if (!xmlDictInitialized)
-        if (!xmlInitializeDict())
+        if (!__xmlInitializeDict())
             return;
 
     /* decrement the counter, it may be shared by a parser and docs */
@@ -797,17 +828,24 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
     xmlDictEntryPtr entry;
     xmlDictEntryPtr insert;
     const xmlChar *ret;
+    unsigned int l;
 
     if ((dict == NULL) || (name == NULL))
        return(NULL);
 
     if (len < 0)
-        len = strlen((const char *) name);
+        l = strlen((const char *) name);
+    else
+        l = len;
+
+    if (((dict->limit > 0) && (l >= dict->limit)) ||
+        (l > INT_MAX / 2))
+        return(NULL);
 
     /*
      * Check for duplicate and insertion location.
      */
-    okey = xmlDictComputeKey(dict, name, len);
+    okey = xmlDictComputeKey(dict, name, l);
     key = okey % dict->size;
     if (dict->dict[key].valid == 0) {
        insert = NULL;
@@ -815,25 +853,25 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
        for (insert = &(dict->dict[key]); insert->next != NULL;
             insert = insert->next) {
 #ifdef __GNUC__
-           if ((insert->okey == okey) && (insert->len == len)) {
-               if (!memcmp(insert->name, name, len))
+           if ((insert->okey == okey) && (insert->len == l)) {
+               if (!memcmp(insert->name, name, l))
                    return(insert->name);
            }
 #else
-           if ((insert->okey == okey) && (insert->len == len) &&
-               (!xmlStrncmp(insert->name, name, len)))
+           if ((insert->okey == okey) && (insert->len == l) &&
+               (!xmlStrncmp(insert->name, name, l)))
                return(insert->name);
 #endif
            nbi++;
        }
 #ifdef __GNUC__
-       if ((insert->okey == okey) && (insert->len == len)) {
-           if (!memcmp(insert->name, name, len))
+       if ((insert->okey == okey) && (insert->len == l)) {
+           if (!memcmp(insert->name, name, l))
                return(insert->name);
        }
 #else
-       if ((insert->okey == okey) && (insert->len == len) &&
-           (!xmlStrncmp(insert->name, name, len)))
+       if ((insert->okey == okey) && (insert->len == l) &&
+           (!xmlStrncmp(insert->name, name, l)))
            return(insert->name);
 #endif
     }
@@ -846,7 +884,7 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
             (dict->subdict->size != MIN_DICT_SIZE)) ||
             ((dict->size != MIN_DICT_SIZE) &&
             (dict->subdict->size == MIN_DICT_SIZE)))
-           skey = xmlDictComputeKey(dict->subdict, name, len);
+           skey = xmlDictComputeKey(dict->subdict, name, l);
        else
            skey = okey;
 
@@ -857,32 +895,32 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
            for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
                 tmp = tmp->next) {
 #ifdef __GNUC__
-               if ((tmp->okey == skey) && (tmp->len == len)) {
-                   if (!memcmp(tmp->name, name, len))
+               if ((tmp->okey == skey) && (tmp->len == l)) {
+                   if (!memcmp(tmp->name, name, l))
                        return(tmp->name);
                }
 #else
-               if ((tmp->okey == skey) && (tmp->len == len) &&
-                   (!xmlStrncmp(tmp->name, name, len)))
+               if ((tmp->okey == skey) && (tmp->len == l) &&
+                   (!xmlStrncmp(tmp->name, name, l)))
                    return(tmp->name);
 #endif
                nbi++;
            }
 #ifdef __GNUC__
-           if ((tmp->okey == skey) && (tmp->len == len)) {
-               if (!memcmp(tmp->name, name, len))
+           if ((tmp->okey == skey) && (tmp->len == l)) {
+               if (!memcmp(tmp->name, name, l))
                    return(tmp->name);
            }
 #else
-           if ((tmp->okey == skey) && (tmp->len == len) &&
-               (!xmlStrncmp(tmp->name, name, len)))
+           if ((tmp->okey == skey) && (tmp->len == l) &&
+               (!xmlStrncmp(tmp->name, name, l)))
                return(tmp->name);
 #endif
        }
        key = okey % dict->size;
     }
 
-    ret = xmlDictAddString(dict, name, len);
+    ret = xmlDictAddString(dict, name, l);
     if (ret == NULL)
         return(NULL);
     if (insert == NULL) {
@@ -893,13 +931,13 @@ xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
             return(NULL);
     }
     entry->name = ret;
-    entry->len = len;
+    entry->len = l;
     entry->next = NULL;
     entry->valid = 1;
     entry->okey = okey;
 
 
-    if (insert != NULL) 
+    if (insert != NULL)
        insert->next = entry;
 
     dict->nbElems++;
@@ -928,17 +966,23 @@ const xmlChar *
 xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) {
     unsigned long key, okey, nbi = 0;
     xmlDictEntryPtr insert;
+    unsigned int l;
 
     if ((dict == NULL) || (name == NULL))
        return(NULL);
 
     if (len < 0)
-        len = strlen((const char *) name);
+        l = strlen((const char *) name);
+    else
+        l = len;
+    if (((dict->limit > 0) && (l >= dict->limit)) ||
+        (l > INT_MAX / 2))
+        return(NULL);
 
     /*
      * Check for duplicate and insertion location.
      */
-    okey = xmlDictComputeKey(dict, name, len);
+    okey = xmlDictComputeKey(dict, name, l);
     key = okey % dict->size;
     if (dict->dict[key].valid == 0) {
        insert = NULL;
@@ -946,25 +990,25 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) {
        for (insert = &(dict->dict[key]); insert->next != NULL;
             insert = insert->next) {
 #ifdef __GNUC__
-           if ((insert->okey == okey) && (insert->len == len)) {
-               if (!memcmp(insert->name, name, len))
+           if ((insert->okey == okey) && (insert->len == l)) {
+               if (!memcmp(insert->name, name, l))
                    return(insert->name);
            }
 #else
-           if ((insert->okey == okey) && (insert->len == len) &&
-               (!xmlStrncmp(insert->name, name, len)))
+           if ((insert->okey == okey) && (insert->len == l) &&
+               (!xmlStrncmp(insert->name, name, l)))
                return(insert->name);
 #endif
            nbi++;
        }
 #ifdef __GNUC__
-       if ((insert->okey == okey) && (insert->len == len)) {
-           if (!memcmp(insert->name, name, len))
+       if ((insert->okey == okey) && (insert->len == l)) {
+           if (!memcmp(insert->name, name, l))
                return(insert->name);
        }
 #else
-       if ((insert->okey == okey) && (insert->len == len) &&
-           (!xmlStrncmp(insert->name, name, len)))
+       if ((insert->okey == okey) && (insert->len == l) &&
+           (!xmlStrncmp(insert->name, name, l)))
            return(insert->name);
 #endif
     }
@@ -977,7 +1021,7 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) {
             (dict->subdict->size != MIN_DICT_SIZE)) ||
             ((dict->size != MIN_DICT_SIZE) &&
             (dict->subdict->size == MIN_DICT_SIZE)))
-           skey = xmlDictComputeKey(dict->subdict, name, len);
+           skey = xmlDictComputeKey(dict->subdict, name, l);
        else
            skey = okey;
 
@@ -988,25 +1032,25 @@ xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) {
            for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
                 tmp = tmp->next) {
 #ifdef __GNUC__
-               if ((tmp->okey == skey) && (tmp->len == len)) {
-                   if (!memcmp(tmp->name, name, len))
+               if ((tmp->okey == skey) && (tmp->len == l)) {
+                   if (!memcmp(tmp->name, name, l))
                        return(tmp->name);
                }
 #else
-               if ((tmp->okey == skey) && (tmp->len == len) &&
-                   (!xmlStrncmp(tmp->name, name, len)))
+               if ((tmp->okey == skey) && (tmp->len == l) &&
+                   (!xmlStrncmp(tmp->name, name, l)))
                    return(tmp->name);
 #endif
                nbi++;
            }
 #ifdef __GNUC__
-           if ((tmp->okey == skey) && (tmp->len == len)) {
-               if (!memcmp(tmp->name, name, len))
+           if ((tmp->okey == skey) && (tmp->len == l)) {
+               if (!memcmp(tmp->name, name, l))
                    return(tmp->name);
            }
 #else
-           if ((tmp->okey == skey) && (tmp->len == len) &&
-               (!xmlStrncmp(tmp->name, name, len)))
+           if ((tmp->okey == skey) && (tmp->len == l) &&
+               (!xmlStrncmp(tmp->name, name, l)))
                return(tmp->name);
 #endif
        }
@@ -1032,7 +1076,7 @@ xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) {
     xmlDictEntryPtr entry;
     xmlDictEntryPtr insert;
     const xmlChar *ret;
-    int len, plen, l;
+    unsigned int len, plen, l;
 
     if ((dict == NULL) || (name == NULL))
        return(NULL);
@@ -1108,7 +1152,7 @@ xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) {
     entry->valid = 1;
     entry->okey = okey;
 
-    if (insert != NULL) 
+    if (insert != NULL)
        insert->next = entry;
 
     dict->nbElems++;
@@ -1166,6 +1210,50 @@ xmlDictSize(xmlDictPtr dict) {
     return(dict->nbElems);
 }
 
+/**
+ * xmlDictSetLimit:
+ * @dict: the dictionnary
+ * @limit: the limit in bytes
+ *
+ * Set a size limit for the dictionary
+ * Added in 2.9.0
+ *
+ * Returns the previous limit of the dictionary or 0
+ */
+size_t
+xmlDictSetLimit(xmlDictPtr dict, size_t limit) {
+    size_t ret;
+
+    if (dict == NULL)
+       return(0);
+    ret = dict->limit;
+    dict->limit = limit;
+    return(ret);
+}
+
+/**
+ * xmlDictGetUsage:
+ * @dict: the dictionnary
+ *
+ * Get how much memory is used by a dictionary for strings
+ * Added in 2.9.0
+ *
+ * Returns the amount of strings allocated
+ */
+size_t
+xmlDictGetUsage(xmlDictPtr dict) {
+    xmlDictStringsPtr pool;
+    size_t limit = 0;
+
+    if (dict == NULL)
+       return(0);
+    pool = dict->strings;
+    while (pool != NULL) {
+        limit += pool->size;
+       pool = pool->next;
+    }
+    return(limit);
+}
 
 #define bottom_dict
 #include "elfgcchack.h"
index 25f473e..c90e042 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -46,6 +46,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>ANY</dt><dd><a href="html/libxml-valid.html#xmlIsMixedElement">xmlIsMixedElement</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
 </dd><dt>APIs</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
 </dd><dt>ARRAY</dt><dd><a href="html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
 </dd><dt>ASCII</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
@@ -55,6 +56,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
 <a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
 <a href="html/libxml-encoding.html#xmlGetEncodingAlias">xmlGetEncodingAlias</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 <a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
 <a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
 </dd><dt>ATTLIST</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterStartDTDAttlist">xmlTextWriterStartDTDAttlist</a><br />
@@ -95,6 +98,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-hash.html#xmlHashUpdateEntry">xmlHashUpdateEntry</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry2">xmlHashUpdateEntry2</a><br />
 <a href="html/libxml-hash.html#xmlHashUpdateEntry3">xmlHashUpdateEntry3</a><br />
+</dd><dt>Added</dt><dd><a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 </dd><dt>Additional</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
 <a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
 <a href="html/libxml-globals.html#xmlInitGlobals">xmlInitGlobals</a><br />
@@ -117,6 +122,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaNewStringValue">xmlSchemaNewStringValue</a><br />
 </dd><dt>Allocates</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapNewCtxt">xmlDOMWrapNewCtxt</a><br />
 </dd><dt>Allows</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 </dd><dt>AlphabeticPresentationForms</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsAlphabeticPresentationForms">xmlUCSIsAlphabeticPresentationForms</a><br />
 </dd><dt>Also</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
@@ -271,8 +277,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 51d331e..7947196 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -358,8 +358,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 116605d..22d5061 100644 (file)
@@ -7,7 +7,7 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>API Alphabetic Index Z-a for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index Z-a for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+</style><title>API Alphabetic Index Y-a for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index Y-a for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
 <a href="APIchunk2.html">D-E</a>
 <a href="APIchunk3.html">F-I</a>
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -37,7 +37,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk27.html">w-w</a>
 <a href="APIchunk28.html">x-x</a>
 <a href="APIchunk29.html">y-z</a>
-</h2><h2>Letter Z:</h2><dl><dt>ZLIB</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
+</h2><h2>Letter Y:</h2><dl><dt>YES</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
+</dd><dt>YiRadicals</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a><br />
+</dd><dt>YiSyllables</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a><br />
+</dd><dt>YijingHexagramSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a><br />
+</dd></dl><h2>Letter Z:</h2><dl><dt>ZLIB</dt><dd><a href="html/libxml-DOCBparser.html#docbCreateFileParserCtxt">docbCreateFileParserCtxt</a><br />
 <a href="html/libxml-DOCBparser.html#docbParseFile">docbParseFile</a><br />
 <a href="html/libxml-DOCBparser.html#docbSAXParseFile">docbSAXParseFile</a><br />
 <a href="html/libxml-parserInternals.html#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a><br />
@@ -149,7 +153,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidateCtxt">xmlTextReaderSchemaValidateCtxt</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderSetSchema">xmlTextReaderSetSchema</a><br />
 </dd><dt>activates</dt><dd><a href="html/libxml-xpath.html#xmlXPathContextSetCache">xmlXPathContextSetCache</a><br />
-</dd><dt>activation</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>acts</dt><dd><a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
 </dd><dt>actual</dt><dd><a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacet">xmlSchemaValidateLengthFacet</a><br />
@@ -251,6 +254,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
 </dd><dt>affect</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+</dd><dt>affected</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 </dd><dt>affiliation</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
 </dd><dt>afraid</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 </dd><dt>after</dt><dd><a href="html/libxml-HTMLparser.html#UTF8ToHtml">UTF8ToHtml</a><br />
@@ -287,8 +291,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-schematron.html#xmlSchematronValidateDoc">xmlSchematronValidateDoc</a><br />
 <a href="html/libxml-debugXML.html#xmlShellValidate">xmlShellValidate</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd</a><br />
-</dd><dt>aggregate</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+</dd><dt>aggregate</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+</dd><dt>ahead</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
 </dd><dt>algebraic</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
 </dd><dt>alias</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
 <a href="html/libxml-encoding.html#xmlDelEncodingAlias">xmlDelEncodingAlias</a><br />
@@ -308,7 +314,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
 <a href="html/libxml-xmlmemory.html#xmlReallocLoc">xmlReallocLoc</a><br />
 <a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
-</dd><dt>allocation</dt><dd><a href="html/libxml-HTMLparser.html#htmlNewParserCtxt">htmlNewParserCtxt</a><br />
+</dd><dt>allocation</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a><br />
+<a href="html/libxml-HTMLparser.html#htmlNewParserCtxt">htmlNewParserCtxt</a><br />
 <a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
@@ -351,7 +358,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlValidateName">xmlValidateName</a><br />
 <a href="html/libxml-tree.html#xmlValidateQName">xmlValidateQName</a><br />
 </dd><dt>allowable</dt><dd><a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
-</dd><dt>allowed</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>allowed</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
 <a href="html/libxml-tree.html#_xmlElement">_xmlElement</a><br />
 <a href="html/libxml-schemasInternals.html#_xmlSchemaWildcard">_xmlSchemaWildcard</a><br />
@@ -360,6 +370,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewAllTrans">xmlAutomataNewAllTrans</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewCounterTrans">xmlAutomataNewCounterTrans</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
 <a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
@@ -399,7 +410,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-encoding.html#xmlParseCharEncoding">xmlParseCharEncoding</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseNotationType">xmlParseNotationType</a><br />
 <a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-xmlmemory.html#xmlReallocFunc">xmlReallocFunc</a><br />
 <a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
@@ -431,10 +441,12 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>amd</dt><dd><a href="html/libxml-catalog.html#xmlCatalogIsEmpty">xmlCatalogIsEmpty</a><br />
 </dd><dt>amount</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
 <a href="html/libxml-xmlIO.html#_xmlParserInputBuffer">_xmlParserInputBuffer</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemDisplayLast">xmlMemDisplayLast</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferGrow">xmlParserInputBufferGrow</a><br />
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
+<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
 </dd><dt>amp</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
@@ -623,7 +635,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlstring.html#xmlStrncatNew">xmlStrncatNew</a><br />
 </dd><dt>automaton</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaType">_xmlSchemaType</a><br />
 </dd><dt>autoreference</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
-</dd><dt>avoid</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
+</dd><dt>avoid</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
 <a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 </dd><dt>avoiding</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
@@ -638,8 +651,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index a594514..9f94a1f 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -49,6 +49,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlPreviousElementSibling">xmlPreviousElementSibling</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGDump">xmlRelaxNGDump</a><br />
 <a href="html/libxml-parserInternals.html#xmlSetEntityReferenceFunc">xmlSetEntityReferenceFunc</a><br />
+</dd><dt>bad</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
 </dd><dt>badly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
 </dd><dt>bahaviour</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
 </dd><dt>balanced</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
@@ -100,7 +101,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
 <a href="html/libxml-xmlmemory.html#xmlGcMemSetup">xmlGcMemSetup</a><br />
-<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemSetup">xmlMemSetup</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGSetSchema">xmlTextReaderRelaxNGSetSchema</a><br />
@@ -113,7 +113,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
-</dd><dt>beginning</dt><dd><a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
+</dd><dt>beginning</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
 <a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
 <a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
 <a href="html/libxml-list.html#xmlListInsert">xmlListInsert</a><br />
@@ -127,16 +128,21 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault</a><br />
-</dd><dt>behaviour</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
+</dd><dt>behaviour</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-HTMLtree.html#htmlNodeDump">htmlNodeDump</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFile">htmlNodeDumpFile</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
 <a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
 <a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 <a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
 <a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
 <a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
@@ -171,6 +177,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlwriter.html#xmlTextWriterWriteBinHex">xmlTextWriterWriteBinHex</a><br />
 </dd><dt>bindings</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
 </dd><dt>bit</dt><dd><a href="html/libxml-xmlstring.html#xmlStrEqual">xmlStrEqual</a><br />
+</dd><dt>bits</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>blanks</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
 </dd><dt>bloc</dt><dd><a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
@@ -206,20 +213,23 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>bound</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 </dd><dt>boundaries</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
-</dd><dt>boundary</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>boundary</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseElementMixedContentDecl">xmlParseElementMixedContentDecl</a><br />
 </dd><dt>bracket</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
 </dd><dt>branch</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapCloneNode">xmlDOMWrapCloneNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a><br />
-</dd><dt>break</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
-<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
+</dd><dt>break</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapCloneNode">xmlDOMWrapCloneNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
 <a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
 </dd><dt>breaking</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 </dd><dt>breaks</dt><dd><a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
+</dd><dt>brk</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
 </dd><dt>broke</dt><dd><a href="html/libxml-hash.html#XML_CAST_FPTR">XML_CAST_FPTR</a><br />
 </dd><dt>broken</dt><dd><a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
 <a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
@@ -249,7 +259,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferPush">xmlParserInputBufferPush</a><br />
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
-</dd><dt>buffers</dt><dd><a href="html/libxml-tree.html#xmlBufferDetach">xmlBufferDetach</a><br />
+</dd><dt>buffers</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
+<a href="html/libxml-tree.html#xmlBufferDetach">xmlBufferDetach</a><br />
 </dd><dt>builded</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_GLOBAL">XML_SCHEMAS_ATTRGROUP_GLOBAL</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED">XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED</a><br />
 </dd><dt>building</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
@@ -304,8 +315,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 7985825..de376f7 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -52,7 +52,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlCheckFilename">xmlCheckFilename</a><br />
 <a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
-<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
@@ -74,6 +73,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
 <a href="html/libxml-encoding.html#xmlGetCharEncodingName">xmlGetCharEncodingName</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValueWhtsp">xmlSchemaGetCanonValueWhtsp</a><br />
 </dd><dt>canonicalization</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
@@ -87,10 +87,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
 <a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
+</dd><dt>canot</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>capable</dt><dd><a href="html/libxml-xmlstring.html#xmlCheckUTF8">xmlCheckUTF8</a><br />
 </dd><dt>caracters</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
 </dd><dt>cardinality</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
-</dd><dt>carried</dt><dd><a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
+</dd><dt>carried</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
 <a href="html/libxml-tree.html#xmlNewNsProp">xmlNewNsProp</a><br />
 <a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
 <a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
@@ -139,7 +142,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>ceiling</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathCeilingFunction">xmlXPathCeilingFunction</a><br />
 </dd><dt>certainly</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
 </dd><dt>chained</dt><dd><a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
-</dd><dt>change</dt><dd><a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
+</dd><dt>change</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
+<a href="html/libxml-HTMLtree.html#htmlSetMetaEncoding">htmlSetMetaEncoding</a><br />
 <a href="html/libxml-xmlerror.html#xmlCtxtResetLastError">xmlCtxtResetLastError</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPCwd">xmlNanoFTPCwd</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
@@ -572,8 +576,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPRead">xmlNanoHTTPRead</a><br />
 </dd><dt>connector</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementChildrenContentDecl">xmlParseElementChildrenContentDecl</a><br />
-</dd><dt>cononical</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
-<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValueWhtsp">xmlSchemaGetCanonValueWhtsp</a><br />
 </dd><dt>consequent</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
 </dd><dt>consideration</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>considered</dt><dd><a href="html/libxml-hash.html#xmlHashScan3">xmlHashScan3</a><br />
@@ -581,6 +583,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlParserInputBufferRead">xmlParserInputBufferRead</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
 </dd><dt>consist</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNextAncestor">xmlXPathNextAncestor</a><br />
+</dd><dt>const</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>constant</dt><dd><a href="html/libxml-parser.html#XML_SAX2_MAGIC">XML_SAX2_MAGIC</a><br />
 <a href="html/libxml-parser.html#xmlByteConsumed">xmlByteConsumed</a><br />
 </dd><dt>constraint</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
@@ -652,6 +656,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathDistinct">xmlXPathDistinct</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathDistinctSorted">xmlXPathDistinctSorted</a><br />
 </dd><dt>contains</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_HAS_REFS">XML_SCHEMAS_ATTRGROUP_HAS_REFS</a><br />
+<a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
 <a href="html/libxml-parserInternals.html#xmlParsePEReference">xmlParsePEReference</a><br />
@@ -881,6 +886,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemUsed">xmlMemUsed</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateFile">xmlSchemaValidateFile</a><br />
 <a href="html/libxml-xpath.html#xmlXPathContextSetCache">xmlXPathContextSetCache</a><br />
 </dd><dt>custom</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
@@ -896,8 +903,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 21eaffe..b1f069d 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -242,7 +242,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 <a href="html/libxml-entities.html#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a><br />
 <a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
+<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
 </dd><dt>depth</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
@@ -379,12 +382,16 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>determinist</dt><dd><a href="html/libxml-xmlautomata.html#xmlAutomataIsDeterminist">xmlAutomataIsDeterminist</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegexpIsDeterminist">xmlRegexpIsDeterminist</a><br />
 </dd><dt>dict</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
-</dd><dt>dictionary</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
+</dd><dt>dictionaries</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+</dd><dt>dictionary</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
 <a href="html/libxml-dict.html#xmlDictCleanup">xmlDictCleanup</a><br />
 <a href="html/libxml-dict.html#xmlDictCreate">xmlDictCreate</a><br />
 <a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
 <a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-pattern.html#xmlPatterncompile">xmlPatterncompile</a><br />
@@ -396,10 +403,12 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
 <a href="html/libxml-dict.html#xmlDictExists">xmlDictExists</a><br />
 <a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
 <a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
 </dd><dt>did</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_BLOCK_DEFAULT">XML_SCHEMAS_TYPE_BLOCK_DEFAULT</a><br />
@@ -420,7 +429,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
 </dd><dt>differentiate</dt><dd><a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
 </dd><dt>differently</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
-</dd><dt>differs</dt><dd><a href="html/libxml-entities.html#xmlNewEntity">xmlNewEntity</a><br />
+</dd><dt>differs</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-entities.html#xmlNewEntity">xmlNewEntity</a><br />
 </dd><dt>digit</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
 </dd><dt>digits</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathStringFunction">xmlXPathStringFunction</a><br />
 </dd><dt>dir</dt><dd><a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
@@ -443,7 +453,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
-</dd><dt>directly</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+</dd><dt>directly</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
 <a href="html/libxml-uri.html#xmlNormalizeURIPath">xmlNormalizeURIPath</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
@@ -466,6 +477,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlParserGetDirectory">xmlParserGetDirectory</a><br />
 <a href="html/libxml-debugXML.html#xmlShellList">xmlShellList</a><br />
 </dd><dt>disable</dt><dd><a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 </dd><dt>disabled</dt><dd><a href="html/libxml-hash.html#XML_CAST_FPTR">XML_CAST_FPTR</a><br />
 <a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
@@ -474,8 +486,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>disallowed</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_BLOCK_EXTENSION">XML_SCHEMAS_ELEM_BLOCK_EXTENSION</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_BLOCK_RESTRICTION">XML_SCHEMAS_ELEM_BLOCK_RESTRICTION</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION">XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION</a><br />
-</dd><dt>discard</dt><dd><a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
-<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
+</dd><dt>discard</dt><dd><a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
 </dd><dt>discarded</dt><dd><a href="html/libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a><br />
 </dd><dt>discarding</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttValue">xmlParseAttValue</a><br />
 <a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
@@ -532,7 +543,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-pattern.html#xmlPatternMatch">xmlPatternMatch</a><br />
 <a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strlen">xmlUTF8Strlen</a><br />
@@ -601,7 +611,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>dtds</dt><dd><a href="html/libxml-SAX.html#getSystemId">getSystemId</a><br />
 <a href="html/libxml-SAX2.html#xmlSAX2GetSystemId">xmlSAX2GetSystemId</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
-</dd><dt>dump</dt><dd><a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
+</dd><dt>due</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
+</dd><dt>dump</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 <a href="html/libxml-tree.html#xmlBufferCCat">xmlBufferCCat</a><br />
 <a href="html/libxml-tree.html#xmlBufferDump">xmlBufferDump</a><br />
 <a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
@@ -643,8 +657,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index ce82237..0e33ddb 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -55,6 +55,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
 </dd><dt>efficiency</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>either</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
 <a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
 <a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
@@ -170,6 +171,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpointer.html#xmlXPtrNewRangePoints">xmlXPtrNewRangePoints</a><br />
 </dd><dt>ends</dt><dd><a href="html/libxml-parser.html#_xmlParserNodeInfo">_xmlParserNodeInfo</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPClose">xmlNanoHTTPClose</a><br />
+</dd><dt>enforced</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
 </dd><dt>engine</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
 <a href="html/libxml-xpath.html#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a><br />
 <a href="html/libxml-xpath.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
@@ -186,7 +188,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>ensuring</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
 </dd><dt>entire</dt><dd><a href="html/libxml-xmlIO.html#xmlCleanupInputCallbacks">xmlCleanupInputCallbacks</a><br />
 <a href="html/libxml-xmlIO.html#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a><br />
-</dd><dt>entites</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
 </dd><dt>entities:</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
 <a href="html/libxml-parserInternals.html#xmlParserHandleReference">xmlParserHandleReference</a><br />
 </dd><dt>entproc</dt><dd><a href="html/libxml-parserInternals.html#xmlParserHandlePEReference">xmlParserHandlePEReference</a><br />
@@ -265,7 +266,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#xmlXPathConvertBoolean">xmlXPathConvertBoolean</a><br />
 <a href="html/libxml-xpath.html#xmlXPathConvertNumber">xmlXPathConvertNumber</a><br />
 <a href="html/libxml-xpath.html#xmlXPathConvertString">xmlXPathConvertString</a><br />
-</dd><dt>errror</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapNewCtxt">xmlDOMWrapNewCtxt</a><br />
 </dd><dt>escape</dt><dd><a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
 <a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
 <a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
@@ -311,6 +311,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#xmlXPathEvalFunc">xmlXPathEvalFunc</a><br />
 <a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrBuildNodeList">xmlXPtrBuildNodeList</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 </dd><dt>evaulation</dt><dd><a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
@@ -395,6 +396,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>explicitly</dt><dd><a href="html/libxml-SAX2.html#xmlSAXDefaultVersion">xmlSAXDefaultVersion</a><br />
 </dd><dt>explored</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
 </dd><dt>exposing</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
+</dd><dt>express</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
 </dd><dt>expressing</dt><dd><a href="html/libxml-uri.html#xmlPathToURI">xmlPathToURI</a><br />
 </dd><dt>expressions</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a><br />
@@ -432,6 +434,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>extlang</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 </dd><dt>extract</dt><dd><a href="html/libxml-tree.html#XML_GET_CONTENT">XML_GET_CONTENT</a><br />
 <a href="html/libxml-tree.html#XML_GET_LINE">XML_GET_LINE</a><br />
+<a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+<a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
 <a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
@@ -442,8 +446,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index bbf22e5..163d67b 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -38,6 +38,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk28.html">x-x</a>
 <a href="APIchunk29.html">y-z</a>
 </h2><h2>Letter f:</h2><dl><dt>fTP</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPConnectTo">xmlNanoFTPConnectTo</a><br />
+</dd><dt>face</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 </dd><dt>facet</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_COLLAPSE">XML_SCHEMAS_FACET_COLLAPSE</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_PRESERVE">XML_SCHEMAS_FACET_PRESERVE</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FACET_REPLACE">XML_SCHEMAS_FACET_REPLACE</a><br />
@@ -114,7 +115,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>fatal</dt><dd><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
 </dd><dt>fatalError</dt><dd><a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
 </dd><dt>favor</dt><dd><a href="html/libxml-valid.html#xmlNewElementContent">xmlNewElementContent</a><br />
-</dd><dt>feature</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>feature</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
 <a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
 <a href="html/libxml-parser.html#xmlHasFeature">xmlHasFeature</a><br />
@@ -177,6 +180,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_FINAL_DEFAULT_UNION">XML_SCHEMAS_FINAL_DEFAULT_UNION</a><br />
 </dd><dt>find</dt><dd><a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
 <a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 </dd><dt>finding</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
@@ -233,6 +237,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>flow</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSAXPlug">xmlSchemaSAXPlug</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSAXUnplug">xmlSchemaSAXUnplug</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 </dd><dt>flushed</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a><br />
 </dd><dt>flushes</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
@@ -305,6 +310,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlSaveFileEnc">htmlSaveFileEnc</a><br />
 <a href="html/libxml-HTMLtree.html#htmlSaveFileFormat">htmlSaveFileFormat</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
@@ -424,8 +430,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 0912b93..92d3845 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -110,6 +110,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>get</dt><dd><a href="html/libxml-parser.html#_xmlSAXHandler">_xmlSAXHandler</a><br />
 <a href="html/libxml-parser.html#_xmlSAXHandlerV1">_xmlSAXHandlerV1</a><br />
 <a href="html/libxml-parser.html#fatalErrorSAXFunc">fatalErrorSAXFunc</a><br />
+<a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
 <a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
 <a href="html/libxml-tree.html#xmlGetCompressMode">xmlGetCompressMode</a><br />
@@ -178,6 +179,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>grows</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
 <a href="html/libxml-tree.html#xmlBufferWriteChar">xmlBufferWriteChar</a><br />
 <a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>guarantee</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
+</dd><dt>guaranteed</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>guess</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
 </dd></dl><h2>Letter h:</h2><dl><dt>had</dt><dd><a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
@@ -246,6 +251,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPMimeType">xmlNanoHTTPMimeType</a><br />
 </dd><dt>heading</dt><dd><a href="html/libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a><br />
+</dd><dt>held</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 </dd><dt>helper</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_CIRCULAR">XML_SCHEMAS_ELEM_CIRCULAR</a><br />
 </dd><dt>here</dt><dd><a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
 <a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
@@ -274,6 +281,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNewNsPropEatName">xmlNewNsPropEatName</a><br />
 <a href="html/libxml-tree.html#xmlNewProp">xmlNewProp</a><br />
 </dd><dt>holds</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+</dd><dt>hooks</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a><br />
 </dd><dt>host</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPScanProxy">xmlNanoFTPScanProxy</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
@@ -285,6 +293,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-nanoftp.html#xmlNanoFTPUpdateURL">xmlNanoFTPUpdateURL</a><br />
 </dd><dt>hour</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
 </dd><dt>how</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 </dd><dt>href</dt><dd><a href="html/libxml-xinclude.html#XINCLUDE_HREF">XINCLUDE_HREF</a><br />
 </dd><dt>href==NULL</dt><dd><a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
 </dd><dt>hrefs</dt><dd><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
@@ -342,8 +351,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 6936af2..070f8ce 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -42,6 +42,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlversion.html#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a><br />
 </dd><dt>icu</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_ICU_ENABLED">LIBXML_ICU_ENABLED</a><br />
 </dd><dt>identify</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
+</dd><dt>identitier</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 </dd><dt>identity-constraint</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchema">_xmlSchema</a><br />
 <a href="html/libxml-schemasInternals.html#_xmlSchemaElement">_xmlSchemaElement</a><br />
 </dd><dt>ignorable</dt><dd><a href="html/libxml-SAX.html#ignorableWhitespace">ignorableWhitespace</a><br />
@@ -59,7 +60,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
 <a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
-</dd><dt>imbrication</dt><dd><a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+</dd><dt>imbrication</dt><dd><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
 </dd><dt>img</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>immediately</dt><dd><a href="html/libxml-xmlversion.html#xmlCheckVersion">xmlCheckVersion</a><br />
@@ -191,7 +193,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a><br />
 </dd><dt>indentation?</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
 </dd><dt>indented</dt><dd><a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
-</dd><dt>indenting</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+</dd><dt>indenting</dt><dd><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
@@ -218,7 +221,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlversion.html#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
 <a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegExecPushString">xmlRegExecPushString</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegExecPushString2">xmlRegExecPushString2</a><br />
 <a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
@@ -302,7 +304,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGGetParserErrors">xmlRelaxNGGetParserErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderByteConsumed">xmlTextReaderByteConsumed</a><br />
 <a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
 </dd><dt>informations</dt><dd><a href="html/libxml-tree.html#_xmlAttr">_xmlAttr</a><br />
@@ -329,6 +334,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-SAX2.html#xmlSAX2StartElementNs">xmlSAX2StartElementNs</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaGetValidErrors">xmlSchemaGetValidErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-debugXML.html#xmlShellDir">xmlShellDir</a><br />
 <a href="html/libxml-xinclude.html#xmlXIncludeProcessNode">xmlXIncludeProcessNode</a><br />
 </dd><dt>informative</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
@@ -417,6 +423,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlAddChild">xmlAddChild</a><br />
 <a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 <a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
 <a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
 <a href="html/libxml-valid.html#xmlFreeElementContent">xmlFreeElementContent</a><br />
@@ -429,6 +436,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-chvalid.html#xmlIsIdeographic">xmlIsIdeographic</a><br />
 <a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-xmlIO.html#xmlRegisterHTTPPostCallbacks">xmlRegisterHTTPPostCallbacks</a><br />
 <a href="html/libxml-xmlsave.html#xmlSaveDoc">xmlSaveDoc</a><br />
 <a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
@@ -497,17 +505,20 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>interprestation</dt><dd><a href="html/libxml-xpath.html#xmlXPathFunction">xmlXPathFunction</a><br />
 </dd><dt>interpreter</dt><dd><a href="html/libxml-xpath.html#xmlXPathAxisFunc">xmlXPathAxisFunc</a><br />
 </dd><dt>intersection</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathIntersection">xmlXPathIntersection</a><br />
+</dd><dt>introduced</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
+</dd><dt>ints</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>invalid</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_INTERNAL_INVALID">XML_SCHEMAS_TYPE_INTERNAL_INVALID</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
 <a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
 </dd><dt>invited</dt><dd><a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
-</dd><dt>invoking</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>isinf</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
 </dd><dt>isn</dt><dd><a href="html/libxml-encoding.html#xmlRegisterCharEncodingHandler">xmlRegisterCharEncodingHandler</a><br />
 </dd><dt>isnan</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>issue</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 </dd><dt>issued</dt><dd><a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
+</dd><dt>issues</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>item</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_BLOCK_DEFAULT">XML_SCHEMAS_TYPE_BLOCK_DEFAULT</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE">XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_TYPE_MARKED">XML_SCHEMAS_TYPE_MARKED</a><br />
@@ -545,8 +556,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 5de97d8..90249a1 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -184,12 +184,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlstring.html#xmlStrndup">xmlStrndup</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strndup">xmlUTF8Strndup</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strsize">xmlUTF8Strsize</a><br />
-</dd><dt>lenght</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
-<a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
-<a href="html/libxml-xmlregexp.html#xmlExpNewAtom">xmlExpNewAtom</a><br />
-<a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushCData">xmlRelaxNGValidatePushCData</a><br />
-<a href="html/libxml-tree.html#xmlSplitQName3">xmlSplitQName3</a><br />
-<a href="html/libxml-valid.html#xmlValidatePushCData">xmlValidatePushCData</a><br />
 </dd><dt>length-1</dt><dd><a href="html/libxml-xpath.html#xmlXPathNodeSetItem">xmlXPathNodeSetItem</a><br />
 </dd><dt>less</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
 <a href="html/libxml-xmlsave.html#xmlSaveToFilename">xmlSaveToFilename</a><br />
@@ -199,6 +193,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>less-than</dt><dd><a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
 </dd><dt>level</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
 <a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
 <a href="html/libxml-xmlmemory.html#xmlCleanupMemory">xmlCleanupMemory</a><br />
@@ -299,15 +294,22 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-valid.html#xmlValidityErrorFunc">xmlValidityErrorFunc</a><br />
 <a href="html/libxml-valid.html#xmlValidityWarningFunc">xmlValidityWarningFunc</a><br />
 </dd><dt>likely</dt><dd><a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
-</dd><dt>limit</dt><dd><a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
+</dd><dt>limit</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-xpath.html#_xmlXPathParserContext">_xmlXPathParserContext</a><br />
 <a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
 <a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-pattern.html#xmlPatternMaxDepth">xmlPatternMaxDepth</a><br />
-</dd><dt>limitation</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>limitation</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>limited</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 </dd><dt>linear</dt><dd><a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
 <a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
+</dd><dt>lines</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>linked</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAttributeLink">_xmlSchemaAttributeLink</a><br />
 <a href="html/libxml-schemasInternals.html#_xmlSchemaFacetLink">_xmlSchemaFacetLink</a><br />
 <a href="html/libxml-schemasInternals.html#_xmlSchemaTypeLink">_xmlSchemaTypeLink</a><br />
@@ -372,6 +374,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-uri.html#xmlCanonicPath">xmlCanonicPath</a><br />
 <a href="html/libxml-uri.html#xmlPathToURI">xmlPathToURI</a><br />
 <a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderLocatorBaseURI">xmlTextReaderLocatorBaseURI</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderLocatorLineNumber">xmlTextReaderLocatorLineNumber</a><br />
@@ -429,8 +433,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 0f302d0..23f434e 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -97,7 +97,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
 </dd><dt>marking</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
 </dd><dt>marks</dt><dd><a href="html/libxml-parserInternals.html#xmlParseCharData">xmlParseCharData</a><br />
-</dd><dt>markup</dt><dd><a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>markup</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderReadInnerXml">xmlTextReaderReadInnerXml</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderReadOuterXml">xmlTextReaderReadOuterXml</a><br />
@@ -289,6 +290,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
 </dd><dt>month</dt><dd><a href="html/libxml-nanoftp.html#ftpListCallback">ftpListCallback</a><br />
 </dd><dt>more</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
@@ -308,7 +310,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
 </dd><dt>move</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 </dd><dt>moved</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderMoveToElement">xmlTextReaderMoveToElement</a><br />
-</dd><dt>much</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
+</dd><dt>much</dt><dd><a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
+<a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 </dd><dt>multi-threaded</dt><dd><a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
 </dd><dt>multi-threading</dt><dd><a href="html/libxml-globals.html#xmlCleanupGlobals">xmlCleanupGlobals</a><br />
@@ -346,8 +349,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 5c70d09..1d10f93 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -208,7 +208,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
 <a href="html/libxml-valid.html#xmlValidateAttributeValue">xmlValidateAttributeValue</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
-</dd><dt>ENTITY_REF</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+</dd><dt>ENTITY_REF</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
 </dd><dt>ENTITY_REFs</dt><dd><a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
 <a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
@@ -287,6 +288,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>EntitiesTable</dt><dd><a href="html/libxml-HTMLparser.html#htmlEntityLookup">htmlEntityLookup</a><br />
 <a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
 </dd><dt>Entity</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
 <a href="html/libxml-parserInternals.html#xmlNewEntityInputStream">xmlNewEntityInputStream</a><br />
 <a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
@@ -328,6 +330,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a><br />
 <a href="html/libxml-xpath.html#xmlXPathEvalPredicate">xmlXPathEvalPredicate</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
 </dd><dt>Evaluates</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpExpDerive">xmlExpExpDerive</a><br />
@@ -389,8 +392,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 72ed431..0317066 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -306,8 +306,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 2f98a8c..c655198 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -135,7 +135,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 <a href="html/libxml-parser.html#xmlInitParser">xmlInitParser</a><br />
 <a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
-<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
@@ -231,7 +230,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathValueFlipSign">xmlXPathValueFlipSign</a><br />
 </dd><dt>opposite</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 </dd><dt>optimized</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a><br />
-</dd><dt>option</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>option</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapCloneNode">xmlDOMWrapCloneNode</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
@@ -322,6 +323,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-threads.html#xmlLockLibrary">xmlLockLibrary</a><br />
 <a href="html/libxml-parser.html#xmlParseEntity">xmlParseEntity</a><br />
 <a href="html/libxml-parser.html#xmlSAXParseEntity">xmlSAXParseEntity</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
@@ -337,11 +339,15 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>outside</dt><dd><a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 </dd><dt>over</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpCtxtNbCons">xmlExpCtxtNbCons</a><br />
 </dd><dt>overflow</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
-</dd><dt>override</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>override</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-SAX.html#resolveEntity">resolveEntity</a><br />
 <a href="html/libxml-parser.html#resolveEntitySAXFunc">resolveEntitySAXFunc</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-SAX2.html#xmlSAX2ResolveEntity">xmlSAX2ResolveEntity</a><br />
+</dd><dt>overriding</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 </dd><dt>overwrite</dt><dd><a href="html/libxml-catalog.html#xmlACatalogAdd">xmlACatalogAdd</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogAdd">xmlCatalogAdd</a><br />
 </dd><dt>overwritten</dt><dd><a href="html/libxml-encoding.html#xmlAddEncodingAlias">xmlAddEncodingAlias</a><br />
@@ -369,8 +375,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 94d0248..2f20018 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -151,6 +151,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlParseAttributeType">xmlParseAttributeType</a><br />
 <a href="html/libxml-valid.html#xmlValidateElementDecl">xmlValidateElementDecl</a><br />
 <a href="html/libxml-xpath.html#xmlXPathContextSetCache">xmlXPathContextSetCache</a><br />
+</dd><dt>per-thread</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a><br />
 </dd><dt>performance</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
 </dd><dt>performed</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
@@ -189,7 +190,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>pnetlib-doc</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
 </dd><dt>pointed</dt><dd><a href="html/libxml-parserInternals.html#xmlPopInput">xmlPopInput</a><br />
 </dd><dt>pointers</dt><dd><a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegExecErrInfo">xmlRegExecErrInfo</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegExecNextValues">xmlRegExecNextValues</a><br />
@@ -208,6 +208,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPScanProxy">xmlNanoHTTPScanProxy</a><br />
 </dd><dt>portability</dt><dd><a href="html/libxml-nanoftp.html#INVALID_SOCKET">INVALID_SOCKET</a><br />
 <a href="html/libxml-nanoftp.html#SOCKET">SOCKET</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>portable</dt><dd><a href="html/libxml-xpath.html#xmlXPathIsInf">xmlXPathIsInf</a><br />
 <a href="html/libxml-xpath.html#xmlXPathIsNaN">xmlXPathIsNaN</a><br />
 </dd><dt>pos</dt><dd><a href="html/libxml-xmlstring.html#xmlUTF8Strsub">xmlUTF8Strsub</a><br />
@@ -294,7 +296,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathEvaluatePredicateResult">xmlXPathEvaluatePredicateResult</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
 </dd><dt>preferably</dt><dd><a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
-<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
 <a href="html/libxml-tree.html#xmlNewPI">xmlNewPI</a><br />
@@ -331,7 +332,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
 <a href="html/libxml-tree.html#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a><br />
 <a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderPreserve">xmlTextReaderPreserve</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
 </dd><dt>preserved</dt><dd><a href="html/libxml-HTMLtree.html#HTML_PRESERVE_NODE">HTML_PRESERVE_NODE</a><br />
@@ -355,6 +355,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-catalog.html#xmlCatalogSetDebug">xmlCatalogSetDebug</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogSetDefaultPrefer">xmlCatalogSetDefaultPrefer</a><br />
 <a href="html/libxml-globals.html#xmlDeregisterNodeDefault">xmlDeregisterNodeDefault</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-parser.html#xmlLineNumbersDefault">xmlLineNumbersDefault</a><br />
 <a href="html/libxml-parser.html#xmlPedanticParserDefault">xmlPedanticParserDefault</a><br />
@@ -373,6 +374,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
@@ -508,6 +510,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>provenance</dt><dd><a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
 </dd><dt>provide</dt><dd><a href="html/libxml-nanoftp.html#INVALID_SOCKET">INVALID_SOCKET</a><br />
 <a href="html/libxml-nanoftp.html#SOCKET">SOCKET</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
@@ -517,6 +520,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strloc">xmlUTF8Strloc</a><br />
 <a href="html/libxml-xmlstring.html#xmlUTF8Strpos">xmlUTF8Strpos</a><br />
@@ -570,8 +575,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index c7e04e3..16c7c21 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -59,8 +59,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>quote</dt><dd><a href="html/libxml-DOCBparser.html#docbEncodeEntities">docbEncodeEntities</a><br />
 <a href="html/libxml-HTMLparser.html#htmlEncodeEntities">htmlEncodeEntities</a><br />
 <a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 </dd><dt>quoted</dt><dd><a href="html/libxml-tree.html#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a><br />
 </dd><dt>quotes</dt><dd><a href="html/libxml-parserInternals.html#xmlParseQuotedString">xmlParseQuotedString</a><br />
+</dd><dt>quoting</dt><dd><a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 </dd></dl><h2>Letter r:</h2><dl><dt>raise</dt><dd><a href="html/libxml-xpathInternals.html#XP_ERROR">XP_ERROR</a><br />
 <a href="html/libxml-xpathInternals.html#XP_ERROR0">XP_ERROR0</a><br />
 </dd><dt>raised</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
@@ -190,6 +192,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
 <a href="html/libxml-HTMLparser.html#htmlParseElement">htmlParseElement</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
 <a href="html/libxml-valid.html#xmlCopyEnumeration">xmlCopyEnumeration</a><br />
 <a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
@@ -244,7 +247,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
 </dd><dt>referred</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseCharRef">xmlParseCharRef</a><br />
-</dd><dt>refresh</dt><dd><a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 </dd><dt>refs</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
 <a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 </dd><dt>refuse</dt><dd><a href="html/libxml-tree.html#xmlNewNs">xmlNewNs</a><br />
@@ -335,6 +337,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-hash.html#xmlHashRemoveEntry2">xmlHashRemoveEntry2</a><br />
 <a href="html/libxml-hash.html#xmlHashRemoveEntry3">xmlHashRemoveEntry3</a><br />
 </dd><dt>remove</dt><dd><a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 <a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
 <a href="html/libxml-parserInternals.html#xmlDecodeEntities">xmlDecodeEntities</a><br />
@@ -352,6 +355,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#nodePop">nodePop</a><br />
 <a href="html/libxml-xpathInternals.html#valuePop">valuePop</a><br />
 <a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 <a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
 <a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
@@ -403,6 +407,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
 </dd><dt>reporting</dt><dd><a href="html/libxml-parserInternals.html#INPUT_CHUNK">INPUT_CHUNK</a><br />
 <a href="html/libxml-xpath.html#_xmlXPathContext">_xmlXPathContext</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
 <a href="html/libxml-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a><br />
 </dd><dt>reports</dt><dd><a href="html/libxml-DOCBparser.html#docbCreatePushParserCtxt">docbCreatePushParserCtxt</a><br />
 <a href="html/libxml-HTMLparser.html#htmlCreatePushParserCtxt">htmlCreatePushParserCtxt</a><br />
@@ -447,7 +452,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>requires</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
 <a href="html/libxml-c14n.html#xmlC14NExecute">xmlC14NExecute</a><br />
-<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
 </dd><dt>requred</dt><dd><a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 </dd><dt>reserved</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
@@ -518,6 +522,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>restored</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaSAXUnplug">xmlSchemaSAXUnplug</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderSetErrorHandler">xmlTextReaderSetErrorHandler</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderSetStructuredErrorHandler">xmlTextReaderSetStructuredErrorHandler</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 </dd><dt>restrict</dt><dd><a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
 </dd><dt>restriction</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION">XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_BLOCK_RESTRICTION">XML_SCHEMAS_ELEM_BLOCK_RESTRICTION</a><br />
@@ -628,6 +633,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>running</dt><dd><a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 </dd><dt>runtime</dt><dd><a href="html/libxml-xmlversion.html#LIBXML_DEBUG_RUNTIME">LIBXML_DEBUG_RUNTIME</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemDisplayLast">xmlMemDisplayLast</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
@@ -638,8 +644,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 9067279..e81f34d 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -40,10 +40,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 </h2><h2>Letter s:</h2><dl><dt>s390</dt><dd><a href="html/libxml-hash.html#XML_CAST_FPTR">XML_CAST_FPTR</a><br />
 </dd><dt>safe</dt><dd><a href="html/libxml-xmlstring.html#BAD_CAST">BAD_CAST</a><br />
 <a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
-<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
-</dd><dt>safety</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>safety</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 </dd><dt>same</dt><dd><a href="html/libxml-HTMLtree.html#HTML_COMMENT_NODE">HTML_COMMENT_NODE</a><br />
 <a href="html/libxml-HTMLtree.html#HTML_ENTITY_REF_NODE">HTML_ENTITY_REF_NODE</a><br />
 <a href="html/libxml-HTMLtree.html#HTML_PI_NODE">HTML_PI_NODE</a><br />
@@ -66,6 +67,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNextFollowing">xmlXPathNextFollowing</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 </dd><dt>save</dt><dd><a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
 <a href="html/libxml-xmlmemory.html#xmlGcMemGet">xmlGcMemGet</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMemGet">xmlMemGet</a><br />
@@ -135,6 +137,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateFacetWhtsp">xmlSchemaValidateFacetWhtsp</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateFile">xmlSchemaValidateFile</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-schematron.html#xmlSchematronNewMemParserCtxt">xmlSchematronNewMemParserCtxt</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidate">xmlTextReaderRelaxNGValidate</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderRelaxNGValidateCtxt">xmlTextReaderRelaxNGValidateCtxt</a><br />
@@ -384,6 +387,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
 <a href="html/libxml-tree.html#xmlPreviousElementSibling">xmlPreviousElementSibling</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGNewDocParserCtxt">xmlRelaxNGNewDocParserCtxt</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 </dd><dt>single</dt><dd><a href="html/libxml-parserInternals.html#IS_DIGIT_CH">IS_DIGIT_CH</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-parserInternals.html#xmlCurrentChar">xmlCurrentChar</a><br />
@@ -407,6 +411,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>singleton</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 </dd><dt>site1</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>site2</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
+</dd><dt>size_t</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 </dd><dt>sizes</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
 </dd><dt>skip</dt><dd><a href="html/libxml-parserInternals.html#xmlSkipBlankChars">xmlSkipBlankChars</a><br />
@@ -453,6 +458,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xinclude.html#xmlXIncludeProcessTree">xmlXIncludeProcessTree</a><br />
 <a href="html/libxml-xinclude.html#xmlXIncludeProcessTreeFlags">xmlXIncludeProcessTreeFlags</a><br />
 <a href="html/libxml-xinclude.html#xmlXIncludeProcessTreeFlagsData">xmlXIncludeProcessTreeFlagsData</a><br />
+</dd><dt>somehow</dt><dd><a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 </dd><dt>sometimes</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 <a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 <a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
@@ -639,7 +645,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>startup</dt><dd><a href="html/libxml-SAX.html#setDocumentLocator">setDocumentLocator</a><br />
 <a href="html/libxml-parser.html#setDocumentLocatorSAXFunc">setDocumentLocatorSAXFunc</a><br />
 <a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
-<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
 <a href="html/libxml-SAX2.html#xmlSAX2SetDocumentLocator">xmlSAX2SetDocumentLocator</a><br />
@@ -688,6 +693,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
@@ -703,6 +709,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
 <a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
 <a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</dd><dt>stores</dt><dd><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 </dd><dt>str</dt><dd><a href="html/libxml-HTMLparser.html#htmlParseEntityRef">htmlParseEntityRef</a><br />
 <a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 </dd><dt>strcasecmp</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcasecmp">xmlStrcasecmp</a><br />
@@ -735,6 +742,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>stringi</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a><br />
 </dd><dt>strings</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpParse">xmlExpParse</a><br />
@@ -776,6 +784,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlFreeNsList">xmlFreeNsList</a><br />
 <a href="html/libxml-catalog.html#xmlLoadACatalog">xmlLoadACatalog</a><br />
 <a href="html/libxml-threads.html#xmlNewRMutex">xmlNewRMutex</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-xmlregexp.html#xmlRegFreeExecCtxt">xmlRegFreeExecCtxt</a><br />
 </dd><dt>struture</dt><dd><a href="html/libxml-relaxng.html#xmlRelaxNGParse">xmlRelaxNGParse</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaParse">xmlSchemaParse</a><br />
@@ -808,6 +817,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
 <a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a><br />
 <a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEntityValue">xmlParseEntityValue</a><br />
@@ -891,6 +901,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#xmlTextReaderSetParserProp">xmlTextReaderSetParserProp</a><br />
 <a href="html/libxml-tree.html#xmlUnsetNsProp">xmlUnsetNsProp</a><br />
 <a href="html/libxml-tree.html#xmlUnsetProp">xmlUnsetProp</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 </dd><dt>successfully</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNext">xmlTextReaderNext</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderNextSibling">xmlTextReaderNextSibling</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a><br />
@@ -966,8 +977,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index dc8dc79..dec65ba 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -117,6 +117,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
 <a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathAddValues">xmlXPathAddValues</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathDivValues">xmlXPathDivValues</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathIdFunction">xmlXPathIdFunction</a><br />
@@ -144,6 +145,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlstring.html#xmlStrQEqual">xmlStrQEqual</a><br />
 <a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
 <a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
 </dd><dt>third</dt><dd><a href="html/libxml-hash.html#xmlHashAddEntry3">xmlHashAddEntry3</a><br />
 <a href="html/libxml-hash.html#xmlHashLookup3">xmlHashLookup3</a><br />
 <a href="html/libxml-hash.html#xmlHashQLookup3">xmlHashQLookup3</a><br />
@@ -158,6 +160,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>those</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 <a href="html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseSDDecl">xmlParseSDDecl</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-tree.html#xmlSearchNs">xmlSearchNs</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSubstringFunction">xmlXPathSubstringFunction</a><br />
 </dd><dt>though</dt><dd><a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
@@ -170,7 +173,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-threads.html#xmlGetThreadId">xmlGetThreadId</a><br />
 <a href="html/libxml-threads.html#xmlInitThreads">xmlInitThreads</a><br />
 <a href="html/libxml-catalog.html#xmlInitializeCatalog">xmlInitializeCatalog</a><br />
-<a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 <a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalog">xmlLoadCatalog</a><br />
 <a href="html/libxml-catalog.html#xmlLoadCatalogs">xmlLoadCatalogs</a><br />
@@ -217,6 +219,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFileFormat">htmlNodeDumpFileFormat</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpFormatOutput">htmlNodeDumpFormatOutput</a><br />
 <a href="html/libxml-HTMLtree.html#htmlNodeDumpOutput">htmlNodeDumpOutput</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 <a href="html/libxml-tree.html#xmlCopyDoc">xmlCopyDoc</a><br />
 <a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
@@ -365,7 +368,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPMethodRedir">xmlNanoHTTPMethodRedir</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPOpen">xmlNanoHTTPOpen</a><br />
 <a href="html/libxml-nanohttp.html#xmlNanoHTTPOpenRedir">xmlNanoHTTPOpenRedir</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 <a href="html/libxml-tree.html#xmlReconciliateNs">xmlReconciliateNs</a><br />
 <a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
 <a href="html/libxml-valid.html#xmlValidateRoot">xmlValidateRoot</a><br />
@@ -425,8 +427,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 646acdb..c68ae92 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -62,6 +62,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
 <a href="html/libxml-uri.html#xmlURIUnescapeString">xmlURIUnescapeString</a><br />
 </dd><dt>unescaping</dt><dd><a href="html/libxml-uri.html#xmlParseURIRaw">xmlParseURIRaw</a><br />
+</dd><dt>unfriendly</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 </dd><dt>unicode</dt><dd><a href="html/libxml-HTMLparser.html#htmlEntityValueLookup">htmlEntityValueLookup</a><br />
 <a href="html/libxml-parserInternals.html#xmlIsLetter">xmlIsLetter</a><br />
 </dd><dt>unimplemented</dt><dd><a href="html/libxml-HTMLparser.html#htmlCtxtUseOptions">htmlCtxtUseOptions</a><br />
@@ -103,14 +105,15 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
 <a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextNamespace">xmlXPathNextNamespace</a><br />
-</dd><dt>unliked</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 </dd><dt>unlink</dt><dd><a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
 <a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
 </dd><dt>unlinked</dt><dd><a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a><br />
 <a href="html/libxml-entities.html#xmlNewEntity">xmlNewEntity</a><br />
 <a href="html/libxml-tree.html#xmlReplaceNode">xmlReplaceNode</a><br />
+<a href="html/libxml-tree.html#xmlUnlinkNode">xmlUnlinkNode</a><br />
 </dd><dt>unload</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleClose">xmlModuleClose</a><br />
 <a href="html/libxml-xmlmodule.html#xmlModuleFree">xmlModuleFree</a><br />
 </dd><dt>unloaded</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleClose">xmlModuleClose</a><br />
@@ -185,10 +188,12 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
 </dd><dt>upon</dt><dd><a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
 <a href="html/libxml-xlink.html#xlinkNodeDetectFunc">xlinkNodeDetectFunc</a><br />
-</dd><dt>upper</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
+</dd><dt>upper</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-xmlregexp.html#xmlExpNewRange">xmlExpNewRange</a><br />
 <a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
 </dd><dt>uri</dt><dd><a href="html/libxml-xmlIO.html#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a><br />
-</dd><dt>usage</dt><dd><a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
+</dd><dt>usage</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-tree.html#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
 </dd><dt>used:</dt><dd><a href="html/libxml-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a><br />
 </dd><dt>used?</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaAttribute">_xmlSchemaAttribute</a><br />
@@ -239,6 +244,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-relaxng.html#xmlRelaxNGValidatePushElement">xmlRelaxNGValidatePushElement</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
+</dd><dt>validator</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 </dd><dt>validity</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
 <a href="html/libxml-xlink.html#xlinkIsLink">xlinkIsLink</a><br />
@@ -292,6 +298,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>void</dt><dd><a href="html/libxml-hash.html#XML_CAST_FPTR">XML_CAST_FPTR</a><br />
 <a href="html/libxml-parser.html#xmlSAXParseFileWithData">xmlSAXParseFileWithData</a><br />
 <a href="html/libxml-parser.html#xmlSAXParseMemoryWithData">xmlSAXParseMemoryWithData</a><br />
+</dd><dt>volume</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
 <a href="APIchunk2.html">D-E</a>
@@ -301,8 +308,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 7123c06..cabaa27 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -132,6 +132,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>what</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogSetDefaults">xmlCatalogSetDefaults</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a><br />
 </dd><dt>where</dt><dd><a href="html/libxml-HTMLparser.html#_htmlElemDesc">_htmlElemDesc</a><br />
@@ -188,6 +189,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans">xmlAutomataNewOnceTrans</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewOnceTrans2">xmlAutomataNewOnceTrans2</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderLookupNamespace">xmlTextReaderLookupNamespace</a><br />
+</dd><dt>why</dt><dd><a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 </dd><dt>wierd</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>wildcard</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_GLOBAL">XML_SCHEMAS_ATTRGROUP_GLOBAL</a><br />
 <a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED">XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED</a><br />
@@ -255,6 +258,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>words</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathNormalizeFunction">xmlXPathNormalizeFunction</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathStringLengthFunction">xmlXPathStringLengthFunction</a><br />
 </dd><dt>work</dt><dd><a href="html/libxml-tree.html#xmlBufferDetach">xmlBufferDetach</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
 <a href="html/libxml-pattern.html#xmlPatternStreamable">xmlPatternStreamable</a><br />
 <a href="html/libxml-tree.html#xmlRemoveProp">xmlRemoveProp</a><br />
@@ -270,6 +275,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>worthwhile</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>would</dt><dd><a href="html/libxml-xmlerror.html#_xmlError">_xmlError</a><br />
 <a href="html/libxml-HTMLparser.html#htmlAutoCloseTag">htmlAutoCloseTag</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
 </dd><dt>wrapper</dt><dd><a href="html/libxml-tree.html#xmlDOMWrapAcquireNsFunction">xmlDOMWrapAcquireNsFunction</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a><br />
@@ -318,8 +325,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 5653024..c5993f9 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -107,12 +107,16 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>xmlAttributePtr</dt><dd><a href="html/libxml-valid.html#xmlGetDtdAttrDesc">xmlGetDtdAttrDesc</a><br />
 <a href="html/libxml-valid.html#xmlGetDtdQAttrDesc">xmlGetDtdQAttrDesc</a><br />
 </dd><dt>xmlAttributeTablePtr</dt><dd><a href="html/libxml-valid.html#xmlCopyAttributeTable">xmlCopyAttributeTable</a><br />
+</dd><dt>xmlBufNodeDump</dt><dd><a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+</dd><dt>xmlBufPtr</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
 </dd><dt>xmlBuffer</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
 <a href="html/libxml-encoding.html#xmlCharEncInFunc">xmlCharEncInFunc</a><br />
 <a href="html/libxml-encoding.html#xmlCharEncOutFunc">xmlCharEncOutFunc</a><br />
+<a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateBuffer">xmlOutputBufferCreateBuffer</a><br />
 </dd><dt>xmlBufferPtr</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateBuffer">xmlOutputBufferCreateBuffer</a><br />
+</dd><dt>xmlBufferShrink</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 </dd><dt>xmlBuildURI</dt><dd><a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
 </dd><dt>xmlBytesConsumed</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderByteConsumed">xmlTextReaderByteConsumed</a><br />
 </dd><dt>xmlCatalogAllow</dt><dd><a href="html/libxml-catalog.html#xmlCatalogGetDefaults">xmlCatalogGetDefaults</a><br />
@@ -129,8 +133,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>xmlCharEncodingOutputFunc</dt><dd><a href="html/libxml-encoding.html#xmlNewCharEncodingHandler">xmlNewCharEncodingHandler</a><br />
 </dd><dt>xmlChars</dt><dd><a href="html/libxml-parser.html#_xmlParserInput">_xmlParserInput</a><br />
 <a href="html/libxml-tree.html#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a><br />
-<a href="html/libxml-parser.html#xmlParserInputGrow">xmlParserInputGrow</a><br />
-<a href="html/libxml-parser.html#xmlParserInputRead">xmlParserInputRead</a><br />
 </dd><dt>xmlCleanupParser</dt><dd><a href="html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a><br />
 </dd><dt>xmlCleanupThreads</dt><dd><a href="html/libxml-threads.html#xmlCleanupThreads">xmlCleanupThreads</a><br />
 </dd><dt>xmlCopyDocElementContent</dt><dd><a href="html/libxml-valid.html#xmlCopyElementContent">xmlCopyElementContent</a><br />
@@ -216,7 +218,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>xmlHashTablePtr</dt><dd><a href="html/libxml-hash.html#xmlHashCreate">xmlHashCreate</a><br />
 <a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
 </dd><dt>xmlIDPtr</dt><dd><a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
-</dd><dt>xmlIndentTreeOutput</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+</dd><dt>xmlIndentTreeOutput</dt><dd><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
@@ -248,14 +251,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>xmlIsMainThread</dt><dd><a href="html/libxml-threads.html#xmlIsMainThread">xmlIsMainThread</a><br />
 </dd><dt>xmlIsPubidCharQ</dt><dd><a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
 </dd><dt>xmlIsPubidChar_ch</dt><dd><a href="html/libxml-chvalid.html#xmlIsPubidChar">xmlIsPubidChar</a><br />
-</dd><dt>xmlKeepBlanksDefault</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
+</dd><dt>xmlKeepBlanksDefault</dt><dd><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a><br />
-</dd><dt>xmlLineNumbersDefault</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 </dd><dt>xmlListWalk</dt><dd><a href="html/libxml-list.html#xmlListWalker">xmlListWalker</a><br />
 </dd><dt>xmlLoadExtDtdDefaultValue</dt><dd><a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
 <a href="html/libxml-parser.html#XML_DETECT_IDS">XML_DETECT_IDS</a><br />
@@ -311,10 +314,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlCopyNamespaceList">xmlCopyNamespaceList</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapAcquireNsFunction">xmlDOMWrapAcquireNsFunction</a><br />
 <a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+</dd><dt>xmlOutputBuffer</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
 </dd><dt>xmlOutputBufferClose</dt><dd><a href="html/libxml-tree.html#xmlSaveFileTo">xmlSaveFileTo</a><br />
 <a href="html/libxml-tree.html#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a><br />
 </dd><dt>xmlOutputBufferPtr</dt><dd><a href="html/libxml-xmlwriter.html#xmlNewTextWriter">xmlNewTextWriter</a><br />
 <a href="html/libxml-globals.html#xmlOutputBufferCreateFilenameFunc">xmlOutputBufferCreateFilenameFunc</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 </dd><dt>xmlOutputCloseCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
 </dd><dt>xmlOutputMatchCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
 </dd><dt>xmlOutputOpenCallback</dt><dd><a href="html/libxml-xmlIO.html#xmlRegisterOutputCallbacks">xmlRegisterOutputCallbacks</a><br />
@@ -338,6 +344,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a><br />
 </dd><dt>xmlParserFindNodeInfoIndex</dt><dd><a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
 </dd><dt>xmlParserHandleReference</dt><dd><a href="html/libxml-parserInternals.html#xmlScanName">xmlScanName</a><br />
+</dd><dt>xmlParserInputBuffer</dt><dd><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
 </dd><dt>xmlParserInputBufferPtr</dt><dd><a href="html/libxml-xmlreader.html#xmlNewTextReader">xmlNewTextReader</a><br />
 <a href="html/libxml-globals.html#xmlParserInputBufferCreateFilenameFunc">xmlParserInputBufferCreateFilenameFunc</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
@@ -491,6 +498,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrLocationSetAdd">xmlXPtrLocationSetAdd</a><br />
@@ -533,8 +541,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index d293408..2aaa21b 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -107,8 +107,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 946863a..515118a 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -57,7 +57,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>False</dt><dd><a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
 </dd><dt>Fetch</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPGet">xmlNanoFTPGet</a><br />
 </dd><dt>File</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderGetRemainder">xmlTextReaderGetRemainder</a><br />
-</dd><dt>Fills</dt><dd><a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+</dd><dt>Fills</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 </dd><dt>Find</dt><dd><a href="html/libxml-xmlregexp.html#xmlExpGetLanguage">xmlExpGetLanguage</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpGetStart">xmlExpGetStart</a><br />
 <a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
@@ -120,7 +121,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlDOMWrapFreeCtxt">xmlDOMWrapFreeCtxt</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPFreeCtxt">xmlNanoFTPFreeCtxt</a><br />
 </dd><dt>Front-end</dt><dd><a href="html/libxml-encoding.html#xmlCharEncFirstLine">xmlCharEncFirstLine</a><br />
-</dd><dt>Function</dt><dd><a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+</dd><dt>Function</dt><dd><a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+<a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
+<a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
+<a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
 <a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetGenericErrorFunc">xmlSetGenericErrorFunc</a><br />
 <a href="html/libxml-xmlerror.html#xmlSetStructuredErrorFunc">xmlSetStructuredErrorFunc</a><br />
@@ -140,7 +144,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>GeometricShapes</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGeometricShapes">xmlUCSIsGeometricShapes</a><br />
 </dd><dt>Georgian</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGeorgian">xmlUCSIsGeorgian</a><br />
 </dd><dt>Gets</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderReadState">xmlTextReaderReadState</a><br />
-</dd><dt>Gives</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaGetBuiltInType">xmlSchemaGetBuiltInType</a><br />
+</dd><dt>Gives</dt><dd><a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
+<a href="html/libxml-xmlschemastypes.html#xmlSchemaGetBuiltInType">xmlSchemaGetBuiltInType</a><br />
 </dd><dt>Global</dt><dd><a href="html/libxml-tree.html#_xmlDoc">_xmlDoc</a><br />
 </dd><dt>Gothic</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGothic">xmlUCSIsGothic</a><br />
 </dd><dt>Greek</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsGreek">xmlUCSIsGreek</a><br />
@@ -316,6 +322,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>Intended</dt><dd><a href="html/libxml-valid.html#xmlSnprintfElementContent">xmlSnprintfElementContent</a><br />
 </dd><dt>Internal</dt><dd><a href="html/libxml-tree.html#_xmlDOMWrapCtxt">_xmlDOMWrapCtxt</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseMarkupDecl">xmlParseMarkupDecl</a><br />
+</dd><dt>Introduced</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 </dd><dt>Irregular</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
@@ -326,8 +336,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 8220fff..d26883b 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -91,6 +91,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlSplitQName">xmlSplitQName</a><br />
 <a href="html/libxml-tree.html#xmlSplitQName2">xmlSplitQName2</a><br />
 </dd><dt>Location</dt><dd><a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEvalRangePredicate">xmlXPtrEvalRangePredicate</a><br />
 </dd><dt>LocationSet</dt><dd><a href="html/libxml-xpointer.html#xmlXPtrFreeLocationSet">xmlXPtrFreeLocationSet</a><br />
@@ -134,7 +135,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>MathematicalOperators</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsMathematicalOperators">xmlUCSIsMathematicalOperators</a><br />
 </dd><dt>Max</dt><dd><a href="html/libxml-parser.html#_xmlParserCtxt">_xmlParserCtxt</a><br />
 <a href="html/libxml-valid.html#_xmlValidCtxt">_xmlValidCtxt</a><br />
-</dd><dt>Maximum</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>Maximum</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 </dd><dt>May</dt><dd><a href="html/libxml-uri.html#xmlURIEscape">xmlURIEscape</a><br />
 </dd><dt>Memory</dt><dd><a href="html/libxml-tree.html#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
@@ -193,7 +197,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaGetCanonValue">xmlSchemaGetCanonValue</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaNewNOTATIONValue">xmlSchemaNewNOTATIONValue</a><br />
 <a href="html/libxml-valid.html#xmlValidateDtdFinal">xmlValidateDtdFinal</a><br />
-</dd><dt>NOTE</dt><dd><a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
+</dd><dt>NOTE</dt><dd><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-parser.html#xmlCtxtReadFd">xmlCtxtReadFd</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseExternalID">xmlParseExternalID</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseNotationDecl">xmlParseNotationDecl</a><br />
 <a href="html/libxml-parser.html#xmlReadFd">xmlReadFd</a><br />
@@ -207,6 +212,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a><br />
 <a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
 <a href="html/libxml-encoding.html#xmlInitCharEncodingHandlers">xmlInitCharEncodingHandlers</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleOpen">xmlModuleOpen</a><br />
+<a href="html/libxml-xmlmodule.html#xmlModuleSymbol">xmlModuleSymbol</a><br />
 <a href="html/libxml-tree.html#xmlNewChild">xmlNewChild</a><br />
 <a href="html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a><br />
 <a href="html/libxml-tree.html#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a><br />
@@ -320,8 +327,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index fcbe54a..da60d1a 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -149,6 +149,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaGetBuiltInListSimpleTypeItemType">xmlSchemaGetBuiltInListSimpleTypeItemType</a><br />
 </dd><dt>Path</dt><dd><a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
 <a href="html/libxml-xpath.html#xmlXPathEval">xmlXPathEval</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
 </dd><dt>People</dt><dd><a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 </dd><dt>PhoneticExtensions</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsPhoneticExtensions">xmlUCSIsPhoneticExtensions</a><br />
@@ -268,8 +269,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 315c8bd..346e7e5 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -82,7 +82,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>Raises</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSetError">xmlXPathSetError</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
-</dd><dt>Read</dt><dd><a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
+</dd><dt>Read</dt><dd><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlFileRead">xmlFileRead</a><br />
 <a href="html/libxml-parser.html#xmlGetFeature">xmlGetFeature</a><br />
 <a href="html/libxml-xmlstring.html#xmlGetUTF8Char">xmlGetUTF8Char</a><br />
 <a href="html/libxml-xmlIO.html#xmlIOFTPRead">xmlIOFTPRead</a><br />
@@ -201,6 +202,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-relaxng.html#xmlRelaxNGNewParserCtxt">xmlRelaxNGNewParserCtxt</a><br />
 <a href="html/libxml-relaxng.html#xmlRelaxNGNewValidCtxt">xmlRelaxNGNewValidCtxt</a><br />
 </dd><dt>Remove</dt><dd><a href="html/libxml-catalog.html#xmlACatalogRemove">xmlACatalogRemove</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 <a href="html/libxml-tree.html#xmlBufferDetach">xmlBufferDetach</a><br />
 <a href="html/libxml-tree.html#xmlBufferShrink">xmlBufferShrink</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogRemove">xmlCatalogRemove</a><br />
@@ -268,8 +270,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 452b9a7..3f46f99 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -185,8 +185,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathTrailing">xmlXPathTrailing</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathTrailingSorted">xmlXPathTrailingSorted</a><br />
+</dd><dt>Setting</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 </dd><dt>Setup</dt><dd><a href="html/libxml-nanoftp.html#xmlNanoFTPProxy">xmlNanoFTPProxy</a><br />
 <a href="html/libxml-xmlreader.html#xmlReaderNewDoc">xmlReaderNewDoc</a><br />
 <a href="html/libxml-xmlreader.html#xmlReaderNewFd">xmlReaderNewFd</a><br />
@@ -229,7 +231,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#xmlTextReaderErrorFunc">xmlTextReaderErrorFunc</a><br />
 </dd><dt>Similarly</dt><dd><a href="html/libxml-parserInternals.html#xmlParseEntityRef">xmlParseEntityRef</a><br />
 </dd><dt>Simply</dt><dd><a href="html/libxml-uri.html#xmlCreateURI">xmlCreateURI</a><br />
-</dd><dt>Since</dt><dd><a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
+</dd><dt>Since</dt><dd><a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
+<a href="html/libxml-xmlstring.html#xmlStrcat">xmlStrcat</a><br />
 <a href="html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderNormalization">xmlTextReaderNormalization</a><br />
 </dd><dt>Single</dt><dd><a href="html/libxml-parserInternals.html#xmlCheckLanguageID">xmlCheckLanguageID</a><br />
@@ -303,8 +306,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 8fca400..934e39d 100644 (file)
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -41,6 +41,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlAddChildList">xmlAddChildList</a><br />
 <a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
 <a href="html/libxml-tree.html#xmlNewTextChild">xmlNewTextChild</a><br />
 <a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
@@ -152,6 +153,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-catalog.html#xmlCatalogGetSystem">xmlCatalogGetSystem</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogResolvePublic">xmlCatalogResolvePublic</a><br />
 <a href="html/libxml-catalog.html#xmlCatalogResolveSystem">xmlCatalogResolveSystem</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
 <a href="html/libxml-tree.html#xmlIsXHTML">xmlIsXHTML</a><br />
 <a href="html/libxml-nanoftp.html#xmlNanoFTPGetConnection">xmlNanoFTPGetConnection</a><br />
 <a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
@@ -281,8 +283,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 5cb56e3..8c4ac1f 100644 (file)
@@ -7,7 +7,7 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>API Alphabetic Index V-Y for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index V-Y for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
+</style><title>API Alphabetic Index V-X for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>API Alphabetic Index V-X for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
 <a href="APIchunk2.html">D-E</a>
 <a href="APIchunk3.html">F-I</a>
@@ -16,8 +16,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
@@ -132,6 +132,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>With</dt><dd><a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEndTag">xmlParseEndTag</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseStartTag">xmlParseStartTag</a><br />
+</dd><dt>Workaround</dt><dd><a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
 </dd><dt>Working</dt><dd><a href="html/libxml-parserInternals.html#xmlParseNamespace">xmlParseNamespace</a><br />
 </dd><dt>Wrap</dt><dd><a href="html/libxml-xpathInternals.html#xmlXPathWrapNodeSet">xmlXPathWrapNodeSet</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrWrapLocationSet">xmlXPtrWrapLocationSet</a><br />
@@ -195,7 +196,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 </dd><dt>XML_ELEMENT_TYPE_xxx</dt><dd><a href="html/libxml-parserInternals.html#xmlParseElementContentDecl">xmlParseElementContentDecl</a><br />
 </dd><dt>XML_ENTITY_DECL</dt><dd><a href="html/libxml-entities.html#_xmlEntity">_xmlEntity</a><br />
 </dd><dt>XML_ERR_OK</dt><dd><a href="html/libxml-parser.html#xmlParseInNodeContext">xmlParseInNodeContext</a><br />
-</dd><dt>XML_PARSE_HUGE</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
+</dd><dt>XML_PARSE_BIG_LINES</dt><dd><a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+</dd><dt>XML_PARSE_HUGE</dt><dd><a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 </dd><dt>XML_SCHEMAS_ELEM_GLOBAL</dt><dd><a href="html/libxml-schemasInternals.html#XML_SCHEMAS_ELEM_TOPLEVEL">XML_SCHEMAS_ELEM_TOPLEVEL</a><br />
 </dd><dt>XML_SCHEMAS_FACET_PRESERVE</dt><dd><a href="html/libxml-schemasInternals.html#_xmlSchemaFacet">_xmlSchemaFacet</a><br />
 </dd><dt>XML_SCHEMAS_STRING</dt><dd><a href="html/libxml-xmlschemastypes.html#xmlSchemaNewStringValue">xmlSchemaNewStringValue</a><br />
@@ -236,10 +240,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xinclude.html#XINCLUDE_OLD_NS">XINCLUDE_OLD_NS</a><br />
 </dd><dt>Xml</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
 </dd><dt>XmlNodeType</dt><dd><a href="html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a><br />
-</dd></dl><h2>Letter Y:</h2><dl><dt>YES</dt><dd><a href="html/libxml-HTMLparser.html#htmlNodeStatus">htmlNodeStatus</a><br />
-</dd><dt>YiRadicals</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiRadicals">xmlUCSIsYiRadicals</a><br />
-</dd><dt>YiSyllables</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYiSyllables">xmlUCSIsYiSyllables</a><br />
-</dd><dt>YijingHexagramSymbols</dt><dd><a href="html/libxml-xmlunicode.html#xmlUCSIsYijingHexagramSymbols">xmlUCSIsYijingHexagramSymbols</a><br />
 </dd></dl><h2 align="center"><a href="APIchunk0.html">A-B</a>
 <a href="APIchunk1.html">C-C</a>
 <a href="APIchunk2.html">D-E</a>
@@ -249,8 +249,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="APIchunk6.html">Q-R</a>
 <a href="APIchunk7.html">S-S</a>
 <a href="APIchunk8.html">T-U</a>
-<a href="APIchunk9.html">V-Y</a>
-<a href="APIchunk10.html">Z-a</a>
+<a href="APIchunk9.html">V-X</a>
+<a href="APIchunk10.html">Y-a</a>
 <a href="APIchunk11.html">b-b</a>
 <a href="APIchunk12.html">c-c</a>
 <a href="APIchunk13.html">d-d</a>
index 35bb017..d5ca488 100644 (file)
@@ -24,6 +24,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
 <a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseAttribute">xmlParseAttribute</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseEncodingDecl">xmlParseEncodingDecl</a><br />
 <a href="html/libxml-parserInternals.html#xmlParseName">xmlParseName</a><br />
@@ -91,6 +92,12 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlsave.html#xmlSaveTree">xmlSaveTree</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderByteConsumed">xmlTextReaderByteConsumed</a><br />
 <a href="html/libxml-xpath.html#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a><br />
+</p><h2>Type size_t:</h2><p><a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 </p><h2>Type unsigned long:</h2><p><a href="html/libxml-tree.html#xmlChildElementCount">xmlChildElementCount</a><br />
 <a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaGetFacetValueAsULong">xmlSchemaGetFacetValueAsULong</a><br />
@@ -173,6 +180,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-catalog.html#xmlACatalogResolvePublic">xmlACatalogResolvePublic</a><br />
 <a href="html/libxml-catalog.html#xmlACatalogResolveSystem">xmlACatalogResolveSystem</a><br />
 <a href="html/libxml-catalog.html#xmlACatalogResolveURI">xmlACatalogResolveURI</a><br />
+<a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+<a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
 <a href="html/libxml-tree.html#xmlBufferDetach">xmlBufferDetach</a><br />
 <a href="html/libxml-tree.html#xmlBuildQName">xmlBuildQName</a><br />
 <a href="html/libxml-uri.html#xmlBuildRelativeURI">xmlBuildRelativeURI</a><br />
@@ -562,6 +571,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNewNodeSetList">xmlXPathNewNodeSetList</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewValueTree">xmlXPathNewValueTree</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpath.html#xmlXPathObjectCopy">xmlXPathObjectCopy</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
 <a href="html/libxml-xpath.html#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a><br />
index 3911d92..65e004b 100644 (file)
@@ -331,11 +331,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
 <a href="html/libxml-dict.html#xmlDictExists">xmlDictExists</a><br />
 <a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
 <a href="html/libxml-dict.html#xmlDictPtr">xmlDictPtr</a><br />
 <a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
 <a href="html/libxml-dict.html#xmlInitializeDict">xmlInitializeDict</a><br />
 </p><h2><a name="encoding" id="encoding">Module encoding</a>:</h2><p><a href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a><br />
@@ -610,6 +612,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parser.html#XML_PARSER_START">XML_PARSER_START</a><br />
 <a href="html/libxml-parser.html#XML_PARSER_START_TAG">XML_PARSER_START_TAG</a><br />
 <a href="html/libxml-parser.html#XML_PARSER_SYSTEM_LITERAL">XML_PARSER_SYSTEM_LITERAL</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_COMPACT">XML_PARSE_COMPACT</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_DOM">XML_PARSE_DOM</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_DTDATTR">XML_PARSE_DTDATTR</a><br />
@@ -816,7 +819,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#MOVETO_ENDTAG">MOVETO_ENDTAG</a><br />
 <a href="html/libxml-parserInternals.html#MOVETO_STARTTAG">MOVETO_STARTTAG</a><br />
 <a href="html/libxml-parserInternals.html#SKIP_EOL">SKIP_EOL</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a><br />
 <a href="html/libxml-parserInternals.html#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a><br />
@@ -1286,6 +1292,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-threads.html#xmlRMutexUnlock">xmlRMutexUnlock</a><br />
 <a href="html/libxml-threads.html#xmlUnlockLibrary">xmlUnlockLibrary</a><br />
 </p><h2><a name="tree" id="tree">Module tree</a>:</h2><p><a href="html/libxml-tree.html#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a><br />
+<a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
 <a href="html/libxml-tree.html#XML_ATTRIBUTE_CDATA">XML_ATTRIBUTE_CDATA</a><br />
 <a href="html/libxml-tree.html#XML_ATTRIBUTE_DECL">XML_ATTRIBUTE_DECL</a><br />
 <a href="html/libxml-tree.html#XML_ATTRIBUTE_ENTITIES">XML_ATTRIBUTE_ENTITIES</a><br />
@@ -1378,6 +1385,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlAttributeDefault">xmlAttributeDefault</a><br />
 <a href="html/libxml-tree.html#xmlAttributePtr">xmlAttributePtr</a><br />
 <a href="html/libxml-tree.html#xmlAttributeType">xmlAttributeType</a><br />
+<a href="html/libxml-tree.html#xmlBuf">xmlBuf</a><br />
+<a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+<a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlBufPtr">xmlBufPtr</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
 <a href="html/libxml-tree.html#xmlBuffer">xmlBuffer</a><br />
 <a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 <a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
@@ -1771,6 +1786,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
@@ -1817,7 +1834,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a><br />
 <a href="html/libxml-xmlautomata.html#xmlFreeAutomata">xmlFreeAutomata</a><br />
 <a href="html/libxml-xmlautomata.html#xmlNewAutomata">xmlNewAutomata</a><br />
-</p><h2><a name="xmlerror" id="xmlerror">Module xmlerror</a>:</h2><p><a href="html/libxml-xmlerror.html#XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a><br />
+</p><h2><a name="xmlerror" id="xmlerror">Module xmlerror</a>:</h2><p><a href="html/libxml-xmlerror.html#XML_BUF_OVERFLOW">XML_BUF_OVERFLOW</a><br />
+<a href="html/libxml-xmlerror.html#XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a><br />
 <a href="html/libxml-xmlerror.html#XML_C14N_CREATE_STACK">XML_C14N_CREATE_STACK</a><br />
 <a href="html/libxml-xmlerror.html#XML_C14N_INVALID_NODE">XML_C14N_INVALID_NODE</a><br />
 <a href="html/libxml-xmlerror.html#XML_C14N_RELATIVE_NAMESPACE">XML_C14N_RELATIVE_NAMESPACE</a><br />
@@ -1828,7 +1846,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_CATALOG_NOT_CATALOG">XML_CATALOG_NOT_CATALOG</a><br />
 <a href="html/libxml-xmlerror.html#XML_CATALOG_PREFER_VALUE">XML_CATALOG_PREFER_VALUE</a><br />
 <a href="html/libxml-xmlerror.html#XML_CATALOG_RECURSION">XML_CATALOG_RECURSION</a><br />
-<a href="html/libxml-xmlerror.html#XML_CHECK_">XML_CHECK_</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_ENTITY_TYPE">XML_CHECK_ENTITY_TYPE</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_FOUND_ATTRIBUTE">XML_CHECK_FOUND_ATTRIBUTE</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_FOUND_CDATA">XML_CHECK_FOUND_CDATA</a><br />
@@ -1867,7 +1884,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_NEXT">XML_CHECK_WRONG_NEXT</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_PARENT">XML_CHECK_WRONG_PARENT</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_PREV">XML_CHECK_WRONG_PREV</a><br />
-<a href="html/libxml-xmlerror.html#XML_CHECK_X">XML_CHECK_X</a><br />
 <a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_DEFAULT">XML_DTD_ATTRIBUTE_DEFAULT</a><br />
 <a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_REDEFINED">XML_DTD_ATTRIBUTE_REDEFINED</a><br />
 <a href="html/libxml-xmlerror.html#XML_DTD_ATTRIBUTE_VALUE">XML_DTD_ATTRIBUTE_VALUE</a><br />
@@ -1973,6 +1989,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_FINISHED">XML_ERR_MIXED_NOT_FINISHED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_STARTED">XML_ERR_MIXED_NOT_STARTED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NAME_REQUIRED">XML_ERR_NAME_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NAME_TOO_LONG">XML_ERR_NAME_TOO_LONG</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NMTOKEN_REQUIRED">XML_ERR_NMTOKEN_REQUIRED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NONE">XML_ERR_NONE</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_FINISHED">XML_ERR_NOTATION_NOT_FINISHED</a><br />
@@ -2009,12 +2026,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_ERR_UNSUPPORTED_ENCODING">XML_ERR_UNSUPPORTED_ENCODING</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_URI_FRAGMENT">XML_ERR_URI_FRAGMENT</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_URI_REQUIRED">XML_ERR_URI_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_USER_STOP">XML_ERR_USER_STOP</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VALUE_REQUIRED">XML_ERR_VALUE_REQUIRED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISMATCH">XML_ERR_VERSION_MISMATCH</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISSING">XML_ERR_VERSION_MISSING</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_WARNING">XML_ERR_WARNING</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_FINISHED">XML_ERR_XMLDECL_NOT_FINISHED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_XMLDECL_NOT_STARTED">XML_ERR_XMLDECL_NOT_STARTED</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_BUFFER">XML_FROM_BUFFER</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_C14N">XML_FROM_C14N</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_CATALOG">XML_FROM_CATALOG</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_CHECK">XML_FROM_CHECK</a><br />
@@ -2038,6 +2057,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_SCHEMATRONV">XML_FROM_SCHEMATRONV</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_URI">XML_FROM_URI</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_WRITER">XML_FROM_WRITER</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
@@ -2906,8 +2926,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateFile">xmlSchemaValidateFile</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a><br />
 </p><h2><a name="xmlschemastypes" id="xmlschemastypes">Module xmlschemastypes</a>:</h2><p><a href="html/libxml-xmlschemastypes.html#XML_SCHEMA_WHITESPACE_COLLAPSE">XML_SCHEMA_WHITESPACE_COLLAPSE</a><br />
 <a href="html/libxml-xmlschemastypes.html#XML_SCHEMA_WHITESPACE_PRESERVE">XML_SCHEMA_WHITESPACE_PRESERVE</a><br />
@@ -3177,6 +3200,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlversion.html#LIBXML_SCHEMAS_ENABLED">LIBXML_SCHEMAS_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_SCHEMATRON_ENABLED">LIBXML_SCHEMATRON_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
@@ -3215,6 +3239,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
@@ -3281,6 +3306,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#XPATH_ENCODING_ERROR">XPATH_ENCODING_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_EXPRESSION_OK">XPATH_EXPRESSION_OK</a><br />
 <a href="html/libxml-xpath.html#XPATH_EXPR_ERROR">XPATH_EXPR_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_FORBID_VARIABLE_ERROR">XPATH_FORBID_VARIABLE_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_CTXT">XPATH_INVALID_CTXT</a><br />
@@ -3372,6 +3398,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#xmlXPathNAN">xmlXPathNAN</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNINF">xmlXPathNINF</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNodeSetGetLength">xmlXPathNodeSetGetLength</a><br />
 <a href="html/libxml-xpath.html#xmlXPathNodeSetIsEmpty">xmlXPathNodeSetIsEmpty</a><br />
@@ -3384,6 +3411,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#xmlXPathPINF">xmlXPathPINF</a><br />
 <a href="html/libxml-xpath.html#xmlXPathParserContext">xmlXPathParserContext</a><br />
 <a href="html/libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 <a href="html/libxml-xpath.html#xmlXPathType">xmlXPathType</a><br />
 <a href="html/libxml-xpath.html#xmlXPathTypePtr">xmlXPathTypePtr</a><br />
 <a href="html/libxml-xpath.html#xmlXPathVariable">xmlXPathVariable</a><br />
index dbe89e8..9027afe 100644 (file)
@@ -81,6 +81,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlIO.html#xmlOutputMatchCallback">xmlOutputMatchCallback</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputOpenCallback">xmlOutputOpenCallback</a><br />
 </p><h2>Type const char **:</h2><p><a href="html/libxml-parser.html#xmlGetFeaturesList">xmlGetFeaturesList</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 </p><h2>Type const htmlElemDesc *:</h2><p><a href="html/libxml-HTMLparser.html#htmlAttrAllowed">htmlAttrAllowed</a><br />
 <a href="html/libxml-HTMLparser.html#htmlElementAllowedHere">htmlElementAllowedHere</a><br />
 <a href="html/libxml-HTMLparser.html#htmlElementStatusHere">htmlElementStatusHere</a><br />
@@ -108,7 +109,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 </p><h2>Type const xlinkTitle:</h2><p><a href="html/libxml-xlink.html#xlinkSimpleLinkFunk">xlinkSimpleLinkFunk</a><br />
 </p><h2>Type const xlinkTitle *:</h2><p><a href="html/libxml-xlink.html#xlinkExtendedLinkFunk">xlinkExtendedLinkFunk</a><br />
 <a href="html/libxml-xlink.html#xlinkExtendedLinkSetFunk">xlinkExtendedLinkSetFunk</a><br />
-</p><h2>Type const xmlBufferPtr:</h2><p><a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
+</p><h2>Type const xmlBuf *:</h2><p><a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+</p><h2>Type const xmlBufPtr:</h2><p><a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
+</p><h2>Type const xmlBuffer *:</h2><p><a href="html/libxml-tree.html#xmlBufferContent">xmlBufferContent</a><br />
 <a href="html/libxml-tree.html#xmlBufferLength">xmlBufferLength</a><br />
 </p><h2>Type const xmlChRangeGroup *:</h2><p><a href="html/libxml-chvalid.html#xmlCharInRange">xmlCharInRange</a><br />
 </p><h2>Type const xmlChar *:</h2><p><a href="html/libxml-SAX.html#attribute">attribute</a><br />
@@ -485,6 +488,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathIsNodeType">xmlXPathIsNodeType</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewString">xmlXPathNewString</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a><br />
@@ -513,13 +517,40 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a><br />
 <a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
 <a href="html/libxml-valid.html#xmlValidGetValidElements">xmlValidGetValidElements</a><br />
+</p><h2>Type const xmlDoc *:</h2><p><a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
+<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
+<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
+<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
+<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
+<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
+<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
 </p><h2>Type const xmlListPtr:</h2><p><a href="html/libxml-list.html#xmlListCopy">xmlListCopy</a><br />
 <a href="html/libxml-list.html#xmlListDup">xmlListDup</a><br />
-</p><h2>Type const xmlNodePtr:</h2><p><a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
-<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
-<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
-<a href="html/libxml-tree.html#xmlDocCopyNodeList">xmlDocCopyNodeList</a><br />
-<a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
+</p><h2>Type const xmlNode *:</h2><p><a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
+<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
+<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
+<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
+<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
+<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
+<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
+<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
+<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
+<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
+<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
+<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
+<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
+</p><h2>Type const xmlNodePtr:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
 <a href="html/libxml-parser.html#xmlParserFindNodeInfoIndex">xmlParserFindNodeInfoIndex</a><br />
 </p><h2>Type const xmlParserCtxtPtr:</h2><p><a href="html/libxml-parser.html#xmlParserFindNodeInfo">xmlParserFindNodeInfo</a><br />
 </p><h2>Type const xmlParserNodeInfoPtr:</h2><p><a href="html/libxml-parser.html#xmlParserAddNodeInfo">xmlParserAddNodeInfo</a><br />
@@ -581,8 +612,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#xmlStringCurrentChar">xmlStringCurrentChar</a><br />
 <a href="html/libxml-valid.html#xmlValidGetPotentialChildren">xmlValidGetPotentialChildren</a><br />
 </p><h2>Type long:</h2><p><a href="html/libxml-xmlmemory.html#xmlMemDisplayLast">xmlMemDisplayLast</a><br />
-</p><h2>Type size_t:</h2><p><a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
+</p><h2>Type size_t:</h2><p><a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufferCreateSize">xmlBufferCreateSize</a><br />
 <a href="html/libxml-tree.html#xmlBufferCreateStatic">xmlBufferCreateStatic</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMallocAtomicLoc">xmlMallocAtomicLoc</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMallocFunc">xmlMallocFunc</a><br />
 <a href="html/libxml-xmlmemory.html#xmlMallocLoc">xmlMallocLoc</a><br />
@@ -616,6 +649,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </p><h2>Type unsigned long *:</h2><p><a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacet">xmlSchemaValidateLengthFacet</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateLengthFacetWhtsp">xmlSchemaValidateLengthFacetWhtsp</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateListSimpleTypeFacet">xmlSchemaValidateListSimpleTypeFacet</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 </p><h2>Type va_list:</h2><p><a href="html/libxml-xmlstring.html#xmlStrVPrintf">xmlStrVPrintf</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttribute">xmlTextWriterWriteVFormatAttribute</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a><br />
@@ -853,8 +887,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetParserStructuredErrors">xmlSchemaSetParserStructuredErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a><br />
 <a href="html/libxml-schematron.html#xmlSchematronSetValidStructuredErrors">xmlSchematronSetValidStructuredErrors</a><br />
 <a href="html/libxml-schematron.html#xmlSchematronValidityErrorFunc">xmlSchematronValidityErrorFunc</a><br />
@@ -941,6 +977,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition">xmlAutomataNewTransition</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataNewTransition2">xmlAutomataNewTransition2</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataSetFinalState">xmlAutomataSetFinalState</a><br />
+</p><h2>Type xmlBufPtr:</h2><p><a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
 </p><h2>Type xmlBufferAllocationScheme:</h2><p><a href="html/libxml-tree.html#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a><br />
 <a href="html/libxml-tree.html#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a><br />
 <a href="html/libxml-globals.html#xmlThrDefBufferAllocScheme">xmlThrDefBufferAllocScheme</a><br />
@@ -995,6 +1035,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a><br />
 <a href="html/libxml-parserInternals.html#xmlStringDecodeEntities">xmlStringDecodeEntities</a><br />
 <a href="html/libxml-parserInternals.html#xmlStringLenDecodeEntities">xmlStringLenDecodeEntities</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 </p><h2>Type xmlChar *:</h2><p><a href="html/libxml-SAX.html#checkNamespace">checkNamespace</a><br />
 <a href="html/libxml-DOCBparser.html#docbParseDoc">docbParseDoc</a><br />
 <a href="html/libxml-DOCBparser.html#docbSAXParseDoc">docbSAXParseDoc</a><br />
@@ -1085,10 +1126,12 @@ A:link, A:visited, A:active { text-decoration: underline }
 </p><h2>Type xmlDictPtr:</h2><p><a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
 <a href="html/libxml-dict.html#xmlDictExists">xmlDictExists</a><br />
 <a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
 <a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
 <a href="html/libxml-xmlregexp.html#xmlExpNewCtxt">xmlExpNewCtxt</a><br />
 <a href="html/libxml-hash.html#xmlHashCreateDict">xmlHashCreateDict</a><br />
@@ -1111,6 +1154,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-valid.html#xmlAddID">xmlAddID</a><br />
 <a href="html/libxml-valid.html#xmlAddRef">xmlAddRef</a><br />
 <a href="html/libxml-tree.html#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocDumpMemory">xmlC14NDocDumpMemory</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSave">xmlC14NDocSave</a><br />
 <a href="html/libxml-c14n.html#xmlC14NDocSaveTo">xmlC14NDocSaveTo</a><br />
@@ -1133,20 +1177,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlDocDumpMemory">xmlDocDumpMemory</a><br />
 <a href="html/libxml-tree.html#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a><br />
 <a href="html/libxml-tree.html#xmlDocFormatDump">xmlDocFormatDump</a><br />
-<a href="html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a><br />
 <a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
 <a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
 <a href="html/libxml-entities.html#xmlEncodeEntities">xmlEncodeEntities</a><br />
 <a href="html/libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a><br />
-<a href="html/libxml-entities.html#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a><br />
 <a href="html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a><br />
 <a href="html/libxml-valid.html#xmlFreeDocElementContent">xmlFreeDocElementContent</a><br />
-<a href="html/libxml-tree.html#xmlGetDocCompressMode">xmlGetDocCompressMode</a><br />
-<a href="html/libxml-entities.html#xmlGetDocEntity">xmlGetDocEntity</a><br />
 <a href="html/libxml-entities.html#xmlGetDtdEntity">xmlGetDtdEntity</a><br />
 <a href="html/libxml-valid.html#xmlGetID">xmlGetID</a><br />
-<a href="html/libxml-tree.html#xmlGetIntSubset">xmlGetIntSubset</a><br />
-<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
 <a href="html/libxml-entities.html#xmlGetParameterEntity">xmlGetParameterEntity</a><br />
 <a href="html/libxml-valid.html#xmlGetRefs">xmlGetRefs</a><br />
 <a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
@@ -1162,17 +1200,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNewDocPI">xmlNewDocPI</a><br />
 <a href="html/libxml-tree.html#xmlNewDocProp">xmlNewDocProp</a><br />
 <a href="html/libxml-tree.html#xmlNewDocRawNode">xmlNewDocRawNode</a><br />
-<a href="html/libxml-tree.html#xmlNewDocText">xmlNewDocText</a><br />
 <a href="html/libxml-tree.html#xmlNewDocTextLen">xmlNewDocTextLen</a><br />
 <a href="html/libxml-tree.html#xmlNewDtd">xmlNewDtd</a><br />
 <a href="html/libxml-entities.html#xmlNewEntity">xmlNewEntity</a><br />
 <a href="html/libxml-tree.html#xmlNewGlobalNs">xmlNewGlobalNs</a><br />
-<a href="html/libxml-tree.html#xmlNewReference">xmlNewReference</a><br />
 <a href="html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
-<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
 <a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
 <a href="html/libxml-parser.html#xmlParseBalancedChunkMemory">xmlParseBalancedChunkMemory</a><br />
 <a href="html/libxml-parser.html#xmlParseBalancedChunkMemoryRecover">xmlParseBalancedChunkMemoryRecover</a><br />
@@ -1204,8 +1238,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlSetListDoc">xmlSetListDoc</a><br />
 <a href="html/libxml-tree.html#xmlSetTreeDoc">xmlSetTreeDoc</a><br />
 <a href="html/libxml-debugXML.html#xmlShell">xmlShell</a><br />
-<a href="html/libxml-tree.html#xmlStringGetNodeList">xmlStringGetNodeList</a><br />
-<a href="html/libxml-tree.html#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a><br />
 <a href="html/libxml-valid.html#xmlValidCtxtNormalizeAttributeValue">xmlValidCtxtNormalizeAttributeValue</a><br />
 <a href="html/libxml-valid.html#xmlValidNormalizeAttributeValue">xmlValidNormalizeAttributeValue</a><br />
 <a href="html/libxml-valid.html#xmlValidateAttributeDecl">xmlValidateAttributeDecl</a><br />
@@ -1437,8 +1469,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlAddNextSibling">xmlAddNextSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddPrevSibling">xmlAddPrevSibling</a><br />
 <a href="html/libxml-tree.html#xmlAddSibling">xmlAddSibling</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
 <a href="html/libxml-c14n.html#xmlC14NIsVisibleCallback">xmlC14NIsVisibleCallback</a><br />
 <a href="html/libxml-tree.html#xmlChildElementCount">xmlChildElementCount</a><br />
+<a href="html/libxml-tree.html#xmlCopyNode">xmlCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlCopyNodeList">xmlCopyNodeList</a><br />
 <a href="html/libxml-tree.html#xmlCopyProp">xmlCopyProp</a><br />
 <a href="html/libxml-tree.html#xmlCopyPropList">xmlCopyPropList</a><br />
 <a href="html/libxml-tree.html#xmlDOMWrapAcquireNsFunction">xmlDOMWrapAcquireNsFunction</a><br />
@@ -1450,22 +1485,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-debugXML.html#xmlDebugDumpNodeList">xmlDebugDumpNodeList</a><br />
 <a href="html/libxml-debugXML.html#xmlDebugDumpOneNode">xmlDebugDumpOneNode</a><br />
 <a href="html/libxml-globals.html#xmlDeregisterNodeFunc">xmlDeregisterNodeFunc</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNode">xmlDocCopyNode</a><br />
+<a href="html/libxml-tree.html#xmlDocCopyNodeList">xmlDocCopyNodeList</a><br />
 <a href="html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a><br />
 <a href="html/libxml-tree.html#xmlElemDump">xmlElemDump</a><br />
 <a href="html/libxml-parserInternals.html#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a><br />
 <a href="html/libxml-tree.html#xmlFirstElementChild">xmlFirstElementChild</a><br />
 <a href="html/libxml-tree.html#xmlFreeNode">xmlFreeNode</a><br />
 <a href="html/libxml-tree.html#xmlFreeNodeList">xmlFreeNodeList</a><br />
-<a href="html/libxml-tree.html#xmlGetLastChild">xmlGetLastChild</a><br />
-<a href="html/libxml-tree.html#xmlGetLineNo">xmlGetLineNo</a><br />
-<a href="html/libxml-tree.html#xmlGetNoNsProp">xmlGetNoNsProp</a><br />
-<a href="html/libxml-tree.html#xmlGetNodePath">xmlGetNodePath</a><br />
-<a href="html/libxml-tree.html#xmlGetNsList">xmlGetNsList</a><br />
-<a href="html/libxml-tree.html#xmlGetNsProp">xmlGetNsProp</a><br />
-<a href="html/libxml-tree.html#xmlGetProp">xmlGetProp</a><br />
-<a href="html/libxml-tree.html#xmlHasNsProp">xmlHasNsProp</a><br />
-<a href="html/libxml-tree.html#xmlHasProp">xmlHasProp</a><br />
-<a href="html/libxml-tree.html#xmlIsBlankNode">xmlIsBlankNode</a><br />
 <a href="html/libxml-valid.html#xmlIsID">xmlIsID</a><br />
 <a href="html/libxml-valid.html#xmlIsRef">xmlIsRef</a><br />
 <a href="html/libxml-tree.html#xmlLastElementChild">xmlLastElementChild</a><br />
@@ -1481,16 +1508,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNextElementSibling">xmlNextElementSibling</a><br />
 <a href="html/libxml-tree.html#xmlNodeAddContent">xmlNodeAddContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeAddContentLen">xmlNodeAddContentLen</a><br />
-<a href="html/libxml-tree.html#xmlNodeBufGetContent">xmlNodeBufGetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeDump">xmlNodeDump</a><br />
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetBase">xmlNodeGetBase</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetContent">xmlNodeGetContent</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetLang">xmlNodeGetLang</a><br />
-<a href="html/libxml-tree.html#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a><br />
-<a href="html/libxml-tree.html#xmlNodeIsText">xmlNodeIsText</a><br />
-<a href="html/libxml-tree.html#xmlNodeListGetRawString">xmlNodeListGetRawString</a><br />
-<a href="html/libxml-tree.html#xmlNodeListGetString">xmlNodeListGetString</a><br />
 <a href="html/libxml-tree.html#xmlNodeSetBase">xmlNodeSetBase</a><br />
 <a href="html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a><br />
 <a href="html/libxml-tree.html#xmlNodeSetContentLen">xmlNodeSetContentLen</a><br />
@@ -1564,6 +1583,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
@@ -1574,6 +1594,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeTrailingSorted">xmlXPathNodeTrailingSorted</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrNewCollapsedRange">xmlXPtrNewCollapsedRange</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrNewContext">xmlXPtrNewContext</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrNewLocationSetNodes">xmlXPtrNewLocationSetNodes</a><br />
@@ -1655,6 +1676,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#xmlNodeDumpOutput">xmlNodeDumpOutput</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferClose">xmlOutputBufferClose</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a><br />
@@ -1950,12 +1973,15 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateFile">xmlSchemaValidateFile</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 <a href="html/libxml-xmlreader.html#xmlTextReaderSchemaValidateCtxt">xmlTextReaderSchemaValidateCtxt</a><br />
 </p><h2>Type xmlSchemaValidityErrorFunc:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
 </p><h2>Type xmlSchemaValidityErrorFunc *:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaGetValidErrors">xmlSchemaGetValidErrors</a><br />
+</p><h2>Type xmlSchemaValidityLocatorFunc:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 </p><h2>Type xmlSchemaValidityWarningFunc:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a><br />
 </p><h2>Type xmlSchemaValidityWarningFunc *:</h2><p><a href="html/libxml-xmlschemas.html#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a><br />
@@ -2098,6 +2124,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlwriter.html#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
@@ -2202,6 +2229,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookup">xmlXPathFunctionLookup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathFunctionLookupNS">xmlXPathFunctionLookupNS</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNewParserContext">xmlXPathNewParserContext</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNsLookup">xmlXPathNsLookup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisterAllFunctions">xmlXPathRegisterAllFunctions</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisterFunc">xmlXPathRegisterFunc</a><br />
@@ -2214,6 +2242,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisteredFuncsCleanup">xmlXPathRegisteredFuncsCleanup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisteredNsCleanup">xmlXPathRegisteredNsCleanup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRegisteredVariablesCleanup">xmlXPathRegisteredVariablesCleanup</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathVariableLookup">xmlXPathVariableLookup</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathVariableLookupNS">xmlXPathVariableLookupNS</a><br />
 <a href="html/libxml-xpointer.html#xmlXPtrEval">xmlXPtrEval</a><br />
index 49a8737..c2b82e7 100644 (file)
@@ -61,7 +61,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-parserInternals.html#IS_LETTER_CH">IS_LETTER_CH</a><br />
 <a href="html/libxml-parserInternals.html#IS_PUBIDCHAR">IS_PUBIDCHAR</a><br />
 <a href="html/libxml-parserInternals.html#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a><br />
-</p><h2>Letter L:</h2><p><a href="html/libxml-xmlversion.html#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a><br />
+</p><h2>Letter L:</h2><p><a href="html/libxml-tree.html#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a><br />
@@ -91,6 +92,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlversion.html#LIBXML_SCHEMAS_ENABLED">LIBXML_SCHEMAS_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_SCHEMATRON_ENABLED">LIBXML_SCHEMATRON_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a><br />
+<a href="html/libxml-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a><br />
 <a href="html/libxml-xmlversion.html#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a><br />
@@ -157,6 +159,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-tree.html#XML_BUFFER_ALLOC_HYBRID">XML_BUFFER_ALLOC_HYBRID</a><br />
 <a href="html/libxml-tree.html#XML_BUFFER_ALLOC_IMMUTABLE">XML_BUFFER_ALLOC_IMMUTABLE</a><br />
 <a href="html/libxml-tree.html#XML_BUFFER_ALLOC_IO">XML_BUFFER_ALLOC_IO</a><br />
+<a href="html/libxml-xmlerror.html#XML_BUF_OVERFLOW">XML_BUF_OVERFLOW</a><br />
 <a href="html/libxml-c14n.html#XML_C14N_1_0">XML_C14N_1_0</a><br />
 <a href="html/libxml-c14n.html#XML_C14N_1_1">XML_C14N_1_1</a><br />
 <a href="html/libxml-xmlerror.html#XML_C14N_CREATE_CTXT">XML_C14N_CREATE_CTXT</a><br />
@@ -206,7 +209,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16BE">XML_CHAR_ENCODING_UTF16BE</a><br />
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF16LE">XML_CHAR_ENCODING_UTF16LE</a><br />
 <a href="html/libxml-encoding.html#XML_CHAR_ENCODING_UTF8">XML_CHAR_ENCODING_UTF8</a><br />
-<a href="html/libxml-xmlerror.html#XML_CHECK_">XML_CHECK_</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_ENTITY_TYPE">XML_CHECK_ENTITY_TYPE</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_FOUND_ATTRIBUTE">XML_CHECK_FOUND_ATTRIBUTE</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_FOUND_CDATA">XML_CHECK_FOUND_CDATA</a><br />
@@ -245,7 +247,6 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_NEXT">XML_CHECK_WRONG_NEXT</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_PARENT">XML_CHECK_WRONG_PARENT</a><br />
 <a href="html/libxml-xmlerror.html#XML_CHECK_WRONG_PREV">XML_CHECK_WRONG_PREV</a><br />
-<a href="html/libxml-xmlerror.html#XML_CHECK_X">XML_CHECK_X</a><br />
 <a href="html/libxml-tree.html#XML_COMMENT_NODE">XML_COMMENT_NODE</a><br />
 <a href="html/libxml-parser.html#XML_COMPLETE_ATTRS">XML_COMPLETE_ATTRS</a><br />
 <a href="html/libxml-valid.html#XML_CTXT_FINISH_DTD_0">XML_CTXT_FINISH_DTD_0</a><br />
@@ -388,6 +389,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_FINISHED">XML_ERR_MIXED_NOT_FINISHED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_MIXED_NOT_STARTED">XML_ERR_MIXED_NOT_STARTED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NAME_REQUIRED">XML_ERR_NAME_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_NAME_TOO_LONG">XML_ERR_NAME_TOO_LONG</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NMTOKEN_REQUIRED">XML_ERR_NMTOKEN_REQUIRED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NONE">XML_ERR_NONE</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_NOTATION_NOT_FINISHED">XML_ERR_NOTATION_NOT_FINISHED</a><br />
@@ -424,6 +426,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_ERR_UNSUPPORTED_ENCODING">XML_ERR_UNSUPPORTED_ENCODING</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_URI_FRAGMENT">XML_ERR_URI_FRAGMENT</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_URI_REQUIRED">XML_ERR_URI_REQUIRED</a><br />
+<a href="html/libxml-xmlerror.html#XML_ERR_USER_STOP">XML_ERR_USER_STOP</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VALUE_REQUIRED">XML_ERR_VALUE_REQUIRED</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISMATCH">XML_ERR_VERSION_MISMATCH</a><br />
 <a href="html/libxml-xmlerror.html#XML_ERR_VERSION_MISSING">XML_ERR_VERSION_MISSING</a><br />
@@ -439,6 +442,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-entities.html#XML_EXTERNAL_GENERAL_PARSED_ENTITY">XML_EXTERNAL_GENERAL_PARSED_ENTITY</a><br />
 <a href="html/libxml-entities.html#XML_EXTERNAL_GENERAL_UNPARSED_ENTITY">XML_EXTERNAL_GENERAL_UNPARSED_ENTITY</a><br />
 <a href="html/libxml-entities.html#XML_EXTERNAL_PARAMETER_ENTITY">XML_EXTERNAL_PARAMETER_ENTITY</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_BUFFER">XML_FROM_BUFFER</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_C14N">XML_FROM_C14N</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_CATALOG">XML_FROM_CATALOG</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_CHECK">XML_FROM_CHECK</a><br />
@@ -462,6 +466,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_FROM_SCHEMASV">XML_FROM_SCHEMASV</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_SCHEMATRONV">XML_FROM_SCHEMATRONV</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_TREE">XML_FROM_TREE</a><br />
+<a href="html/libxml-xmlerror.html#XML_FROM_URI">XML_FROM_URI</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_VALID">XML_FROM_VALID</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_WRITER">XML_FROM_WRITER</a><br />
 <a href="html/libxml-xmlerror.html#XML_FROM_XINCLUDE">XML_FROM_XINCLUDE</a><br />
@@ -546,7 +551,10 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlerror.html#XML_IO_UNKNOWN">XML_IO_UNKNOWN</a><br />
 <a href="html/libxml-xmlerror.html#XML_IO_WRITE">XML_IO_WRITE</a><br />
 <a href="html/libxml-tree.html#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a><br />
+<a href="html/libxml-parserInternals.html#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a><br />
 <a href="html/libxml-parserInternals.html#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a><br />
 <a href="html/libxml-xmlerror.html#XML_MODULE_CLOSE">XML_MODULE_CLOSE</a><br />
 <a href="html/libxml-xmlmodule.html#XML_MODULE_LAZY">XML_MODULE_LAZY</a><br />
@@ -586,6 +594,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlreader.html#XML_PARSER_SUBST_ENTITIES">XML_PARSER_SUBST_ENTITIES</a><br />
 <a href="html/libxml-parser.html#XML_PARSER_SYSTEM_LITERAL">XML_PARSER_SYSTEM_LITERAL</a><br />
 <a href="html/libxml-xmlreader.html#XML_PARSER_VALIDATE">XML_PARSER_VALIDATE</a><br />
+<a href="html/libxml-parser.html#XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_COMPACT">XML_PARSE_COMPACT</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_DOM">XML_PARSE_DOM</a><br />
 <a href="html/libxml-parser.html#XML_PARSE_DTDATTR">XML_PARSE_DTDATTR</a><br />
@@ -1420,6 +1429,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpath.html#XPATH_ENCODING_ERROR">XPATH_ENCODING_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_EXPRESSION_OK">XPATH_EXPRESSION_OK</a><br />
 <a href="html/libxml-xpath.html#XPATH_EXPR_ERROR">XPATH_EXPR_ERROR</a><br />
+<a href="html/libxml-xpath.html#XPATH_FORBID_VARIABLE_ERROR">XPATH_FORBID_VARIABLE_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_ARITY">XPATH_INVALID_ARITY</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a><br />
 <a href="html/libxml-xpath.html#XPATH_INVALID_CTXT">XPATH_INVALID_CTXT</a><br />
@@ -1761,6 +1771,14 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlautomata.html#xmlAutomataState">xmlAutomataState</a><br />
 <a href="html/libxml-xmlautomata.html#xmlAutomataStatePtr">xmlAutomataStatePtr</a><br />
 <a href="html/libxml-debugXML.html#xmlBoolToText">xmlBoolToText</a><br />
+<a href="html/libxml-tree.html#xmlBuf">xmlBuf</a><br />
+<a href="html/libxml-tree.html#xmlBufContent">xmlBufContent</a><br />
+<a href="html/libxml-tree.html#xmlBufEnd">xmlBufEnd</a><br />
+<a href="html/libxml-tree.html#xmlBufGetNodeContent">xmlBufGetNodeContent</a><br />
+<a href="html/libxml-tree.html#xmlBufNodeDump">xmlBufNodeDump</a><br />
+<a href="html/libxml-tree.html#xmlBufPtr">xmlBufPtr</a><br />
+<a href="html/libxml-tree.html#xmlBufShrink">xmlBufShrink</a><br />
+<a href="html/libxml-tree.html#xmlBufUse">xmlBufUse</a><br />
 <a href="html/libxml-tree.html#xmlBuffer">xmlBuffer</a><br />
 <a href="html/libxml-tree.html#xmlBufferAdd">xmlBufferAdd</a><br />
 <a href="html/libxml-tree.html#xmlBufferAddHead">xmlBufferAddHead</a><br />
@@ -1934,11 +1952,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-dict.html#xmlDictCreateSub">xmlDictCreateSub</a><br />
 <a href="html/libxml-dict.html#xmlDictExists">xmlDictExists</a><br />
 <a href="html/libxml-dict.html#xmlDictFree">xmlDictFree</a><br />
+<a href="html/libxml-dict.html#xmlDictGetUsage">xmlDictGetUsage</a><br />
 <a href="html/libxml-dict.html#xmlDictLookup">xmlDictLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictOwns">xmlDictOwns</a><br />
 <a href="html/libxml-dict.html#xmlDictPtr">xmlDictPtr</a><br />
 <a href="html/libxml-dict.html#xmlDictQLookup">xmlDictQLookup</a><br />
 <a href="html/libxml-dict.html#xmlDictReference">xmlDictReference</a><br />
+<a href="html/libxml-dict.html#xmlDictSetLimit">xmlDictSetLimit</a><br />
 <a href="html/libxml-dict.html#xmlDictSize">xmlDictSize</a><br />
 <a href="html/libxml-threads.html#xmlDllMain">xmlDllMain</a><br />
 <a href="html/libxml-globals.html#xmlDoValidityCheckingDefaultValue">xmlDoValidityCheckingDefaultValue</a><br />
@@ -2414,6 +2434,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-globals.html#xmlOutputBufferCreateFilenameValue">xmlOutputBufferCreateFilenameValue</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferFlush">xmlOutputBufferFlush</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a><br />
+<a href="html/libxml-xmlIO.html#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a><br />
 <a href="html/libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWrite">xmlOutputBufferWrite</a><br />
 <a href="html/libxml-xmlIO.html#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a><br />
@@ -2812,8 +2834,11 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidateListSimpleTypeFacet">xmlSchemaValidateListSimpleTypeFacet</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValidatePredefinedType">xmlSchemaValidatePredefinedType</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidateStream">xmlSchemaValidateStream</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a><br />
+<a href="html/libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a><br />
 <a href="html/libxml-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValueAppend">xmlSchemaValueAppend</a><br />
 <a href="html/libxml-xmlschemastypes.html#xmlSchemaValueGetAsBoolean">xmlSchemaValueGetAsBoolean</a><br />
@@ -3021,6 +3046,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a><br />
+<a href="html/libxml-xmlwriter.html#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a><br />
 <a href="html/libxml-xmlwriter.html#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a><br />
@@ -3443,6 +3469,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPreceding">xmlXPathNextPreceding</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextPrecedingSibling">xmlXPathNextPrecedingSibling</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNextSelf">xmlXPathNextSelf</a><br />
+<a href="html/libxml-xpath.html#xmlXPathNodeEval">xmlXPathNodeEval</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeLeading">xmlXPathNodeLeading</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a><br />
@@ -3504,6 +3531,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="html/libxml-xpathInternals.html#xmlXPathRoot">xmlXPathRoot</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathRoundFunction">xmlXPathRoundFunction</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSetArityError">xmlXPathSetArityError</a><br />
+<a href="html/libxml-xpath.html#xmlXPathSetContextNode">xmlXPathSetContextNode</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSetError">xmlXPathSetError</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathSetTypeError">xmlXPathSetTypeError</a><br />
 <a href="html/libxml-xpathInternals.html#xmlXPathStackIsExternal">xmlXPathStackIsExternal</a><br />
index 0bfd387..3481c19 100644 (file)
@@ -7,11 +7,13 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>FAQ</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>FAQ</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Contents:</p><ul><li><a href="FAQ.html#License">License(s)</a></li>
+</style><title>FAQ</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>FAQ</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Contents:</p><ul>
+  <li><a href="FAQ.html#License">License(s)</a></li>
   <li><a href="FAQ.html#Installati">Installation</a></li>
   <li><a href="FAQ.html#Compilatio">Compilation</a></li>
   <li><a href="FAQ.html#Developer">Developer corner</a></li>
-</ul><h3><a name="License" id="License">License</a>(s)</h3><ol><li><em>Licensing Terms for libxml</em>
+</ul><h3><a name="License" id="License">License</a>(s)</h3><ol>
+  <li><em>Licensing Terms for libxml</em>
     <p>libxml2 is released under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
     License</a>; see the file Copyright in the distribution for the precise
     wording</p>
@@ -22,7 +24,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     improvements as patches for possible incorporation in the main
     development tree.</p>
   </li>
-</ol><h3><a name="Installati" id="Installati">Installation</a></h3><ol><li><strong><span style="background-color: #FF0000">Do Not Use
+</ol><h3><a name="Installati" id="Installati">Installation</a></h3><ol>
+  <li><strong><span style="background-color: #FF0000">Do Not Use
     libxml1</span></strong>, use libxml2</li>
   <p></p>
   <li><em>Where can I get libxml</em> ?
@@ -33,7 +36,8 @@ A:link, A:visited, A:active { text-decoration: underline }
   </li>
   <p></p>
   <li><em>I see libxml and libxml2 releases, which one should I install ?</em>
-    <ul><li>If you are not constrained by backward compatibility issues with
+    <ul>
+      <li>If you are not constrained by backward compatibility issues with
         existing applications, install libxml2 only</li>
       <li>If you are not doing development, you can safely install both.
         Usually the packages <a href="http://rpmfind.net/linux/RPM/libxml.html">libxml</a> and <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml2</a> are
@@ -45,7 +49,8 @@ A:link, A:visited, A:active { text-decoration: underline }
         too for libxml2 &gt;= 2.3.0</li>
       <li>If you are developing a new application, please develop against
         libxml2(-devel)</li>
-    </ul></li>
+    </ul>
+  </li>
   <li><em>I can't install the libxml package, it conflicts with libxml0</em>
     <p>You probably have an old libxml0 package used to provide the shared
     library for libxml.so.0, you can probably safely remove it. The libxml
@@ -62,7 +67,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     package, providing includes, static libraries and scripts needed to build
     applications with libxml(2)) that you can install locally.</p>
   </li>
-</ol><h3><a name="Compilatio" id="Compilatio">Compilation</a></h3><ol><li><em>What is the process to compile libxml2 ?</em>
+</ol><h3><a name="Compilatio" id="Compilatio">Compilation</a></h3><ol>
+  <li><em>What is the process to compile libxml2 ?</em>
     <p>As most UNIX libraries libxml2 follows the "standard":</p>
     <p><code>gunzip -c xxx.tar.gz | tar xvf -</code></p>
     <p><code>cd libxml-xxxx</code></p>
@@ -80,14 +86,16 @@ A:link, A:visited, A:active { text-decoration: underline }
     find).</p>
     <p>However if found at configuration time libxml2 will detect and use the
     following libs:</p>
-    <ul><li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a
+    <ul>
+      <li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a
         highly portable and available widely compression library.</li>
       <li>iconv: a powerful character encoding conversion library. It is
         included by default in recent glibc libraries, so it doesn't need to
         be installed specifically on Linux. It now seems a <a href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part
         of the official UNIX</a> specification. Here is one <a href="http://www.gnu.org/software/libiconv/">implementation of the
         library</a> which source can be found <a href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here</a>.</li>
-    </ul></li>
+    </ul>
+  </li>
   <p></p>
   <li><em>Make check fails on some platforms</em>
     <p>Sometimes the regression tests' results don't completely match the
@@ -108,7 +116,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     optimizer which miscompiles the URI module. Please use another
     compiler.</p>
   </li>
-</ol><h3><a name="Developer" id="Developer">Developer</a> corner</h3><ol><li><em>Troubles compiling or linking programs using libxml2</em>
+</ol><h3><a name="Developer" id="Developer">Developer</a> corner</h3><ol>
+  <li><em>Troubles compiling or linking programs using libxml2</em>
     <p>Usually the problem comes from the fact that the compiler doesn't get
     the right compilation or linking flags. There is a small shell script
     <code>xml2-config</code> which is installed as part of libxml2 usual
@@ -126,7 +135,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     <p>There are many different ways to accomplish this.  Here is one way to
     do this under Linux.  Suppose your home directory is <code>/home/user.
     </code>Then:</p>
-    <ul><li>Create a subdirectory, let's call it <code>myxml</code></li>
+    <ul>
+      <li>Create a subdirectory, let's call it <code>myxml</code></li>
       <li>unpack the libxml2 distribution into that subdirectory</li>
       <li>chdir into the unpacked distribution
         (<code>/home/user/myxml/libxml2 </code>)</li>
@@ -159,7 +169,8 @@ A:link, A:visited, A:active { text-decoration: underline }
         program which you just installed will be used instead of the system
         default one, and this will <em>automatically</em> get the correct
         libraries linked with your program.</li>
-    </ul></li>
+    </ul>
+  </li>
 
   <p></p>
   <li><em>xmlDocDump() generates output on one line.</em>
@@ -167,7 +178,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     document since <strong>all spaces in the content of a document are
     significant</strong>. If you build a tree from the API and want
     indentation:</p>
-    <ol><li>the correct way is to generate those yourself too.</li>
+    <ol>
+      <li>the correct way is to generate those yourself too.</li>
       <li>the dangerous way is to ask libxml2 to add those blanks to your
         content <strong>modifying the content of your document in the
         process</strong>. The result may not be what you expect. There is
@@ -175,7 +187,8 @@ A:link, A:visited, A:active { text-decoration: underline }
         affect other parts of the content of your document. See <a href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault
         ()</a> and <a href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile
         ()</a></li>
-    </ol></li>
+    </ol>
+  </li>
   <p></p>
   <li><em>Extra nodes in the document:</em>
     <p><em>For an XML file as below:</em></p>
@@ -233,7 +246,8 @@ pnode=pxmlDoc-&gt;children-&gt;children;</pre>
     web page?</em>
     <p>Ideally a libxml2 book would be nice. I have no such plan ... But you
     can:</p>
-    <ul><li>check more deeply the <a href="html/libxml-lib.html">existing
+    <ul>
+      <li>check more deeply the <a href="html/libxml-lib.html">existing
         generated doc</a></li>
       <li>have a look at <a href="examples/index.html">the set of
         examples</a>.</li>
@@ -244,18 +258,21 @@ pnode=pxmlDoc-&gt;children-&gt;children;</pre>
         as possible, so looking at it may be helpful. In particular the code
         of <a href="http://svn.gnome.org/viewvc/libxml2/trunk/xmllint.c?view=markup">xmllint.c</a> and of the various testXXX.c test programs should
         provide good examples of how to do things with the library.</li>
-    </ul></li>
+    </ul>
+  </li>
   <p></p>
   <li><em>What about C++ ?</em>
     <p>libxml2 is written in pure C in order to allow easy reuse on a number
     of platforms, including embedded systems. I don't intend to convert to
     C++.</p>
     <p>There is however a C++ wrapper which may fulfill your needs:</p>
-    <ul><li>by Ari Johnson &lt;ari@btigate.com&gt;:
+    <ul>
+      <li>by Ari Johnson &lt;ari@btigate.com&gt;:
         <p>Website: <a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p>
         <p>Download: <a href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p>
       </li>
-    </ul></li>
+    </ul>
+  </li>
   <li><em>How to validate a document a posteriori ?</em>
     <p>It is possible to validate documents which had not been validated at
     initial parsing time or documents which have been built from scratch
index dd39f69..0cc0a50 100644 (file)
@@ -1,5 +1,5 @@
 ## Process this file with automake to produce Makefile.in
-SUBDIRS=devhelp examples
+SUBDIRS = . devhelp examples
 
 # The top-level SGML file.
 DOC_MAIN_XML_FILE=gnome-xml.xml
@@ -16,21 +16,230 @@ PAGES= architecture.html bugs.html contribs.html docs.html DOM.html \
     tree.html xmldtd.html XMLinfo.html XSLT.html
 APIPAGES=APIconstructors.html APIfiles.html APIfunctions.html \
     APIsymbols.html APIchunk0.html
-EXTRA_DIST=xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
-           tutorial/images/*.png tutorial/images/callouts/*.png \
-          API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
-          html/*.png libxml2-api.xml index.py search.php \
-          apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
-          README.docs symbols.xml
 
+if REBUILD_DOCS
+EXTRA_DIST_wc = xmlcatalog_man.xml $(wildcard tutorial/*.html) \
+    $(wildcard tutorial/*.c) $(wildcard tutorial/*.pdf) \
+    $(wildcard tutorial/images/*.png) \
+    $(wildcard tutorial/images/callouts/*.png) $(wildcard API*.html) \
+    $(wildcard *.1) $(wildcard *.xsl) $(wildcard *.html) \
+    $(wildcard *.gif) w3c.png $(wildcard html/*.html) \
+    $(wildcard html/*.png) libxml2-api.xml index.py search.php \
+    apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
+    README.docs symbols.xml
+endif
+
+# Expanded form of EXTRA_DIST_wc
+#
+EXTRA_DIST = \
+       APIchunk0.html \
+       APIchunk1.html \
+       APIchunk2.html \
+       APIchunk3.html \
+       APIchunk4.html \
+       APIchunk5.html \
+       APIchunk6.html \
+       APIchunk7.html \
+       APIchunk8.html \
+       APIchunk9.html \
+       APIchunk10.html \
+       APIchunk11.html \
+       APIchunk12.html \
+       APIchunk13.html \
+       APIchunk14.html \
+       APIchunk15.html \
+       APIchunk16.html \
+       APIchunk17.html \
+       APIchunk18.html \
+       APIchunk19.html \
+       APIchunk20.html \
+       APIchunk21.html \
+       APIchunk22.html \
+       APIchunk23.html \
+       APIchunk24.html \
+       APIchunk25.html \
+       APIchunk26.html \
+       APIchunk27.html \
+       APIchunk28.html \
+       APIchunk29.html \
+       APIconstructors.html \
+       APIfiles.html \
+       APIfunctions.html \
+       APIsymbols.html \
+       ChangeLog.xsl \
+       DOM.gif \
+       DOM.html \
+       FAQ.html \
+       Libxml2-Logo-180x168.gif \
+       Libxml2-Logo-90x34.gif \
+       README.docs \
+       XMLinfo.html \
+       XSLT.html \
+       api.xsl \
+       apibuild.py \
+       architecture.html \
+       bugs.html \
+       catalog.gif \
+       catalog.html \
+       checkapisym.xsl \
+       contribs.html \
+       docs.html \
+       downloads.html \
+       elfgcchack.xsl \
+       encoding.html \
+       entities.html \
+       example.html \
+       guidelines.html \
+       help.html \
+       html/book1.html \
+       html/home.png \
+       html/index.html \
+       html/left.png \
+       html/libxml-DOCBparser.html \
+       html/libxml-HTMLparser.html \
+       html/libxml-HTMLtree.html \
+       html/libxml-SAX.html \
+       html/libxml-SAX2.html \
+       html/libxml-c14n.html \
+       html/libxml-catalog.html \
+       html/libxml-chvalid.html \
+       html/libxml-debugXML.html \
+       html/libxml-dict.html \
+       html/libxml-encoding.html \
+       html/libxml-entities.html \
+       html/libxml-globals.html \
+       html/libxml-hash.html \
+       html/libxml-lib.html \
+       html/libxml-list.html \
+       html/libxml-nanoftp.html \
+       html/libxml-nanohttp.html \
+       html/libxml-parser.html \
+       html/libxml-parserInternals.html \
+       html/libxml-pattern.html \
+       html/libxml-relaxng.html \
+       html/libxml-schemasInternals.html \
+       html/libxml-schematron.html \
+       html/libxml-threads.html \
+       html/libxml-tree.html \
+       html/libxml-uri.html \
+       html/libxml-valid.html \
+       html/libxml-xinclude.html \
+       html/libxml-xlink.html \
+       html/libxml-xmlIO.html \
+       html/libxml-xmlautomata.html \
+       html/libxml-xmlerror.html \
+       html/libxml-xmlexports.html \
+       html/libxml-xmlmemory.html \
+       html/libxml-xmlmodule.html \
+       html/libxml-xmlreader.html \
+       html/libxml-xmlregexp.html \
+       html/libxml-xmlsave.html \
+       html/libxml-xmlschemas.html \
+       html/libxml-xmlschemastypes.html \
+       html/libxml-xmlstring.html \
+       html/libxml-xmlunicode.html \
+       html/libxml-xmlversion.html \
+       html/libxml-xmlwriter.html \
+       html/libxml-xpath.html \
+       html/libxml-xpathInternals.html \
+       html/libxml-xpointer.html \
+       html/libxml-xzlib.html \
+       html/right.png \
+       html/up.png \
+       index.html \
+       index.py \
+       interface.html \
+       intro.html \
+       library.html \
+       libxml.gif \
+       libxml2-api.xml \
+       libxml2.xsa \
+       namespaces.html \
+       newapi.xsl \
+       news.html \
+       news.xsl \
+       python.html \
+       redhat.gif \
+       search.php \
+       searches.html \
+       searches.xsl \
+       site.xsl \
+       smallfootonly.gif \
+       structure.gif \
+       symbols.xml \
+       syms.xsl \
+       threads.html \
+       tree.html \
+       tutorial/apa.html \
+       tutorial/apb.html \
+       tutorial/apc.html \
+       tutorial/apd.html \
+       tutorial/ape.html \
+       tutorial/apf.html \
+       tutorial/apg.html \
+       tutorial/aph.html \
+       tutorial/api.html \
+       tutorial/ar01s02.html \
+       tutorial/ar01s03.html \
+       tutorial/ar01s04.html \
+       tutorial/ar01s05.html \
+       tutorial/ar01s06.html \
+       tutorial/ar01s07.html \
+       tutorial/ar01s08.html \
+       tutorial/ar01s09.html \
+       tutorial/images/blank.png \
+       tutorial/images/callouts/1.png \
+       tutorial/images/callouts/10.png \
+       tutorial/images/callouts/2.png \
+       tutorial/images/callouts/3.png \
+       tutorial/images/callouts/4.png \
+       tutorial/images/callouts/5.png \
+       tutorial/images/callouts/6.png \
+       tutorial/images/callouts/7.png \
+       tutorial/images/callouts/8.png \
+       tutorial/images/callouts/9.png \
+       tutorial/images/caution.png \
+       tutorial/images/draft.png \
+       tutorial/images/home.png \
+       tutorial/images/important.png \
+       tutorial/images/next.png \
+       tutorial/images/note.png \
+       tutorial/images/prev.png \
+       tutorial/images/tip.png \
+       tutorial/images/toc-blank.png \
+       tutorial/images/toc-minus.png \
+       tutorial/images/toc-plus.png \
+       tutorial/images/up.png \
+       tutorial/images/warning.png \
+       tutorial/includeaddattribute.c \
+       tutorial/includeaddkeyword.c \
+       tutorial/includeconvert.c \
+       tutorial/includegetattribute.c \
+       tutorial/includekeyword.c \
+       tutorial/includexpath.c \
+       tutorial/index.html \
+       tutorial/ix01.html \
+       tutorial/xmltutorial.pdf \
+       upgrade.html \
+       w3c.png \
+       wiki.xsl \
+       xml.html \
+       xmlcatalog.1 \
+       xmlcatalog_man.html \
+       xmlcatalog_man.xml \
+       xmldtd.html \
+       xmlio.html \
+       xmllint.1 \
+       xmllint.html \
+       xmllint.xml \
+       xmlmem.html \
+       xmlreader.html \
+       xsa.xsl
 
 man_MANS = xmllint.1 xmlcatalog.1
 
 if REBUILD_DOCS
-all: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
-else
-all:
-endif
+docs: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
 
 api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h $(srcdir)/site.xsl
 
@@ -48,25 +257,25 @@ web: $(PAGES)
 $(PAGES): xml.html $(srcdir)/site.xsl
        -@(if [ -x $(XSLTPROC) ] ; then \
          echo "Rebuilding the HTML Web pages from xml.html" ; \
-         $(XSLTPROC) --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
+         $(XSLTPROC) --nonet --html --path $(srcdir) $(srcdir)/site.xsl $(srcdir)/xml.html > index.html ; fi );
        -@(if [ -x $(XMLLINT) ] ; then \
          echo "Validating the HTML Web pages" ; \
          $(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
 
-$(top_builddir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
+$(top_builddir)/NEWS: $(srcdir)/news.xsl $(srcdir)/news.html
        -@(if [ -x $(XSLTPROC) ] ; then \
-         $(XSLTPROC) --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_builddir)/NEWS ; fi );
+         $(XSLTPROC) --nonet $(srcdir)/news.xsl $(srcdir)/news.html > $(top_builddir)/NEWS ; fi );
 
-libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
+libxml2.xsa: $(srcdir)/xsa.xsl $(srcdir)/news.html
        -@(if [ -x $(XSLTPROC) ] ; then \
          echo "Rebuilding the NEWS file" ; \
-         $(XSLTPROC) --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
+         $(XSLTPROC) --nonet $(srcdir)/xsa.xsl $(srcdir)/news.html > libxml2.xsa ; fi );
 
-$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
+$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(srcdir)/site.xsl $(srcdir)/api.xsl
        -@(if [ -x $(XSLTPROC) ] ; then \
          echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
-         $(XSLTPROC) --nonet --html $(top_srcdir)/doc/api.xsl \
-                            $(top_srcdir)/doc/xml.html ; fi );
+         $(XSLTPROC) --nonet --html $(srcdir)/api.xsl \
+                            $(srcdir)/xml.html ; fi );
        -@(if [ -x $(XMLLINT) ] ; then \
          echo "Validating the HTML API pages" ; \
          $(XMLLINT) --nonet --valid --noout API*.html ; fi );
@@ -74,7 +283,7 @@ $(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_s
 $(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
        -@(if [ -x $(XSLTPROC) ] ; then \
          echo "Rebuilding the HTML pages from the XML API" ; \
-         $(XSLTPROC) --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
+         $(XSLTPROC) --nonet $(srcdir)/newapi.xsl $(srcdir)/libxml2-api.xml ; fi )
        -@(if [ -x $(XMLLINT) ] ; then \
          echo "Validating the resulting XHTML pages" ; \
          $(XMLLINT) --nonet --valid --noout html/*.html ; fi );
@@ -82,17 +291,23 @@ $(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
 wiki: libxml2-api.xml $(srcdir)/wiki.xsl
        -@(if [ -x $(XSLTPROC) ] ; then \
                echo "Rebuilding the wiki HTML pages from the XML API" ; \
-               $(XSLTPROC) --nonet $(srcdir)/wiki.xsl libxml2-api.xml; fi )
+               $(XSLTPROC) --nonet $(srcdir)/wiki.xsl $(srcdir)/libxml2-api.xml; fi )
 
 $(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
        -@(if [ -x $(XSLTPROC) ] ; then \
          $(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \
          --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
 
-libxml2-api.xml libxml2-refs.xml ../libxml2.syms: apibuild.py symbols.xml syms.xsl checkapisym.xsl ../include/libxml/*.h ../*.c
-       -(./apibuild.py)
-       ($(XSLTPROC) checkapisym.xsl libxml2-api.xml)
-       ($(XSLTPROC) -o ../libxml2.syms syms.xsl symbols.xml)
+source_file_deps = \
+       $(filter-out %/xmlversion.h, $(wildcard $(top_srcdir)/include/libxml/*.h)) \
+       $(top_srcdir)/include/libxml/xmlversion.h.in \
+       $(wildcard $(top_srcdir)/*.c)
+
+libxml2-api.xml libxml2-refs.xml ../libxml2.syms: apibuild.py symbols.xml syms.xsl checkapisym.xsl $(source_file_deps)
+       test -f $(top_srcdir)/include/libxml/xmlversion.h
+       (cd $(srcdir) && ./apibuild.py)
+       ($(XSLTPROC) $(srcdir)/checkapisym.xsl $(srcdir)/libxml2-api.xml)
+       ($(XSLTPROC) -o ../libxml2.syms $(srcdir)/syms.xsl $(srcdir)/symbols.xml)
        -@(cd .. ; $(MAKE) rebuild_testapi)
 
 
@@ -102,28 +317,35 @@ xmllint.1: xmllint.xml
 xmlcatalog.1: xmlcatalog_man.xml
        -@($(XSLTPROC) --nonet xmlcatalog_man.xml)
 
+check-extra-dist:
+       for f in $(EXTRA_DIST_wc) ; do echo $$f; done | sort -u >tmp.EXTRA_DIST_wc
+       for f in $(EXTRA_DIST) ;    do echo $$f; done | sort    >tmp.EXTRA_DIST
+       diff -u tmp.EXTRA_DIST_wc tmp.EXTRA_DIST
+       rm -f tmp.EXTRA_DIST_wc tmp.EXTRA_DIST
+endif
+
 clean-local:
        rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
 
 maintainer-clean-local: clean-local
        rm -rf libxml-decl-list.txt libxml-decl.txt 
 
-rebuild: api all
+rebuild: api docs
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/html
-       -@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
-       -@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/html
+       -$(INSTALL) -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
+       -$(INSTALL) -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial/images
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial/images
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
 
-.PHONY : html xml templates scan
+.PHONY: docs api web wiki rebuild
index ebeca2a..03fcbd3 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,33 +78,45 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = doc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -82,15 +138,41 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 man1dir = $(mandir)/man1
 am__installdirs = "$(DESTDIR)$(man1dir)"
 NROFF = nroff
 MANS = $(man_MANS)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
        distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -124,7 +206,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -161,6 +242,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -205,6 +287,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -216,7 +301,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -241,7 +325,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -274,6 +357,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -347,7 +431,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = devhelp examples
+SUBDIRS = devhelp examples
 
 # The top-level SGML file.
 DOC_MAIN_XML_FILE = gnome-xml.xml
@@ -365,14 +449,230 @@ PAGES = architecture.html bugs.html contribs.html docs.html DOM.html \
 APIPAGES = APIconstructors.html APIfiles.html APIfunctions.html \
     APIsymbols.html APIchunk0.html
 
-EXTRA_DIST = xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
-           tutorial/images/*.png tutorial/images/callouts/*.png \
-          API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
-          html/*.png libxml2-api.xml index.py search.php \
-          apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
-          README.docs symbols.xml
+@REBUILD_DOCS_TRUE@EXTRA_DIST_wc = xmlcatalog_man.xml $(wildcard tutorial/*.html) \
+@REBUILD_DOCS_TRUE@    $(wildcard tutorial/*.c) $(wildcard tutorial/*.pdf) \
+@REBUILD_DOCS_TRUE@    $(wildcard tutorial/images/*.png) \
+@REBUILD_DOCS_TRUE@    $(wildcard tutorial/images/callouts/*.png) $(wildcard API*.html) \
+@REBUILD_DOCS_TRUE@    $(wildcard *.1) $(wildcard *.xsl) $(wildcard *.html) \
+@REBUILD_DOCS_TRUE@    $(wildcard *.gif) w3c.png $(wildcard html/*.html) \
+@REBUILD_DOCS_TRUE@    $(wildcard html/*.png) libxml2-api.xml index.py search.php \
+@REBUILD_DOCS_TRUE@    apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
+@REBUILD_DOCS_TRUE@    README.docs symbols.xml
+
+
+# Expanded form of EXTRA_DIST_wc
+#
+EXTRA_DIST = \
+       APIchunk0.html \
+       APIchunk1.html \
+       APIchunk2.html \
+       APIchunk3.html \
+       APIchunk4.html \
+       APIchunk5.html \
+       APIchunk6.html \
+       APIchunk7.html \
+       APIchunk8.html \
+       APIchunk9.html \
+       APIchunk10.html \
+       APIchunk11.html \
+       APIchunk12.html \
+       APIchunk13.html \
+       APIchunk14.html \
+       APIchunk15.html \
+       APIchunk16.html \
+       APIchunk17.html \
+       APIchunk18.html \
+       APIchunk19.html \
+       APIchunk20.html \
+       APIchunk21.html \
+       APIchunk22.html \
+       APIchunk23.html \
+       APIchunk24.html \
+       APIchunk25.html \
+       APIchunk26.html \
+       APIchunk27.html \
+       APIchunk28.html \
+       APIchunk29.html \
+       APIconstructors.html \
+       APIfiles.html \
+       APIfunctions.html \
+       APIsymbols.html \
+       ChangeLog.xsl \
+       DOM.gif \
+       DOM.html \
+       FAQ.html \
+       Libxml2-Logo-180x168.gif \
+       Libxml2-Logo-90x34.gif \
+       README.docs \
+       XMLinfo.html \
+       XSLT.html \
+       api.xsl \
+       apibuild.py \
+       architecture.html \
+       bugs.html \
+       catalog.gif \
+       catalog.html \
+       checkapisym.xsl \
+       contribs.html \
+       docs.html \
+       downloads.html \
+       elfgcchack.xsl \
+       encoding.html \
+       entities.html \
+       example.html \
+       guidelines.html \
+       help.html \
+       html/book1.html \
+       html/home.png \
+       html/index.html \
+       html/left.png \
+       html/libxml-DOCBparser.html \
+       html/libxml-HTMLparser.html \
+       html/libxml-HTMLtree.html \
+       html/libxml-SAX.html \
+       html/libxml-SAX2.html \
+       html/libxml-c14n.html \
+       html/libxml-catalog.html \
+       html/libxml-chvalid.html \
+       html/libxml-debugXML.html \
+       html/libxml-dict.html \
+       html/libxml-encoding.html \
+       html/libxml-entities.html \
+       html/libxml-globals.html \
+       html/libxml-hash.html \
+       html/libxml-lib.html \
+       html/libxml-list.html \
+       html/libxml-nanoftp.html \
+       html/libxml-nanohttp.html \
+       html/libxml-parser.html \
+       html/libxml-parserInternals.html \
+       html/libxml-pattern.html \
+       html/libxml-relaxng.html \
+       html/libxml-schemasInternals.html \
+       html/libxml-schematron.html \
+       html/libxml-threads.html \
+       html/libxml-tree.html \
+       html/libxml-uri.html \
+       html/libxml-valid.html \
+       html/libxml-xinclude.html \
+       html/libxml-xlink.html \
+       html/libxml-xmlIO.html \
+       html/libxml-xmlautomata.html \
+       html/libxml-xmlerror.html \
+       html/libxml-xmlexports.html \
+       html/libxml-xmlmemory.html \
+       html/libxml-xmlmodule.html \
+       html/libxml-xmlreader.html \
+       html/libxml-xmlregexp.html \
+       html/libxml-xmlsave.html \
+       html/libxml-xmlschemas.html \
+       html/libxml-xmlschemastypes.html \
+       html/libxml-xmlstring.html \
+       html/libxml-xmlunicode.html \
+       html/libxml-xmlversion.html \
+       html/libxml-xmlwriter.html \
+       html/libxml-xpath.html \
+       html/libxml-xpathInternals.html \
+       html/libxml-xpointer.html \
+       html/libxml-xzlib.html \
+       html/right.png \
+       html/up.png \
+       index.html \
+       index.py \
+       interface.html \
+       intro.html \
+       library.html \
+       libxml.gif \
+       libxml2-api.xml \
+       libxml2.xsa \
+       namespaces.html \
+       newapi.xsl \
+       news.html \
+       news.xsl \
+       python.html \
+       redhat.gif \
+       search.php \
+       searches.html \
+       searches.xsl \
+       site.xsl \
+       smallfootonly.gif \
+       structure.gif \
+       symbols.xml \
+       syms.xsl \
+       threads.html \
+       tree.html \
+       tutorial/apa.html \
+       tutorial/apb.html \
+       tutorial/apc.html \
+       tutorial/apd.html \
+       tutorial/ape.html \
+       tutorial/apf.html \
+       tutorial/apg.html \
+       tutorial/aph.html \
+       tutorial/api.html \
+       tutorial/ar01s02.html \
+       tutorial/ar01s03.html \
+       tutorial/ar01s04.html \
+       tutorial/ar01s05.html \
+       tutorial/ar01s06.html \
+       tutorial/ar01s07.html \
+       tutorial/ar01s08.html \
+       tutorial/ar01s09.html \
+       tutorial/images/blank.png \
+       tutorial/images/callouts/1.png \
+       tutorial/images/callouts/10.png \
+       tutorial/images/callouts/2.png \
+       tutorial/images/callouts/3.png \
+       tutorial/images/callouts/4.png \
+       tutorial/images/callouts/5.png \
+       tutorial/images/callouts/6.png \
+       tutorial/images/callouts/7.png \
+       tutorial/images/callouts/8.png \
+       tutorial/images/callouts/9.png \
+       tutorial/images/caution.png \
+       tutorial/images/draft.png \
+       tutorial/images/home.png \
+       tutorial/images/important.png \
+       tutorial/images/next.png \
+       tutorial/images/note.png \
+       tutorial/images/prev.png \
+       tutorial/images/tip.png \
+       tutorial/images/toc-blank.png \
+       tutorial/images/toc-minus.png \
+       tutorial/images/toc-plus.png \
+       tutorial/images/up.png \
+       tutorial/images/warning.png \
+       tutorial/includeaddattribute.c \
+       tutorial/includeaddkeyword.c \
+       tutorial/includeconvert.c \
+       tutorial/includegetattribute.c \
+       tutorial/includekeyword.c \
+       tutorial/includexpath.c \
+       tutorial/index.html \
+       tutorial/ix01.html \
+       tutorial/xmltutorial.pdf \
+       upgrade.html \
+       w3c.png \
+       wiki.xsl \
+       xml.html \
+       xmlcatalog.1 \
+       xmlcatalog_man.html \
+       xmlcatalog_man.xml \
+       xmldtd.html \
+       xmlio.html \
+       xmllint.1 \
+       xmllint.html \
+       xmllint.xml \
+       xmlmem.html \
+       xmlreader.html \
+       xsa.xsl
 
 man_MANS = xmllint.1 xmlcatalog.1
+@REBUILD_DOCS_TRUE@source_file_deps = \
+@REBUILD_DOCS_TRUE@    $(filter-out %/xmlversion.h, $(wildcard $(top_srcdir)/include/libxml/*.h)) \
+@REBUILD_DOCS_TRUE@    $(top_srcdir)/include/libxml/xmlversion.h.in \
+@REBUILD_DOCS_TRUE@    $(wildcard $(top_srcdir)/*.c)
+
 all: all-recursive
 
 .SUFFIXES:
@@ -414,11 +714,18 @@ clean-libtool:
        -rm -rf .libs _libs
 install-man1: $(man_MANS)
        @$(NORMAL_INSTALL)
-       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
-       @list=''; test -n "$(man1dir)" || exit 0; \
-       { for i in $$list; do echo "$$i"; done; \
-       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
-         sed -n '/\.1[a-z]*$$/p'; \
+       @list1=''; \
+       list2='$(man_MANS)'; \
+       test -n "$(man1dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.1[a-z]*$$/p'; \
+       fi; \
        } | while read p; do \
          if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; echo "$$p"; \
@@ -447,27 +754,28 @@ uninstall-man1:
          sed -n '/\.1[a-z]*$$/p'; \
        } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
              -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
-       test -z "$$files" || { \
-         echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
-         cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+       dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -482,57 +790,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -548,12 +811,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -565,15 +823,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -582,24 +836,26 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
 distdir: $(DISTFILES)
-       @list='$(MANS)'; if test -n "$$list"; then \
-         list=`for p in $$list; do \
-           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
-           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
-         if test -n "$$list" && \
-           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
-           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
-           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
-           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
-           echo "       typically \`make maintainer-clean' will remove them" >&2; \
-           exit 1; \
-         else :; fi; \
-       else :; fi
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
        topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
        list='$(DISTFILES)'; \
@@ -631,13 +887,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -675,10 +928,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -759,12 +1017,11 @@ uninstall-am: uninstall-man
 
 uninstall-man: uninstall-man1
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-       install-am install-strip tags-recursive
+.MAKE: $(am__recursive_targets) install-am install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am check check-am clean clean-generic clean-libtool \
-       clean-local ctags ctags-recursive distclean distclean-generic \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool clean-local \
+       cscopelist-am ctags ctags-am distclean distclean-generic \
        distclean-libtool distclean-tags distdir dvi dvi-am html \
        html-am info info-am install install-am install-data \
        install-data-am install-data-local install-dvi install-dvi-am \
@@ -774,81 +1031,87 @@ uninstall-man: uninstall-man1
        install-strip installcheck installcheck-am installdirs \
        installdirs-am maintainer-clean maintainer-clean-generic \
        maintainer-clean-local mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am uninstall-man uninstall-man1
-
-
-@REBUILD_DOCS_TRUE@all: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
-@REBUILD_DOCS_FALSE@all:
-
-api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h $(srcdir)/site.xsl
-
-web: $(PAGES)
-
-../elfgcchack.h: $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         echo "Rebuilding the elfgcchack.h header" ; \
-         $(XSLTPROC) --nonet $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml > elfgcchack.h ; \
-         if [ "`diff -q elfgcchack.h ../elfgcchack.h`" ] ; then \
-           echo "updating ../elfgcchack.h"; \
-           cp elfgcchack.h ../elfgcchack.h; \
-         fi ; rm -f elfgcchack.h ;  fi );
-
-$(PAGES): xml.html $(srcdir)/site.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         echo "Rebuilding the HTML Web pages from xml.html" ; \
-         $(XSLTPROC) --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
-       -@(if [ -x $(XMLLINT) ] ; then \
-         echo "Validating the HTML Web pages" ; \
-         $(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
-
-$(top_builddir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         $(XSLTPROC) --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_builddir)/NEWS ; fi );
-
-libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         echo "Rebuilding the NEWS file" ; \
-         $(XSLTPROC) --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
-
-$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
-         $(XSLTPROC) --nonet --html $(top_srcdir)/doc/api.xsl \
-                            $(top_srcdir)/doc/xml.html ; fi );
-       -@(if [ -x $(XMLLINT) ] ; then \
-         echo "Validating the HTML API pages" ; \
-         $(XMLLINT) --nonet --valid --noout API*.html ; fi );
-
-$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         echo "Rebuilding the HTML pages from the XML API" ; \
-         $(XSLTPROC) --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
-       -@(if [ -x $(XMLLINT) ] ; then \
-         echo "Validating the resulting XHTML pages" ; \
-         $(XMLLINT) --nonet --valid --noout html/*.html ; fi );
-
-wiki: libxml2-api.xml $(srcdir)/wiki.xsl
-       -@(if [ -x $(XSLTPROC) ] ; then \
-               echo "Rebuilding the wiki HTML pages from the XML API" ; \
-               $(XSLTPROC) --nonet $(srcdir)/wiki.xsl libxml2-api.xml; fi )
-
-$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         $(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \
-         --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
-
-libxml2-api.xml libxml2-refs.xml ../libxml2.syms: apibuild.py symbols.xml syms.xsl checkapisym.xsl ../include/libxml/*.h ../*.c
-       -(./apibuild.py)
-       ($(XSLTPROC) checkapisym.xsl libxml2-api.xml)
-       ($(XSLTPROC) -o ../libxml2.syms syms.xsl symbols.xml)
-       -@(cd .. ; $(MAKE) rebuild_testapi)
-
-xmllint.1: xmllint.xml
-       -@($(XSLTPROC) --nonet xmllint.xml)
-
-xmlcatalog.1: xmlcatalog_man.xml
-       -@($(XSLTPROC) --nonet xmlcatalog_man.xml)
+       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+       uninstall-am uninstall-man uninstall-man1
+
+
+@REBUILD_DOCS_TRUE@docs: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
+
+@REBUILD_DOCS_TRUE@api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h $(srcdir)/site.xsl
+
+@REBUILD_DOCS_TRUE@web: $(PAGES)
+
+@REBUILD_DOCS_TRUE@../elfgcchack.h: $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Rebuilding the elfgcchack.h header" ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml > elfgcchack.h ; \
+@REBUILD_DOCS_TRUE@      if [ "`diff -q elfgcchack.h ../elfgcchack.h`" ] ; then \
+@REBUILD_DOCS_TRUE@        echo "updating ../elfgcchack.h"; \
+@REBUILD_DOCS_TRUE@        cp elfgcchack.h ../elfgcchack.h; \
+@REBUILD_DOCS_TRUE@      fi ; rm -f elfgcchack.h ;  fi );
+
+@REBUILD_DOCS_TRUE@$(PAGES): xml.html $(srcdir)/site.xsl
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Rebuilding the HTML Web pages from xml.html" ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet --html --path $(srcdir) $(srcdir)/site.xsl $(srcdir)/xml.html > index.html ; fi );
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XMLLINT) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Validating the HTML Web pages" ; \
+@REBUILD_DOCS_TRUE@      $(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
+
+@REBUILD_DOCS_TRUE@$(top_builddir)/NEWS: $(srcdir)/news.xsl $(srcdir)/news.html
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet $(srcdir)/news.xsl $(srcdir)/news.html > $(top_builddir)/NEWS ; fi );
+
+@REBUILD_DOCS_TRUE@libxml2.xsa: $(srcdir)/xsa.xsl $(srcdir)/news.html
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Rebuilding the NEWS file" ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet $(srcdir)/xsa.xsl $(srcdir)/news.html > libxml2.xsa ; fi );
+
+@REBUILD_DOCS_TRUE@$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(srcdir)/site.xsl $(srcdir)/api.xsl
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet --html $(srcdir)/api.xsl \
+@REBUILD_DOCS_TRUE@                         $(srcdir)/xml.html ; fi );
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XMLLINT) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Validating the HTML API pages" ; \
+@REBUILD_DOCS_TRUE@      $(XMLLINT) --nonet --valid --noout API*.html ; fi );
+
+@REBUILD_DOCS_TRUE@$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Rebuilding the HTML pages from the XML API" ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet $(srcdir)/newapi.xsl $(srcdir)/libxml2-api.xml ; fi )
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XMLLINT) ] ; then \
+@REBUILD_DOCS_TRUE@      echo "Validating the resulting XHTML pages" ; \
+@REBUILD_DOCS_TRUE@      $(XMLLINT) --nonet --valid --noout html/*.html ; fi );
+
+@REBUILD_DOCS_TRUE@wiki: libxml2-api.xml $(srcdir)/wiki.xsl
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@            echo "Rebuilding the wiki HTML pages from the XML API" ; \
+@REBUILD_DOCS_TRUE@            $(XSLTPROC) --nonet $(srcdir)/wiki.xsl $(srcdir)/libxml2-api.xml; fi )
+
+@REBUILD_DOCS_TRUE@$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \
+@REBUILD_DOCS_TRUE@      --nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
+
+@REBUILD_DOCS_TRUE@libxml2-api.xml libxml2-refs.xml ../libxml2.syms: apibuild.py symbols.xml syms.xsl checkapisym.xsl $(source_file_deps)
+@REBUILD_DOCS_TRUE@    test -f $(top_srcdir)/include/libxml/xmlversion.h
+@REBUILD_DOCS_TRUE@    (cd $(srcdir) && ./apibuild.py)
+@REBUILD_DOCS_TRUE@    ($(XSLTPROC) $(srcdir)/checkapisym.xsl $(srcdir)/libxml2-api.xml)
+@REBUILD_DOCS_TRUE@    ($(XSLTPROC) -o ../libxml2.syms $(srcdir)/syms.xsl $(srcdir)/symbols.xml)
+@REBUILD_DOCS_TRUE@    -@(cd .. ; $(MAKE) rebuild_testapi)
+
+@REBUILD_DOCS_TRUE@xmllint.1: xmllint.xml
+@REBUILD_DOCS_TRUE@    -@($(XSLTPROC) --nonet xmllint.xml)
+
+@REBUILD_DOCS_TRUE@xmlcatalog.1: xmlcatalog_man.xml
+@REBUILD_DOCS_TRUE@    -@($(XSLTPROC) --nonet xmlcatalog_man.xml)
+
+@REBUILD_DOCS_TRUE@check-extra-dist:
+@REBUILD_DOCS_TRUE@    for f in $(EXTRA_DIST_wc) ; do echo $$f; done | sort -u >tmp.EXTRA_DIST_wc
+@REBUILD_DOCS_TRUE@    for f in $(EXTRA_DIST) ;    do echo $$f; done | sort    >tmp.EXTRA_DIST
+@REBUILD_DOCS_TRUE@    diff -u tmp.EXTRA_DIST_wc tmp.EXTRA_DIST
+@REBUILD_DOCS_TRUE@    rm -f tmp.EXTRA_DIST_wc tmp.EXTRA_DIST
 
 clean-local:
        rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
@@ -856,25 +1119,25 @@ clean-local:
 maintainer-clean-local: clean-local
        rm -rf libxml-decl-list.txt libxml-decl.txt 
 
-rebuild: api all
+rebuild: api docs
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/html
-       -@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
-       -@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/html
+       -$(INSTALL) -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
+       -$(INSTALL) -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial/images
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial/images
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
-       -@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
+       -$(INSTALL) -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
                $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
 
-.PHONY : html xml templates scan
+.PHONY: docs api web wiki rebuild
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index c2dff84..b5b669a 100755 (executable)
@@ -52,7 +52,11 @@ ignored_files = {
   "test.c": "not part of the library",
   "testdso.c": "test for dynamid shared libraries",
   "testrecurse.c": "test for entities recursions",
-  "xzlib.h": "Internal API only",
+  "xzlib.h": "Internal API only 2.8.0",
+  "buf.h": "Internal API only 2.9.0",
+  "enc.h": "Internal API only 2.9.0",
+  "/save.h": "Internal API only 2.9.0",
+  "timsort.h": "Internal header only for xpath.c 2.9.0",
 }
 
 ignored_words = {
@@ -80,51 +84,51 @@ ignored_words = {
 }
 
 def escape(raw):
-    raw = string.replace(raw, '&', '&amp;')
-    raw = string.replace(raw, '<', '&lt;')
-    raw = string.replace(raw, '>', '&gt;')
-    raw = string.replace(raw, "'", '&apos;')
-    raw = string.replace(raw, '"', '&quot;')
+    raw = raw.replace('&', '&amp;')
+    raw = raw.replace('<', '&lt;')
+    raw = raw.replace('>', '&gt;')
+    raw = raw.replace("'", '&apos;')
+    raw = raw.replace('"', '&quot;')
     return raw
 
 def uniq(items):
     d = {}
     for item in items:
         d[item]=1
-    return d.keys()
+    return list(d.keys())
 
 class identifier:
     def __init__(self, name, header=None, module=None, type=None, lineno = 0,
                  info=None, extra=None, conditionals = None):
         self.name = name
-       self.header = header
-       self.module = module
-       self.type = type
-       self.info = info
-       self.extra = extra
-       self.lineno = lineno
-       self.static = 0
-       if conditionals == None or len(conditionals) == 0:
-           self.conditionals = None
-       else:
-           self.conditionals = conditionals[:]
-       if self.name == debugsym:
-           print "=> define %s : %s" % (debugsym, (module, type, info,
-                                        extra, conditionals))
+        self.header = header
+        self.module = module
+        self.type = type
+        self.info = info
+        self.extra = extra
+        self.lineno = lineno
+        self.static = 0
+        if conditionals == None or len(conditionals) == 0:
+            self.conditionals = None
+        else:
+            self.conditionals = conditionals[:]
+        if self.name == debugsym:
+            print("=> define %s : %s" % (debugsym, (module, type, info,
+                                         extra, conditionals)))
 
     def __repr__(self):
         r = "%s %s:" % (self.type, self.name)
-       if self.static:
-           r = r + " static"
-       if self.module != None:
-           r = r + " from %s" % (self.module)
-       if self.info != None:
-           r = r + " " +  `self.info`
-       if self.extra != None:
-           r = r + " " + `self.extra`
-       if self.conditionals != None:
-           r = r + " " + `self.conditionals`
-       return r
+        if self.static:
+            r = r + " static"
+        if self.module != None:
+            r = r + " from %s" % (self.module)
+        if self.info != None:
+            r = r + " " +  repr(self.info)
+        if self.extra != None:
+            r = r + " " + repr(self.extra)
+        if self.conditionals != None:
+            r = r + " " + repr(self.conditionals)
+        return r
 
 
     def set_header(self, header):
@@ -142,10 +146,10 @@ class identifier:
     def set_static(self, static):
         self.static = static
     def set_conditionals(self, conditionals):
-       if conditionals == None or len(conditionals) == 0:
-           self.conditionals = None
-       else:
-           self.conditionals = conditionals[:]
+        if conditionals == None or len(conditionals) == 0:
+            self.conditionals = None
+        else:
+            self.conditionals = conditionals[:]
 
     def get_name(self):
         return self.name
@@ -168,231 +172,231 @@ class identifier:
 
     def update(self, header, module, type = None, info = None, extra=None,
                conditionals=None):
-       if self.name == debugsym:
-           print "=> update %s : %s" % (debugsym, (module, type, info,
-                                        extra, conditionals))
+        if self.name == debugsym:
+            print("=> update %s : %s" % (debugsym, (module, type, info,
+                                         extra, conditionals)))
         if header != None and self.header == None:
-           self.set_header(module)
+            self.set_header(module)
         if module != None and (self.module == None or self.header == self.module):
-           self.set_module(module)
+            self.set_module(module)
         if type != None and self.type == None:
-           self.set_type(type)
+            self.set_type(type)
         if info != None:
-           self.set_info(info)
+            self.set_info(info)
         if extra != None:
-           self.set_extra(extra)
+            self.set_extra(extra)
         if conditionals != None:
-           self.set_conditionals(conditionals)
+            self.set_conditionals(conditionals)
 
 class index:
     def __init__(self, name = "noname"):
         self.name = name
         self.identifiers = {}
         self.functions = {}
-       self.variables = {}
-       self.includes = {}
-       self.structs = {}
-       self.enums = {}
-       self.typedefs = {}
-       self.macros = {}
-       self.references = {}
-       self.info = {}
+        self.variables = {}
+        self.includes = {}
+        self.structs = {}
+        self.enums = {}
+        self.typedefs = {}
+        self.macros = {}
+        self.references = {}
+        self.info = {}
 
     def add_ref(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None):
         if name[0:2] == '__':
-           return None
+            return None
         d = None
         try:
-          d = self.identifiers[name]
-          d.update(header, module, type, lineno, info, extra, conditionals)
-       except:
-          d = identifier(name, header, module, type, lineno, info, extra, conditionals)
-          self.identifiers[name] = d
+           d = self.identifiers[name]
+           d.update(header, module, type, lineno, info, extra, conditionals)
+        except:
+           d = identifier(name, header, module, type, lineno, info, extra, conditionals)
+           self.identifiers[name] = d
 
-       if d != None and static == 1:
-           d.set_static(1)
+        if d != None and static == 1:
+            d.set_static(1)
 
-       if d != None and name != None and type != None:
-           self.references[name] = d
+        if d != None and name != None and type != None:
+            self.references[name] = d
 
-       if name == debugsym:
-           print "New ref: %s" % (d)
+        if name == debugsym:
+            print("New ref: %s" % (d))
 
-       return d
+        return d
 
     def add(self, name, header, module, static, type, lineno, info=None, extra=None, conditionals = None):
         if name[0:2] == '__':
-           return None
+            return None
         d = None
         try:
-          d = self.identifiers[name]
-          d.update(header, module, type, lineno, info, extra, conditionals)
-       except:
-          d = identifier(name, header, module, type, lineno, info, extra, conditionals)
-          self.identifiers[name] = d
-
-       if d != None and static == 1:
-           d.set_static(1)
-
-       if d != None and name != None and type != None:
-           if type == "function":
-               self.functions[name] = d
-           elif type == "functype":
-               self.functions[name] = d
-           elif type == "variable":
-               self.variables[name] = d
-           elif type == "include":
-               self.includes[name] = d
-           elif type == "struct":
-               self.structs[name] = d
-           elif type == "enum":
-               self.enums[name] = d
-           elif type == "typedef":
-               self.typedefs[name] = d
-           elif type == "macro":
-               self.macros[name] = d
-           else:
-               print "Unable to register type ", type
-
-       if name == debugsym:
-           print "New symbol: %s" % (d)
-
-       return d
+           d = self.identifiers[name]
+           d.update(header, module, type, lineno, info, extra, conditionals)
+        except:
+           d = identifier(name, header, module, type, lineno, info, extra, conditionals)
+           self.identifiers[name] = d
+
+        if d != None and static == 1:
+            d.set_static(1)
+
+        if d != None and name != None and type != None:
+            if type == "function":
+                self.functions[name] = d
+            elif type == "functype":
+                self.functions[name] = d
+            elif type == "variable":
+                self.variables[name] = d
+            elif type == "include":
+                self.includes[name] = d
+            elif type == "struct":
+                self.structs[name] = d
+            elif type == "enum":
+                self.enums[name] = d
+            elif type == "typedef":
+                self.typedefs[name] = d
+            elif type == "macro":
+                self.macros[name] = d
+            else:
+                print("Unable to register type ", type)
+
+        if name == debugsym:
+            print("New symbol: %s" % (d))
+
+        return d
 
     def merge(self, idx):
-        for id in idx.functions.keys():
+        for id in list(idx.functions.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-            if self.macros.has_key(id):
-                del self.macros[id]
-            if self.functions.has_key(id):
-                print "function %s from %s redeclared in %s" % (
-                   id, self.functions[id].header, idx.functions[id].header)
-            else:
-                self.functions[id] = idx.functions[id]
-                self.identifiers[id] = idx.functions[id]
-        for id in idx.variables.keys():
+             if id in self.macros:
+                 del self.macros[id]
+             if id in self.functions:
+                 print("function %s from %s redeclared in %s" % (
+                    id, self.functions[id].header, idx.functions[id].header))
+             else:
+                 self.functions[id] = idx.functions[id]
+                 self.identifiers[id] = idx.functions[id]
+        for id in list(idx.variables.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-            if self.macros.has_key(id):
-                del self.macros[id]
-            if self.variables.has_key(id):
-                print "variable %s from %s redeclared in %s" % (
-                   id, self.variables[id].header, idx.variables[id].header)
-            else:
-                self.variables[id] = idx.variables[id]
-                self.identifiers[id] = idx.variables[id]
-        for id in idx.structs.keys():
-            if self.structs.has_key(id):
-                print "struct %s from %s redeclared in %s" % (
-                   id, self.structs[id].header, idx.structs[id].header)
-            else:
-                self.structs[id] = idx.structs[id]
-                self.identifiers[id] = idx.structs[id]
-        for id in idx.typedefs.keys():
-            if self.typedefs.has_key(id):
-                print "typedef %s from %s redeclared in %s" % (
-                   id, self.typedefs[id].header, idx.typedefs[id].header)
-            else:
-                self.typedefs[id] = idx.typedefs[id]
-                self.identifiers[id] = idx.typedefs[id]
-        for id in idx.macros.keys():
+             if id in self.macros:
+                 del self.macros[id]
+             if id in self.variables:
+                 print("variable %s from %s redeclared in %s" % (
+                    id, self.variables[id].header, idx.variables[id].header))
+             else:
+                 self.variables[id] = idx.variables[id]
+                 self.identifiers[id] = idx.variables[id]
+        for id in list(idx.structs.keys()):
+             if id in self.structs:
+                 print("struct %s from %s redeclared in %s" % (
+                    id, self.structs[id].header, idx.structs[id].header))
+             else:
+                 self.structs[id] = idx.structs[id]
+                 self.identifiers[id] = idx.structs[id]
+        for id in list(idx.typedefs.keys()):
+             if id in self.typedefs:
+                 print("typedef %s from %s redeclared in %s" % (
+                    id, self.typedefs[id].header, idx.typedefs[id].header))
+             else:
+                 self.typedefs[id] = idx.typedefs[id]
+                 self.identifiers[id] = idx.typedefs[id]
+        for id in list(idx.macros.keys()):
               #
               # macro might be used to override functions or variables
               # definitions
               #
-             if self.variables.has_key(id):
+             if id in self.variables:
                  continue
-             if self.functions.has_key(id):
+             if id in self.functions:
                  continue
-             if self.enums.has_key(id):
+             if id in self.enums:
                  continue
-            if self.macros.has_key(id):
-                print "macro %s from %s redeclared in %s" % (
-                   id, self.macros[id].header, idx.macros[id].header)
-            else:
-                self.macros[id] = idx.macros[id]
-                self.identifiers[id] = idx.macros[id]
-        for id in idx.enums.keys():
-            if self.enums.has_key(id):
-                print "enum %s from %s redeclared in %s" % (
-                   id, self.enums[id].header, idx.enums[id].header)
-            else:
-                self.enums[id] = idx.enums[id]
-                self.identifiers[id] = idx.enums[id]
+             if id in self.macros:
+                 print("macro %s from %s redeclared in %s" % (
+                    id, self.macros[id].header, idx.macros[id].header))
+             else:
+                 self.macros[id] = idx.macros[id]
+                 self.identifiers[id] = idx.macros[id]
+        for id in list(idx.enums.keys()):
+             if id in self.enums:
+                 print("enum %s from %s redeclared in %s" % (
+                    id, self.enums[id].header, idx.enums[id].header))
+             else:
+                 self.enums[id] = idx.enums[id]
+                 self.identifiers[id] = idx.enums[id]
 
     def merge_public(self, idx):
-        for id in idx.functions.keys():
-            if self.functions.has_key(id):
-                # check that function condition agrees with header
-                if idx.functions[id].conditionals != \
-                   self.functions[id].conditionals:
-                    print "Header condition differs from Function for %s:" \
-                       % id
-                    print "  H: %s" % self.functions[id].conditionals
-                    print "  C: %s" % idx.functions[id].conditionals
-                up = idx.functions[id]
-                self.functions[id].update(None, up.module, up.type, up.info, up.extra)
-        #     else:
-        #         print "Function %s from %s is not declared in headers" % (
-        #              id, idx.functions[id].module)
-        # TODO: do the same for variables.
+        for id in list(idx.functions.keys()):
+             if id in self.functions:
+                 # check that function condition agrees with header
+                 if idx.functions[id].conditionals != \
+                    self.functions[id].conditionals:
+                     print("Header condition differs from Function for %s:" \
+                        % id)
+                     print("  H: %s" % self.functions[id].conditionals)
+                     print("  C: %s" % idx.functions[id].conditionals)
+                 up = idx.functions[id]
+                 self.functions[id].update(None, up.module, up.type, up.info, up.extra)
+         #     else:
+         #         print "Function %s from %s is not declared in headers" % (
+         #                id, idx.functions[id].module)
+         # TODO: do the same for variables.
 
     def analyze_dict(self, type, dict):
         count = 0
-       public = 0
-        for name in dict.keys():
-           id = dict[name]
-           count = count + 1
-           if id.static == 0:
-               public = public + 1
+        public = 0
+        for name in list(dict.keys()):
+            id = dict[name]
+            count = count + 1
+            if id.static == 0:
+                public = public + 1
         if count != public:
-           print "  %d %s , %d public" % (count, type, public)
-       elif count != 0:
-           print "  %d public %s" % (count, type)
+            print("  %d %s , %d public" % (count, type, public))
+        elif count != 0:
+            print("  %d public %s" % (count, type))
 
 
     def analyze(self):
-       self.analyze_dict("functions", self.functions)
-       self.analyze_dict("variables", self.variables)
-       self.analyze_dict("structs", self.structs)
-       self.analyze_dict("typedefs", self.typedefs)
-       self.analyze_dict("macros", self.macros)
+        self.analyze_dict("functions", self.functions)
+        self.analyze_dict("variables", self.variables)
+        self.analyze_dict("structs", self.structs)
+        self.analyze_dict("typedefs", self.typedefs)
+        self.analyze_dict("macros", self.macros)
 
 class CLexer:
     """A lexer for the C language, tokenize the input by reading and
        analyzing it line by line"""
     def __init__(self, input):
         self.input = input
-       self.tokens = []
-       self.line = ""
-       self.lineno = 0
+        self.tokens = []
+        self.line = ""
+        self.lineno = 0
 
     def getline(self):
         line = ''
-       while line == '':
-           line = self.input.readline()
-           if not line:
-               return None
-           self.lineno = self.lineno + 1
-           line = string.lstrip(line)
-           line = string.rstrip(line)
-           if line == '':
-               continue
-           while line[-1] == '\\':
-               line = line[:-1]
-               n = self.input.readline()
-               self.lineno = self.lineno + 1
-               n = string.lstrip(n)
-               n = string.rstrip(n)
-               if not n:
-                   break
-               else:
-                   line = line + n
+        while line == '':
+            line = self.input.readline()
+            if not line:
+                return None
+            self.lineno = self.lineno + 1
+            line = line.lstrip()
+            line = line.rstrip()
+            if line == '':
+                continue
+            while line[-1] == '\\':
+                line = line[:-1]
+                n = self.input.readline()
+                self.lineno = self.lineno + 1
+                n = n.lstrip()
+                n = n.rstrip()
+                if not n:
+                    break
+                else:
+                    line = line + n
         return line
 
     def getlineno(self):
@@ -402,194 +406,194 @@ class CLexer:
         self.tokens.insert(0, token);
 
     def debug(self):
-        print "Last token: ", self.last
-       print "Token queue: ", self.tokens
-       print "Line %d end: " % (self.lineno), self.line
+        print("Last token: ", self.last)
+        print("Token queue: ", self.tokens)
+        print("Line %d end: " % (self.lineno), self.line)
 
     def token(self):
         while self.tokens == []:
-           if self.line == "":
-               line = self.getline()
-           else:
-               line = self.line
-               self.line = ""
-           if line == None:
-               return None
-
-           if line[0] == '#':
-               self.tokens = map((lambda x: ('preproc', x)),
-                                 string.split(line))
-               break;
-           l = len(line)
-           if line[0] == '"' or line[0] == "'":
-               end = line[0]
-               line = line[1:]
-               found = 0
-               tok = ""
-               while found == 0:
-                   i = 0
-                   l = len(line)
-                   while i < l:
-                       if line[i] == end:
-                           self.line = line[i+1:]
-                           line = line[:i]
-                           l = i
-                           found = 1
-                           break
-                       if line[i] == '\\':
-                           i = i + 1
-                       i = i + 1
-                   tok = tok + line
-                   if found == 0:
-                       line = self.getline()
-                       if line == None:
-                           return None
-               self.last = ('string', tok)
-               return self.last
-
-           if l >= 2 and line[0] == '/' and line[1] == '*':
-               line = line[2:]
-               found = 0
-               tok = ""
-               while found == 0:
-                   i = 0
-                   l = len(line)
-                   while i < l:
-                       if line[i] == '*' and i+1 < l and line[i+1] == '/':
-                           self.line = line[i+2:]
-                           line = line[:i-1]
-                           l = i
-                           found = 1
-                           break
-                       i = i + 1
-                   if tok != "":
-                       tok = tok + "\n"
-                   tok = tok + line
-                   if found == 0:
-                       line = self.getline()
-                       if line == None:
-                           return None
-               self.last = ('comment', tok)
-               return self.last
-           if l >= 2 and line[0] == '/' and line[1] == '/':
-               line = line[2:]
-               self.last = ('comment', line)
-               return self.last
-           i = 0
-           while i < l:
-               if line[i] == '/' and i+1 < l and line[i+1] == '/':
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               if line[i] == '/' and i+1 < l and line[i+1] == '*':
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               if line[i] == '"' or line[i] == "'":
-                   self.line = line[i:]
-                   line = line[:i]
-                   break
-               i = i + 1
-           l = len(line)
-           i = 0
-           while i < l:
-               if line[i] == ' ' or line[i] == '\t':
-                   i = i + 1
-                   continue
-               o = ord(line[i])
-               if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                  (o >= 48 and o <= 57):
-                   s = i
-                   while i < l:
-                       o = ord(line[i])
-                       if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                          (o >= 48 and o <= 57) or string.find(
-                              " \t(){}:;,+-*/%&!|[]=><", line[i]) == -1:
-                           i = i + 1
-                       else:
-                           break
-                   self.tokens.append(('name', line[s:i]))
-                   continue
-               if string.find("(){}:;,[]", line[i]) != -1:
+            if self.line == "":
+                line = self.getline()
+            else:
+                line = self.line
+                self.line = ""
+            if line == None:
+                return None
+
+            if line[0] == '#':
+                self.tokens = list(map((lambda x: ('preproc', x)),
+                                  line.split()))
+                break;
+            l = len(line)
+            if line[0] == '"' or line[0] == "'":
+                end = line[0]
+                line = line[1:]
+                found = 0
+                tok = ""
+                while found == 0:
+                    i = 0
+                    l = len(line)
+                    while i < l:
+                        if line[i] == end:
+                            self.line = line[i+1:]
+                            line = line[:i]
+                            l = i
+                            found = 1
+                            break
+                        if line[i] == '\\':
+                            i = i + 1
+                        i = i + 1
+                    tok = tok + line
+                    if found == 0:
+                        line = self.getline()
+                        if line == None:
+                            return None
+                self.last = ('string', tok)
+                return self.last
+
+            if l >= 2 and line[0] == '/' and line[1] == '*':
+                line = line[2:]
+                found = 0
+                tok = ""
+                while found == 0:
+                    i = 0
+                    l = len(line)
+                    while i < l:
+                        if line[i] == '*' and i+1 < l and line[i+1] == '/':
+                            self.line = line[i+2:]
+                            line = line[:i-1]
+                            l = i
+                            found = 1
+                            break
+                        i = i + 1
+                    if tok != "":
+                        tok = tok + "\n"
+                    tok = tok + line
+                    if found == 0:
+                        line = self.getline()
+                        if line == None:
+                            return None
+                self.last = ('comment', tok)
+                return self.last
+            if l >= 2 and line[0] == '/' and line[1] == '/':
+                line = line[2:]
+                self.last = ('comment', line)
+                return self.last
+            i = 0
+            while i < l:
+                if line[i] == '/' and i+1 < l and line[i+1] == '/':
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                if line[i] == '/' and i+1 < l and line[i+1] == '*':
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                if line[i] == '"' or line[i] == "'":
+                    self.line = line[i:]
+                    line = line[:i]
+                    break
+                i = i + 1
+            l = len(line)
+            i = 0
+            while i < l:
+                if line[i] == ' ' or line[i] == '\t':
+                    i = i + 1
+                    continue
+                o = ord(line[i])
+                if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                   (o >= 48 and o <= 57):
+                    s = i
+                    while i < l:
+                        o = ord(line[i])
+                        if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                           (o >= 48 and o <= 57) or \
+                          (" \t(){}:;,+-*/%&!|[]=><".find(line[i])) == -1:
+                            i = i + 1
+                        else:
+                            break
+                    self.tokens.append(('name', line[s:i]))
+                    continue
+                if "(){}:;,[]".find(line[i]) != -1:
 #                 if line[i] == '(' or line[i] == ')' or line[i] == '{' or \
-#                  line[i] == '}' or line[i] == ':' or line[i] == ';' or \
-#                  line[i] == ',' or line[i] == '[' or line[i] == ']':
-                   self.tokens.append(('sep', line[i]))
-                   i = i + 1
-                   continue
-               if string.find("+-*><=/%&!|.", line[i]) != -1:
+#                    line[i] == '}' or line[i] == ':' or line[i] == ';' or \
+#                    line[i] == ',' or line[i] == '[' or line[i] == ']':
+                    self.tokens.append(('sep', line[i]))
+                    i = i + 1
+                    continue
+                if "+-*><=/%&!|.".find(line[i]) != -1:
 #                 if line[i] == '+' or line[i] == '-' or line[i] == '*' or \
-#                  line[i] == '>' or line[i] == '<' or line[i] == '=' or \
-#                  line[i] == '/' or line[i] == '%' or line[i] == '&' or \
-#                  line[i] == '!' or line[i] == '|' or line[i] == '.':
-                   if line[i] == '.' and  i + 2 < l and \
-                      line[i+1] == '.' and line[i+2] == '.':
-                       self.tokens.append(('name', '...'))
-                       i = i + 3
-                       continue
-
-                   j = i + 1
-                   if j < l and (
-                      string.find("+-*><=/%&!|", line[j]) != -1):
-#                      line[j] == '+' or line[j] == '-' or line[j] == '*' or \
-#                      line[j] == '>' or line[j] == '<' or line[j] == '=' or \
-#                      line[j] == '/' or line[j] == '%' or line[j] == '&' or \
-#                      line[j] == '!' or line[j] == '|'):
-                       self.tokens.append(('op', line[i:j+1]))
-                       i = j + 1
-                   else:
-                       self.tokens.append(('op', line[i]))
-                       i = i + 1
-                   continue
-               s = i
-               while i < l:
-                   o = ord(line[i])
-                   if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
-                      (o >= 48 and o <= 57) or (
-                       string.find(" \t(){}:;,+-*/%&!|[]=><", line[i]) == -1):
-#                       line[i] != ' ' and line[i] != '\t' and
-#                       line[i] != '(' and line[i] != ')' and
-#                       line[i] != '{'  and line[i] != '}' and
-#                       line[i] != ':' and line[i] != ';' and
-#                       line[i] != ',' and line[i] != '+' and
-#                       line[i] != '-' and line[i] != '*' and
-#                       line[i] != '/' and line[i] != '%' and
-#                       line[i] != '&' and line[i] != '!' and
-#                       line[i] != '|' and line[i] != '[' and
-#                       line[i] != ']' and line[i] != '=' and
-#                       line[i] != '*' and line[i] != '>' and
-#                       line[i] != '<'):
-                       i = i + 1
-                   else:
-                       break
-               self.tokens.append(('name', line[s:i]))
-
-       tok = self.tokens[0]
-       self.tokens = self.tokens[1:]
-       self.last = tok
-       return tok
+#                    line[i] == '>' or line[i] == '<' or line[i] == '=' or \
+#                    line[i] == '/' or line[i] == '%' or line[i] == '&' or \
+#                    line[i] == '!' or line[i] == '|' or line[i] == '.':
+                    if line[i] == '.' and  i + 2 < l and \
+                       line[i+1] == '.' and line[i+2] == '.':
+                        self.tokens.append(('name', '...'))
+                        i = i + 3
+                        continue
+
+                    j = i + 1
+                    if j < l and (
+                       "+-*><=/%&!|".find(line[j]) != -1):
+#                        line[j] == '+' or line[j] == '-' or line[j] == '*' or \
+#                        line[j] == '>' or line[j] == '<' or line[j] == '=' or \
+#                        line[j] == '/' or line[j] == '%' or line[j] == '&' or \
+#                        line[j] == '!' or line[j] == '|'):
+                        self.tokens.append(('op', line[i:j+1]))
+                        i = j + 1
+                    else:
+                        self.tokens.append(('op', line[i]))
+                        i = i + 1
+                    continue
+                s = i
+                while i < l:
+                    o = ord(line[i])
+                    if (o >= 97 and o <= 122) or (o >= 65 and o <= 90) or \
+                       (o >= 48 and o <= 57) or (
+                        " \t(){}:;,+-*/%&!|[]=><".find(line[i]) == -1):
+#                         line[i] != ' ' and line[i] != '\t' and
+#                         line[i] != '(' and line[i] != ')' and
+#                         line[i] != '{'  and line[i] != '}' and
+#                         line[i] != ':' and line[i] != ';' and
+#                         line[i] != ',' and line[i] != '+' and
+#                         line[i] != '-' and line[i] != '*' and
+#                         line[i] != '/' and line[i] != '%' and
+#                         line[i] != '&' and line[i] != '!' and
+#                         line[i] != '|' and line[i] != '[' and
+#                         line[i] != ']' and line[i] != '=' and
+#                         line[i] != '*' and line[i] != '>' and
+#                         line[i] != '<'):
+                        i = i + 1
+                    else:
+                        break
+                self.tokens.append(('name', line[s:i]))
+
+        tok = self.tokens[0]
+        self.tokens = self.tokens[1:]
+        self.last = tok
+        return tok
 
 class CParser:
     """The C module parser"""
     def __init__(self, filename, idx = None):
         self.filename = filename
-       if len(filename) > 2 and filename[-2:] == '.h':
-           self.is_header = 1
-       else:
-           self.is_header = 0
+        if len(filename) > 2 and filename[-2:] == '.h':
+            self.is_header = 1
+        else:
+            self.is_header = 0
         self.input = open(filename)
-       self.lexer = CLexer(self.input)
-       if idx == None:
-           self.index = index()
-       else:
-           self.index = idx
-       self.top_comment = ""
-       self.last_comment = ""
-       self.comment = None
-       self.collect_ref = 0
-       self.no_error = 0
-       self.conditionals = []
-       self.defines = []
+        self.lexer = CLexer(self.input)
+        if idx == None:
+            self.index = index()
+        else:
+            self.index = idx
+        self.top_comment = ""
+        self.last_comment = ""
+        self.comment = None
+        self.collect_ref = 0
+        self.no_error = 0
+        self.conditionals = []
+        self.defines = []
 
     def collect_references(self):
         self.collect_ref = 1
@@ -604,203 +608,203 @@ class CParser:
         return self.lexer.getlineno()
 
     def index_add(self, name, module, static, type, info=None, extra = None):
-       if self.is_header == 1:
-           self.index.add(name, module, module, static, type, self.lineno(),
-                          info, extra, self.conditionals)
-       else:
-           self.index.add(name, None, module, static, type, self.lineno(),
-                          info, extra, self.conditionals)
+        if self.is_header == 1:
+            self.index.add(name, module, module, static, type, self.lineno(),
+                           info, extra, self.conditionals)
+        else:
+            self.index.add(name, None, module, static, type, self.lineno(),
+                           info, extra, self.conditionals)
 
     def index_add_ref(self, name, module, static, type, info=None,
                       extra = None):
-       if self.is_header == 1:
-           self.index.add_ref(name, module, module, static, type,
-                              self.lineno(), info, extra, self.conditionals)
-       else:
-           self.index.add_ref(name, None, module, static, type, self.lineno(),
-                              info, extra, self.conditionals)
+        if self.is_header == 1:
+            self.index.add_ref(name, module, module, static, type,
+                               self.lineno(), info, extra, self.conditionals)
+        else:
+            self.index.add_ref(name, None, module, static, type, self.lineno(),
+                               info, extra, self.conditionals)
 
     def warning(self, msg):
         if self.no_error:
-           return
-       print msg
+            return
+        print(msg)
 
     def error(self, msg, token=-1):
         if self.no_error:
-           return
+            return
 
-        print "Parse Error: " + msg
-       if token != -1:
-           print "Got token ", token
-       self.lexer.debug()
-       sys.exit(1)
+        print("Parse Error: " + msg)
+        if token != -1:
+            print("Got token ", token)
+        self.lexer.debug()
+        sys.exit(1)
 
     def debug(self, msg, token=-1):
-        print "Debug: " + msg
-       if token != -1:
-           print "Got token ", token
-       self.lexer.debug()
+        print("Debug: " + msg)
+        if token != -1:
+            print("Got token ", token)
+        self.lexer.debug()
 
     def parseTopComment(self, comment):
-       res = {}
-       lines = string.split(comment, "\n")
-       item = None
-       for line in lines:
-           while line != "" and (line[0] == ' ' or line[0] == '\t'):
-               line = line[1:]
-           while line != "" and line[0] == '*':
-               line = line[1:]
-           while line != "" and (line[0] == ' ' or line[0] == '\t'):
-               line = line[1:]
-           try:
-               (it, line) = string.split(line, ":", 1)
-               item = it
-               while line != "" and (line[0] == ' ' or line[0] == '\t'):
-                   line = line[1:]
-               if res.has_key(item):
-                   res[item] = res[item] + " " + line
-               else:
-                   res[item] = line
-           except:
-               if item != None:
-                   if res.has_key(item):
-                       res[item] = res[item] + " " + line
-                   else:
-                       res[item] = line
-       self.index.info = res
+        res = {}
+        lines = comment.split("\n")
+        item = None
+        for line in lines:
+            while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                line = line[1:]
+            while line != "" and line[0] == '*':
+                line = line[1:]
+            while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                line = line[1:]
+            try:
+                (it, line) = line.split(":", 1)
+                item = it
+                while line != "" and (line[0] == ' ' or line[0] == '\t'):
+                    line = line[1:]
+                if item in res:
+                    res[item] = res[item] + " " + line
+                else:
+                    res[item] = line
+            except:
+                if item != None:
+                    if item in res:
+                        res[item] = res[item] + " " + line
+                    else:
+                        res[item] = line
+        self.index.info = res
 
     def parseComment(self, token):
         if self.top_comment == "":
-           self.top_comment = token[1]
-       if self.comment == None or token[1][0] == '*':
-           self.comment = token[1];
-       else:
-           self.comment = self.comment + token[1]
-       token = self.lexer.token()
+            self.top_comment = token[1]
+        if self.comment == None or token[1][0] == '*':
+            self.comment = token[1];
+        else:
+            self.comment = self.comment + token[1]
+        token = self.lexer.token()
 
-        if string.find(self.comment, "DOC_DISABLE") != -1:
-           self.stop_error()
+        if self.comment.find("DOC_DISABLE") != -1:
+            self.stop_error()
 
-        if string.find(self.comment, "DOC_ENABLE") != -1:
-           self.start_error()
+        if self.comment.find("DOC_ENABLE") != -1:
+            self.start_error()
 
-       return token
+        return token
 
     #
     # Parse a comment block associate to a typedef
     #
     def parseTypeComment(self, name, quiet = 0):
         if name[0:2] == '__':
-           quiet = 1
+            quiet = 1
 
         args = []
-       desc = ""
+        desc = ""
 
         if self.comment == None:
-           if not quiet:
-               self.warning("Missing comment for type %s" % (name))
-           return((args, desc))
+            if not quiet:
+                self.warning("Missing comment for type %s" % (name))
+            return((args, desc))
         if self.comment[0] != '*':
-           if not quiet:
-               self.warning("Missing * in type comment for %s" % (name))
-           return((args, desc))
-       lines = string.split(self.comment, '\n')
-       if lines[0] == '*':
-           del lines[0]
-       if lines[0] != "* %s:" % (name):
-           if not quiet:
-               self.warning("Misformatted type comment for %s" % (name))
-               self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
-           return((args, desc))
-       del lines[0]
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       desc = ""
-       while len(lines) > 0:
-           l = lines[0]
-           while len(l) > 0 and l[0] == '*':
-               l = l[1:]
-           l = string.strip(l)
-           desc = desc + " " + l
-           del lines[0]
-
-       desc = string.strip(desc)
-
-       if quiet == 0:
-           if desc == "":
-               self.warning("Type comment for %s lack description of the macro" % (name))
-
-       return(desc)
+            if not quiet:
+                self.warning("Missing * in type comment for %s" % (name))
+            return((args, desc))
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted type comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return((args, desc))
+        del lines[0]
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            desc = desc + " " + l
+            del lines[0]
+
+        desc = desc.strip()
+
+        if quiet == 0:
+            if desc == "":
+                self.warning("Type comment for %s lack description of the macro" % (name))
+
+        return(desc)
     #
     # Parse a comment block associate to a macro
     #
     def parseMacroComment(self, name, quiet = 0):
         if name[0:2] == '__':
-           quiet = 1
+            quiet = 1
 
         args = []
-       desc = ""
+        desc = ""
 
         if self.comment == None:
-           if not quiet:
-               self.warning("Missing comment for macro %s" % (name))
-           return((args, desc))
+            if not quiet:
+                self.warning("Missing comment for macro %s" % (name))
+            return((args, desc))
         if self.comment[0] != '*':
-           if not quiet:
-               self.warning("Missing * in macro comment for %s" % (name))
-           return((args, desc))
-       lines = string.split(self.comment, '\n')
-       if lines[0] == '*':
-           del lines[0]
-       if lines[0] != "* %s:" % (name):
-           if not quiet:
-               self.warning("Misformatted macro comment for %s" % (name))
-               self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
-           return((args, desc))
-       del lines[0]
-       while lines[0] == '*':
-           del lines[0]
-       while len(lines) > 0 and lines[0][0:3] == '* @':
-           l = lines[0][3:]
-           try:
-               (arg, desc) = string.split(l, ':', 1)
-               desc=string.strip(desc)
-               arg=string.strip(arg)
+            if not quiet:
+                self.warning("Missing * in macro comment for %s" % (name))
+            return((args, desc))
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted macro comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return((args, desc))
+        del lines[0]
+        while lines[0] == '*':
+            del lines[0]
+        while len(lines) > 0 and lines[0][0:3] == '* @':
+            l = lines[0][3:]
+            try:
+                (arg, desc) = l.split(':', 1)
+                desc=desc.strip()
+                arg=arg.strip()
             except:
-               if not quiet:
-                   self.warning("Misformatted macro comment for %s" % (name))
-                   self.warning("  problem with '%s'" % (lines[0]))
-               del lines[0]
-               continue
-           del lines[0]
-           l = string.strip(lines[0])
-           while len(l) > 2 and l[0:3] != '* @':
-               while l[0] == '*':
-                   l = l[1:]
-               desc = desc + ' ' + string.strip(l)
-               del lines[0]
-               if len(lines) == 0:
-                   break
-               l = lines[0]
+                if not quiet:
+                    self.warning("Misformatted macro comment for %s" % (name))
+                    self.warning("  problem with '%s'" % (lines[0]))
+                del lines[0]
+                continue
+            del lines[0]
+            l = lines[0].strip()
+            while len(l) > 2 and l[0:3] != '* @':
+                while l[0] == '*':
+                    l = l[1:]
+                desc = desc + ' ' + l.strip()
+                del lines[0]
+                if len(lines) == 0:
+                    break
+                l = lines[0]
             args.append((arg, desc))
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       desc = ""
-       while len(lines) > 0:
-           l = lines[0]
-           while len(l) > 0 and l[0] == '*':
-               l = l[1:]
-           l = string.strip(l)
-           desc = desc + " " + l
-           del lines[0]
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            desc = desc + " " + l
+            del lines[0]
 
-       desc = string.strip(desc)
+        desc = desc.strip()
 
-       if quiet == 0:
-           if desc == "":
-               self.warning("Macro comment for %s lack description of the macro" % (name))
+        if quiet == 0:
+            if desc == "":
+                self.warning("Macro comment for %s lack description of the macro" % (name))
 
-       return((args, desc))
+        return((args, desc))
 
      #
      # Parse a comment block and merge the informations found in the
@@ -809,206 +813,206 @@ class CParser:
      #
     def mergeFunctionComment(self, name, description, quiet = 0):
         if name == 'main':
-           quiet = 1
+            quiet = 1
         if name[0:2] == '__':
-           quiet = 1
+            quiet = 1
 
-       (ret, args) = description
-       desc = ""
-       retdesc = ""
+        (ret, args) = description
+        desc = ""
+        retdesc = ""
 
         if self.comment == None:
-           if not quiet:
-               self.warning("Missing comment for function %s" % (name))
-           return(((ret[0], retdesc), args, desc))
+            if not quiet:
+                self.warning("Missing comment for function %s" % (name))
+            return(((ret[0], retdesc), args, desc))
         if self.comment[0] != '*':
-           if not quiet:
-               self.warning("Missing * in function comment for %s" % (name))
-           return(((ret[0], retdesc), args, desc))
-       lines = string.split(self.comment, '\n')
-       if lines[0] == '*':
-           del lines[0]
-       if lines[0] != "* %s:" % (name):
-           if not quiet:
-               self.warning("Misformatted function comment for %s" % (name))
-               self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
-           return(((ret[0], retdesc), args, desc))
-       del lines[0]
-       while lines[0] == '*':
-           del lines[0]
-       nbargs = len(args)
-       while len(lines) > 0 and lines[0][0:3] == '* @':
-           l = lines[0][3:]
-           try:
-               (arg, desc) = string.split(l, ':', 1)
-               desc=string.strip(desc)
-               arg=string.strip(arg)
+            if not quiet:
+                self.warning("Missing * in function comment for %s" % (name))
+            return(((ret[0], retdesc), args, desc))
+        lines = self.comment.split('\n')
+        if lines[0] == '*':
+            del lines[0]
+        if lines[0] != "* %s:" % (name):
+            if not quiet:
+                self.warning("Misformatted function comment for %s" % (name))
+                self.warning("  Expecting '* %s:' got '%s'" % (name, lines[0]))
+            return(((ret[0], retdesc), args, desc))
+        del lines[0]
+        while lines[0] == '*':
+            del lines[0]
+        nbargs = len(args)
+        while len(lines) > 0 and lines[0][0:3] == '* @':
+            l = lines[0][3:]
+            try:
+                (arg, desc) = l.split(':', 1)
+                desc=desc.strip()
+                arg=arg.strip()
             except:
-               if not quiet:
-                   self.warning("Misformatted function comment for %s" % (name))
-                   self.warning("  problem with '%s'" % (lines[0]))
-               del lines[0]
-               continue
-           del lines[0]
-           l = string.strip(lines[0])
-           while len(l) > 2 and l[0:3] != '* @':
-               while l[0] == '*':
-                   l = l[1:]
-               desc = desc + ' ' + string.strip(l)
-               del lines[0]
-               if len(lines) == 0:
-                   break
-               l = lines[0]
-           i = 0
-           while i < nbargs:
-               if args[i][1] == arg:
-                   args[i] = (args[i][0], arg, desc)
-                   break;
-               i = i + 1
-           if i >= nbargs:
-               if not quiet:
-                   self.warning("Unable to find arg %s from function comment for %s" % (
-                      arg, name))
-       while len(lines) > 0 and lines[0] == '*':
-           del lines[0]
-       desc = ""
-       while len(lines) > 0:
-           l = lines[0]
-           while len(l) > 0 and l[0] == '*':
-               l = l[1:]
-           l = string.strip(l)
-           if len(l) >= 6 and  l[0:6] == "return" or l[0:6] == "Return":
-               try:
-                   l = string.split(l, ' ', 1)[1]
-               except:
-                   l = ""
-               retdesc = string.strip(l)
-               del lines[0]
-               while len(lines) > 0:
-                   l = lines[0]
-                   while len(l) > 0 and l[0] == '*':
-                       l = l[1:]
-                   l = string.strip(l)
-                   retdesc = retdesc + " " + l
-                   del lines[0]
-           else:
-               desc = desc + " " + l
-               del lines[0]
-
-       retdesc = string.strip(retdesc)
-       desc = string.strip(desc)
-
-       if quiet == 0:
-            #
-            # report missing comments
-            #
-           i = 0
-           while i < nbargs:
-               if args[i][2] == None and args[i][0] != "void" and \
-                  ((args[i][1] != None) or (args[i][1] == '')):
-                   self.warning("Function comment for %s lacks description of arg %s" % (name, args[i][1]))
-               i = i + 1
-           if retdesc == "" and ret[0] != "void":
-               self.warning("Function comment for %s lacks description of return value" % (name))
-           if desc == "":
-               self.warning("Function comment for %s lacks description of the function" % (name))
-
-       return(((ret[0], retdesc), args, desc))
+                if not quiet:
+                    self.warning("Misformatted function comment for %s" % (name))
+                    self.warning("  problem with '%s'" % (lines[0]))
+                del lines[0]
+                continue
+            del lines[0]
+            l = lines[0].strip()
+            while len(l) > 2 and l[0:3] != '* @':
+                while l[0] == '*':
+                    l = l[1:]
+                desc = desc + ' ' + l.strip()
+                del lines[0]
+                if len(lines) == 0:
+                    break
+                l = lines[0]
+            i = 0
+            while i < nbargs:
+                if args[i][1] == arg:
+                    args[i] = (args[i][0], arg, desc)
+                    break;
+                i = i + 1
+            if i >= nbargs:
+                if not quiet:
+                    self.warning("Unable to find arg %s from function comment for %s" % (
+                       arg, name))
+        while len(lines) > 0 and lines[0] == '*':
+            del lines[0]
+        desc = ""
+        while len(lines) > 0:
+            l = lines[0]
+            while len(l) > 0 and l[0] == '*':
+                l = l[1:]
+            l = l.strip()
+            if len(l) >= 6 and  l[0:6] == "return" or l[0:6] == "Return":
+                try:
+                    l = l.split(' ', 1)[1]
+                except:
+                    l = ""
+                retdesc = l.strip()
+                del lines[0]
+                while len(lines) > 0:
+                    l = lines[0]
+                    while len(l) > 0 and l[0] == '*':
+                        l = l[1:]
+                    l = l.strip()
+                    retdesc = retdesc + " " + l
+                    del lines[0]
+            else:
+                desc = desc + " " + l
+                del lines[0]
+
+        retdesc = retdesc.strip()
+        desc = desc.strip()
+
+        if quiet == 0:
+             #
+             # report missing comments
+             #
+            i = 0
+            while i < nbargs:
+                if args[i][2] == None and args[i][0] != "void" and \
+                   ((args[i][1] != None) or (args[i][1] == '')):
+                    self.warning("Function comment for %s lacks description of arg %s" % (name, args[i][1]))
+                i = i + 1
+            if retdesc == "" and ret[0] != "void":
+                self.warning("Function comment for %s lacks description of return value" % (name))
+            if desc == "":
+                self.warning("Function comment for %s lacks description of the function" % (name))
+
+        return(((ret[0], retdesc), args, desc))
 
     def parsePreproc(self, token):
-       if debug:
-           print "=> preproc ", token, self.lexer.tokens
+        if debug:
+            print("=> preproc ", token, self.lexer.tokens)
         name = token[1]
-       if name == "#include":
-           token = self.lexer.token()
-           if token == None:
-               return None
-           if token[0] == 'preproc':
-               self.index_add(token[1], self.filename, not self.is_header,
-                               "include")
-               return self.lexer.token()
-           return token
-       if name == "#define":
-           token = self.lexer.token()
-           if token == None:
-               return None
-           if token[0] == 'preproc':
-                # TODO macros with arguments
-               name = token[1]
-               lst = []
-               token = self.lexer.token()
-               while token != None and token[0] == 'preproc' and \
-                     token[1][0] != '#':
-                   lst.append(token[1])
-                   token = self.lexer.token()
+        if name == "#include":
+            token = self.lexer.token()
+            if token == None:
+                return None
+            if token[0] == 'preproc':
+                self.index_add(token[1], self.filename, not self.is_header,
+                                "include")
+                return self.lexer.token()
+            return token
+        if name == "#define":
+            token = self.lexer.token()
+            if token == None:
+                return None
+            if token[0] == 'preproc':
+                 # TODO macros with arguments
+                name = token[1]
+                lst = []
+                token = self.lexer.token()
+                while token != None and token[0] == 'preproc' and \
+                      token[1][0] != '#':
+                    lst.append(token[1])
+                    token = self.lexer.token()
                 try:
-                   name = string.split(name, '(') [0]
+                    name = name.split('(') [0]
                 except:
                     pass
                 info = self.parseMacroComment(name, not self.is_header)
-               self.index_add(name, self.filename, not self.is_header,
-                               "macro", info)
-               return token
-
-       #
-       # Processing of conditionals modified by Bill 1/1/05
-       #
-       # We process conditionals (i.e. tokens from #ifdef, #ifndef,
-       # #if, #else and #endif) for headers and mainline code,
-       # store the ones from the header in libxml2-api.xml, and later
-       # (in the routine merge_public) verify that the two (header and
-       # mainline code) agree.
-       #
-       # There is a small problem with processing the headers. Some of
-       # the variables are not concerned with enabling / disabling of
-       # library functions (e.g. '__XML_PARSER_H__'), and we don't want
-       # them to be included in libxml2-api.xml, or involved in
-       # the check between the header and the mainline code.  To
-       # accomplish this, we ignore any conditional which doesn't include
-       # the string 'ENABLED'
-       #
-       if name == "#ifdef":
-           apstr = self.lexer.tokens[0][1]
-           try:
-               self.defines.append(apstr)
-               if string.find(apstr, 'ENABLED') != -1:
-                   self.conditionals.append("defined(%s)" % apstr)
-           except:
-               pass
-       elif name == "#ifndef":
-           apstr = self.lexer.tokens[0][1]
-           try:
-               self.defines.append(apstr)
-               if string.find(apstr, 'ENABLED') != -1:
-                   self.conditionals.append("!defined(%s)" % apstr)
-           except:
-               pass
-       elif name == "#if":
-           apstr = ""
-           for tok in self.lexer.tokens:
-               if apstr != "":
-                   apstr = apstr + " "
-               apstr = apstr + tok[1]
-           try:
-               self.defines.append(apstr)
-               if string.find(apstr, 'ENABLED') != -1:
-                   self.conditionals.append(apstr)
-           except:
-               pass
-       elif name == "#else":
-           if self.conditionals != [] and \
-              string.find(self.defines[-1], 'ENABLED') != -1:
-               self.conditionals[-1] = "!(%s)" % self.conditionals[-1]
-       elif name == "#endif":
-           if self.conditionals != [] and \
-              string.find(self.defines[-1], 'ENABLED') != -1:
-               self.conditionals = self.conditionals[:-1]
-           self.defines = self.defines[:-1]
-       token = self.lexer.token()
-       while token != None and token[0] == 'preproc' and \
-           token[1][0] != '#':
-           token = self.lexer.token()
-       return token
+                self.index_add(name, self.filename, not self.is_header,
+                                "macro", info)
+                return token
+
+        #
+        # Processing of conditionals modified by Bill 1/1/05
+        #
+        # We process conditionals (i.e. tokens from #ifdef, #ifndef,
+        # #if, #else and #endif) for headers and mainline code,
+        # store the ones from the header in libxml2-api.xml, and later
+        # (in the routine merge_public) verify that the two (header and
+        # mainline code) agree.
+        #
+        # There is a small problem with processing the headers. Some of
+        # the variables are not concerned with enabling / disabling of
+        # library functions (e.g. '__XML_PARSER_H__'), and we don't want
+        # them to be included in libxml2-api.xml, or involved in
+        # the check between the header and the mainline code.  To
+        # accomplish this, we ignore any conditional which doesn't include
+        # the string 'ENABLED'
+        #
+        if name == "#ifdef":
+            apstr = self.lexer.tokens[0][1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append("defined(%s)" % apstr)
+            except:
+                pass
+        elif name == "#ifndef":
+            apstr = self.lexer.tokens[0][1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append("!defined(%s)" % apstr)
+            except:
+                pass
+        elif name == "#if":
+            apstr = ""
+            for tok in self.lexer.tokens:
+                if apstr != "":
+                    apstr = apstr + " "
+                apstr = apstr + tok[1]
+            try:
+                self.defines.append(apstr)
+                if apstr.find('ENABLED') != -1:
+                    self.conditionals.append(apstr)
+            except:
+                pass
+        elif name == "#else":
+            if self.conditionals != [] and \
+               self.defines[-1].find('ENABLED') != -1:
+                self.conditionals[-1] = "!(%s)" % self.conditionals[-1]
+        elif name == "#endif":
+            if self.conditionals != [] and \
+               self.defines[-1].find('ENABLED') != -1:
+                self.conditionals = self.conditionals[:-1]
+            self.defines = self.defines[:-1]
+        token = self.lexer.token()
+        while token != None and token[0] == 'preproc' and \
+            token[1][0] != '#':
+            token = self.lexer.token()
+        return token
 
      #
      # token acquisition on top of the lexer, it handle internally
@@ -1019,89 +1023,89 @@ class CParser:
         global ignored_words
 
         token = self.lexer.token()
-       while token != None:
-           if token[0] == 'comment':
-               token = self.parseComment(token)
-               continue
-           elif token[0] == 'preproc':
-               token = self.parsePreproc(token)
-               continue
-           elif token[0] == "name" and token[1] == "__const":
-               token = ("name", "const")
-               return token
-           elif token[0] == "name" and token[1] == "__attribute":
-               token = self.lexer.token()
-               while token != None and token[1] != ";":
-                   token = self.lexer.token()
-               return token
-           elif token[0] == "name" and ignored_words.has_key(token[1]):
-               (n, info) = ignored_words[token[1]]
-               i = 0
-               while i < n:
-                   token = self.lexer.token()
-                   i = i + 1
-               token = self.lexer.token()
-               continue
-           else:
-               if debug:
-                   print "=> ", token
-               return token
-       return None
+        while token != None:
+            if token[0] == 'comment':
+                token = self.parseComment(token)
+                continue
+            elif token[0] == 'preproc':
+                token = self.parsePreproc(token)
+                continue
+            elif token[0] == "name" and token[1] == "__const":
+                token = ("name", "const")
+                return token
+            elif token[0] == "name" and token[1] == "__attribute":
+                token = self.lexer.token()
+                while token != None and token[1] != ";":
+                    token = self.lexer.token()
+                return token
+            elif token[0] == "name" and token[1] in ignored_words:
+                (n, info) = ignored_words[token[1]]
+                i = 0
+                while i < n:
+                    token = self.lexer.token()
+                    i = i + 1
+                token = self.lexer.token()
+                continue
+            else:
+                if debug:
+                    print("=> ", token)
+                return token
+        return None
 
      #
      # Parse a typedef, it records the type and its name.
      #
     def parseTypedef(self, token):
         if token == None:
-           return None
-       token = self.parseType(token)
-       if token == None:
-           self.error("parsing typedef")
-           return None
-       base_type = self.type
-       type = base_type
-        #self.debug("end typedef type", token)
-       while token != None:
-           if token[0] == "name":
-               name = token[1]
-               signature = self.signature
-               if signature != None:
-                   type = string.split(type, '(')[0]
-                   d = self.mergeFunctionComment(name,
-                           ((type, None), signature), 1)
-                   self.index_add(name, self.filename, not self.is_header,
-                                   "functype", d)
-               else:
-                   if base_type == "struct":
-                       self.index_add(name, self.filename, not self.is_header,
-                                       "struct", type)
-                       base_type = "struct " + name
-                   else:
-                       # TODO report missing or misformatted comments
-                       info = self.parseTypeComment(name, 1)
-                       self.index_add(name, self.filename, not self.is_header,
-                                   "typedef", type, info)
-               token = self.token()
-           else:
-               self.error("parsing typedef: expecting a name")
-               return token
-            #self.debug("end typedef", token)
-           if token != None and token[0] == 'sep' and token[1] == ',':
-               type = base_type
-               token = self.token()
-               while token != None and token[0] == "op":
-                   type = type + token[1]
-                   token = self.token()
-           elif token != None and token[0] == 'sep' and token[1] == ';':
-               break;
-           elif token != None and token[0] == 'name':
-               type = base_type
-               continue;
-           else:
-               self.error("parsing typedef: expecting ';'", token)
-               return token
-       token = self.token()
-       return token
+            return None
+        token = self.parseType(token)
+        if token == None:
+            self.error("parsing typedef")
+            return None
+        base_type = self.type
+        type = base_type
+         #self.debug("end typedef type", token)
+        while token != None:
+            if token[0] == "name":
+                name = token[1]
+                signature = self.signature
+                if signature != None:
+                    type = type.split('(')[0]
+                    d = self.mergeFunctionComment(name,
+                            ((type, None), signature), 1)
+                    self.index_add(name, self.filename, not self.is_header,
+                                    "functype", d)
+                else:
+                    if base_type == "struct":
+                        self.index_add(name, self.filename, not self.is_header,
+                                        "struct", type)
+                        base_type = "struct " + name
+                    else:
+                        # TODO report missing or misformatted comments
+                        info = self.parseTypeComment(name, 1)
+                        self.index_add(name, self.filename, not self.is_header,
+                                    "typedef", type, info)
+                token = self.token()
+            else:
+                self.error("parsing typedef: expecting a name")
+                return token
+             #self.debug("end typedef", token)
+            if token != None and token[0] == 'sep' and token[1] == ',':
+                type = base_type
+                token = self.token()
+                while token != None and token[0] == "op":
+                    type = type + token[1]
+                    token = self.token()
+            elif token != None and token[0] == 'sep' and token[1] == ';':
+                break;
+            elif token != None and token[0] == 'name':
+                type = base_type
+                continue;
+            else:
+                self.error("parsing typedef: expecting ';'", token)
+                return token
+        token = self.token()
+        return token
 
      #
      # Parse a C code block, used for functions it parse till
@@ -1109,138 +1113,138 @@ class CParser:
      #
     def parseBlock(self, token):
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               self.comment = None
-               token = self.token()
-               return token
-           else:
-               if self.collect_ref == 1:
-                   oldtok = token
-                   token = self.token()
-                   if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
-                       if token[0] == "sep" and token[1] == "(":
-                           self.index_add_ref(oldtok[1], self.filename,
-                                               0, "function")
-                           token = self.token()
-                       elif token[0] == "name":
-                           token = self.token()
-                           if token[0] == "sep" and (token[1] == ";" or
-                              token[1] == "," or token[1] == "="):
-                               self.index_add_ref(oldtok[1], self.filename,
-                                                   0, "type")
-                   elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
-                       self.index_add_ref(oldtok[1], self.filename,
-                                           0, "typedef")
-                   elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
-                       self.index_add_ref(oldtok[1], self.filename,
-                                           0, "typedef")
-
-               else:
-                   token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                self.comment = None
+                token = self.token()
+                return token
+            else:
+                if self.collect_ref == 1:
+                    oldtok = token
+                    token = self.token()
+                    if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
+                        if token[0] == "sep" and token[1] == "(":
+                            self.index_add_ref(oldtok[1], self.filename,
+                                                0, "function")
+                            token = self.token()
+                        elif token[0] == "name":
+                            token = self.token()
+                            if token[0] == "sep" and (token[1] == ";" or
+                               token[1] == "," or token[1] == "="):
+                                self.index_add_ref(oldtok[1], self.filename,
+                                                    0, "type")
+                    elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
+                        self.index_add_ref(oldtok[1], self.filename,
+                                            0, "typedef")
+                    elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
+                        self.index_add_ref(oldtok[1], self.filename,
+                                            0, "typedef")
+
+                else:
+                    token = self.token()
+        return token
 
      #
      # Parse a C struct definition till the balancing }
      #
     def parseStruct(self, token):
         fields = []
-        #self.debug("start parseStruct", token)
+         #self.debug("start parseStruct", token)
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               self.struct_fields = fields
-                #self.debug("end parseStruct", token)
-                #print fields
-               token = self.token()
-               return token
-           else:
-               base_type = self.type
-                #self.debug("before parseType", token)
-               token = self.parseType(token)
-                #self.debug("after parseType", token)
-               if token != None and token[0] == "name":
-                   fname = token[1]
-                   token = self.token()
-                   if token[0] == "sep" and token[1] == ";":
-                       self.comment = None
-                       token = self.token()
-                       fields.append((self.type, fname, self.comment))
-                       self.comment = None
-                   else:
-                       self.error("parseStruct: expecting ;", token)
-               elif token != None and token[0] == "sep" and token[1] == "{":
-                   token = self.token()
-                   token = self.parseTypeBlock(token)
-                   if token != None and token[0] == "name":
-                       token = self.token()
-                   if token != None and token[0] == "sep" and token[1] == ";":
-                       token = self.token()
-                   else:
-                       self.error("parseStruct: expecting ;", token)
-               else:
-                   self.error("parseStruct: name", token)
-                   token = self.token()
-               self.type = base_type;
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                self.struct_fields = fields
+                 #self.debug("end parseStruct", token)
+                 #print fields
+                token = self.token()
+                return token
+            else:
+                base_type = self.type
+                 #self.debug("before parseType", token)
+                token = self.parseType(token)
+                 #self.debug("after parseType", token)
+                if token != None and token[0] == "name":
+                    fname = token[1]
+                    token = self.token()
+                    if token[0] == "sep" and token[1] == ";":
+                        self.comment = None
+                        token = self.token()
+                        fields.append((self.type, fname, self.comment))
+                        self.comment = None
+                    else:
+                        self.error("parseStruct: expecting ;", token)
+                elif token != None and token[0] == "sep" and token[1] == "{":
+                    token = self.token()
+                    token = self.parseTypeBlock(token)
+                    if token != None and token[0] == "name":
+                        token = self.token()
+                    if token != None and token[0] == "sep" and token[1] == ";":
+                        token = self.token()
+                    else:
+                        self.error("parseStruct: expecting ;", token)
+                else:
+                    self.error("parseStruct: name", token)
+                    token = self.token()
+                self.type = base_type;
         self.struct_fields = fields
-        #self.debug("end parseStruct", token)
-        #print fields
-       return token
+         #self.debug("end parseStruct", token)
+         #print fields
+        return token
 
      #
      # Parse a C enum block, parse till the balancing }
      #
     def parseEnumBlock(self, token):
         self.enums = []
-       name = None
-       self.comment = None
-       comment = ""
-       value = "0"
+        name = None
+        self.comment = None
+        comment = ""
+        value = "0"
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               if name != None:
-                   if self.comment != None:
-                       comment = self.comment
-                       self.comment = None
-                   self.enums.append((name, value, comment))
-               token = self.token()
-               return token
-           elif token[0] == "name":
-                   if name != None:
-                       if self.comment != None:
-                           comment = string.strip(self.comment)
-                           self.comment = None
-                       self.enums.append((name, value, comment))
-                   name = token[1]
-                   comment = ""
-                   token = self.token()
-                   if token[0] == "op" and token[1][0] == "=":
-                       value = ""
-                       if len(token[1]) > 1:
-                           value = token[1][1:]
-                       token = self.token()
-                       while token[0] != "sep" or (token[1] != ',' and
-                             token[1] != '}'):
-                           value = value + token[1]
-                           token = self.token()
-                   else:
-                       try:
-                           value = "%d" % (int(value) + 1)
-                       except:
-                           self.warning("Failed to compute value of enum %s" % (name))
-                           value=""
-                   if token[0] == "sep" and token[1] == ",":
-                       token = self.token()
-           else:
-               token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                if name != None:
+                    if self.comment != None:
+                        comment = self.comment
+                        self.comment = None
+                    self.enums.append((name, value, comment))
+                token = self.token()
+                return token
+            elif token[0] == "name":
+                    if name != None:
+                        if self.comment != None:
+                            comment = self.comment.strip()
+                            self.comment = None
+                        self.enums.append((name, value, comment))
+                    name = token[1]
+                    comment = ""
+                    token = self.token()
+                    if token[0] == "op" and token[1][0] == "=":
+                        value = ""
+                        if len(token[1]) > 1:
+                            value = token[1][1:]
+                        token = self.token()
+                        while token[0] != "sep" or (token[1] != ',' and
+                              token[1] != '}'):
+                            value = value + token[1]
+                            token = self.token()
+                    else:
+                        try:
+                            value = "%d" % (int(value) + 1)
+                        except:
+                            self.warning("Failed to compute value of enum %s" % (name))
+                            value=""
+                    if token[0] == "sep" and token[1] == ",":
+                        token = self.token()
+            else:
+                token = self.token()
+        return token
 
      #
      # Parse a C definition block, used for structs it parse till
@@ -1248,15 +1252,15 @@ class CParser:
      #
     def parseTypeBlock(self, token):
         while token != None:
-           if token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseTypeBlock(token)
-           elif token[0] == "sep" and token[1] == "}":
-               token = self.token()
-               return token
-           else:
-               token = self.token()
-       return token
+            if token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseTypeBlock(token)
+            elif token[0] == "sep" and token[1] == "}":
+                token = self.token()
+                return token
+            else:
+                token = self.token()
+        return token
 
      #
      # Parse a type: the fact that the type name can either occur after
@@ -1265,200 +1269,200 @@ class CParser:
      #
     def parseType(self, token):
         self.type = ""
-       self.struct_fields = []
+        self.struct_fields = []
         self.signature = None
-       if token == None:
-           return token
-
-       while token[0] == "name" and (
-             token[1] == "const" or \
-             token[1] == "unsigned" or \
-             token[1] == "signed"):
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           token = self.token()
+        if token == None:
+            return token
+
+        while token[0] == "name" and (
+              token[1] == "const" or \
+              token[1] == "unsigned" or \
+              token[1] == "signed"):
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            token = self.token()
 
         if token[0] == "name" and (token[1] == "long" or token[1] == "short"):
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           if token[0] == "name" and token[1] == "int":
-               if self.type == "":
-                   self.type = tmp[1]
-               else:
-                   self.type = self.type + " " + tmp[1]
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            if token[0] == "name" and token[1] == "int":
+                if self.type == "":
+                    self.type = tmp[1]
+                else:
+                    self.type = self.type + " " + tmp[1]
 
         elif token[0] == "name" and token[1] == "struct":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           token = self.token()
-           nametok = None
-           if token[0] == "name":
-               nametok = token
-               token = self.token()
-           if token != None and token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseStruct(token)
-           elif token != None and token[0] == "op" and token[1] == "*":
-               self.type = self.type + " " + nametok[1] + " *"
-               token = self.token()
-               while token != None and token[0] == "op" and token[1] == "*":
-                   self.type = self.type + " *"
-                   token = self.token()
-               if token[0] == "name":
-                   nametok = token
-                   token = self.token()
-               else:
-                   self.error("struct : expecting name", token)
-                   return token
-           elif token != None and token[0] == "name" and nametok != None:
-               self.type = self.type + " " + nametok[1]
-               return token
-
-           if nametok != None:
-               self.lexer.push(token)
-               token = nametok
-           return token
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            token = self.token()
+            nametok = None
+            if token[0] == "name":
+                nametok = token
+                token = self.token()
+            if token != None and token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseStruct(token)
+            elif token != None and token[0] == "op" and token[1] == "*":
+                self.type = self.type + " " + nametok[1] + " *"
+                token = self.token()
+                while token != None and token[0] == "op" and token[1] == "*":
+                    self.type = self.type + " *"
+                    token = self.token()
+                if token[0] == "name":
+                    nametok = token
+                    token = self.token()
+                else:
+                    self.error("struct : expecting name", token)
+                    return token
+            elif token != None and token[0] == "name" and nametok != None:
+                self.type = self.type + " " + nametok[1]
+                return token
+
+            if nametok != None:
+                self.lexer.push(token)
+                token = nametok
+            return token
 
         elif token[0] == "name" and token[1] == "enum":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-           self.enums = []
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == "{":
-               token = self.token()
-               token = self.parseEnumBlock(token)
-           else:
-               self.error("parsing enum: expecting '{'", token)
-           enum_type = None
-           if token != None and token[0] != "name":
-               self.lexer.push(token)
-               token = ("name", "enum")
-           else:
-               enum_type = token[1]
-           for enum in self.enums:
-               self.index_add(enum[0], self.filename,
-                              not self.is_header, "enum",
-                              (enum[1], enum[2], enum_type))
-           return token
-
-       elif token[0] == "name":
-           if self.type == "":
-               self.type = token[1]
-           else:
-               self.type = self.type + " " + token[1]
-       else:
-           self.error("parsing type %s: expecting a name" % (self.type),
-                      token)
-           return token
-       token = self.token()
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+            self.enums = []
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == "{":
+                token = self.token()
+                token = self.parseEnumBlock(token)
+            else:
+                self.error("parsing enum: expecting '{'", token)
+            enum_type = None
+            if token != None and token[0] != "name":
+                self.lexer.push(token)
+                token = ("name", "enum")
+            else:
+                enum_type = token[1]
+            for enum in self.enums:
+                self.index_add(enum[0], self.filename,
+                               not self.is_header, "enum",
+                               (enum[1], enum[2], enum_type))
+            return token
+
+        elif token[0] == "name":
+            if self.type == "":
+                self.type = token[1]
+            else:
+                self.type = self.type + " " + token[1]
+        else:
+            self.error("parsing type %s: expecting a name" % (self.type),
+                       token)
+            return token
+        token = self.token()
         while token != None and (token[0] == "op" or
-             token[0] == "name" and token[1] == "const"):
-           self.type = self.type + " " + token[1]
-           token = self.token()
-
-        #
-        # if there is a parenthesis here, this means a function type
-        #
-       if token != None and token[0] == "sep" and token[1] == '(':
-           self.type = self.type + token[1]
-           token = self.token()
-           while token != None and token[0] == "op" and token[1] == '*':
-               self.type = self.type + token[1]
-               token = self.token()
-           if token == None or token[0] != "name" :
-               self.error("parsing function type, name expected", token);
-               return token
-           self.type = self.type + token[1]
-           nametok = token
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == ')':
-               self.type = self.type + token[1]
-               token = self.token()
-               if token != None and token[0] == "sep" and token[1] == '(':
-                   token = self.token()
-                   type = self.type;
-                   token = self.parseSignature(token);
-                   self.type = type;
-               else:
-                   self.error("parsing function type, '(' expected", token);
-                   return token
-           else:
-               self.error("parsing function type, ')' expected", token);
-               return token
-           self.lexer.push(token)
-           token = nametok
-           return token
+              token[0] == "name" and token[1] == "const"):
+            self.type = self.type + " " + token[1]
+            token = self.token()
+
+         #
+         # if there is a parenthesis here, this means a function type
+         #
+        if token != None and token[0] == "sep" and token[1] == '(':
+            self.type = self.type + token[1]
+            token = self.token()
+            while token != None and token[0] == "op" and token[1] == '*':
+                self.type = self.type + token[1]
+                token = self.token()
+            if token == None or token[0] != "name" :
+                self.error("parsing function type, name expected", token);
+                return token
+            self.type = self.type + token[1]
+            nametok = token
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == ')':
+                self.type = self.type + token[1]
+                token = self.token()
+                if token != None and token[0] == "sep" and token[1] == '(':
+                    token = self.token()
+                    type = self.type;
+                    token = self.parseSignature(token);
+                    self.type = type;
+                else:
+                    self.error("parsing function type, '(' expected", token);
+                    return token
+            else:
+                self.error("parsing function type, ')' expected", token);
+                return token
+            self.lexer.push(token)
+            token = nametok
+            return token
 
          #
-        # do some lookahead for arrays
-        #
-       if token != None and token[0] == "name":
-           nametok = token
-           token = self.token()
-           if token != None and token[0] == "sep" and token[1] == '[':
-               self.type = self.type + nametok[1]
-               while token != None and token[0] == "sep" and token[1] == '[':
-                   self.type = self.type + token[1]
-                   token = self.token()
-                   while token != None and token[0] != 'sep' and \
-                         token[1] != ']' and token[1] != ';':
-                       self.type = self.type + token[1]
-                       token = self.token()
-               if token != None and token[0] == 'sep' and token[1] == ']':
-                   self.type = self.type + token[1]
-                   token = self.token()
-               else:
-                   self.error("parsing array type, ']' expected", token);
-                   return token
-           elif token != None and token[0] == "sep" and token[1] == ':':
-                # remove :12 in case it's a limited int size
-               token = self.token()
-               token = self.token()
-           self.lexer.push(token)
-           token = nametok
-
-       return token
+         # do some lookahead for arrays
+         #
+        if token != None and token[0] == "name":
+            nametok = token
+            token = self.token()
+            if token != None and token[0] == "sep" and token[1] == '[':
+                self.type = self.type + nametok[1]
+                while token != None and token[0] == "sep" and token[1] == '[':
+                    self.type = self.type + token[1]
+                    token = self.token()
+                    while token != None and token[0] != 'sep' and \
+                          token[1] != ']' and token[1] != ';':
+                        self.type = self.type + token[1]
+                        token = self.token()
+                if token != None and token[0] == 'sep' and token[1] == ']':
+                    self.type = self.type + token[1]
+                    token = self.token()
+                else:
+                    self.error("parsing array type, ']' expected", token);
+                    return token
+            elif token != None and token[0] == "sep" and token[1] == ':':
+                 # remove :12 in case it's a limited int size
+                token = self.token()
+                token = self.token()
+            self.lexer.push(token)
+            token = nametok
+
+        return token
 
      #
      # Parse a signature: '(' has been parsed and we scan the type definition
      #    up to the ')' included
     def parseSignature(self, token):
         signature = []
-       if token != None and token[0] == "sep" and token[1] == ')':
-           self.signature = []
-           token = self.token()
-           return token
-       while token != None:
-           token = self.parseType(token)
-           if token != None and token[0] == "name":
-               signature.append((self.type, token[1], None))
-               token = self.token()
-           elif token != None and token[0] == "sep" and token[1] == ',':
-               token = self.token()
-               continue
-           elif token != None and token[0] == "sep" and token[1] == ')':
-                # only the type was provided
-               if self.type == "...":
-                   signature.append((self.type, "...", None))
-               else:
-                   signature.append((self.type, None, None))
-           if token != None and token[0] == "sep":
-               if token[1] == ',':
-                   token = self.token()
-                   continue
-               elif token[1] == ')':
-                   token = self.token()
-                   break
-       self.signature = signature
-       return token
+        if token != None and token[0] == "sep" and token[1] == ')':
+            self.signature = []
+            token = self.token()
+            return token
+        while token != None:
+            token = self.parseType(token)
+            if token != None and token[0] == "name":
+                signature.append((self.type, token[1], None))
+                token = self.token()
+            elif token != None and token[0] == "sep" and token[1] == ',':
+                token = self.token()
+                continue
+            elif token != None and token[0] == "sep" and token[1] == ')':
+                 # only the type was provided
+                if self.type == "...":
+                    signature.append((self.type, "...", None))
+                else:
+                    signature.append((self.type, None, None))
+            if token != None and token[0] == "sep":
+                if token[1] == ',':
+                    token = self.token()
+                    continue
+                elif token[1] == ')':
+                    token = self.token()
+                    break
+        self.signature = signature
+        return token
 
      #
      # Parse a global definition, be it a type, variable or function
@@ -1467,134 +1471,134 @@ class CParser:
     def parseGlobal(self, token):
         static = 0
         if token[1] == 'extern':
-           token = self.token()
-           if token == None:
-               return token
-           if token[0] == 'string':
-               if token[1] == 'C':
-                   token = self.token()
-                   if token == None:
-                       return token
-                   if token[0] == 'sep' and token[1] == "{":
-                       token = self.token()
-#                       print 'Entering extern "C line ', self.lineno()
-                       while token != None and (token[0] != 'sep' or
-                             token[1] != "}"):
-                           if token[0] == 'name':
-                               token = self.parseGlobal(token)
-                           else:
-                               self.error(
-                                "token %s %s unexpected at the top level" % (
-                                       token[0], token[1]))
-                               token = self.parseGlobal(token)
-#                       print 'Exiting extern "C" line', self.lineno()
-                       token = self.token()
-                       return token
-               else:
-                   return token
-       elif token[1] == 'static':
-           static = 1
-           token = self.token()
-           if token == None or  token[0] != 'name':
-               return token
-
-       if token[1] == 'typedef':
-           token = self.token()
-           return self.parseTypedef(token)
-       else:
-           token = self.parseType(token)
-           type_orig = self.type
-       if token == None or token[0] != "name":
-           return token
-       type = type_orig
-       self.name = token[1]
-       token = self.token()
-       while token != None and (token[0] == "sep" or token[0] == "op"):
-           if token[0] == "sep":
-               if token[1] == "[":
-                   type = type + token[1]
-                   token = self.token()
-                   while token != None and (token[0] != "sep" or \
-                         token[1] != ";"):
-                       type = type + token[1]
-                       token = self.token()
-
-           if token != None and token[0] == "op" and token[1] == "=":
-                #
-                # Skip the initialization of the variable
-                #
-               token = self.token()
-               if token[0] == 'sep' and token[1] == '{':
-                   token = self.token()
-                   token = self.parseBlock(token)
-               else:
-                   self.comment = None
-                   while token != None and (token[0] != "sep" or \
-                         (token[1] != ';' and token[1] != ',')):
-                           token = self.token()
-               self.comment = None
-               if token == None or token[0] != "sep" or (token[1] != ';' and
-                  token[1] != ','):
-                   self.error("missing ';' or ',' after value")
-
-           if token != None and token[0] == "sep":
-               if token[1] == ";":
-                   self.comment = None
-                   token = self.token()
-                   if type == "struct":
-                       self.index_add(self.name, self.filename,
-                            not self.is_header, "struct", self.struct_fields)
-                   else:
-                       self.index_add(self.name, self.filename,
-                            not self.is_header, "variable", type)
-                   break
-               elif token[1] == "(":
-                   token = self.token()
-                   token = self.parseSignature(token)
-                   if token == None:
-                       return None
-                   if token[0] == "sep" and token[1] == ";":
-                       d = self.mergeFunctionComment(self.name,
-                               ((type, None), self.signature), 1)
-                       self.index_add(self.name, self.filename, static,
-                                       "function", d)
-                       token = self.token()
-                   elif token[0] == "sep" and token[1] == "{":
-                       d = self.mergeFunctionComment(self.name,
-                               ((type, None), self.signature), static)
-                       self.index_add(self.name, self.filename, static,
-                                       "function", d)
-                       token = self.token()
-                       token = self.parseBlock(token);
-               elif token[1] == ',':
-                   self.comment = None
-                   self.index_add(self.name, self.filename, static,
-                                   "variable", type)
-                   type = type_orig
-                   token = self.token()
-                   while token != None and token[0] == "sep":
-                       type = type + token[1]
-                       token = self.token()
-                   if token != None and token[0] == "name":
-                       self.name = token[1]
-                       token = self.token()
-               else:
-                   break
-
-       return token
+            token = self.token()
+            if token == None:
+                return token
+            if token[0] == 'string':
+                if token[1] == 'C':
+                    token = self.token()
+                    if token == None:
+                        return token
+                    if token[0] == 'sep' and token[1] == "{":
+                        token = self.token()
+#                         print 'Entering extern "C line ', self.lineno()
+                        while token != None and (token[0] != 'sep' or
+                              token[1] != "}"):
+                            if token[0] == 'name':
+                                token = self.parseGlobal(token)
+                            else:
+                                self.error(
+                                 "token %s %s unexpected at the top level" % (
+                                        token[0], token[1]))
+                                token = self.parseGlobal(token)
+#                         print 'Exiting extern "C" line', self.lineno()
+                        token = self.token()
+                        return token
+                else:
+                    return token
+        elif token[1] == 'static':
+            static = 1
+            token = self.token()
+            if token == None or  token[0] != 'name':
+                return token
+
+        if token[1] == 'typedef':
+            token = self.token()
+            return self.parseTypedef(token)
+        else:
+            token = self.parseType(token)
+            type_orig = self.type
+        if token == None or token[0] != "name":
+            return token
+        type = type_orig
+        self.name = token[1]
+        token = self.token()
+        while token != None and (token[0] == "sep" or token[0] == "op"):
+            if token[0] == "sep":
+                if token[1] == "[":
+                    type = type + token[1]
+                    token = self.token()
+                    while token != None and (token[0] != "sep" or \
+                          token[1] != ";"):
+                        type = type + token[1]
+                        token = self.token()
+
+            if token != None and token[0] == "op" and token[1] == "=":
+                 #
+                 # Skip the initialization of the variable
+                 #
+                token = self.token()
+                if token[0] == 'sep' and token[1] == '{':
+                    token = self.token()
+                    token = self.parseBlock(token)
+                else:
+                    self.comment = None
+                    while token != None and (token[0] != "sep" or \
+                          (token[1] != ';' and token[1] != ',')):
+                            token = self.token()
+                self.comment = None
+                if token == None or token[0] != "sep" or (token[1] != ';' and
+                   token[1] != ','):
+                    self.error("missing ';' or ',' after value")
+
+            if token != None and token[0] == "sep":
+                if token[1] == ";":
+                    self.comment = None
+                    token = self.token()
+                    if type == "struct":
+                        self.index_add(self.name, self.filename,
+                             not self.is_header, "struct", self.struct_fields)
+                    else:
+                        self.index_add(self.name, self.filename,
+                             not self.is_header, "variable", type)
+                    break
+                elif token[1] == "(":
+                    token = self.token()
+                    token = self.parseSignature(token)
+                    if token == None:
+                        return None
+                    if token[0] == "sep" and token[1] == ";":
+                        d = self.mergeFunctionComment(self.name,
+                                ((type, None), self.signature), 1)
+                        self.index_add(self.name, self.filename, static,
+                                        "function", d)
+                        token = self.token()
+                    elif token[0] == "sep" and token[1] == "{":
+                        d = self.mergeFunctionComment(self.name,
+                                ((type, None), self.signature), static)
+                        self.index_add(self.name, self.filename, static,
+                                        "function", d)
+                        token = self.token()
+                        token = self.parseBlock(token);
+                elif token[1] == ',':
+                    self.comment = None
+                    self.index_add(self.name, self.filename, static,
+                                    "variable", type)
+                    type = type_orig
+                    token = self.token()
+                    while token != None and token[0] == "sep":
+                        type = type + token[1]
+                        token = self.token()
+                    if token != None and token[0] == "name":
+                        self.name = token[1]
+                        token = self.token()
+                else:
+                    break
+
+        return token
 
     def parse(self):
         self.warning("Parsing %s" % (self.filename))
         token = self.token()
-       while token != None:
+        while token != None:
             if token[0] == 'name':
-               token = self.parseGlobal(token)
+                token = self.parseGlobal(token)
             else:
-               self.error("token %s %s unexpected at the top level" % (
-                      token[0], token[1]))
-               token = self.parseGlobal(token)
-               return
-       self.parseTopComment(self.top_comment)
+                self.error("token %s %s unexpected at the top level" % (
+                       token[0], token[1]))
+                token = self.parseGlobal(token)
+                return
+        self.parseTopComment(self.top_comment)
         return self.index
 
 
@@ -1603,488 +1607,490 @@ class docBuilder:
     def __init__(self, name, directories=['.'], excludes=[]):
         self.name = name
         self.directories = directories
-       self.excludes = excludes + ignored_files.keys()
-       self.modules = {}
-       self.headers = {}
-       self.idx = index()
+        self.excludes = excludes + list(ignored_files.keys())
+        self.modules = {}
+        self.headers = {}
+        self.idx = index()
         self.xref = {}
-       self.index = {}
-       if name == 'libxml2':
-           self.basename = 'libxml'
-       else:
-           self.basename = name
+        self.index = {}
+        if name == 'libxml2':
+            self.basename = 'libxml'
+        else:
+            self.basename = name
 
     def indexString(self, id, str):
-       if str == None:
-           return
-       str = string.replace(str, "'", ' ')
-       str = string.replace(str, '"', ' ')
-       str = string.replace(str, "/", ' ')
-       str = string.replace(str, '*', ' ')
-       str = string.replace(str, "[", ' ')
-       str = string.replace(str, "]", ' ')
-       str = string.replace(str, "(", ' ')
-       str = string.replace(str, ")", ' ')
-       str = string.replace(str, "<", ' ')
-       str = string.replace(str, '>', ' ')
-       str = string.replace(str, "&", ' ')
-       str = string.replace(str, '#', ' ')
-       str = string.replace(str, ",", ' ')
-       str = string.replace(str, '.', ' ')
-       str = string.replace(str, ';', ' ')
-       tokens = string.split(str)
-       for token in tokens:
-           try:
-               c = token[0]
-               if string.find(string.letters, c) < 0:
-                   pass
-               elif len(token) < 3:
-                   pass
-               else:
-                   lower = string.lower(token)
-                   # TODO: generalize this a bit
-                   if lower == 'and' or lower == 'the':
-                       pass
-                   elif self.xref.has_key(token):
-                       self.xref[token].append(id)
-                   else:
-                       self.xref[token] = [id]
-           except:
-               pass
+        if str == None:
+            return
+        str = str.replace("'", ' ')
+        str = str.replace('"', ' ')
+        str = str.replace("/", ' ')
+        str = str.replace('*', ' ')
+        str = str.replace("[", ' ')
+        str = str.replace("]", ' ')
+        str = str.replace("(", ' ')
+        str = str.replace(")", ' ')
+        str = str.replace("<", ' ')
+        str = str.replace('>', ' ')
+        str = str.replace("&", ' ')
+        str = str.replace('#', ' ')
+        str = str.replace(",", ' ')
+        str = str.replace('.', ' ')
+        str = str.replace(';', ' ')
+        tokens = str.split()
+        for token in tokens:
+            try:
+                c = token[0]
+                if string.ascii_letters.find(c) < 0:
+                    pass
+                elif len(token) < 3:
+                    pass
+                else:
+                    lower = token.lower()
+                    # TODO: generalize this a bit
+                    if lower == 'and' or lower == 'the':
+                        pass
+                    elif token in self.xref:
+                        self.xref[token].append(id)
+                    else:
+                        self.xref[token] = [id]
+            except:
+                pass
 
     def analyze(self):
-        print "Project %s : %d headers, %d modules" % (self.name, len(self.headers.keys()), len(self.modules.keys()))
-       self.idx.analyze()
+        print("Project %s : %d headers, %d modules" % (self.name, len(list(self.headers.keys())), len(list(self.modules.keys()))))
+        self.idx.analyze()
 
     def scanHeaders(self):
-       for header in self.headers.keys():
-           parser = CParser(header)
-           idx = parser.parse()
-           self.headers[header] = idx;
-           self.idx.merge(idx)
+        for header in list(self.headers.keys()):
+            parser = CParser(header)
+            idx = parser.parse()
+            self.headers[header] = idx;
+            self.idx.merge(idx)
 
     def scanModules(self):
-       for module in self.modules.keys():
-           parser = CParser(module)
-           idx = parser.parse()
-           # idx.analyze()
-           self.modules[module] = idx
-           self.idx.merge_public(idx)
+        for module in list(self.modules.keys()):
+            parser = CParser(module)
+            idx = parser.parse()
+            # idx.analyze()
+            self.modules[module] = idx
+            self.idx.merge_public(idx)
 
     def scan(self):
         for directory in self.directories:
-           files = glob.glob(directory + "/*.c")
-           for file in files:
-               skip = 0
-               for excl in self.excludes:
-                   if string.find(file, excl) != -1:
-                       skip = 1;
-                       break
-               if skip == 0:
-                   self.modules[file] = None;
-           files = glob.glob(directory + "/*.h")
-           for file in files:
-               skip = 0
-               for excl in self.excludes:
-                   if string.find(file, excl) != -1:
-                       skip = 1;
-                       break
-               if skip == 0:
-                   self.headers[file] = None;
-       self.scanHeaders()
-       self.scanModules()
+            files = glob.glob(directory + "/*.c")
+            for file in files:
+                skip = 0
+                for excl in self.excludes:
+                    if file.find(excl) != -1:
+                        print("Skipping %s" % file)
+                        skip = 1
+                        break
+                if skip == 0:
+                    self.modules[file] = None;
+            files = glob.glob(directory + "/*.h")
+            for file in files:
+                skip = 0
+                for excl in self.excludes:
+                    if file.find(excl) != -1:
+                        print("Skipping %s" % file)
+                        skip = 1
+                        break
+                if skip == 0:
+                    self.headers[file] = None;
+        self.scanHeaders()
+        self.scanModules()
 
     def modulename_file(self, file):
         module = os.path.basename(file)
-       if module[-2:] == '.h':
-           module = module[:-2]
-       elif module[-2:] == '.c':
-           module = module[:-2]
-       return module
+        if module[-2:] == '.h':
+            module = module[:-2]
+        elif module[-2:] == '.c':
+            module = module[:-2]
+        return module
 
     def serialize_enum(self, output, name):
         id = self.idx.enums[name]
         output.write("    <enum name='%s' file='%s'" % (name,
-                    self.modulename_file(id.header)))
-       if id.info != None:
-           info = id.info
-           if info[0] != None and info[0] != '':
-               try:
-                   val = eval(info[0])
-               except:
-                   val = info[0]
-               output.write(" value='%s'" % (val));
-           if info[2] != None and info[2] != '':
-               output.write(" type='%s'" % info[2]);
-           if info[1] != None and info[1] != '':
-               output.write(" info='%s'" % escape(info[1]));
+                     self.modulename_file(id.header)))
+        if id.info != None:
+            info = id.info
+            if info[0] != None and info[0] != '':
+                try:
+                    val = eval(info[0])
+                except:
+                    val = info[0]
+                output.write(" value='%s'" % (val));
+            if info[2] != None and info[2] != '':
+                output.write(" type='%s'" % info[2]);
+            if info[1] != None and info[1] != '':
+                output.write(" info='%s'" % escape(info[1]));
         output.write("/>\n")
 
     def serialize_macro(self, output, name):
         id = self.idx.macros[name]
         output.write("    <macro name='%s' file='%s'>\n" % (name,
-                    self.modulename_file(id.header)))
-       if id.info != None:
+                     self.modulename_file(id.header)))
+        if id.info != None:
             try:
-               (args, desc) = id.info
-               if desc != None and desc != "":
-                   output.write("      <info>%s</info>\n" % (escape(desc)))
-                   self.indexString(name, desc)
-               for arg in args:
-                   (name, desc) = arg
-                   if desc != None and desc != "":
-                       output.write("      <arg name='%s' info='%s'/>\n" % (
-                                    name, escape(desc)))
-                       self.indexString(name, desc)
-                   else:
-                       output.write("      <arg name='%s'/>\n" % (name))
+                (args, desc) = id.info
+                if desc != None and desc != "":
+                    output.write("      <info>%s</info>\n" % (escape(desc)))
+                    self.indexString(name, desc)
+                for arg in args:
+                    (name, desc) = arg
+                    if desc != None and desc != "":
+                        output.write("      <arg name='%s' info='%s'/>\n" % (
+                                     name, escape(desc)))
+                        self.indexString(name, desc)
+                    else:
+                        output.write("      <arg name='%s'/>\n" % (name))
             except:
                 pass
         output.write("    </macro>\n")
 
     def serialize_typedef(self, output, name):
         id = self.idx.typedefs[name]
-       if id.info[0:7] == 'struct ':
-           output.write("    <struct name='%s' file='%s' type='%s'" % (
-                    name, self.modulename_file(id.header), id.info))
-           name = id.info[7:]
-           if self.idx.structs.has_key(name) and ( \
-              type(self.idx.structs[name].info) == type(()) or
-               type(self.idx.structs[name].info) == type([])):
-               output.write(">\n");
-               try:
-                   for field in self.idx.structs[name].info:
-                       desc = field[2]
-                       self.indexString(name, desc)
-                       if desc == None:
-                           desc = ''
-                       else:
-                           desc = escape(desc)
-                       output.write("      <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc))
-               except:
-                   print "Failed to serialize struct %s" % (name)
-               output.write("    </struct>\n")
-           else:
-               output.write("/>\n");
-       else :
-           output.write("    <typedef name='%s' file='%s' type='%s'" % (
-                        name, self.modulename_file(id.header), id.info))
+        if id.info[0:7] == 'struct ':
+            output.write("    <struct name='%s' file='%s' type='%s'" % (
+                     name, self.modulename_file(id.header), id.info))
+            name = id.info[7:]
+            if name in self.idx.structs and ( \
+               type(self.idx.structs[name].info) == type(()) or
+                type(self.idx.structs[name].info) == type([])):
+                output.write(">\n");
+                try:
+                    for field in self.idx.structs[name].info:
+                        desc = field[2]
+                        self.indexString(name, desc)
+                        if desc == None:
+                            desc = ''
+                        else:
+                            desc = escape(desc)
+                        output.write("      <field name='%s' type='%s' info='%s'/>\n" % (field[1] , field[0], desc))
+                except:
+                    print("Failed to serialize struct %s" % (name))
+                output.write("    </struct>\n")
+            else:
+                output.write("/>\n");
+        else :
+            output.write("    <typedef name='%s' file='%s' type='%s'" % (
+                         name, self.modulename_file(id.header), id.info))
             try:
-               desc = id.extra
-               if desc != None and desc != "":
-                   output.write(">\n      <info>%s</info>\n" % (escape(desc)))
-                   output.write("    </typedef>\n")
-               else:
-                   output.write("/>\n")
-           except:
-               output.write("/>\n")
+                desc = id.extra
+                if desc != None and desc != "":
+                    output.write(">\n      <info>%s</info>\n" % (escape(desc)))
+                    output.write("    </typedef>\n")
+                else:
+                    output.write("/>\n")
+            except:
+                output.write("/>\n")
 
     def serialize_variable(self, output, name):
         id = self.idx.variables[name]
-       if id.info != None:
-           output.write("    <variable name='%s' file='%s' type='%s'/>\n" % (
-                   name, self.modulename_file(id.header), id.info))
-       else:
-           output.write("    <variable name='%s' file='%s'/>\n" % (
-                   name, self.modulename_file(id.header)))
+        if id.info != None:
+            output.write("    <variable name='%s' file='%s' type='%s'/>\n" % (
+                    name, self.modulename_file(id.header), id.info))
+        else:
+            output.write("    <variable name='%s' file='%s'/>\n" % (
+                    name, self.modulename_file(id.header)))
 
     def serialize_function(self, output, name):
         id = self.idx.functions[name]
-       if name == debugsym:
-           print "=>", id
+        if name == debugsym:
+            print("=>", id)
 
         output.write("    <%s name='%s' file='%s' module='%s'>\n" % (id.type,
-                    name, self.modulename_file(id.header),
-                    self.modulename_file(id.module)))
-       #
-       # Processing of conditionals modified by Bill 1/1/05
-       #
-       if id.conditionals != None:
-           apstr = ""
-           for cond in id.conditionals:
-               if apstr != "":
-                   apstr = apstr + " &amp;&amp; "
-               apstr = apstr + cond
-           output.write("      <cond>%s</cond>\n"% (apstr));
-       try:
-           (ret, params, desc) = id.info
-           if (desc == None or desc == '') and \
-              name[0:9] != "xmlThrDef" and name != "xmlDllMain":
-               print "%s %s from %s has no description" % (id.type, name,
-                      self.modulename_file(id.module))
-
-           output.write("      <info>%s</info>\n" % (escape(desc)))
-           self.indexString(name, desc)
-           if ret[0] != None:
-               if ret[0] == "void":
-                   output.write("      <return type='void'/>\n")
-               else:
-                   output.write("      <return type='%s' info='%s'/>\n" % (
-                            ret[0], escape(ret[1])))
-                   self.indexString(name, ret[1])
-           for param in params:
-               if param[0] == 'void':
-                   continue
-               if param[2] == None:
-                   output.write("      <arg name='%s' type='%s' info=''/>\n" % (param[1], param[0]))
-               else:
-                   output.write("      <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2])))
-                   self.indexString(name, param[2])
-       except:
-           print "Failed to save function %s info: " % name, `id.info`
+                     name, self.modulename_file(id.header),
+                     self.modulename_file(id.module)))
+        #
+        # Processing of conditionals modified by Bill 1/1/05
+        #
+        if id.conditionals != None:
+            apstr = ""
+            for cond in id.conditionals:
+                if apstr != "":
+                    apstr = apstr + " &amp;&amp; "
+                apstr = apstr + cond
+            output.write("      <cond>%s</cond>\n"% (apstr));
+        try:
+            (ret, params, desc) = id.info
+            if (desc == None or desc == '') and \
+               name[0:9] != "xmlThrDef" and name != "xmlDllMain":
+                print("%s %s from %s has no description" % (id.type, name,
+                       self.modulename_file(id.module)))
+
+            output.write("      <info>%s</info>\n" % (escape(desc)))
+            self.indexString(name, desc)
+            if ret[0] != None:
+                if ret[0] == "void":
+                    output.write("      <return type='void'/>\n")
+                else:
+                    output.write("      <return type='%s' info='%s'/>\n" % (
+                             ret[0], escape(ret[1])))
+                    self.indexString(name, ret[1])
+            for param in params:
+                if param[0] == 'void':
+                    continue
+                if param[2] == None:
+                    output.write("      <arg name='%s' type='%s' info=''/>\n" % (param[1], param[0]))
+                else:
+                    output.write("      <arg name='%s' type='%s' info='%s'/>\n" % (param[1], param[0], escape(param[2])))
+                    self.indexString(name, param[2])
+        except:
+            print("Failed to save function %s info: " % name, repr(id.info))
         output.write("    </%s>\n" % (id.type))
 
     def serialize_exports(self, output, file):
         module = self.modulename_file(file)
-       output.write("    <file name='%s'>\n" % (module))
-       dict = self.headers[file]
-       if dict.info != None:
-           for data in ('Summary', 'Description', 'Author'):
-               try:
-                   output.write("     <%s>%s</%s>\n" % (
-                                string.lower(data),
-                                escape(dict.info[data]),
-                                string.lower(data)))
-               except:
-                   print "Header %s lacks a %s description" % (module, data)
-           if dict.info.has_key('Description'):
-               desc = dict.info['Description']
-               if string.find(desc, "DEPRECATED") != -1:
-                   output.write("     <deprecated/>\n")
-
-        ids = dict.macros.keys()
-       ids.sort()
-       for id in uniq(ids):
-           # Macros are sometime used to masquerade other types.
-           if dict.functions.has_key(id):
-               continue
-           if dict.variables.has_key(id):
-               continue
-           if dict.typedefs.has_key(id):
-               continue
-           if dict.structs.has_key(id):
-               continue
-           if dict.enums.has_key(id):
-               continue
-           output.write("     <exports symbol='%s' type='macro'/>\n" % (id))
-        ids = dict.enums.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='enum'/>\n" % (id))
-        ids = dict.typedefs.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='typedef'/>\n" % (id))
-        ids = dict.structs.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='struct'/>\n" % (id))
-        ids = dict.variables.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='variable'/>\n" % (id))
-        ids = dict.functions.keys()
-       ids.sort()
-       for id in uniq(ids):
-           output.write("     <exports symbol='%s' type='function'/>\n" % (id))
-       output.write("    </file>\n")
+        output.write("    <file name='%s'>\n" % (module))
+        dict = self.headers[file]
+        if dict.info != None:
+            for data in ('Summary', 'Description', 'Author'):
+                try:
+                    output.write("     <%s>%s</%s>\n" % (
+                                 data.lower(),
+                                 escape(dict.info[data]),
+                                 data.lower()))
+                except:
+                    print("Header %s lacks a %s description" % (module, data))
+            if 'Description' in dict.info:
+                desc = dict.info['Description']
+                if desc.find("DEPRECATED") != -1:
+                    output.write("     <deprecated/>\n")
+
+        ids = list(dict.macros.keys())
+        ids.sort()
+        for id in uniq(ids):
+            # Macros are sometime used to masquerade other types.
+            if id in dict.functions:
+                continue
+            if id in dict.variables:
+                continue
+            if id in dict.typedefs:
+                continue
+            if id in dict.structs:
+                continue
+            if id in dict.enums:
+                continue
+            output.write("     <exports symbol='%s' type='macro'/>\n" % (id))
+        ids = list(dict.enums.keys())
+        ids.sort()
+        for id in uniq(ids):
+            output.write("     <exports symbol='%s' type='enum'/>\n" % (id))
+        ids = list(dict.typedefs.keys())
+        ids.sort()
+        for id in uniq(ids):
+            output.write("     <exports symbol='%s' type='typedef'/>\n" % (id))
+        ids = list(dict.structs.keys())
+        ids.sort()
+        for id in uniq(ids):
+            output.write("     <exports symbol='%s' type='struct'/>\n" % (id))
+        ids = list(dict.variables.keys())
+        ids.sort()
+        for id in uniq(ids):
+            output.write("     <exports symbol='%s' type='variable'/>\n" % (id))
+        ids = list(dict.functions.keys())
+        ids.sort()
+        for id in uniq(ids):
+            output.write("     <exports symbol='%s' type='function'/>\n" % (id))
+        output.write("    </file>\n")
 
     def serialize_xrefs_files(self, output):
-        headers = self.headers.keys()
+        headers = list(self.headers.keys())
         headers.sort()
         for file in headers:
-           module = self.modulename_file(file)
-           output.write("    <file name='%s'>\n" % (module))
-           dict = self.headers[file]
-           ids = uniq(dict.functions.keys() + dict.variables.keys() + \
-                 dict.macros.keys() + dict.typedefs.keys() + \
-                 dict.structs.keys() + dict.enums.keys())
-           ids.sort()
-           for id in ids:
-               output.write("      <ref name='%s'/>\n" % (id))
-           output.write("    </file>\n")
+            module = self.modulename_file(file)
+            output.write("    <file name='%s'>\n" % (module))
+            dict = self.headers[file]
+            ids = uniq(list(dict.functions.keys()) + list(dict.variables.keys()) + \
+                  list(dict.macros.keys()) + list(dict.typedefs.keys()) + \
+                  list(dict.structs.keys()) + list(dict.enums.keys()))
+            ids.sort()
+            for id in ids:
+                output.write("      <ref name='%s'/>\n" % (id))
+            output.write("    </file>\n")
         pass
 
     def serialize_xrefs_functions(self, output):
         funcs = {}
-       for name in self.idx.functions.keys():
-           id = self.idx.functions[name]
-           try:
-               (ret, params, desc) = id.info
-               for param in params:
-                   if param[0] == 'void':
-                       continue
-                   if funcs.has_key(param[0]):
-                       funcs[param[0]].append(name)
-                   else:
-                       funcs[param[0]] = [name]
-           except:
-               pass
-       typ = funcs.keys()
-       typ.sort()
-       for type in typ:
-           if type == '' or type == 'void' or type == "int" or \
-              type == "char *" or type == "const char *" :
-               continue
-           output.write("    <type name='%s'>\n" % (type))
-           ids = funcs[type]
-           ids.sort()
-           pid = ''    # not sure why we have dups, but get rid of them!
-           for id in ids:
-               if id != pid:
-                   output.write("      <ref name='%s'/>\n" % (id))
-                   pid = id
-           output.write("    </type>\n")
+        for name in list(self.idx.functions.keys()):
+            id = self.idx.functions[name]
+            try:
+                (ret, params, desc) = id.info
+                for param in params:
+                    if param[0] == 'void':
+                        continue
+                    if param[0] in funcs:
+                        funcs[param[0]].append(name)
+                    else:
+                        funcs[param[0]] = [name]
+            except:
+                pass
+        typ = list(funcs.keys())
+        typ.sort()
+        for type in typ:
+            if type == '' or type == 'void' or type == "int" or \
+               type == "char *" or type == "const char *" :
+                continue
+            output.write("    <type name='%s'>\n" % (type))
+            ids = funcs[type]
+            ids.sort()
+            pid = ''        # not sure why we have dups, but get rid of them!
+            for id in ids:
+                if id != pid:
+                    output.write("      <ref name='%s'/>\n" % (id))
+                    pid = id
+            output.write("    </type>\n")
 
     def serialize_xrefs_constructors(self, output):
         funcs = {}
-       for name in self.idx.functions.keys():
-           id = self.idx.functions[name]
-           try:
-               (ret, params, desc) = id.info
-               if ret[0] == "void":
-                   continue
-               if funcs.has_key(ret[0]):
-                   funcs[ret[0]].append(name)
-               else:
-                   funcs[ret[0]] = [name]
-           except:
-               pass
-       typ = funcs.keys()
-       typ.sort()
-       for type in typ:
-           if type == '' or type == 'void' or type == "int" or \
-              type == "char *" or type == "const char *" :
-               continue
-           output.write("    <type name='%s'>\n" % (type))
-           ids = funcs[type]
-           ids.sort()
-           for id in ids:
-               output.write("      <ref name='%s'/>\n" % (id))
-           output.write("    </type>\n")
+        for name in list(self.idx.functions.keys()):
+            id = self.idx.functions[name]
+            try:
+                (ret, params, desc) = id.info
+                if ret[0] == "void":
+                    continue
+                if ret[0] in funcs:
+                    funcs[ret[0]].append(name)
+                else:
+                    funcs[ret[0]] = [name]
+            except:
+                pass
+        typ = list(funcs.keys())
+        typ.sort()
+        for type in typ:
+            if type == '' or type == 'void' or type == "int" or \
+               type == "char *" or type == "const char *" :
+                continue
+            output.write("    <type name='%s'>\n" % (type))
+            ids = funcs[type]
+            ids.sort()
+            for id in ids:
+                output.write("      <ref name='%s'/>\n" % (id))
+            output.write("    </type>\n")
 
     def serialize_xrefs_alpha(self, output):
-       letter = None
-       ids = self.idx.identifiers.keys()
-       ids.sort()
-       for id in ids:
-           if id[0] != letter:
-               if letter != None:
-                   output.write("    </letter>\n")
-               letter = id[0]
-               output.write("    <letter name='%s'>\n" % (letter))
-           output.write("      <ref name='%s'/>\n" % (id))
-       if letter != None:
-           output.write("    </letter>\n")
+        letter = None
+        ids = list(self.idx.identifiers.keys())
+        ids.sort()
+        for id in ids:
+            if id[0] != letter:
+                if letter != None:
+                    output.write("    </letter>\n")
+                letter = id[0]
+                output.write("    <letter name='%s'>\n" % (letter))
+            output.write("      <ref name='%s'/>\n" % (id))
+        if letter != None:
+            output.write("    </letter>\n")
 
     def serialize_xrefs_references(self, output):
-        typ = self.idx.identifiers.keys()
-       typ.sort()
-       for id in typ:
-           idf = self.idx.identifiers[id]
-           module = idf.header
-           output.write("    <reference name='%s' href='%s'/>\n" % (id,
-                        'html/' + self.basename + '-' +
-                        self.modulename_file(module) + '.html#' +
-                        id))
+        typ = list(self.idx.identifiers.keys())
+        typ.sort()
+        for id in typ:
+            idf = self.idx.identifiers[id]
+            module = idf.header
+            output.write("    <reference name='%s' href='%s'/>\n" % (id,
+                         'html/' + self.basename + '-' +
+                         self.modulename_file(module) + '.html#' +
+                         id))
 
     def serialize_xrefs_index(self, output):
         index = self.xref
-       typ = index.keys()
-       typ.sort()
-       letter = None
-       count = 0
-       chunk = 0
-       chunks = []
-       for id in typ:
-           if len(index[id]) > 30:
-               continue
-           if id[0] != letter:
-               if letter == None or count > 200:
-                   if letter != None:
-                       output.write("      </letter>\n")
-                       output.write("    </chunk>\n")
-                       count = 0
-                       chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
-                   output.write("    <chunk name='chunk%s'>\n" % (chunk))
-                   first_letter = id[0]
-                   chunk = chunk + 1
-               elif letter != None:
-                   output.write("      </letter>\n")
-               letter = id[0]
-               output.write("      <letter name='%s'>\n" % (letter))
-           output.write("        <word name='%s'>\n" % (id))
-           tokens = index[id];
-           tokens.sort()
-           tok = None
-           for token in tokens:
-               if tok == token:
-                   continue
-               tok = token
-               output.write("          <ref name='%s'/>\n" % (token))
-               count = count + 1
-           output.write("        </word>\n")
-       if letter != None:
-           output.write("      </letter>\n")
-           output.write("    </chunk>\n")
-           if count != 0:
-               chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
-           output.write("    <chunks>\n")
-           for ch in chunks:
-               output.write("      <chunk name='%s' start='%s' end='%s'/>\n" % (
-                            ch[0], ch[1], ch[2]))
-           output.write("    </chunks>\n")
+        typ = list(index.keys())
+        typ.sort()
+        letter = None
+        count = 0
+        chunk = 0
+        chunks = []
+        for id in typ:
+            if len(index[id]) > 30:
+                continue
+            if id[0] != letter:
+                if letter == None or count > 200:
+                    if letter != None:
+                        output.write("      </letter>\n")
+                        output.write("    </chunk>\n")
+                        count = 0
+                        chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
+                    output.write("    <chunk name='chunk%s'>\n" % (chunk))
+                    first_letter = id[0]
+                    chunk = chunk + 1
+                elif letter != None:
+                    output.write("      </letter>\n")
+                letter = id[0]
+                output.write("      <letter name='%s'>\n" % (letter))
+            output.write("        <word name='%s'>\n" % (id))
+            tokens = index[id];
+            tokens.sort()
+            tok = None
+            for token in tokens:
+                if tok == token:
+                    continue
+                tok = token
+                output.write("          <ref name='%s'/>\n" % (token))
+                count = count + 1
+            output.write("        </word>\n")
+        if letter != None:
+            output.write("      </letter>\n")
+            output.write("    </chunk>\n")
+            if count != 0:
+                chunks.append(["chunk%s" % (chunk -1), first_letter, letter])
+            output.write("    <chunks>\n")
+            for ch in chunks:
+                output.write("      <chunk name='%s' start='%s' end='%s'/>\n" % (
+                             ch[0], ch[1], ch[2]))
+            output.write("    </chunks>\n")
 
     def serialize_xrefs(self, output):
-       output.write("  <references>\n")
-       self.serialize_xrefs_references(output)
-       output.write("  </references>\n")
-       output.write("  <alpha>\n")
-       self.serialize_xrefs_alpha(output)
-       output.write("  </alpha>\n")
-       output.write("  <constructors>\n")
-       self.serialize_xrefs_constructors(output)
-       output.write("  </constructors>\n")
-       output.write("  <functions>\n")
-       self.serialize_xrefs_functions(output)
-       output.write("  </functions>\n")
-       output.write("  <files>\n")
-       self.serialize_xrefs_files(output)
-       output.write("  </files>\n")
-       output.write("  <index>\n")
-       self.serialize_xrefs_index(output)
-       output.write("  </index>\n")
+        output.write("  <references>\n")
+        self.serialize_xrefs_references(output)
+        output.write("  </references>\n")
+        output.write("  <alpha>\n")
+        self.serialize_xrefs_alpha(output)
+        output.write("  </alpha>\n")
+        output.write("  <constructors>\n")
+        self.serialize_xrefs_constructors(output)
+        output.write("  </constructors>\n")
+        output.write("  <functions>\n")
+        self.serialize_xrefs_functions(output)
+        output.write("  </functions>\n")
+        output.write("  <files>\n")
+        self.serialize_xrefs_files(output)
+        output.write("  </files>\n")
+        output.write("  <index>\n")
+        self.serialize_xrefs_index(output)
+        output.write("  </index>\n")
 
     def serialize(self):
         filename = "%s-api.xml" % self.name
-        print "Saving XML description %s" % (filename)
+        print("Saving XML description %s" % (filename))
         output = open(filename, "w")
         output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
         output.write("<api name='%s'>\n" % self.name)
         output.write("  <files>\n")
-        headers = self.headers.keys()
+        headers = list(self.headers.keys())
         headers.sort()
         for file in headers:
             self.serialize_exports(output, file)
         output.write("  </files>\n")
         output.write("  <symbols>\n")
-        macros = self.idx.macros.keys()
+        macros = list(self.idx.macros.keys())
         macros.sort()
         for macro in macros:
             self.serialize_macro(output, macro)
-        enums = self.idx.enums.keys()
+        enums = list(self.idx.enums.keys())
         enums.sort()
         for enum in enums:
             self.serialize_enum(output, enum)
-        typedefs = self.idx.typedefs.keys()
+        typedefs = list(self.idx.typedefs.keys())
         typedefs.sort()
         for typedef in typedefs:
             self.serialize_typedef(output, typedef)
-        variables = self.idx.variables.keys()
+        variables = list(self.idx.variables.keys())
         variables.sort()
         for variable in variables:
             self.serialize_variable(output, variable)
-        functions = self.idx.functions.keys()
+        functions = list(self.idx.functions.keys())
         functions.sort()
         for function in functions:
             self.serialize_function(output, function)
@@ -2093,7 +2099,7 @@ class docBuilder:
         output.close()
 
         filename = "%s-refs.xml" % self.name
-        print "Saving XML Cross References %s" % (filename)
+        print("Saving XML Cross References %s" % (filename))
         output = open(filename, "w")
         output.write('<?xml version="1.0" encoding="ISO-8859-1"?>\n')
         output.write("<apirefs name='%s'>\n" % self.name)
@@ -2105,28 +2111,28 @@ class docBuilder:
 def rebuild():
     builder = None
     if glob.glob("parser.c") != [] :
-        print "Rebuilding API description for libxml2"
-       builder = docBuilder("libxml2", [".", "."],
-                            ["xmlwin32version.h", "tst.c"])
+        print("Rebuilding API description for libxml2")
+        builder = docBuilder("libxml2", [".", "."],
+                             ["xmlwin32version.h", "tst.c"])
     elif glob.glob("../parser.c") != [] :
-        print "Rebuilding API description for libxml2"
-       builder = docBuilder("libxml2", ["..", "../include/libxml"],
-                            ["xmlwin32version.h", "tst.c"])
+        print("Rebuilding API description for libxml2")
+        builder = docBuilder("libxml2", ["..", "../include/libxml"],
+                             ["xmlwin32version.h", "tst.c"])
     elif glob.glob("../libxslt/transform.c") != [] :
-        print "Rebuilding API description for libxslt"
-       builder = docBuilder("libxslt", ["../libxslt"],
-                            ["win32config.h", "libxslt.h", "tst.c"])
+        print("Rebuilding API description for libxslt")
+        builder = docBuilder("libxslt", ["../libxslt"],
+                             ["win32config.h", "libxslt.h", "tst.c"])
     else:
-        print "rebuild() failed, unable to guess the module"
-       return None
+        print("rebuild() failed, unable to guess the module")
+        return None
     builder.scan()
     builder.analyze()
     builder.serialize()
     if glob.glob("../libexslt/exslt.c") != [] :
         extra = docBuilder("libexslt", ["../libexslt"], ["libexslt.h"])
-       extra.scan()
-       extra.analyze()
-       extra.serialize()
+        extra.scan()
+        extra.analyze()
+        extra.serialize()
     return builder
 
 #
@@ -2142,4 +2148,4 @@ if __name__ == "__main__":
         debug = 1
         parse(sys.argv[1])
     else:
-       rebuild()
+        rebuild()
index 054623d..62a922f 100644 (file)
@@ -8,7 +8,8 @@ H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>libxml2 architecture</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>libxml2 architecture</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Libxml2 is made of multiple components; some of them are optional, and
-most of the block interfaces are public. The main components are:</p><ul><li>an Input/Output layer</li>
+most of the block interfaces are public. The main components are:</p><ul>
+  <li>an Input/Output layer</li>
   <li>FTP and HTTP client layers (optional)</li>
   <li>an Internationalization layer managing the encodings support</li>
   <li>a URI module</li>
index 6b29700..55ff296 100644 (file)
@@ -31,7 +31,8 @@ likely to be answered if they made it to the list, <strong>DO NOT</strong>
 post to the list from an email address where such legal requirements are
 automatically added, get private paying support if you can't share
 information.</p><p>Check the following <strong><span style="color: #FF0000">before
-posting</span></strong>:</p><ul><li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
+posting</span></strong>:</p><ul>
+  <li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
     search engine</a> to get information related to your problem.</li>
   <li>Make sure you are <a href="ftp://xmlsoft.org/libxml2/">using a recent
     version</a>, and that the problem still shows up in a recent version.</li>
@@ -46,7 +47,8 @@ posting</span></strong>:</p><ul><li>Read the <a href="FAQ.html">FAQ</a> and <a h
 </ul><p>Then send the bug with associated information to reproduce it to the <a href="mailto:xml@gnome.org">xml@gnome.org</a> list; if it's really libxml
 related I will approve it. Please do not send mail to me directly, it makes
 things really hard to track and in some cases I am not the best person to
-answer a given question, ask on the list.</p><p>To <span style="color: #E50000">be really clear about support</span>:</p><ul><li>Support or help <span style="color: #E50000">requests MUST be sent to
+answer a given question, ask on the list.</p><p>To <span style="color: #E50000">be really clear about support</span>:</p><ul>
+  <li>Support or help <span style="color: #E50000">requests MUST be sent to
     the list or on bugzilla</span> in case of problems, so that the Question
     and Answers can be shared publicly. Failing to do so carries the implicit
     message "I want free support but I don't want to share the benefits with
index f00c76e..3d5bbe1 100644 (file)
@@ -7,7 +7,8 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Catalog support</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Catalog support</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="General2">General overview</a></li>
+</style><title>Catalog support</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Catalog support</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol>
+  <li><a href="General2">General overview</a></li>
   <li><a href="#definition">The definition</a></li>
   <li><a href="#Simple">Using catalogs</a></li>
   <li><a href="#Some">Some examples</a></li>
@@ -22,7 +23,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 is inserted between the moment the reference is recognized by the software
 (XML parser, stylesheet processing, or even images referenced for inclusion
 in a rendering) and the time where loading that resource is actually
-started.</p><p>It is basically used for 3 things:</p><ul><li>mapping from "logical" names, the public identifiers and a more
+started.</p><p>It is basically used for 3 things:</p><ul>
+  <li>mapping from "logical" names, the public identifiers and a more
     concrete name usable for download (and URI). For example it can associate
     the logical name
     <p>"-//OASIS//DTD DocBook XML V4.1.2//EN"</p>
@@ -41,7 +43,8 @@ started.</p><p>It is basically used for 3 things:</p><ul><li>mapping from "logic
     important feature for any significant deployment of XML or SGML since it
     allows to avoid the aleas and delays associated to fetching remote
     resources.</li>
-</ul><h3><a name="definition" id="definition">The definitions</a></h3><p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p><ul><li>the older SGML catalogs, the official spec is  SGML Open Technical
+</ul><h3><a name="definition" id="definition">The definitions</a></h3><p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p><ul>
+  <li>the older SGML catalogs, the official spec is  SGML Open Technical
     Resolution TR9401:1997, but is better understood by reading <a href="http://www.jclark.com/sp/catalog.htm">the SP Catalog page</a> from
     James Clark. This is relatively old and not the preferred mode of
     operation of libxml.</li>
@@ -193,7 +196,8 @@ catalog support</a>.</p><p>The header for the catalog interfaces should be inclu
 applications really need access to it since it is the default behaviour of
 libxml2 (Note: it is possible to completely override libxml2 default catalog
 by using <a href="html/libxml-parser.html">xmlSetExternalEntityLoader</a> to
-plug an application specific resolver).</p><p>Basically libxml2 support 2 catalog lists:</p><ul><li>the default one, global shared by all the application</li>
+plug an application specific resolver).</p><p>Basically libxml2 support 2 catalog lists:</p><ul>
+  <li>the default one, global shared by all the application</li>
   <li>a per-document catalog, this one is built if the document uses the
     <code>oasis-xml-catalog</code> PIs to specify its own catalog list, it is
     associated to the parser context and destroyed when the parsing context
@@ -224,7 +228,8 @@ provided because this functionality may be useful for client tools.</p><h4>threa
 try to avoid troubles in multithreaded environments. The code is now thread
 safe assuming that the libxml2 library has been compiled with threads
 support.</p><p></p><h3><a name="Other" id="Other">Other resources</a></h3><p>The XML Catalog specification is relatively recent so there isn't much
-literature to point at:</p><ul><li>You can find a good rant from Norm Walsh about <a href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
+literature to point at:</p><ul>
+  <li>You can find a good rant from Norm Walsh about <a href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
     need for catalogs</a>, it provides a lot of context information even if
     I don't agree with everything presented. Norm also wrote a more recent
     article <a href="http://wwws.sun.com/software/xml/developers/resolver/article/">XML
index 061b38d..37a50c9 100644 (file)
@@ -7,7 +7,8 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Contributions</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Contributions</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><ul><li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
+</style><title>Contributions</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Contributions</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><ul>
+  <li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
     patches, Gary Pennington worked on the validation API, threading support
     and Solaris port.</li>
   <li>John Fleck helps maintaining the documentation and man pages.</li>
index 36852f9..dad7975 100644 (file)
@@ -1,5 +1,15 @@
-DEVHELP_DIR=$(datadir)/gtk-doc/html/libxml2
-HTML_FILES=index.html general.html $(HTML_MODULES)
+devhelpdir = $(datadir)/gtk-doc/html/libxml2
+
+dist_devhelp_DATA =                    \
+       libxml2.devhelp                 \
+       $(HTML_FILES)                   \
+       $(EXTRA_FORMAT)
+
+HTML_FILES =                           \
+       general.html                    \
+       index.html                      \
+       $(HTML_MODULES)
+
 HTML_MODULES=                          \
        libxml2-c14n.html               \
        libxml2-catalog.html            \
@@ -56,18 +66,14 @@ EXTRA_FORMAT=                               \
        up.png                          \
        style.css
 
-EXTRA_DIST=devhelp.xsl html.xsl libxml2.devhelp $(HTML_FILES) $(EXTRA_FORMAT)
+EXTRA_DIST = devhelp.xsl html.xsl
 
-all: libxml2.devhelp $(HTML_FILES)
+if REBUILD_DOCS
+rebuild: libxml2.devhelp $(HTML_FILES)
+.PHONY: rebuild
 
 libxml2.devhelp $(HTML_FILES): devhelp.xsl html.xsl $(top_srcdir)/doc/libxml2-api.xml
-       -@(echo Rebuilding devhelp files)
        -@(if [ -x $(XSLTPROC) ] ; then \
-         $(XSLTPROC) --nonet -o $(srcdir)/libxml2.devhelp devhelp.xsl $(top_srcdir)/doc/libxml2-api.xml ; fi );
-
-install-data-local: 
-       -@MKDIR_P@ $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/libxml2.devhelp $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(EXTRA_FORMAT:%=$(srcdir)/%) $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(HTML_FILES:%=$(srcdir)/%) $(DESTDIR)$(DEVHELP_DIR)
-
+         echo Rebuilding devhelp files ; \
+         $(XSLTPROC) --nonet -o $(srcdir)/libxml2.devhelp $(srcdir)/devhelp.xsl $(top_srcdir)/doc/libxml2-api.xml ; fi );
+endif
index 2c87ff3..4a86a2d 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 # PARTICULAR PURPOSE.
 
 @SET_MAKE@
+
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,32 +79,73 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = doc/devhelp
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(dist_devhelp_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(devhelpdir)"
+DATA = $(dist_devhelp_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -96,6 +182,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -140,6 +227,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -151,7 +241,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -176,7 +265,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -209,6 +297,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -282,8 +371,17 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-DEVHELP_DIR = $(datadir)/gtk-doc/html/libxml2
-HTML_FILES = index.html general.html $(HTML_MODULES)
+devhelpdir = $(datadir)/gtk-doc/html/libxml2
+dist_devhelp_DATA = \
+       libxml2.devhelp                 \
+       $(HTML_FILES)                   \
+       $(EXTRA_FORMAT)
+
+HTML_FILES = \
+       general.html                    \
+       index.html                      \
+       $(HTML_MODULES)
+
 HTML_MODULES = \
        libxml2-c14n.html               \
        libxml2-catalog.html            \
@@ -340,7 +438,7 @@ EXTRA_FORMAT = \
        up.png                          \
        style.css
 
-EXTRA_DIST = devhelp.xsl html.xsl libxml2.devhelp $(HTML_FILES) $(EXTRA_FORMAT)
+EXTRA_DIST = devhelp.xsl html.xsl
 all: all-am
 
 .SUFFIXES:
@@ -380,11 +478,32 @@ mostlyclean-libtool:
 
 clean-libtool:
        -rm -rf .libs _libs
-tags: TAGS
-TAGS:
+install-dist_devhelpDATA: $(dist_devhelp_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_devhelp_DATA)'; test -n "$(devhelpdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devhelpdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devhelpdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devhelpdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devhelpdir)" || exit $$?; \
+       done
+
+uninstall-dist_devhelpDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_devhelp_DATA)'; test -n "$(devhelpdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devhelpdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
 
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
+
+cscope cscopelist:
 
 
 distdir: $(DISTFILES)
@@ -419,8 +538,11 @@ distdir: $(DISTFILES)
        done
 check-am: all-am
 check: check-am
-all-am: Makefile
+all-am: Makefile $(DATA)
 installdirs:
+       for dir in "$(DESTDIR)$(devhelpdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
 install: install-am
 install-exec: install-exec-am
 install-data: install-data-am
@@ -431,10 +553,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -466,7 +593,7 @@ info: info-am
 
 info-am:
 
-install-data-am: install-data-local
+install-data-am: install-dist_devhelpDATA
 
 install-dvi: install-dvi-am
 
@@ -510,35 +637,31 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am:
+uninstall-am: uninstall-dist_devhelpDATA
 
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-       distclean distclean-generic distclean-libtool distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-data-local install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       uninstall uninstall-am
-
-
-all: libxml2.devhelp $(HTML_FILES)
-
-libxml2.devhelp $(HTML_FILES): devhelp.xsl html.xsl $(top_srcdir)/doc/libxml2-api.xml
-       -@(echo Rebuilding devhelp files)
-       -@(if [ -x $(XSLTPROC) ] ; then \
-         $(XSLTPROC) --nonet -o $(srcdir)/libxml2.devhelp devhelp.xsl $(top_srcdir)/doc/libxml2-api.xml ; fi );
-
-install-data-local: 
-       -@MKDIR_P@ $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/libxml2.devhelp $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(EXTRA_FORMAT:%=$(srcdir)/%) $(DESTDIR)$(DEVHELP_DIR)
-       -@INSTALL@ -m 0644 $(HTML_FILES:%=$(srcdir)/%) $(DESTDIR)$(DEVHELP_DIR)
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_devhelpDATA install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+       uninstall-am uninstall-dist_devhelpDATA
+
+
+@REBUILD_DOCS_TRUE@rebuild: libxml2.devhelp $(HTML_FILES)
+@REBUILD_DOCS_TRUE@.PHONY: rebuild
+
+@REBUILD_DOCS_TRUE@libxml2.devhelp $(HTML_FILES): devhelp.xsl html.xsl $(top_srcdir)/doc/libxml2-api.xml
+@REBUILD_DOCS_TRUE@    -@(if [ -x $(XSLTPROC) ] ; then \
+@REBUILD_DOCS_TRUE@      echo Rebuilding devhelp files ; \
+@REBUILD_DOCS_TRUE@      $(XSLTPROC) --nonet -o $(srcdir)/libxml2.devhelp $(srcdir)/devhelp.xsl $(top_srcdir)/doc/libxml2-api.xml ; fi );
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index 6122ffe..68f9380 100644 (file)
@@ -33,6 +33,6 @@
     <h2>
       <span class="refentrytitle">libxml2 API Modules</span>
     </h2>
-    <p><a href="libxml2-DOCBparser.html">DOCBparser</a> - old DocBook SGML parser<br/><a href="libxml2-HTMLparser.html">HTMLparser</a> - interface for an HTML 4.0 non-verifying parser<br/><a href="libxml2-HTMLtree.html">HTMLtree</a> - specific APIs to process HTML tree, especially serialization<br/><a href="libxml2-SAX.html">SAX</a> - Old SAX version 1 handler, deprecated<br/><a href="libxml2-SAX2.html">SAX2</a> - SAX2 parser interface used to build the DOM tree<br/><a href="libxml2-c14n.html">c14n</a> - Provide Canonical XML and Exclusive XML Canonicalization<br/><a href="libxml2-catalog.html">catalog</a> - interfaces to the Catalog handling system<br/><a href="libxml2-chvalid.html">chvalid</a> - Unicode character range checking<br/><a href="libxml2-debugXML.html">debugXML</a> - Tree debugging APIs<br/><a href="libxml2-dict.html">dict</a> - string dictionnary<br/><a href="libxml2-encoding.html">encoding</a> - interface for the encoding conversion functions<br/><a href="libxml2-entities.html">entities</a> - interface for the XML entities handling<br/><a href="libxml2-globals.html">globals</a> - interface for all global variables of the library<br/><a href="libxml2-hash.html">hash</a> - Chained hash tables<br/><a href="libxml2-list.html">list</a> - lists interfaces<br/><a href="libxml2-nanoftp.html">nanoftp</a> - minimal FTP implementation<br/><a href="libxml2-nanohttp.html">nanohttp</a> - minimal HTTP implementation<br/><a href="libxml2-parser.html">parser</a> - the core parser module<br/><a href="libxml2-parserInternals.html">parserInternals</a> - internals routines exported by the parser.<br/><a href="libxml2-pattern.html">pattern</a> - pattern expression handling<br/><a href="libxml2-relaxng.html">relaxng</a> - implementation of the Relax-NG validation<br/><a href="libxml2-schemasInternals.html">schemasInternals</a> - internal interfaces for XML Schemas<br/><a href="libxml2-schematron.html">schematron</a> - XML Schemastron implementation<br/><a href="libxml2-threads.html">threads</a> - interfaces for thread handling<br/><a href="libxml2-tree.html">tree</a> - interfaces for tree manipulation<br/><a href="libxml2-uri.html">uri</a> - library of generic URI related routines<br/><a href="libxml2-valid.html">valid</a> - The DTD validation<br/><a href="libxml2-xinclude.html">xinclude</a> - implementation of XInclude<br/><a href="libxml2-xlink.html">xlink</a> - unfinished XLink detection module<br/><a href="libxml2-xmlIO.html">xmlIO</a> - interface for the I/O interfaces used by the parser<br/><a href="libxml2-xmlautomata.html">xmlautomata</a> - API to build regexp automata<br/><a href="libxml2-xmlerror.html">xmlerror</a> - error handling<br/><a href="libxml2-xmlexports.html">xmlexports</a> - macros for marking symbols as exportable/importable.<br/><a href="libxml2-xmlmemory.html">xmlmemory</a> - interface for the memory allocator<br/><a href="libxml2-xmlmodule.html">xmlmodule</a> - dynamic module loading<br/><a href="libxml2-xmlreader.html">xmlreader</a> - the XMLReader implementation<br/><a href="libxml2-xmlregexp.html">xmlregexp</a> - regular expressions handling<br/><a href="libxml2-xmlsave.html">xmlsave</a> - the XML document serializer<br/><a href="libxml2-xmlschemas.html">xmlschemas</a> - incomplete XML Schemas structure implementation<br/><a href="libxml2-xmlschemastypes.html">xmlschemastypes</a> - implementation of XML Schema Datatypes<br/><a href="libxml2-xmlstring.html">xmlstring</a> - set of routines to process strings<br/><a href="libxml2-xmlunicode.html">xmlunicode</a> - Unicode character APIs<br/><a href="libxml2-xmlversion.html">xmlversion</a> - compile-time version informations<br/><a href="libxml2-xmlwriter.html">xmlwriter</a> - text writing API for XML<br/><a href="libxml2-xpath.html">xpath</a> - XML Path Language implementation<br/><a href="libxml2-xpathInternals.html">xpathInternals</a> - internal interfaces for XML Path Language implementation<br/><a href="libxml2-xpointer.html">xpointer</a> - API to handle XML Pointers<br/></p>
+    <p><a href="libxml2-DOCBparser.html">DOCBparser</a> - old DocBook SGML parser<br/><a href="libxml2-HTMLparser.html">HTMLparser</a> - interface for an HTML 4.0 non-verifying parser<br/><a href="libxml2-HTMLtree.html">HTMLtree</a> - specific APIs to process HTML tree, especially serialization<br/><a href="libxml2-SAX.html">SAX</a> - Old SAX version 1 handler, deprecated<br/><a href="libxml2-SAX2.html">SAX2</a> - SAX2 parser interface used to build the DOM tree<br/><a href="libxml2-c14n.html">c14n</a> - Provide Canonical XML and Exclusive XML Canonicalization<br/><a href="libxml2-catalog.html">catalog</a> - interfaces to the Catalog handling system<br/><a href="libxml2-chvalid.html">chvalid</a> - Unicode character range checking<br/><a href="libxml2-debugXML.html">debugXML</a> - Tree debugging APIs<br/><a href="libxml2-dict.html">dict</a> - string dictionnary<br/><a href="libxml2-encoding.html">encoding</a> - interface for the encoding conversion functions<br/><a href="libxml2-entities.html">entities</a> - interface for the XML entities handling<br/><a href="libxml2-globals.html">globals</a> - interface for all global variables of the library<br/><a href="libxml2-hash.html">hash</a> - Chained hash tables<br/><a href="libxml2-list.html">list</a> - lists interfaces<br/><a href="libxml2-nanoftp.html">nanoftp</a> - minimal FTP implementation<br/><a href="libxml2-nanohttp.html">nanohttp</a> - minimal HTTP implementation<br/><a href="libxml2-parser.html">parser</a> - the core parser module<br/><a href="libxml2-parserInternals.html">parserInternals</a> - internals routines and limits exported by the parser.<br/><a href="libxml2-pattern.html">pattern</a> - pattern expression handling<br/><a href="libxml2-relaxng.html">relaxng</a> - implementation of the Relax-NG validation<br/><a href="libxml2-schemasInternals.html">schemasInternals</a> - internal interfaces for XML Schemas<br/><a href="libxml2-schematron.html">schematron</a> - XML Schemastron implementation<br/><a href="libxml2-threads.html">threads</a> - interfaces for thread handling<br/><a href="libxml2-tree.html">tree</a> - interfaces for tree manipulation<br/><a href="libxml2-uri.html">uri</a> - library of generic URI related routines<br/><a href="libxml2-valid.html">valid</a> - The DTD validation<br/><a href="libxml2-xinclude.html">xinclude</a> - implementation of XInclude<br/><a href="libxml2-xlink.html">xlink</a> - unfinished XLink detection module<br/><a href="libxml2-xmlIO.html">xmlIO</a> - interface for the I/O interfaces used by the parser<br/><a href="libxml2-xmlautomata.html">xmlautomata</a> - API to build regexp automata<br/><a href="libxml2-xmlerror.html">xmlerror</a> - error handling<br/><a href="libxml2-xmlexports.html">xmlexports</a> - macros for marking symbols as exportable/importable.<br/><a href="libxml2-xmlmemory.html">xmlmemory</a> - interface for the memory allocator<br/><a href="libxml2-xmlmodule.html">xmlmodule</a> - dynamic module loading<br/><a href="libxml2-xmlreader.html">xmlreader</a> - the XMLReader implementation<br/><a href="libxml2-xmlregexp.html">xmlregexp</a> - regular expressions handling<br/><a href="libxml2-xmlsave.html">xmlsave</a> - the XML document serializer<br/><a href="libxml2-xmlschemas.html">xmlschemas</a> - incomplete XML Schemas structure implementation<br/><a href="libxml2-xmlschemastypes.html">xmlschemastypes</a> - implementation of XML Schema Datatypes<br/><a href="libxml2-xmlstring.html">xmlstring</a> - set of routines to process strings<br/><a href="libxml2-xmlunicode.html">xmlunicode</a> - Unicode character APIs<br/><a href="libxml2-xmlversion.html">xmlversion</a> - compile-time version informations<br/><a href="libxml2-xmlwriter.html">xmlwriter</a> - text writing API for XML<br/><a href="libxml2-xpath.html">xpath</a> - XML Path Language implementation<br/><a href="libxml2-xpathInternals.html">xpathInternals</a> - internal interfaces for XML Path Language implementation<br/><a href="libxml2-xpointer.html">xpointer</a> - API to handle XML Pointers<br/></p>
   </body>
 </html>
index 818121d..fd5f6b9 100644 (file)
       <h2>Synopsis</h2>
       <pre class="synopsis">typedef struct _xmlDict <a href="#xmlDict">xmlDict</a>;
 typedef <a href="libxml2-dict.html#xmlDict">xmlDict</a> * <a href="#xmlDictPtr">xmlDictPtr</a>;
+size_t <a href="#xmlDictGetUsage">xmlDictGetUsage</a>                  (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict);
 int    <a href="#xmlDictReference">xmlDictReference</a>                (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict);
 void   <a href="#xmlDictCleanup">xmlDictCleanup</a>                    (void);
 int    <a href="#xmlDictSize">xmlDictSize</a>                  (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict);
 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlDictExists">xmlDictExists</a>              (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int len);
+size_t <a href="#xmlDictSetLimit">xmlDictSetLimit</a>                  (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       size_t limit);
 int    <a href="#xmlDictOwns">xmlDictOwns</a>                  (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str);
 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlDictQLookup">xmlDictQLookup</a>            (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int    <a href="#xmlInitializeDict">xmlInitializeDict</a>              (void);
@@ -94,6 +96,10 @@ The content of this structure is not made public by the API.
 </pre><p>Free the hash @dict and its contents. The userdata is deallocated with @f if provided.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlDictGetUsage"/>xmlDictGetUsage ()</h3><pre class="programlisting">size_t       xmlDictGetUsage                 (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br/>
+</pre><p>Get how much memory is used by a dictionary for strings Added in 2.9.0</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the amount of strings allocated</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDictLookup"/>xmlDictLookup ()</h3><pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlDictLookup           (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int len)<br/>
 </pre><p>Add the @name to the dictionnary @dict if not present.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the name, if -1 it is recomputed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the name or NULL in case of internal error</td></tr></tbody></table></div></div>
@@ -110,12 +116,16 @@ The content of this structure is not made public by the API.
 </pre><p>Increment the <a href="libxml2-SAX.html#reference">reference</a> counter of a dictionary</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlDictSetLimit"/>xmlDictSetLimit ()</h3><pre class="programlisting">size_t       xmlDictSetLimit                 (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br/>                                       size_t limit)<br/>
+</pre><p>Set a size limit for the dictionary Added in 2.9.0</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>limit</tt></i>:</span></td><td>the limit in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous limit of the dictionary or 0</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDictSize"/>xmlDictSize ()</h3><pre class="programlisting">int  xmlDictSize                     (<a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br/>
 </pre><p>Query the number of elements installed in the hash @dict.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the dictionnary or -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlInitializeDict"/>xmlInitializeDict ()</h3><pre class="programlisting">int      xmlInitializeDict               (void)<br/>
-</pre><p>Do the dictionary mutex initialization. this function is not thread safe, initialization should preferably be done once at startup</p>
+</pre><p>Do the dictionary mutex initialization. this function is deprecated</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if initialization was already done, and 1 if that call led to the initialization</td></tr></tbody></table></div></div>
         <hr/>
       </div>
index 0d0effb..3262c40 100644 (file)
@@ -49,7 +49,7 @@ typedef <a href="libxml2-entities.html#xmlEntitiesTable">xmlEntitiesTable</a> *
 <a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlAddDocEntity">xmlAddDocEntity</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int type, <br/>                                         const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 <a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlNewEntity">xmlNewEntity</a>                (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int type, <br/>                                         const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a>    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                          const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
-<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlGetDocEntity">xmlGetDocEntity</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+<a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlGetDocEntity">xmlGetDocEntity</a>          (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlGetDtdEntity">xmlGetDtdEntity</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlAddDtdEntity">xmlAddDtdEntity</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int type, <br/>                                         const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * SystemID, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 <a href="libxml2-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a>    <a href="#xmlCopyEntitiesTable">xmlCopyEntitiesTable</a>        (<a href="libxml2-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table);
@@ -60,7 +60,7 @@ void  <a href="#xmlDumpEntityDecl">xmlDumpEntityDecl</a>              (<a href="libxml2-tree.
 void   <a href="#xmlCleanupPredefinedEntities">xmlCleanupPredefinedEntities</a>        (void);
 <a href="libxml2-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a>    <a href="#xmlCreateEntitiesTable">xmlCreateEntitiesTable</a>    (void);
 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlEncodeEntities">xmlEncodeEntities</a>      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a>      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a>      (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input);
 <a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>      <a href="#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a>    (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 void   <a href="#xmlInitializePredefinedEntities">xmlInitializePredefinedEntities</a>  (void);
 </pre>
@@ -128,7 +128,7 @@ The content of this structure is not made public by the API.
 </pre><p>Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlEncodeSpecialChars"/>xmlEncodeSpecialChars ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlEncodeSpecialChars   (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlEncodeSpecialChars"/>xmlEncodeSpecialChars ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlEncodeSpecialChars   (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * input)<br/>
 </pre><p>Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div></div>
         <hr/>
@@ -136,7 +136,7 @@ The content of this structure is not made public by the API.
 </pre><p>Deallocate the memory used by an entities hash table.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetDocEntity"/>xmlGetDocEntity ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>    xmlGetDocEntity         (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetDocEntity"/>xmlGetDocEntity ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlEntityPtr">xmlEntityPtr</a>    xmlGetDocEntity         (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Do an entity lookup in the document entity hash table and</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document referencing the entity</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the corresponding entity, otherwise a lookup is done in the predefined entities too. Returns A pointer to the entity structure or NULL if not found.</td></tr></tbody></table></div></div>
         <hr/>
index 6c66e5f..357c14a 100644 (file)
@@ -309,7 +309,8 @@ void        <a href="#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a>    (<a hr
     <a name="XML_PARSE_NOBASEFIX">XML_PARSE_NOBASEFIX</a> = 262144 /* do not fixup XINCLUDE xml:base uris */
     <a name="XML_PARSE_HUGE">XML_PARSE_HUGE</a> = 524288 /* relax any hardcoded limit from the parser */
     <a name="XML_PARSE_OLDSAX">XML_PARSE_OLDSAX</a> = 1048576 /* parse using SAX2 interface before 2.7.0 */
-    <a name="XML_PARSE_IGNORE_ENC">XML_PARSE_IGNORE_ENC</a> = 2097152 /*  ignore internal document encoding hint */
+    <a name="XML_PARSE_IGNORE_ENC">XML_PARSE_IGNORE_ENC</a> = 2097152 /* ignore internal document encoding hint */
+    <a name="XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a> = 4194304 /*  Store big lines numbers in text PSVI field */
 };
 </pre><p/>
 </div>
@@ -661,11 +662,11 @@ void      <a href="#xmlSetExternalEntityLoader">xmlSetExternalEntityLoader</a>    (<a hr
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlParserInputGrow"/>xmlParserInputGrow ()</h3><pre class="programlisting">int    xmlParserInputGrow              (<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br/>                                   int len)<br/>
 </pre><p>This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the amount of char read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlParserInputRead"/>xmlParserInputRead ()</h3><pre class="programlisting">int    xmlParserInputRead              (<a href="libxml2-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br/>                                   int len)<br/>
-</pre><p>This function refresh the input for the parser. It doesn't try to preserve pointers to the input buffer, and discard already read data</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div></div>
+</pre><p>This function was internal and is deprecated.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 as this is an error to use it.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlPedanticParserDefault"/>xmlPedanticParserDefault ()</h3><pre class="programlisting">int        xmlPedanticParserDefault        (int val)<br/>
 </pre><p>Set and return the previous value for enabling pedantic warnings.</p>
index d56ab17..915ad5b 100644 (file)
@@ -2,7 +2,7 @@
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-    <title>parserInternals: internals routines exported by the parser.</title>
+    <title>parserInternals: internals routines and limits exported by the parser.</title>
     <meta name="generator" content="Libxml2 devhelp stylesheet"/>
     <link rel="start" href="index.html" title="libxml2 Reference Manual"/>
     <link rel="up" href="general.html" title="API"/>
@@ -38,7 +38,7 @@
     <h2>
       <span class="refentrytitle">parserInternals</span>
     </h2>
-    <p>parserInternals - internals routines exported by the parser.</p>
+    <p>parserInternals - internals routines and limits exported by the parser.</p>
     <p>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </p>
     <p>Author(s): Daniel Veillard </p>
     <div class="refsynopsisdiv">
 #define <a href="#IS_LETTER">IS_LETTER</a>(c);
 #define <a href="#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a>(c);
 #define <a href="#MOVETO_STARTTAG">MOVETO_STARTTAG</a>(p);
+#define <a href="#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a>;
 #define <a href="#IS_ASCII_LETTER">IS_ASCII_LETTER</a>(c);
 #define <a href="#IS_DIGIT">IS_DIGIT</a>(c);
+#define <a href="#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a>;
 #define <a href="#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a>;
 #define <a href="#MOVETO_ENDTAG">MOVETO_ENDTAG</a>(p);
 #define <a href="#SKIP_EOL">SKIP_EOL</a>(p);
 #define <a href="#IS_EXTENDER_CH">IS_EXTENDER_CH</a>(c);
 #define <a href="#IS_BLANK_CH">IS_BLANK_CH</a>(c);
 #define <a href="#IS_LETTER_CH">IS_LETTER_CH</a>(c);
+#define <a href="#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a>;
 #define <a href="#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a>;
 #define <a href="#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a>;
 #define <a href="#IS_COMBINING">IS_COMBINING</a>(c);
@@ -263,12 +266,24 @@ void      <a href="#xmlParseEntityDecl">xmlParseEntityDecl</a>            (<a href="libxml2-tre
 </pre><p>Skips the end of line chars.</p><div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>p</tt></i>:</span></td><td>and UTF8 string pointer</td></tr></tbody></table></div>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="XML_MAX_DICTIONARY_LIMIT">Macro </a>XML_MAX_DICTIONARY_LIMIT</h3><pre class="programlisting">#define <a href="#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a>;
+</pre><p>Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use <a href="libxml2-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Introduced in 2.9.0</p>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="XML_MAX_LOOKUP_LIMIT">Macro </a>XML_MAX_LOOKUP_LIMIT</h3><pre class="programlisting">#define <a href="#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a>;
+</pre><p>Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on "unfriendly' content Introduced in 2.9.0</p>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="XML_MAX_NAMELEN">Macro </a>XML_MAX_NAMELEN</h3><pre class="programlisting">#define <a href="#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a>;
 </pre><p>Identifiers can be longer, but this will be more costly at runtime.</p>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="XML_MAX_NAME_LENGTH">Macro </a>XML_MAX_NAME_LENGTH</h3><pre class="programlisting">#define <a href="#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a>;
+</pre><p>Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use <a href="libxml2-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of "unfriendly' content Introduced in 2.9.0</p>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="XML_MAX_TEXT_LENGTH">Macro </a>XML_MAX_TEXT_LENGTH</h3><pre class="programlisting">#define <a href="#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a>;
-</pre><p>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use <a href="libxml2-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it.</p>
+</pre><p>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use <a href="libxml2-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Introduced in 2.9.0</p>
 </div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="XML_SUBSTITUTE_BOTH">Macro </a>XML_SUBSTITUTE_BOTH</h3><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a>;
index a89b58f..23905d0 100644 (file)
@@ -262,7 +262,7 @@ The content of this structure is not made public by the API.
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlRelaxNGValidatePushCData"/>xmlRelaxNGValidatePushCData ()</h3><pre class="programlisting">int  xmlRelaxNGValidatePushCData     (<a href="libxml2-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * data, <br/>                                        int len)<br/>
 </pre><p>check the CData parsed for validation in the current stack</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 otherwise</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 otherwise</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlRelaxNGValidatePushElement"/>xmlRelaxNGValidatePushElement ()</h3><pre class="programlisting">int      xmlRelaxNGValidatePushElement   (<a href="libxml2-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br/>
 </pre><p>Push a new element start on the RelaxNG validation stack.</p>
index af1f654..3cc28c7 100644 (file)
     <div class="refsynopsisdiv">
       <h2>Synopsis</h2>
       <pre class="synopsis">#define <a href="#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a>;
-#define <a href="#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a>;
+#define <a href="#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a>;
 #define <a href="#XML_XML_ID">XML_XML_ID</a>;
 #define <a href="#xmlRootNode">xmlRootNode</a>;
 #define <a href="#XML_GET_LINE">XML_GET_LINE</a>;
 #define <a href="#XML_GET_CONTENT">XML_GET_CONTENT</a>;
 #define <a href="#xmlChildrenNode">xmlChildrenNode</a>;
-#define <a href="#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a>;
+#define <a href="#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a>;
+#define <a href="#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a>;
 typedef struct _xmlNs <a href="#xmlNs">xmlNs</a>;
-typedef <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * <a href="#xmlBufferPtr">xmlBufferPtr</a>;
+typedef struct _xmlElementContent <a href="#xmlElementContent">xmlElementContent</a>;
 typedef <a href="libxml2-tree.html#xmlEnumeration">xmlEnumeration</a> * <a href="#xmlEnumerationPtr">xmlEnumerationPtr</a>;
 typedef struct _xmlBuffer <a href="#xmlBuffer">xmlBuffer</a>;
 typedef <a href="libxml2-tree.html#xmlParserInput">xmlParserInput</a> * <a href="#xmlParserInputPtr">xmlParserInputPtr</a>;
@@ -63,7 +64,7 @@ typedef <a href="libxml2-tree.html#xmlElementType">xmlElementType</a> <a href="#
 typedef enum <a href="#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a>;
 typedef struct _xmlNode <a href="#xmlNode">xmlNode</a>;
 typedef <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * <a href="#xmlDocPtr">xmlDocPtr</a>;
-typedef struct _xmlElementContent <a href="#xmlElementContent">xmlElementContent</a>;
+typedef <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * <a href="#xmlBufferPtr">xmlBufferPtr</a>;
 typedef <a href="libxml2-tree.html#xmlDOMWrapCtxt">xmlDOMWrapCtxt</a> * <a href="#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a>;
 typedef <a href="libxml2-tree.html#xmlRef">xmlRef</a> * <a href="#xmlRefPtr">xmlRefPtr</a>;
 typedef struct _xmlParserInputBuffer <a href="#xmlParserInputBuffer">xmlParserInputBuffer</a>;
@@ -73,6 +74,7 @@ typedef <a href="libxml2-tree.html#xmlNode">xmlNode</a> * <a href="#xmlNodePtr">
 typedef struct _xmlParserCtxt <a href="#xmlParserCtxt">xmlParserCtxt</a>;
 typedef <a href="libxml2-tree.html#xmlDtd">xmlDtd</a> * <a href="#xmlDtdPtr">xmlDtdPtr</a>;
 typedef enum <a href="#xmlAttributeDefault">xmlAttributeDefault</a>;
+typedef struct _xmlBuf <a href="#xmlBuf">xmlBuf</a>;
 typedef struct _xmlNotation <a href="#xmlNotation">xmlNotation</a>;
 typedef enum <a href="#xmlElementType">xmlElementType</a>;
 typedef struct _xmlEntity <a href="#xmlEntity">xmlEntity</a>;
@@ -81,6 +83,7 @@ typedef <a href="libxml2-tree.html#xmlAttribute">xmlAttribute</a> * <a href="#xm
 typedef enum <a href="#xmlElementTypeVal">xmlElementTypeVal</a>;
 typedef <a href="libxml2-tree.html#xmlNotation">xmlNotation</a> * <a href="#xmlNotationPtr">xmlNotationPtr</a>;
 typedef <a href="libxml2-tree.html#xmlElement">xmlElement</a> * <a href="#xmlElementPtr">xmlElementPtr</a>;
+typedef <a href="libxml2-tree.html#xmlBuf">xmlBuf</a> * <a href="#xmlBufPtr">xmlBufPtr</a>;
 typedef enum <a href="#xmlElementContentOccur">xmlElementContentOccur</a>;
 typedef <a href="libxml2-tree.html#xmlAttr">xmlAttr</a> * <a href="#xmlAttrPtr">xmlAttrPtr</a>;
 typedef struct _xmlDoc <a href="#xmlDoc">xmlDoc</a>;
@@ -102,13 +105,14 @@ typedef struct _xmlDtd <a href="#xmlDtd">xmlDtd</a>;
 typedef struct _xmlAttribute <a href="#xmlAttribute">xmlAttribute</a>;
 typedef <a href="libxml2-tree.html#xmlOutputBuffer">xmlOutputBuffer</a> * <a href="#xmlOutputBufferPtr">xmlOutputBufferPtr</a>;
 typedef <a href="libxml2-tree.html#xmlSAXHandler">xmlSAXHandler</a> * <a href="#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a>;
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocCopyNode">xmlDocCopyNode</a>            (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int extended);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocCopyNode">xmlDocCopyNode</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int extended);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocRawNode">xmlNewDocRawNode</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetProp">xmlGetProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBufContent">xmlBufContent</a>              (const <a href="libxml2-tree.html#xmlBuf">xmlBuf</a> * buf);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlNewNsPropEatName">xmlNewNsPropEatName</a>  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlStringGetNodeList">xmlStringGetNodeList</a>        (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewCDataBlock">xmlNewCDataBlock</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br/>                                     int len);
 void   <a href="#xmlBufferWriteCHAR">xmlBufferWriteCHAR</a>            (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * string);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetBase">xmlNodeGetBase</a>            (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetBase">xmlNodeGetBase</a>            (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
 void   <a href="#xmlBufferEmpty">xmlBufferEmpty</a>                    (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBuildQName">xmlBuildQName</a>              (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ncname, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                      <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * memory, <br/>                                    int len);
 int    <a href="#xmlValidateNMToken">xmlValidateNMToken</a>            (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int space);
@@ -116,21 +120,22 @@ int       <a href="#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a>                (const char * file
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlAddSibling">xmlAddSibling</a>              (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem);
 <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>      <a href="#xmlBufferCreate">xmlBufferCreate</a>          (void);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocFragment">xmlNewDocFragment</a>      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocGetRootElement">xmlDocGetRootElement</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlStringGetNodeList">xmlStringGetNodeList</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocGetRootElement">xmlDocGetRootElement</a>        (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetProp">xmlGetProp</a>            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int    <a href="#xmlValidateName">xmlValidateName</a>                  (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int space);
-void   <a href="#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a>        (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlBufEnd">xmlBufEnd</a>              (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf);
 int    <a href="#xmlValidateQName">xmlValidateQName</a>                (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int space);
-<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlHasNsProp">xmlHasNsProp</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace);
+<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlHasNsProp">xmlHasNsProp</a>                (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlAddPrevSibling">xmlAddPrevSibling</a>      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem);
 int    <a href="#xmlBufferAddHead">xmlBufferAddHead</a>                (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br/>                                         int len);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewPI">xmlNewPI</a>                (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 void   <a href="#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a>      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br/>                                      <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br/>                                      int * doc_txt_len, <br/>                                        const char * txt_encoding, <br/>                                        int format);
+<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlSetProp">xmlSetProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
 unsigned long  <a href="#xmlChildElementCount">xmlChildElementCount</a>        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent);
 void   <a href="#xmlElemDump">xmlElemDump</a>                  (FILE * f, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
 int    <a href="#xmlSaveFormatFileTo">xmlSaveFormatFileTo</a>          (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br/>                                        <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br/>                                  const char * encoding, <br/>                                    int format);
-<a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>    <a href="#xmlGetIntSubset">xmlGetIntSubset</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
-int    <a href="#xmlNodeBufGetContent">xmlNodeBufGetContent</a>                (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
+<a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>    <a href="#xmlGetIntSubset">xmlGetIntSubset</a>          (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc);
+int    <a href="#xmlNodeBufGetContent">xmlNodeBufGetContent</a>                (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br/>                                         const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNextElementSibling">xmlNextElementSibling</a>      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
 void   <a href="#xmlBufferWriteChar">xmlBufferWriteChar</a>            (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const char * string);
 void   <a href="#xmlBufferFree">xmlBufferFree</a>                      (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf);
@@ -151,37 +156,38 @@ int       <a href="#xmlValidateNCName">xmlValidateNCName</a>              (const <a href="libxml2-
 int    <a href="#xmlGetCompressMode">xmlGetCompressMode</a>            (void);
 int    <a href="#xmlNodeDump">xmlNodeDump</a>                  (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int level, <br/>                                        int format);
 <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>      <a href="#xmlBufferCreateSize">xmlBufferCreateSize</a>  (size_t size);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetString">xmlNodeListGetString</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br/>                                       int inLine);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetString">xmlNodeListGetString</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * list, <br/>                                     int inLine);
 void   <a href="#xmlSetCompressMode">xmlSetCompressMode</a>            (int mode);
 void   <a href="#xmlSetTreeDoc">xmlSetTreeDoc</a>                      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br/>                                       <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
 int    <a href="#xmlDOMWrapAdoptNode">xmlDOMWrapAdoptNode</a>          (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> sourceDoc, <br/>                                    <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> destDoc, <br/>                                      <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> destParent, <br/>                                         int options);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlCopyNodeList">xmlCopyNodeList</a>          (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlCopyNodeList">xmlCopyNodeList</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocNodeEatName">xmlNewDocNodeEatName</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlAddChildList">xmlAddChildList</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br/>                                     <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNodePath">xmlGetNodePath</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNodePath">xmlGetNodePath</a>            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node);
 void   <a href="#xmlFreePropList">xmlFreePropList</a>                  (<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
 void   <a href="#xmlNodeAddContent">xmlNodeAddContent</a>              (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 int    <a href="#xmlUnsetNsProp">xmlUnsetNsProp</a>                    (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlFirstElementChild">xmlFirstElementChild</a>        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlAddNextSibling">xmlAddNextSibling</a>      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem);
-int    <a href="#xmlIsBlankNode">xmlIsBlankNode</a>                    (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+int    <a href="#xmlIsBlankNode">xmlIsBlankNode</a>                    (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node);
 <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a>      <a href="#xmlNewGlobalNs">xmlNewGlobalNs</a>            (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * href, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix);
 int    <a href="#xmlBufferDump">xmlBufferDump</a>                      (FILE * file, <br/>                                      <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetContent">xmlNodeGetContent</a>      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetContent">xmlNodeGetContent</a>      (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
 <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a>    <a href="#xmlCopyDoc">xmlCopyDoc</a>            (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int recursive);
 <a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a>    <a href="#xmlDOMWrapNewCtxt">xmlDOMWrapNewCtxt</a>      (void);
 void   <a href="#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br/>                                      <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br/>                                      int * doc_txt_len, <br/>                                        const char * txt_encoding);
+int    <a href="#xmlBufGetNodeContent">xmlBufGetNodeContent</a>                (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlTextMerge">xmlTextMerge</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br/>                                      <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> second);
 void   <a href="#xmlDocDumpMemory">xmlDocDumpMemory</a>                (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br/>                                  <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br/>                                      int * size);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocPI">xmlNewDocPI</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 void   <a href="#xmlFreeNs">xmlFreeNs</a>                      (<a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> cur);
 int    <a href="#xmlDocDump">xmlDocDump</a>                    (FILE * f, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur);
 void   <a href="#xmlFreeProp">xmlFreeProp</a>                  (<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNoNsProp">xmlGetNoNsProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNoNsProp">xmlGetNoNsProp</a>            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlSplitQName2">xmlSplitQName2</a>            (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** prefix);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlNewProp">xmlNewProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
 int    <a href="#xmlTextConcat">xmlTextConcat</a>                      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br/>                                     int len);
-int    <a href="#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
+int    <a href="#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a>          (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
 int    <a href="#xmlBufferShrink">xmlBufferShrink</a>                  (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    unsigned int len);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlPreviousElementSibling">xmlPreviousElementSibling</a>      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
 void   <a href="#xmlNodeSetContentLen">xmlNodeSetContentLen</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br/>                                     int len);
@@ -190,18 +196,20 @@ void      <a href="#xmlBufferWriteQuotedString">xmlBufferWriteQuotedString</a>    (<a hr
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlCopyProp">xmlCopyProp</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br/>                                     <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlReplaceNode">xmlReplaceNode</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> old, <br/>                                        <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
 void   <a href="#xmlSetDocCompressMode">xmlSetDocCompressMode</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int mode);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlCopyNode">xmlCopyNode</a>          (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                         int extended);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlCopyNode">xmlCopyNode</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       int extended);
 void   <a href="#xmlUnlinkNode">xmlUnlinkNode</a>                      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
 const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlSplitQName3">xmlSplitQName3</a>            (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int * len);
 typedef <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> <a href="#xmlDOMWrapAcquireNsFunction">xmlDOMWrapAcquireNsFunction</a>       (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                                 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                               const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nsName, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nsPrefix);
+size_t <a href="#xmlBufUse">xmlBufUse</a>                      (const <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocSetRootElement">xmlDocSetRootElement</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> root);
-long   <a href="#xmlGetLineNo">xmlGetLineNo</a>                        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
-const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlBufferContent">xmlBufferContent</a>        (const <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf);
+long   <a href="#xmlGetLineNo">xmlGetLineNo</a>                        (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node);
+const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlBufferContent">xmlBufferContent</a>        (const <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * buf);
 int    <a href="#xmlRemoveProp">xmlRemoveProp</a>                      (<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlLastElementChild">xmlLastElementChild</a>  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetLang">xmlNodeGetLang</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
-int    <a href="#xmlGetDocCompressMode">xmlGetDocCompressMode</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNsProp">xmlGetNsProp</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeGetLang">xmlNodeGetLang</a>            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur);
+int    <a href="#xmlGetDocCompressMode">xmlGetDocCompressMode</a>              (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc);
+size_t <a href="#xmlBufNodeDump">xmlBufNodeDump</a>                    (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int level, <br/>                                        int format);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlGetNsProp">xmlGetNsProp</a>                (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlNewDocProp">xmlNewDocProp</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
 void   <a href="#xmlFreeNode">xmlFreeNode</a>                  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlNewNsProp">xmlNewNsProp</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
@@ -210,12 +218,12 @@ void      <a href="#xmlDOMWrapFreeCtxt">xmlDOMWrapFreeCtxt</a>            (<a href="libxml2-tre
 void   <a href="#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a>        (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    <a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewChild">xmlNewChild</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br/>                                     <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a>      <a href="#xmlSearchNs">xmlSearchNs</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a>  (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int len);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a>  (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int len);
 int    <a href="#xmlSaveFormatFile">xmlSaveFormatFile</a>              (const char * filename, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br/>                                  int format);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlCopyPropList">xmlCopyPropList</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br/>                                     <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur);
 int    <a href="#xmlDocFormatDump">xmlDocFormatDump</a>                (FILE * f, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br/>                                  int format);
 void   <a href="#xmlNodeSetSpacePreserve">xmlNodeSetSpacePreserve</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int val);
-<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlHasProp">xmlHasProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlHasProp">xmlHasProp</a>            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int    <a href="#xmlBufferCat">xmlBufferCat</a>                        (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str);
 <a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>    <a href="#xmlCreateIntSubset">xmlCreateIntSubset</a>    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * SystemID);
 <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a>    <a href="#xmlNewDoc">xmlNewDoc</a>              (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * version);
@@ -225,32 +233,33 @@ int       <a href="#xmlBufferCat">xmlBufferCat</a>                        (<a href="libxml2-tree.html#xmlBu
 int    <a href="#xmlBufferResize">xmlBufferResize</a>                  (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    unsigned int size);
 void   <a href="#xmlNodeSetBase">xmlNodeSetBase</a>                    (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * uri);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewComment">xmlNewComment</a>              (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
-int    <a href="#xmlBufferLength">xmlBufferLength</a>                  (const <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf);
+int    <a href="#xmlBufferLength">xmlBufferLength</a>                  (const <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * buf);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewText">xmlNewText</a>            (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 int    <a href="#xmlUnsetProp">xmlUnsetProp</a>                        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 <a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a>    <a href="#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a>        (void);
 int    <a href="#xmlSaveFile">xmlSaveFile</a>                  (const char * filename, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocCopyNodeList">xmlDocCopyNodeList</a>    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlDocCopyNodeList">xmlDocCopyNodeList</a>    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
 void   <a href="#xmlSetNs">xmlSetNs</a>                        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns);
 <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a>      <a href="#xmlNewNs">xmlNewNs</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * href, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix);
 int    <a href="#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a>                (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       int options);
 void   <a href="#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a>    (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * string);
 <a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>    <a href="#xmlCopyDtd">xmlCopyDtd</a>            (<a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocText">xmlNewDocText</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
-<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetRawString">xmlNodeListGetRawString</a>  (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br/>                                       int inLine);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocText">xmlNewDocText</a>              (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
+<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNodeListGetRawString">xmlNodeListGetRawString</a>  (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * list, <br/>                                     int inLine);
 <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>      <a href="#xmlBufferCreateStatic">xmlBufferCreateStatic</a>      (void * mem, <br/>                                       size_t size);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewReference">xmlNewReference</a>          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewReference">xmlNewReference</a>          (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int    <a href="#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a>      (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br/>                                       int options);
 int    <a href="#xmlBufferCCat">xmlBufferCCat</a>                      (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const char * str);
-<a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> *    <a href="#xmlGetNsList">xmlGetNsList</a>                (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
+<a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> *    <a href="#xmlGetNsList">xmlGetNsList</a>                (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node);
 int    <a href="#xmlBufferGrow">xmlBufferGrow</a>                      (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    unsigned int len);
-int    <a href="#xmlNodeIsText">xmlNodeIsText</a>                      (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
-<a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlSetProp">xmlSetProp</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
+int    <a href="#xmlNodeIsText">xmlNodeIsText</a>                      (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node);
+void   <a href="#xmlSetBufferAllocationScheme">xmlSetBufferAllocationScheme</a>        (<a href="libxml2-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme);
 int    <a href="#xmlIsXHTML">xmlIsXHTML</a>                    (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * systemID, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * publicID);
 void   <a href="#xmlNodeSetLang">xmlNodeSetLang</a>                    (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * lang);
 void   <a href="#xmlFreeDtd">xmlFreeDtd</a>                    (<a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a> cur);
 void   <a href="#xmlFreeNodeList">xmlFreeNodeList</a>                  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur);
 void   <a href="#xmlFreeDoc">xmlFreeDoc</a>                    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur);
+size_t <a href="#xmlBufShrink">xmlBufShrink</a>                        (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  size_t len);
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocNode">xmlNewDocNode</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 int    <a href="#xmlSaveFileEnc">xmlSaveFileEnc</a>                    (const char * filename, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br/>                                  const char * encoding);
 <a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  <a href="#xmlSetNsProp">xmlSetNsProp</a>                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value);
@@ -260,7 +269,7 @@ void        <a href="#xmlNodeSetName">xmlNodeSetName</a>                    (<a href="libxml2-tree.html#
 <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlNewDocTextLen">xmlNewDocTextLen</a>        (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br/>                                     int len);
 <a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>    <a href="#xmlNewDtd">xmlNewDtd</a>              (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * SystemID);
 void   <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> cur);
-<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlGetLastChild">xmlGetLastChild</a>          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent);
+<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  <a href="#xmlGetLastChild">xmlGetLastChild</a>          (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * parent);
 </pre>
     </div>
     <div class="refsect1" lang="en">
@@ -273,6 +282,10 @@ void       <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>default buffer size 4000.</p>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="LIBXML2_NEW_BUFFER">Macro </a>LIBXML2_NEW_BUFFER</h3><pre class="programlisting">#define <a href="#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a>;
+</pre><p>Macro used to express that the API use the new buffers for <a href="libxml2-tree.html#xmlParserInputBuffer">xmlParserInputBuffer</a> and xmlOutputBuffer. The change was introduced in 2.9.0.</p>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="XML_GET_CONTENT">Macro </a>XML_GET_CONTENT</h3><pre class="programlisting">#define <a href="#XML_GET_CONTENT">XML_GET_CONTENT</a>;
 </pre><p>Macro to extract the content pointer of a node.</p>
 </div>
@@ -371,6 +384,16 @@ void       <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p/>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBuf">Structure </a>xmlBuf</h3><pre class="programlisting">struct _xmlBuf {
+The content of this structure is not made public by the API.
+} xmlBuf;
+</pre><p/>
+</div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufPtr">Typedef </a>xmlBufPtr</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlBuf">xmlBuf</a> * xmlBufPtr;
+</pre><p>A pointer to a buffer structure, the actual structure internals are not public</p>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlBuffer">Structure </a>xmlBuffer</h3><pre class="programlisting">struct _xmlBuffer {
     <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     content : The buffer content UTF8
     unsigned int       use     : The buffer size used
@@ -592,7 +615,7 @@ void        <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
     struct _xmlEntity *        nexte   : unused
     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *       URI     : the full URI as computed
     int        owner   : does the entity own the childrens
-    int        checked : was the entity content checked this is also used to count entites * r
+    int        checked : was the entity content checked this is also used to count entities *
 } xmlEntity;
 </pre><p/>
 </div>
@@ -688,8 +711,8 @@ void        <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
     <a href="libxml2-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a>     writecallback
     <a href="libxml2-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a>     closecallback
     <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>    encoder : I18N conversions to UTF-8
-    <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>  buffer  : Local buffer encoded in UTF-8 or ISOLatin
-    <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>  conv    : if encoder != NULL buffer for output
+    <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a>        buffer  : Local buffer encoded in UTF-8 or ISOLatin
+    <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a>        conv    : if encoder != NULL buffer for output
     int        written : total number of byte written
     int        error
 } xmlOutputBuffer;
@@ -789,6 +812,7 @@ void        <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
     int        nodeInfoMax     : Max depth of the parsing stack
     <a href="libxml2-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> *    nodeInfoTab     : array of nodeInfos
     int        input_id        : we need to label inputs
+    unsigned long      sizeentcopy     : volume of entity copy
 } xmlParserCtxt;
 </pre><p/>
 </div>
@@ -822,8 +846,8 @@ void        <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
     <a href="libxml2-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a> readcallback
     <a href="libxml2-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a>       closecallback
     <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>    encoder : I18N conversions to UTF-8
-    <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>  buffer  : Local buffer encoded in UTF-8
-    <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a>  raw     : if encoder != NULL buffer for raw input
+    <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a>        buffer  : Local buffer encoded in UTF-8
+    <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a>        raw     : if encoder != NULL buffer for raw input
     int        compressed      : -1=unknown, 0=not compressed, 1=compressed
     int        error
     unsigned long      rawconsumed     : amount consumed from raw
@@ -935,6 +959,30 @@ void       <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Serialize text <a href="libxml2-SAX.html#attribute">attribute</a> values to an xml simple buffer</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> node</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the text content</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufContent"/>xmlBufContent ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlBufContent           (const <a href="libxml2-tree.html#xmlBuf">xmlBuf</a> * buf)<br/>
+</pre><p>Function to extract the content of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal content</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufEnd"/>xmlBufEnd ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlBufEnd               (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf)<br/>
+</pre><p>Function to extract the end of the content of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the end of the internal content or NULL in case of error</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufGetNodeContent"/>xmlBufGetNodeContent ()</h3><pre class="programlisting">int        xmlBufGetNodeContent            (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
+</pre><p>Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>a buffer <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a></td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufNodeDump"/>xmlBufNodeDump ()</h3><pre class="programlisting">size_t xmlBufNodeDump                  (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int level, <br/>                                        int format)<br/>
+</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written to the buffer, in case of error 0 is returned or @buf stores the error</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufShrink"/>xmlBufShrink ()</h3><pre class="programlisting">size_t     xmlBufShrink                    (<a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br/>                                  size_t len)<br/>
+</pre><p>Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> to remove</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte removed or 0 in case of failure</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufUse"/>xmlBufUse ()</h3><pre class="programlisting">size_t   xmlBufUse                       (const <a href="libxml2-tree.html#xmlBufPtr">xmlBufPtr</a> buf)<br/>
+</pre><p>Function to get the length of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the length of data in the internal content</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlBufferAdd"/>xmlBufferAdd ()</h3><pre class="programlisting">int        xmlBufferAdd                    (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br/>                                         int len)<br/>
 </pre><p>Add a string range to an XML buffer. if len == -1, the length of str is recomputed.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of #xmlChar to add</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div></div>
@@ -951,7 +999,7 @@ void        <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Append a zero terminated string to an XML buffer.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to add to</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlBufferContent"/>xmlBufferContent ()</h3><pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *       xmlBufferContent        (const <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufferContent"/>xmlBufferContent ()</h3><pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *       xmlBufferContent        (const <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * buf)<br/>
 </pre><p>Function to extract the content of a buffer</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal content</td></tr></tbody></table></div></div>
         <hr/>
@@ -987,7 +1035,7 @@ void       <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Grow the available space of an XML buffer.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the minimum free size to allocate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new available space or -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlBufferLength"/>xmlBufferLength ()</h3><pre class="programlisting">int  xmlBufferLength                 (const <a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlBufferLength"/>xmlBufferLength ()</h3><pre class="programlisting">int  xmlBufferLength                 (const <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> * buf)<br/>
 </pre><p>Function to get the length of a buffer</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the length of data in the internal content</td></tr></tbody></table></div></div>
         <hr/>
@@ -1039,11 +1087,11 @@ void    <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Do a copy of an namespace list.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlCopyNode"/>xmlCopyNode ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNode             (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                         int extended)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlCopyNode"/>xmlCopyNode ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNode             (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       int extended)<br/>
 </pre><p>Do a copy of the node.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlCopyNodeList"/>xmlCopyNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNodeList         (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlCopyNodeList"/>xmlCopyNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNodeList         (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
 </pre><p>Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the first node in the list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
@@ -1060,7 +1108,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the DTD name</td></tr><tr><td><span class="term"><i><tt>ExternalID</tt></i>:</span></td><td>the external (PUBLIC) ID</td></tr><tr><td><span class="term"><i><tt>SystemID</tt></i>:</span></td><td>the system ID</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new DTD structure</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDOMWrapAdoptNode"/>xmlDOMWrapAdoptNode ()</h3><pre class="programlisting">int  xmlDOMWrapAdoptNode             (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> sourceDoc, <br/>                                    <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> destDoc, <br/>                                      <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> destParent, <br/>                                         int options)<br/>
-</pre><p>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unliked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml2-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
+</pre><p>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml2-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the optional context for custom processing</td></tr><tr><td><span class="term"><i><tt>sourceDoc</tt></i>:</span></td><td>the optional sourceDoc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to start with</td></tr><tr><td><span class="term"><i><tt>destDoc</tt></i>:</span></td><td>the destination doc</td></tr><tr><td><span class="term"><i><tt>destParent</tt></i>:</span></td><td>the optional new parent of @node in @destDoc</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>option flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the operation succeeded, 1 if a node of unsupported type was given, 2 if a node of not yet supported type was given and -1 on API/internal errors.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDOMWrapCloneNode"/>xmlDOMWrapCloneNode ()</h3><pre class="programlisting">int  xmlDOMWrapCloneNode             (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> sourceDoc, <br/>                                    <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> * resNode, <br/>                                  <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> destDoc, <br/>                                      <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> destParent, <br/>                                         int deep, <br/>                                         int options)<br/>
@@ -1073,7 +1121,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDOMWrapNewCtxt"/>xmlDOMWrapNewCtxt ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a>      xmlDOMWrapNewCtxt       (void)<br/>
 </pre><p>Allocates and initializes a new DOM-wrapper context.</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> or NULL in case of an internal errror.</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> or NULL in case of an internal error.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlDOMWrapReconcileNamespaces"/>xmlDOMWrapReconcileNamespaces ()</h3><pre class="programlisting">int      xmlDOMWrapReconcileNamespaces   (<a href="libxml2-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br/>                                       int options)<br/>
 </pre><p>Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml2-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
@@ -1083,11 +1131,11 @@ void    <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Unlinks the given node from its owner. This will substitute ns-references to node-&gt;nsDef for ns-references to doc-&gt;oldNs, thus ensuring the removed branch to be autark wrt ns-references. NOTE: This function was not intensively tested.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a DOM wrapper context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the doc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to be removed.</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>set of options, unused at the moment</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, 1 if the node is not supported, -1 on API and internal errors.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlDocCopyNode"/>xmlDocCopyNode ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNode          (const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                         <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int extended)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlDocCopyNode"/>xmlDocCopyNode ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNode          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  int extended)<br/>
 </pre><p>Do a copy of the node to a given document.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlDocCopyNodeList"/>xmlDocCopyNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNodeList      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlDocCopyNodeList"/>xmlDocCopyNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNodeList      (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
 </pre><p>Do a recursive copy of the node list.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the target document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the first node in the list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div></div>
         <hr/>
@@ -1115,7 +1163,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Dump an XML document to an open FILE.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlDocGetRootElement"/>xmlDocGetRootElement ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlDocGetRootElement    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlDocGetRootElement"/>xmlDocGetRootElement ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlDocGetRootElement    (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc)<br/>
 </pre><p>Get the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the #xmlNodePtr for the root or NULL</td></tr></tbody></table></div></div>
         <hr/>
@@ -1171,51 +1219,51 @@ void    <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>get the default compression mode used, ZLIB based.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetDocCompressMode"/>xmlGetDocCompressMode ()</h3><pre class="programlisting">int      xmlGetDocCompressMode           (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetDocCompressMode"/>xmlGetDocCompressMode ()</h3><pre class="programlisting">int      xmlGetDocCompressMode           (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc)<br/>
 </pre><p>get the compression ratio for a document, ZLIB based</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetIntSubset"/>xmlGetIntSubset ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>  xmlGetIntSubset         (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetIntSubset"/>xmlGetIntSubset ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlDtdPtr">xmlDtdPtr</a>  xmlGetIntSubset         (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc)<br/>
 </pre><p>Get the internal subset of a document</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the DTD structure or NULL if not found</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetLastChild"/>xmlGetLastChild ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlGetLastChild         (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> parent)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetLastChild"/>xmlGetLastChild ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlGetLastChild         (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * parent)<br/>
 </pre><p>Search the last child of a node.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last child or NULL if none.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetLineNo"/>xmlGetLineNo ()</h3><pre class="programlisting">long       xmlGetLineNo                    (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
-</pre><p>Get line number of @node. This requires activation of this option before invoking the parser by calling xmlLineNumbersDefault(1)</p>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetLineNo"/>xmlGetLineNo ()</h3><pre class="programlisting">long       xmlGetLineNo                    (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node)<br/>
+</pre><p>Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if <a href="libxml2-parser.html#XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a> parser option was used</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>valid node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the line number if successful, -1 otherwise</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetNoNsProp"/>xmlGetNoNsProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNoNsProp          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetNoNsProp"/>xmlGetNoNsProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNoNsProp          (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Search and get the value of an <a href="libxml2-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml2-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to <a href="libxml2-tree.html#xmlGetProp">xmlGetProp</a> except it will accept only an <a href="libxml2-SAX.html#attribute">attribute</a> in no namespace.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetNodePath"/>xmlGetNodePath ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNodePath          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetNodePath"/>xmlGetNodePath ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetNodePath          (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node)<br/>
 </pre><p>Build a structure based Path for the given node</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new path or NULL in case of error. The caller must free the returned string</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetNsList"/>xmlGetNsList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> *        xmlGetNsList            (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetNsList"/>xmlGetNsList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> *        xmlGetNsList            (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node)<br/>
 </pre><p>Search all the namespace applying to a given element.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetNsProp"/>xmlGetNsProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlGetNsProp            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetNsProp"/>xmlGetNsProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlGetNsProp            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br/>
 </pre><p>Search and get the value of an <a href="libxml2-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml2-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml2-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlGetProp"/>xmlGetProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetProp              (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlGetProp"/>xmlGetProp ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlGetProp              (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Search and get the value of an <a href="libxml2-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml2-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlHasNsProp"/>xmlHasNsProp ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>      xmlHasNsProp            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHasNsProp"/>xmlHasNsProp ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>      xmlHasNsProp            (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br/>
 </pre><p>Search for an <a href="libxml2-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml2-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml2-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> or the <a href="libxml2-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlHasProp"/>xmlHasProp ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlHasProp              (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlHasProp"/>xmlHasProp ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlHasProp              (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Search an <a href="libxml2-SAX.html#attribute">attribute</a> associated to a node This function also looks in DTD <a href="libxml2-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#attribute">attribute</a> or the <a href="libxml2-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlIsBlankNode"/>xmlIsBlankNode ()</h3><pre class="programlisting">int    xmlIsBlankNode                  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlIsBlankNode"/>xmlIsBlankNode ()</h3><pre class="programlisting">int    xmlIsBlankNode                  (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node)<br/>
 </pre><p>Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div></div>
         <hr/>
@@ -1275,7 +1323,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Creation of a new node element within a document. @ns and @content are optional (NULL).</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNewDocText"/>xmlNewDocText ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>    xmlNewDocText           (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNewDocText"/>xmlNewDocText ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>    xmlNewDocText           (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content)<br/>
 </pre><p>Creation of a new text node within a document.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div></div>
         <hr/>
@@ -1300,7 +1348,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object, with pointer @name as new node's name. Use xmlNewNode() if a copy of @name string is is needed as new node's name.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlNewNs"/>xmlNewNs ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a>  xmlNewNs                (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * href, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br/>
-</pre><p>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. We use href==NULL in the case of an element creation where the namespace was not defined.</p>
+</pre><p>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL. We use href==NULL in the case of an element creation where the namespace was not defined.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the element carrying the namespace</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the URI associated</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix for the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new namespace pointer or NULL</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlNewNsProp"/>xmlNewNsProp ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlAttrPtr">xmlAttrPtr</a>      xmlNewNsProp            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value)<br/>
@@ -1319,7 +1367,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Create a new property carried by a node.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml2-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml2-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml2-SAX.html#attribute">attribute</a></td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNewReference"/>xmlNewReference ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlNewReference         (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNewReference"/>xmlNewReference ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlNewReference         (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Creation of a new <a href="libxml2-SAX.html#reference">reference</a> node.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml2-SAX.html#reference">reference</a> name, or the <a href="libxml2-SAX.html#reference">reference</a> string with &amp; and ;</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div></div>
         <hr/>
@@ -1347,43 +1395,43 @@ void    <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 </pre><p>Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size of @content</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeBufGetContent"/>xmlNodeBufGetContent ()</h3><pre class="programlisting">int        xmlNodeBufGetContent            (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeBufGetContent"/>xmlNodeBufGetContent ()</h3><pre class="programlisting">int        xmlNodeBufGetContent            (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br/>                                         const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
 </pre><p>Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlNodeDump"/>xmlNodeDump ()</h3><pre class="programlisting">int  xmlNodeDump                     (<a href="libxml2-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int level, <br/>                                        int format)<br/>
-</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called Since this is using <a href="libxml2-tree.html#xmlBuffer">xmlBuffer</a> structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written to the buffer or -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlNodeDumpOutput"/>xmlNodeDumpOutput ()</h3><pre class="programlisting">void     xmlNodeDumpOutput               (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br/>                                        <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br/>                                        int level, <br/>                                        int format, <br/>                                       const char * encoding)<br/>
 </pre><p>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml2-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>an optional encoding string</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetBase"/>xmlNodeGetBase ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetBase          (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetBase"/>xmlNodeGetBase ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetBase          (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
 </pre><p>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc-&gt;URL in this case</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the node pertains to</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetContent"/>xmlNodeGetContent ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlNodeGetContent       (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetContent"/>xmlNodeGetContent ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlNodeGetContent       (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
 </pre><p>Read the value of a node, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetLang"/>xmlNodeGetLang ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetLang          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetLang"/>xmlNodeGetLang ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetLang          (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
 </pre><p>Searches the language of a node, i.e. the values of the xml:lang <a href="libxml2-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetSpacePreserve"/>xmlNodeGetSpacePreserve ()</h3><pre class="programlisting">int  xmlNodeGetSpacePreserve         (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeGetSpacePreserve"/>xmlNodeGetSpacePreserve ()</h3><pre class="programlisting">int  xmlNodeGetSpacePreserve         (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * cur)<br/>
 </pre><p>Searches the space preserving behaviour of a node, i.e. the values of the xml:space <a href="libxml2-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeIsText"/>xmlNodeIsText ()</h3><pre class="programlisting">int      xmlNodeIsText                   (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeIsText"/>xmlNodeIsText ()</h3><pre class="programlisting">int      xmlNodeIsText                   (const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * node)<br/>
 </pre><p>Is this node a Text node ?</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeListGetRawString"/>xmlNodeListGetRawString ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *       xmlNodeListGetRawString (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br/>                                       int inLine)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeListGetRawString"/>xmlNodeListGetRawString ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *       xmlNodeListGetRawString (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * list, <br/>                                     int inLine)<br/>
 </pre><p>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn't do any character encoding handling.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlNodeListGetString"/>xmlNodeListGetString ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlNodeListGetString    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br/>                                       int inLine)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlNodeListGetString"/>xmlNodeListGetString ()</h3><pre class="programlisting"><a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlNodeListGetString    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-tree.html#xmlNode">xmlNode</a> * list, <br/>                                     int inLine)<br/>
 </pre><p>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div></div>
         <hr/>
@@ -1497,13 +1545,13 @@ void    <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSplitQName3"/>xmlSplitQName3 ()</h3><pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   xmlSplitQName3          (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int * len)<br/>
 </pre><p>parse an XML qualified name string,i</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the full QName</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an int *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if it is not a Qualified Name, otherwise, update len with the lenght in byte of the prefix and return a pointer to the start of the name without the prefix</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the full QName</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an int *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if it is not a Qualified Name, otherwise, update len with the length in byte of the prefix and return a pointer to the start of the name without the prefix</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlStringGetNodeList"/>xmlStringGetNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlStringGetNodeList    (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlStringGetNodeList"/>xmlStringGetNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlStringGetNodeList    (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value)<br/>
 </pre><p>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml2-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlStringLenGetNodeList"/>xmlStringLenGetNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlStringLenGetNodeList (<a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int len)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlStringLenGetNodeList"/>xmlStringLenGetNodeList ()</h3><pre class="programlisting"><a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlStringLenGetNodeList (const <a href="libxml2-tree.html#xmlDoc">xmlDoc</a> * doc, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * value, <br/>                                       int len)<br/>
 </pre><p>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the text</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the string value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div></div>
         <hr/>
@@ -1516,7 +1564,7 @@ void      <a href="#xmlFreeNsList">xmlFreeNsList</a>                      (<a href="libxml2-tree.html#xm
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>first</tt></i>:</span></td><td>the first text node</td></tr><tr><td><span class="term"><i><tt>second</tt></i>:</span></td><td>the second text node being merged</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the first text node augmented</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlUnlinkNode"/>xmlUnlinkNode ()</h3><pre class="programlisting">void     xmlUnlinkNode                   (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br/>
-</pre><p>Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it.</p>
+</pre><p>Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can't be unlinked as they do not have pointer to their parent.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlUnsetNsProp"/>xmlUnsetNsProp ()</h3><pre class="programlisting">int    xmlUnsetNsProp                  (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
index 3480214..fcb68e7 100644 (file)
@@ -512,7 +512,7 @@ The content of this structure is not made public by the API.
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlValidatePushCData"/>xmlValidatePushCData ()</h3><pre class="programlisting">int        xmlValidatePushCData            (<a href="libxml2-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * data, <br/>                                        int len)<br/>
 </pre><p>check the CData parsed for validation in the current stack</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlValidatePushElement"/>xmlValidatePushElement ()</h3><pre class="programlisting">int    xmlValidatePushElement          (<a href="libxml2-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br/>                                    <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br/>                                  <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * qname)<br/>
 </pre><p>Push a new element start on the validation stack.</p>
index 8c41d1d..5bccc27 100644 (file)
@@ -82,9 +82,11 @@ void *       <a href="#xmlIOHTTPOpen">xmlIOHTTPOpen</a>                      (const char * filename);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlNormalizeWindowsPath">xmlNormalizeWindowsPath</a>  (const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * path);
 typedef int <a href="#xmlInputReadCallback">xmlInputReadCallback</a>           (void * context, <br/>                                   char * buffer, <br/>                                    int len);
 <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a>        <a href="#xmlParserInputBufferCreateStatic">xmlParserInputBufferCreateStatic</a>        (const char * mem, <br/>                                                         int size, <br/>                                                         <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc);
+const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *   <a href="#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a>      (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out);
 int    <a href="#xmlIOHTTPClose">xmlIOHTTPClose</a>                    (void * context);
 int    <a href="#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a>    (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br/>                                         <a href="libxml2-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escaping);
 <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a>  <a href="#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a>      (const char * URI, <br/>                                                         <a href="libxml2-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br/>                                                  int compression);
+size_t <a href="#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a>            (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out);
 void   <a href="#xmlCleanupOutputCallbacks">xmlCleanupOutputCallbacks</a>      (void);
 typedef void * <a href="#xmlInputOpenCallback">xmlInputOpenCallback</a>                (char const * filename);
 int    <a href="#xmlParserInputBufferRead">xmlParserInputBufferRead</a>        (<a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> in, <br/>                                       int len);
@@ -255,6 +257,14 @@ void *     <a href="#xmlIOHTTPOpenW">xmlIOHTTPOpenW</a>                    (const char * post_uri, <b
 </pre><p>flushes the output I/O channel</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlOutputBufferGetContent"/>xmlOutputBufferGetContent ()</h3><pre class="programlisting">const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> *     xmlOutputBufferGetContent       (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br/>
+</pre><p>Gives a pointer to the data currently held in the output buffer</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the data or NULL in case of error</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlOutputBufferGetSize"/>xmlOutputBufferGetSize ()</h3><pre class="programlisting">size_t xmlOutputBufferGetSize          (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br/>
+</pre><p>Gives the length of the data currently held in the output buffer</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case or error or no data is held, the size otherwise</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlOutputBufferWrite"/>xmlOutputBufferWrite ()</h3><pre class="programlisting">int        xmlOutputBufferWrite            (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br/>                                        int len, <br/>                                  const char * buf)<br/>
 </pre><p>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered parser output</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size in bytes of the array.</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars immediately written, or -1 in case of error.</td></tr></tbody></table></div></div>
index cf445dd..13bab8a 100644 (file)
@@ -84,7 +84,7 @@ void  <a href="#xmlResetError">xmlResetError</a>                      (<a href="libxml2-xmlerror.htm
     char *     str2    : extra string information
     char *     str3    : extra string information
     int        int1    : extra number information
-    int        int2    : column number of the error or 0 if N/A (todo: rename this field when
+    int        int2    : error column # or 0 if N/A (todo: rename field when we would brk ABI)
     void *     ctxt    : the parser context if available
     void *     node    : the node in the tree
 } xmlError;
@@ -120,7 +120,9 @@ void        <a href="#xmlResetError">xmlResetError</a>                      (<a href="libxml2-xmlerror.htm
     <a name="XML_FROM_WRITER">XML_FROM_WRITER</a> = 25 /* The xmlwriter module */
     <a name="XML_FROM_MODULE">XML_FROM_MODULE</a> = 26 /* The dynamically loaded module modul */
     <a name="XML_FROM_I18N">XML_FROM_I18N</a> = 27 /* The module handling character conversion */
-    <a name="XML_FROM_SCHEMATRONV">XML_FROM_SCHEMATRONV</a> = 28 /*  The Schematron validator module */
+    <a name="XML_FROM_SCHEMATRONV">XML_FROM_SCHEMATRONV</a> = 28 /* The Schematron validator module */
+    <a name="XML_FROM_BUFFER">XML_FROM_BUFFER</a> = 29 /* The buffers module */
+    <a name="XML_FROM_URI">XML_FROM_URI</a> = 30 /*  The URI module */
 };
 </pre><p/>
 </div>
@@ -249,6 +251,8 @@ void        <a href="#xmlResetError">xmlResetError</a>                      (<a href="libxml2-xmlerror.htm
     <a name="XML_WAR_ENTITY_REDEFINED">XML_WAR_ENTITY_REDEFINED</a> = 107 /* 107 */
     <a name="XML_ERR_UNKNOWN_VERSION">XML_ERR_UNKNOWN_VERSION</a> = 108 /* 108 */
     <a name="XML_ERR_VERSION_MISMATCH">XML_ERR_VERSION_MISMATCH</a> = 109 /* 109 */
+    <a name="XML_ERR_NAME_TOO_LONG">XML_ERR_NAME_TOO_LONG</a> = 110 /* 110 */
+    <a name="XML_ERR_USER_STOP">XML_ERR_USER_STOP</a> = 111 /* 111 */
     <a name="XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</a> = 200
     <a name="XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a> = 201 /* 201 */
     <a name="XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a> = 202 /* 202 */
@@ -870,8 +874,7 @@ void        <a href="#xmlResetError">xmlResetError</a>                      (<a href="libxml2-xmlerror.htm
     <a name="XML_I18N_EXCESS_HANDLER">XML_I18N_EXCESS_HANDLER</a> = 6002 /* 6002 */
     <a name="XML_I18N_CONV_FAILED">XML_I18N_CONV_FAILED</a> = 6003 /* 6003 */
     <a name="XML_I18N_NO_OUTPUT">XML_I18N_NO_OUTPUT</a> = 6004 /* 6004 */
-    <a name="XML_CHECK_">XML_CHECK_</a> = 6005 /* 5033 */
-    <a name="XML_CHECK_X">XML_CHECK_X</a> = 6006 /*  503 */
+    <a name="XML_BUF_OVERFLOW">XML_BUF_OVERFLOW</a> = 7000
 };
 </pre><p/>
 </div>
index 554cd91..08bb4ef 100644 (file)
@@ -84,11 +84,11 @@ The content of this structure is not made public by the API.
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>module</tt></i>:</span></td><td>the module handle</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of argument error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlModuleOpen"/>xmlModuleOpen ()</h3><pre class="programlisting"><a href="libxml2-xmlmodule.html#xmlModulePtr">xmlModulePtr</a>   xmlModuleOpen           (const char * name, <br/>                                        int options)<br/>
-</pre><p>Opens a module/shared library given its name or path TODO: options are not yet implemented.</p>
+</pre><p>Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * . TODO: options are not yet implemented.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the module name</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of <a href="libxml2-xmlmodule.html#xmlModuleOption">xmlModuleOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a handle for the module or NULL in case of error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlModuleSymbol"/>xmlModuleSymbol ()</h3><pre class="programlisting">int  xmlModuleSymbol                 (<a href="libxml2-xmlmodule.html#xmlModulePtr">xmlModulePtr</a> module, <br/>                                    const char * name, <br/>                                        void ** symbol)<br/>
-</pre><p>Lookup for a symbol address in the given module</p>
+</pre><p>Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * .</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>module</tt></i>:</span></td><td>the module</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the symbol</td></tr><tr><td><span class="term"><i><tt>symbol</tt></i>:</span></td><td>the resulting symbol address</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the symbol was found, or -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
       </div>
index 4d11966..9427a34 100644 (file)
@@ -180,11 +180,11 @@ The content of this structure is not made public by the API.
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlExpGetLanguage"/>xmlExpGetLanguage ()</h3><pre class="programlisting">int      xmlExpGetLanguage               (<a href="libxml2-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br/>                                    <a href="libxml2-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** langList, <br/>                                   int len)<br/>
 </pre><p>Find all the strings used in @exp and store them in @list</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>langList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated lenght of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>langList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated length of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlExpGetStart"/>xmlExpGetStart ()</h3><pre class="programlisting">int    xmlExpGetStart                  (<a href="libxml2-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br/>                                    <a href="libxml2-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br/>                                     const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** tokList, <br/>                                    int len)<br/>
 </pre><p>Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c]</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>tokList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated lenght of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>tokList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated length of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlExpIsNillable"/>xmlExpIsNillable ()</h3><pre class="programlisting">int        xmlExpIsNillable                (<a href="libxml2-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br/>
 </pre><p>Finds if the expression is nillable, i.e. if it accepts the empty sequqnce</p>
@@ -196,7 +196,7 @@ The content of this structure is not made public by the API.
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlExpNewAtom"/>xmlExpNewAtom ()</h3><pre class="programlisting"><a href="libxml2-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> xmlExpNewAtom           (<a href="libxml2-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        int len)<br/>
 </pre><p>Get the atom associated to this name from that context</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the atom name</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the atom name lenght in byte (or -1);</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the atom name</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the atom name length in byte (or -1);</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlExpNewCtxt"/>xmlExpNewCtxt ()</h3><pre class="programlisting"><a href="libxml2-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> xmlExpNewCtxt           (int maxNodes, <br/>                                     <a href="libxml2-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br/>
 </pre><p>Creates a new context for manipulating expressions</p>
index cc49dfa..533c114 100644 (file)
@@ -57,12 +57,14 @@ typedef struct _xmlSchemaValidCtxt <a href="#xmlSchemaValidCtxt">xmlSchemaValidC
 int    <a href="#xmlSchemaSAXUnplug">xmlSchemaSAXUnplug</a>            (<a href="libxml2-xmlschemas.html#xmlSchemaSAXPlugPtr">xmlSchemaSAXPlugPtr</a> plug);
 <a href="libxml2-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a>        <a href="#xmlSchemaParse">xmlSchemaParse</a>            (<a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt);
 void   <a href="#xmlSchemaFreeParserCtxt">xmlSchemaFreeParserCtxt</a>          (<a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt);
+void   <a href="#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a>        (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br/>                                  const char * filename);
 <a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a>    <a href="#xmlSchemaNewParserCtxt">xmlSchemaNewParserCtxt</a>    (const char * URL);
 int    <a href="#xmlSchemaIsValid">xmlSchemaIsValid</a>                (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt);
 typedef void <a href="#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a>      (void * ctx, <br/>                                       const char * msg, <br/>                                         ... ...);
 <a href="libxml2-xmlschemas.html#xmlSchemaSAXPlugPtr">xmlSchemaSAXPlugPtr</a>  <a href="#xmlSchemaSAXPlug">xmlSchemaSAXPlug</a>        (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                           <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> * sax, <br/>                                          void ** user_data);
 int    <a href="#xmlSchemaValidateStream">xmlSchemaValidateStream</a>          (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br/>                                    <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br/>                                  <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/>                                    void * user_data);
 int    <a href="#xmlSchemaGetParserErrors">xmlSchemaGetParserErrors</a>        (<a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> * err, <br/>                                        <a href="libxml2-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> * warn, <br/>                                   void ** ctx);
+void   <a href="#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a>  (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br/>                                  <a href="libxml2-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a> f, <br/>                                        void * ctxt);
 int    <a href="#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a>  (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> elem);
 void   <a href="#xmlSchemaSetValidStructuredErrors">xmlSchemaSetValidStructuredErrors</a>      (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                           <a href="libxml2-xmlerror.html#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a> serror, <br/>                                                 void * ctx);
 void   <a href="#xmlSchemaSetValidErrors">xmlSchemaSetValidErrors</a>          (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> err, <br/>                                  <a href="libxml2-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> warn, <br/>                                     void * ctx);
@@ -71,6 +73,7 @@ int   <a href="#xmlSchemaValidateFile">xmlSchemaValidateFile</a>              (<a href="libxml
 int    <a href="#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a>                (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-tree.html#xmlDocPtr">xmlDocPtr</a> doc);
 void   <a href="#xmlSchemaFree">xmlSchemaFree</a>                      (<a href="libxml2-xmlschemas.html#xmlSchemaPtr">xmlSchemaPtr</a> schema);
 <a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a>    <a href="#xmlSchemaNewMemParserCtxt">xmlSchemaNewMemParserCtxt</a>      (const char * buffer, <br/>                                                      int size);
+typedef int <a href="#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a>   (void * ctx, <br/>                                       const char ** file, <br/>                                       unsigned long * line);
 int    <a href="#xmlSchemaGetValidErrors">xmlSchemaGetValidErrors</a>          (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> * err, <br/>                                        <a href="libxml2-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> * warn, <br/>                                   void ** ctx);
 int    <a href="#xmlSchemaSetValidOptions">xmlSchemaSetValidOptions</a>        (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   int options);
 void   <a href="#xmlSchemaSetParserErrors">xmlSchemaSetParserErrors</a>        (<a href="libxml2-xmlschemas.html#xmlSchemaParserCtxtPtr">xmlSchemaParserCtxtPtr</a> ctxt, <br/>                                         <a href="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a> err, <br/>                                  <a href="libxml2-xmlschemas.html#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a> warn, <br/>                                     void * ctx);
@@ -189,6 +192,10 @@ The content of this structure is not made public by the API.
 </pre><p>Signature of an error callback from an XSD validation</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra arguments</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlSchemaValidityLocatorFunc"/>Function type xmlSchemaValidityLocatorFunc</h3><pre class="programlisting">int     xmlSchemaValidityLocatorFunc    (void * ctx, <br/>                                       const char ** file, <br/>                                       unsigned long * line)<br/>
+</pre><p>A schemas validation locator, a callback called by the validator. This is used when file or node informations are not available to find out what file and line number are affected</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user provided context</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>returned file information</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>returned line information</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSchemaValidityWarningFunc"/>Function type xmlSchemaValidityWarningFunc</h3><pre class="programlisting">void    xmlSchemaValidityWarningFunc    (void * ctx, <br/>                                       const char * msg, <br/>                                         ... ...)<br/>
 </pre><p>Signature of a warning callback from an XSD validation</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra arguments</td></tr></tbody></table></div></div>
@@ -289,6 +296,14 @@ The content of this structure is not made public by the API.
 </pre><p>Validate a branch of a tree, starting with the given @elem.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the element and its subtree is valid, a positive error code number otherwise and -1 in case of an internal or API error.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlSchemaValidateSetFilename"/>xmlSchemaValidateSetFilename ()</h3><pre class="programlisting">void       xmlSchemaValidateSetFilename    (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br/>                                  const char * filename)<br/>
+</pre><p>Workaround to provide file error reporting information when this is not provided by current APIs</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vctxt</tt></i>:</span></td><td>the schema validation context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name</td></tr></tbody></table></div></div>
+        <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlSchemaValidateSetLocator"/>xmlSchemaValidateSetLocator ()</h3><pre class="programlisting">void xmlSchemaValidateSetLocator     (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br/>                                  <a href="libxml2-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a> f, <br/>                                        void * ctxt)<br/>
+</pre><p>Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>vctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the locator function pointer</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the locator context</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSchemaValidateStream"/>xmlSchemaValidateStream ()</h3><pre class="programlisting">int  xmlSchemaValidateStream         (<a href="libxml2-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br/>                                   <a href="libxml2-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br/>                                    <a href="libxml2-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br/>                                  <a href="libxml2-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br/>                                    void * user_data)<br/>
 </pre><p>Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input to use for reading the data</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an optional encoding information</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler for the resulting events</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>the context to provide to the SAX handler.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div></div>
index c9e778a..36a59f8 100644 (file)
@@ -136,11 +136,11 @@ int       <a href="#xmlSchemaCheckFacet">xmlSchemaCheckFacet</a>          (<a href="libxml2-sc
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of the built in type</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the type if found, NULL otherwise.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSchemaGetCanonValue"/>xmlSchemaGetCanonValue ()</h3><pre class="programlisting">int    xmlSchemaGetCanonValue          (<a href="libxml2-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** retValue)<br/>
-</pre><p>Get a the cononical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</p>
+</pre><p>Get the canonical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the precomputed value</td></tr><tr><td><span class="term"><i><tt>retValue</tt></i>:</span></td><td>the returned value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSchemaGetCanonValueWhtsp"/>xmlSchemaGetCanonValueWhtsp ()</h3><pre class="programlisting">int  xmlSchemaGetCanonValueWhtsp     (<a href="libxml2-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val, <br/>                                  const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> ** retValue, <br/>                                   <a href="libxml2-xmlschemastypes.html#xmlSchemaWhitespaceValueType">xmlSchemaWhitespaceValueType</a> ws)<br/>
-</pre><p>Get a the cononical representation of the value. The caller has to free the returned @retValue.</p>
+</pre><p>Get the canonical representation of the value. The caller has to free the returned @retValue.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the precomputed value</td></tr><tr><td><span class="term"><i><tt>retValue</tt></i>:</span></td><td>the returned value</td></tr><tr><td><span class="term"><i><tt>ws</tt></i>:</span></td><td>the whitespace type of the value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlSchemaGetFacetValueAsULong"/>xmlSchemaGetFacetValueAsULong ()</h3><pre class="programlisting">unsigned long    xmlSchemaGetFacetValueAsULong   (<a href="libxml2-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet)<br/>
index 69a04e2..8178614 100644 (file)
@@ -83,6 +83,7 @@
 #define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a>;
 #define <a href="#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a>;
 #define <a href="#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a>;
+#define <a href="#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a>;
 #define <a href="#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a>;
 #define <a href="#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a>;
 #define <a href="#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a>;
@@ -221,6 +222,10 @@ void       <a href="#xmlCheckVersion">xmlCheckVersion</a>                  (int version);
 </pre><p>Macro to check that the libxml version in use is compatible with the version the software has been compiled against</p>
 </div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="LIBXML_THREAD_ALLOC_ENABLED">Macro </a>LIBXML_THREAD_ALLOC_ENABLED</h3><pre class="programlisting">#define <a href="#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a>;
+</pre><p>Whether the allocation hooks are per-thread</p>
+</div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="LIBXML_THREAD_ENABLED">Macro </a>LIBXML_THREAD_ENABLED</h3><pre class="programlisting">#define <a href="#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a>;
 </pre><p>Whether the thread support is configured in</p>
 </div>
index 358c9e6..7c2be92 100644 (file)
@@ -51,7 +51,7 @@ int   <a href="#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a>    (<a hre
 int    <a href="#xmlTextWriterEndPI">xmlTextWriterEndPI</a>            (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
 int    <a href="#xmlTextWriterWriteBase64">xmlTextWriterWriteBase64</a>        (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const char * data, <br/>                                        int start, <br/>                                        int len);
 int    <a href="#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a>        (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str);
-void   <a href="#xmlFreeTextWriter">xmlFreeTextWriter</a>              (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
+int    <a href="#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
 int    <a href="#xmlTextWriterEndComment">xmlTextWriterEndComment</a>          (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
 int    <a href="#xmlTextWriterWriteRawLen">xmlTextWriterWriteRawLen</a>        (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content, <br/>                                     int len);
 int    <a href="#xmlTextWriterWriteDTDExternalEntityContents">xmlTextWriterWriteDTDExternalEntityContents</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br/>                                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * sysid, <br/>                                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ndataid);
@@ -73,7 +73,7 @@ int   <a href="#xmlTextWriterEndCDATA">xmlTextWriterEndCDATA</a>              (<a href="libxml
 int    <a href="#xmlTextWriterStartElementNS">xmlTextWriterStartElementNS</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI);
 int    <a href="#xmlTextWriterEndDTDEntity">xmlTextWriterEndDTDEntity</a>      (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
 <a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> <a href="#xmlNewTextWriter">xmlNewTextWriter</a>        (<a href="libxml2-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out);
-int    <a href="#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
+void   <a href="#xmlFreeTextWriter">xmlFreeTextWriter</a>              (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
 int    <a href="#xmlTextWriterWriteVFormatDTDAttlist">xmlTextWriterWriteVFormatDTDAttlist</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                            const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                                const char * format, <br/>                                              va_list argptr);
 int    <a href="#xmlTextWriterStartPI">xmlTextWriterStartPI</a>                (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * target);
 int    <a href="#xmlTextWriterStartElement">xmlTextWriterStartElement</a>      (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
@@ -99,8 +99,9 @@ int   <a href="#xmlTextWriterWriteDTDInternalEntity">xmlTextWriterWriteDTDInternal
 int    <a href="#xmlTextWriterWriteVFormatElementNS">xmlTextWriterWriteVFormatElementNS</a>    (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                            const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                                const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br/>                                                const char * format, <br/>                                              va_list argptr);
 int    <a href="#xmlTextWriterWriteDTDNotation">xmlTextWriterWriteDTDNotation</a>      (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * pubid, <br/>                                       const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * sysid);
 int    <a href="#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const char * format, <br/>                                      ... ...);
-int    <a href="#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
+int    <a href="#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a>      (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> quotechar);
 int    <a href="#xmlTextWriterWriteString">xmlTextWriterWriteString</a>        (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
+int    <a href="#xmlTextWriterWriteElementNS">xmlTextWriterWriteElementNS</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * content);
 int    <a href="#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a>  (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
 int    <a href="#xmlTextWriterWriteVFormatAttributeNS">xmlTextWriterWriteVFormatAttributeNS</a>        (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                            const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                                const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI, <br/>                                                const char * format, <br/>                                              va_list argptr);
 int    <a href="#xmlTextWriterFlush">xmlTextWriterFlush</a>            (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer);
@@ -236,6 +237,10 @@ The content of this structure is not made public by the API.
 </pre><p>Set string indentation.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlTextWriterSetQuoteChar"/>xmlTextWriterSetQuoteChar ()</h3><pre class="programlisting">int      xmlTextWriterSetQuoteChar       (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> quotechar)<br/>
+</pre><p>Set the character used for quoting attributes.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>quotechar</tt></i>:</span></td><td>the quote character</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlTextWriterStartAttribute"/>xmlTextWriterStartAttribute ()</h3><pre class="programlisting">int  xmlTextWriterStartAttribute     (<a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br/>                                    const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name)<br/>
 </pre><p>Start an xml attribute.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml2-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div></div>
index 7efa7bc..640c715 100644 (file)
@@ -70,6 +70,7 @@ typedef <a href="libxml2-xpath.html#xmlXPathAxis">xmlXPathAxis</a> * <a href="#x
 typedef struct _xmlXPathParserContext <a href="#xmlXPathParserContext">xmlXPathParserContext</a>;
 int    <a href="#xmlXPathCastNodeSetToBoolean">xmlXPathCastNodeSetToBoolean</a>        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> ns);
 typedef <a href="libxml2-xpath.html#xmlXPathFunction">xmlXPathFunction</a> <a href="#xmlXPathFuncLookupFunc">xmlXPathFuncLookupFunc</a>        (void * ctxt, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                                const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ns_uri);
+<a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>   <a href="#xmlXPathNodeEval">xmlXPathNodeEval</a>        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                               const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br/>                                                 <a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastNodeToString">xmlXPathCastNodeToString</a>        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
 int    <a href="#xmlXPathIsNaN">xmlXPathIsNaN</a>                      (double val);
 int    <a href="#xmlXPathContextSetCache">xmlXPathContextSetCache</a>          (<a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br/>                                      int active, <br/>                                       int value, <br/>                                        int options);
@@ -104,6 +105,7 @@ int <a href="#xmlXPathCmpNodes">xmlXPathCmpNodes</a>                (<a href="libxml2-tree.htm
 <a href="libxml2-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a>       <a href="#xmlXPathCtxtCompile">xmlXPathCtxtCompile</a>  (<a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str);
 typedef void <a href="#xmlXPathEvalFunc">xmlXPathEvalFunc</a>          (<a href="libxml2-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br/>                                  int nargs);
 <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * <a href="#xmlXPathCastBooleanToString">xmlXPathCastBooleanToString</a>  (int val);
+int    <a href="#xmlXPathSetContextNode">xmlXPathSetContextNode</a>            (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx);
 int    <a href="#xmlXPathCastNumberToBoolean">xmlXPathCastNumberToBoolean</a>  (double val);
 void   <a href="#xmlXPathFreeNodeSet">xmlXPathFreeNodeSet</a>          (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> obj);
 void   <a href="#xmlXPathFreeCompExpr">xmlXPathFreeCompExpr</a>                (<a href="libxml2-xpath.html#xmlXPathCompExprPtr">xmlXPathCompExprPtr</a> comp);
@@ -246,6 +248,7 @@ The content of this structure is not made public by the API.
     <a name="XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a> = 21
     <a name="XPATH_INVALID_CTXT">XPATH_INVALID_CTXT</a> = 22
     <a name="XPATH_STACK_ERROR">XPATH_STACK_ERROR</a> = 23
+    <a name="XPATH_FORBID_VARIABLE_ERROR">XPATH_FORBID_VARIABLE_ERROR</a> = 24
 };
 </pre><p/>
 </div>
@@ -513,6 +516,10 @@ The content of this structure is not made public by the API.
 </pre><p>Create a new <a href="libxml2-xpath.html#xmlXPathContext">xmlXPathContext</a></p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated. The caller will need to free it.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeEval"/>xmlXPathNodeEval ()</h3><pre class="programlisting"><a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>       xmlXPathNodeEval        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                               const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * str, <br/>                                                 <a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br/>
+</pre><p>Evaluate the XPath Location Path in the given context. The node 'node' is set as the context node. The context node is not restored.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to to use as the context node</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the XPath expression</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div></div>
+        <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetCreate"/>xmlXPathNodeSetCreate ()</h3><pre class="programlisting"><a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>     xmlXPathNodeSetCreate   (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
 </pre><p>Create a new <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> of type double and of value @val</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an initial xmlNodePtr, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div></div>
@@ -525,6 +532,10 @@ The content of this structure is not made public by the API.
 </pre><p>Call this routine to speed up XPath computation on static documents. This stamps all the element nodes with the document order Like for line information, the order is kept in the element-&gt;content field, the value stored is actually - the node number (starting at -1) to be able to differentiate from line numbers.</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an input document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements found in the document or -1 in case of error.</td></tr></tbody></table></div></div>
         <hr/>
+        <div class="refsect2" lang="en"><h3><a name="xmlXPathSetContextNode"/>xmlXPathSetContextNode ()</h3><pre class="programlisting">int    xmlXPathSetContextNode          (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br/>
+</pre><p>Sets 'node' as the context node. The node must be in the same document as that associated with the context.</p>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to to use as the context node</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error or 0 if successful</td></tr></tbody></table></div></div>
+        <hr/>
       </div>
     </div>
   </body>
index 6200688..0597343 100644 (file)
@@ -153,7 +153,7 @@ void        <a href="#xmlXPathModValues">xmlXPathModValues</a>              (<a href="libxml2-xpath
 <a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>   <a href="#xmlXPathWrapString">xmlXPathWrapString</a>    (<a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * val);
 void   <a href="#xmlXPathLangFunction">xmlXPathLangFunction</a>                (<a href="libxml2-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br/>                                  int nargs);
 int    <a href="#xmlXPathRegisterFuncNS">xmlXPathRegisterFuncNS</a>            (<a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br/>                                      const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name, <br/>                                        const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * ns_uri, <br/>                                      <a href="libxml2-xpath.html#xmlXPathFunction">xmlXPathFunction</a> f);
-void   <a href="#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a>                (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns);
+int    <a href="#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a>                (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns);
 void   <a href="#xmlXPathLocalNameFunction">xmlXPathLocalNameFunction</a>      (<a href="libxml2-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br/>                                  int nargs);
 <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>   <a href="#xmlXPathDifference">xmlXPathDifference</a>    (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br/>                                      <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2);
 <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>   <a href="#xmlXPathLeadingSorted">xmlXPathLeadingSorted</a>      (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes1, <br/>                                      <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes2);
@@ -171,8 +171,8 @@ void        <a href="#xmlXPathSubstringAfterFunction">xmlXPathSubstringAfterFunction</a
 <a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>   <a href="#xmlXPathWrapCString">xmlXPathWrapCString</a>  (char * val);
 void   <a href="#xmlXPathFreeParserContext">xmlXPathFreeParserContext</a>      (<a href="libxml2-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt);
 <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>   <a href="#xmlXPathNodeTrailing">xmlXPathNodeTrailing</a>        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br/>                                       <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node);
-void   <a href="#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a>            (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val);
-void   <a href="#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a>        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val);
+int    <a href="#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a>            (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val);
+int    <a href="#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a>        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val);
 <a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>   <a href="#xmlXPathNewValueTree">xmlXPathNewValueTree</a>        (<a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val);
 <a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>   <a href="#xmlXPathDistinct">xmlXPathDistinct</a>        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes);
 <a href="libxml2-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>   <a href="#xmlXPathVariableLookup">xmlXPathVariableLookup</a>    (<a href="libxml2-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctxt, <br/>                                              const <a href="libxml2-xmlstring.html#xmlChar">xmlChar</a> * name);
@@ -549,17 +549,17 @@ void      <a href="#xmlXPathDebugDumpObject">xmlXPathDebugDumpObject</a>          (FILE * out
 </pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</p>
 <div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAdd"/>xmlXPathNodeSetAdd ()</h3><pre class="programlisting">void   xmlXPathNodeSetAdd              (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAdd"/>xmlXPathNodeSetAdd ()</h3><pre class="programlisting">int    xmlXPathNodeSetAdd              (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
 </pre><p>add a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, and -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAddNs"/>xmlXPathNodeSetAddNs ()</h3><pre class="programlisting">void       xmlXPathNodeSetAddNs            (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAddNs"/>xmlXPathNodeSetAddNs ()</h3><pre class="programlisting">int        xmlXPathNodeSetAddNs            (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br/>                                       <a href="libxml2-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br/>
 </pre><p>add a new namespace node to an existing NodeSet</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the hosting node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a the namespace node</td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the hosting node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a the namespace node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div></div>
         <hr/>
-        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAddUnique"/>xmlXPathNodeSetAddUnique ()</h3><pre class="programlisting">void       xmlXPathNodeSetAddUnique        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
+        <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetAddUnique"/>xmlXPathNodeSetAddUnique ()</h3><pre class="programlisting">int        xmlXPathNodeSetAddUnique        (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
 </pre><p>add a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet, optimized version when we are sure the node is not already in the set.</p>
-<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div></div>
+<div class="variablelist"><table border="0"><col align="left"/><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure</td></tr></tbody></table></div></div>
         <hr/>
         <div class="refsect2" lang="en"><h3><a name="xmlXPathNodeSetContains"/>xmlXPathNodeSetContains ()</h3><pre class="programlisting">int  xmlXPathNodeSetContains         (<a href="libxml2-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br/>                                         <a href="libxml2-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br/>
 </pre><p>checks whether @cur contains @val</p>
index e564951..282546a 100644 (file)
@@ -91,6 +91,7 @@
     <function name="IS_LETTER_CH" link="libxml2-parserInternals.html#IS_LETTER_CH"/>
     <function name="IS_PUBIDCHAR" link="libxml2-parserInternals.html#IS_PUBIDCHAR"/>
     <function name="IS_PUBIDCHAR_CH" link="libxml2-parserInternals.html#IS_PUBIDCHAR_CH"/>
+    <function name="LIBXML2_NEW_BUFFER" link="libxml2-tree.html#LIBXML2_NEW_BUFFER"/>
     <function name="LIBXML_ATTR_ALLOC_SIZE" link="libxml2-xmlversion.html#LIBXML_ATTR_ALLOC_SIZE"/>
     <function name="LIBXML_ATTR_FORMAT" link="libxml2-xmlversion.html#LIBXML_ATTR_FORMAT"/>
     <function name="LIBXML_AUTOMATA_ENABLED" link="libxml2-xmlversion.html#LIBXML_AUTOMATA_ENABLED"/>
     <function name="LIBXML_SCHEMAS_ENABLED" link="libxml2-xmlversion.html#LIBXML_SCHEMAS_ENABLED"/>
     <function name="LIBXML_SCHEMATRON_ENABLED" link="libxml2-xmlversion.html#LIBXML_SCHEMATRON_ENABLED"/>
     <function name="LIBXML_TEST_VERSION" link="libxml2-xmlversion.html#LIBXML_TEST_VERSION"/>
+    <function name="LIBXML_THREAD_ALLOC_ENABLED" link="libxml2-xmlversion.html#LIBXML_THREAD_ALLOC_ENABLED"/>
     <function name="LIBXML_THREAD_ENABLED" link="libxml2-xmlversion.html#LIBXML_THREAD_ENABLED"/>
     <function name="LIBXML_TREE_ENABLED" link="libxml2-xmlversion.html#LIBXML_TREE_ENABLED"/>
     <function name="LIBXML_UNICODE_ENABLED" link="libxml2-xmlversion.html#LIBXML_UNICODE_ENABLED"/>
     <function name="XML_GET_CONTENT" link="libxml2-tree.html#XML_GET_CONTENT"/>
     <function name="XML_GET_LINE" link="libxml2-tree.html#XML_GET_LINE"/>
     <function name="XML_LOCAL_NAMESPACE" link="libxml2-tree.html#XML_LOCAL_NAMESPACE"/>
+    <function name="XML_MAX_DICTIONARY_LIMIT" link="libxml2-parserInternals.html#XML_MAX_DICTIONARY_LIMIT"/>
+    <function name="XML_MAX_LOOKUP_LIMIT" link="libxml2-parserInternals.html#XML_MAX_LOOKUP_LIMIT"/>
     <function name="XML_MAX_NAMELEN" link="libxml2-parserInternals.html#XML_MAX_NAMELEN"/>
+    <function name="XML_MAX_NAME_LENGTH" link="libxml2-parserInternals.html#XML_MAX_NAME_LENGTH"/>
     <function name="XML_MAX_TEXT_LENGTH" link="libxml2-parserInternals.html#XML_MAX_TEXT_LENGTH"/>
     <function name="XML_SAX2_MAGIC" link="libxml2-parser.html#XML_SAX2_MAGIC"/>
     <function name="XML_SCHEMAS_ANYATTR_LAX" link="libxml2-schemasInternals.html#XML_SCHEMAS_ANYATTR_LAX"/>
     <function name="XML_BUFFER_ALLOC_HYBRID" link="libxml2-tree.html#XML_BUFFER_ALLOC_HYBRID"/>
     <function name="XML_BUFFER_ALLOC_IMMUTABLE" link="libxml2-tree.html#XML_BUFFER_ALLOC_IMMUTABLE"/>
     <function name="XML_BUFFER_ALLOC_IO" link="libxml2-tree.html#XML_BUFFER_ALLOC_IO"/>
+    <function name="XML_BUF_OVERFLOW" link="libxml2-xmlerror.html#XML_BUF_OVERFLOW"/>
     <function name="XML_C14N_1_0" link="libxml2-c14n.html#XML_C14N_1_0"/>
     <function name="XML_C14N_1_1" link="libxml2-c14n.html#XML_C14N_1_1"/>
     <function name="XML_C14N_CREATE_CTXT" link="libxml2-xmlerror.html#XML_C14N_CREATE_CTXT"/>
     <function name="XML_CHAR_ENCODING_UTF16BE" link="libxml2-encoding.html#XML_CHAR_ENCODING_UTF16BE"/>
     <function name="XML_CHAR_ENCODING_UTF16LE" link="libxml2-encoding.html#XML_CHAR_ENCODING_UTF16LE"/>
     <function name="XML_CHAR_ENCODING_UTF8" link="libxml2-encoding.html#XML_CHAR_ENCODING_UTF8"/>
-    <function name="XML_CHECK_" link="libxml2-xmlerror.html#XML_CHECK_"/>
     <function name="XML_CHECK_ENTITY_TYPE" link="libxml2-xmlerror.html#XML_CHECK_ENTITY_TYPE"/>
     <function name="XML_CHECK_FOUND_ATTRIBUTE" link="libxml2-xmlerror.html#XML_CHECK_FOUND_ATTRIBUTE"/>
     <function name="XML_CHECK_FOUND_CDATA" link="libxml2-xmlerror.html#XML_CHECK_FOUND_CDATA"/>
     <function name="XML_CHECK_WRONG_NEXT" link="libxml2-xmlerror.html#XML_CHECK_WRONG_NEXT"/>
     <function name="XML_CHECK_WRONG_PARENT" link="libxml2-xmlerror.html#XML_CHECK_WRONG_PARENT"/>
     <function name="XML_CHECK_WRONG_PREV" link="libxml2-xmlerror.html#XML_CHECK_WRONG_PREV"/>
-    <function name="XML_CHECK_X" link="libxml2-xmlerror.html#XML_CHECK_X"/>
     <function name="XML_COMMENT_NODE" link="libxml2-tree.html#XML_COMMENT_NODE"/>
     <function name="XML_DOCB_DOCUMENT_NODE" link="libxml2-tree.html#XML_DOCB_DOCUMENT_NODE"/>
     <function name="XML_DOCUMENT_FRAG_NODE" link="libxml2-tree.html#XML_DOCUMENT_FRAG_NODE"/>
     <function name="XML_ERR_MIXED_NOT_FINISHED" link="libxml2-xmlerror.html#XML_ERR_MIXED_NOT_FINISHED"/>
     <function name="XML_ERR_MIXED_NOT_STARTED" link="libxml2-xmlerror.html#XML_ERR_MIXED_NOT_STARTED"/>
     <function name="XML_ERR_NAME_REQUIRED" link="libxml2-xmlerror.html#XML_ERR_NAME_REQUIRED"/>
+    <function name="XML_ERR_NAME_TOO_LONG" link="libxml2-xmlerror.html#XML_ERR_NAME_TOO_LONG"/>
     <function name="XML_ERR_NMTOKEN_REQUIRED" link="libxml2-xmlerror.html#XML_ERR_NMTOKEN_REQUIRED"/>
     <function name="XML_ERR_NONE" link="libxml2-xmlerror.html#XML_ERR_NONE"/>
     <function name="XML_ERR_NOTATION_NOT_FINISHED" link="libxml2-xmlerror.html#XML_ERR_NOTATION_NOT_FINISHED"/>
     <function name="XML_ERR_UNSUPPORTED_ENCODING" link="libxml2-xmlerror.html#XML_ERR_UNSUPPORTED_ENCODING"/>
     <function name="XML_ERR_URI_FRAGMENT" link="libxml2-xmlerror.html#XML_ERR_URI_FRAGMENT"/>
     <function name="XML_ERR_URI_REQUIRED" link="libxml2-xmlerror.html#XML_ERR_URI_REQUIRED"/>
+    <function name="XML_ERR_USER_STOP" link="libxml2-xmlerror.html#XML_ERR_USER_STOP"/>
     <function name="XML_ERR_VALUE_REQUIRED" link="libxml2-xmlerror.html#XML_ERR_VALUE_REQUIRED"/>
     <function name="XML_ERR_VERSION_MISMATCH" link="libxml2-xmlerror.html#XML_ERR_VERSION_MISMATCH"/>
     <function name="XML_ERR_VERSION_MISSING" link="libxml2-xmlerror.html#XML_ERR_VERSION_MISSING"/>
     <function name="XML_EXTERNAL_GENERAL_PARSED_ENTITY" link="libxml2-entities.html#XML_EXTERNAL_GENERAL_PARSED_ENTITY"/>
     <function name="XML_EXTERNAL_GENERAL_UNPARSED_ENTITY" link="libxml2-entities.html#XML_EXTERNAL_GENERAL_UNPARSED_ENTITY"/>
     <function name="XML_EXTERNAL_PARAMETER_ENTITY" link="libxml2-entities.html#XML_EXTERNAL_PARAMETER_ENTITY"/>
+    <function name="XML_FROM_BUFFER" link="libxml2-xmlerror.html#XML_FROM_BUFFER"/>
     <function name="XML_FROM_C14N" link="libxml2-xmlerror.html#XML_FROM_C14N"/>
     <function name="XML_FROM_CATALOG" link="libxml2-xmlerror.html#XML_FROM_CATALOG"/>
     <function name="XML_FROM_CHECK" link="libxml2-xmlerror.html#XML_FROM_CHECK"/>
     <function name="XML_FROM_SCHEMASV" link="libxml2-xmlerror.html#XML_FROM_SCHEMASV"/>
     <function name="XML_FROM_SCHEMATRONV" link="libxml2-xmlerror.html#XML_FROM_SCHEMATRONV"/>
     <function name="XML_FROM_TREE" link="libxml2-xmlerror.html#XML_FROM_TREE"/>
+    <function name="XML_FROM_URI" link="libxml2-xmlerror.html#XML_FROM_URI"/>
     <function name="XML_FROM_VALID" link="libxml2-xmlerror.html#XML_FROM_VALID"/>
     <function name="XML_FROM_WRITER" link="libxml2-xmlerror.html#XML_FROM_WRITER"/>
     <function name="XML_FROM_XINCLUDE" link="libxml2-xmlerror.html#XML_FROM_XINCLUDE"/>
     <function name="XML_PARSER_SUBST_ENTITIES" link="libxml2-xmlreader.html#XML_PARSER_SUBST_ENTITIES"/>
     <function name="XML_PARSER_SYSTEM_LITERAL" link="libxml2-parser.html#XML_PARSER_SYSTEM_LITERAL"/>
     <function name="XML_PARSER_VALIDATE" link="libxml2-xmlreader.html#XML_PARSER_VALIDATE"/>
+    <function name="XML_PARSE_BIG_LINES" link="libxml2-parser.html#XML_PARSE_BIG_LINES"/>
     <function name="XML_PARSE_COMPACT" link="libxml2-parser.html#XML_PARSE_COMPACT"/>
     <function name="XML_PARSE_DOM" link="libxml2-parser.html#XML_PARSE_DOM"/>
     <function name="XML_PARSE_DTDATTR" link="libxml2-parser.html#XML_PARSE_DTDATTR"/>
     <function name="XPATH_ENCODING_ERROR" link="libxml2-xpath.html#XPATH_ENCODING_ERROR"/>
     <function name="XPATH_EXPRESSION_OK" link="libxml2-xpath.html#XPATH_EXPRESSION_OK"/>
     <function name="XPATH_EXPR_ERROR" link="libxml2-xpath.html#XPATH_EXPR_ERROR"/>
+    <function name="XPATH_FORBID_VARIABLE_ERROR" link="libxml2-xpath.html#XPATH_FORBID_VARIABLE_ERROR"/>
     <function name="XPATH_INVALID_ARITY" link="libxml2-xpath.html#XPATH_INVALID_ARITY"/>
     <function name="XPATH_INVALID_CHAR_ERROR" link="libxml2-xpath.html#XPATH_INVALID_CHAR_ERROR"/>
     <function name="XPATH_INVALID_CTXT" link="libxml2-xpath.html#XPATH_INVALID_CTXT"/>
     <function name="xmlAttributeType" link="libxml2-tree.html#xmlAttributeType"/>
     <function name="xmlAutomataPtr" link="libxml2-xmlautomata.html#xmlAutomataPtr"/>
     <function name="xmlAutomataStatePtr" link="libxml2-xmlautomata.html#xmlAutomataStatePtr"/>
+    <function name="xmlBufPtr" link="libxml2-tree.html#xmlBufPtr"/>
     <function name="xmlBufferAllocationScheme" link="libxml2-tree.html#xmlBufferAllocationScheme"/>
     <function name="xmlBufferPtr" link="libxml2-tree.html#xmlBufferPtr"/>
     <function name="xmlC14NMode" link="libxml2-c14n.html#xmlC14NMode"/>
     <function name="xmlAttributeTable" link="libxml2-valid.html#xmlAttributeTable"/>
     <function name="xmlAutomata" link="libxml2-xmlautomata.html#xmlAutomata"/>
     <function name="xmlAutomataState" link="libxml2-xmlautomata.html#xmlAutomataState"/>
+    <function name="xmlBuf" link="libxml2-tree.html#xmlBuf"/>
     <function name="xmlBuffer" link="libxml2-tree.html#xmlBuffer"/>
     <function name="xmlCatalog" link="libxml2-catalog.html#xmlCatalog"/>
     <function name="xmlChLRange" link="libxml2-chvalid.html#xmlChLRange"/>
     <function name="xmlRelaxNGValidityErrorFunc" link="libxml2-relaxng.html#xmlRelaxNGValidityErrorFunc"/>
     <function name="xmlRelaxNGValidityWarningFunc" link="libxml2-relaxng.html#xmlRelaxNGValidityWarningFunc"/>
     <function name="xmlSchemaValidityErrorFunc" link="libxml2-xmlschemas.html#xmlSchemaValidityErrorFunc"/>
+    <function name="xmlSchemaValidityLocatorFunc" link="libxml2-xmlschemas.html#xmlSchemaValidityLocatorFunc"/>
     <function name="xmlSchemaValidityWarningFunc" link="libxml2-xmlschemas.html#xmlSchemaValidityWarningFunc"/>
     <function name="xmlSchematronValidityErrorFunc" link="libxml2-schematron.html#xmlSchematronValidityErrorFunc"/>
     <function name="xmlSchematronValidityWarningFunc" link="libxml2-schematron.html#xmlSchematronValidityWarningFunc"/>
     <function name="xmlAutomataNewTransition2 ()" link="libxml2-xmlautomata.html#xmlAutomataNewTransition2"/>
     <function name="xmlAutomataSetFinalState ()" link="libxml2-xmlautomata.html#xmlAutomataSetFinalState"/>
     <function name="xmlBoolToText ()" link="libxml2-debugXML.html#xmlBoolToText"/>
+    <function name="xmlBufContent ()" link="libxml2-tree.html#xmlBufContent"/>
+    <function name="xmlBufEnd ()" link="libxml2-tree.html#xmlBufEnd"/>
+    <function name="xmlBufGetNodeContent ()" link="libxml2-tree.html#xmlBufGetNodeContent"/>
+    <function name="xmlBufNodeDump ()" link="libxml2-tree.html#xmlBufNodeDump"/>
+    <function name="xmlBufShrink ()" link="libxml2-tree.html#xmlBufShrink"/>
+    <function name="xmlBufUse ()" link="libxml2-tree.html#xmlBufUse"/>
     <function name="xmlBufferAdd ()" link="libxml2-tree.html#xmlBufferAdd"/>
     <function name="xmlBufferAddHead ()" link="libxml2-tree.html#xmlBufferAddHead"/>
     <function name="xmlBufferCCat ()" link="libxml2-tree.html#xmlBufferCCat"/>
     <function name="xmlDictCreateSub ()" link="libxml2-dict.html#xmlDictCreateSub"/>
     <function name="xmlDictExists ()" link="libxml2-dict.html#xmlDictExists"/>
     <function name="xmlDictFree ()" link="libxml2-dict.html#xmlDictFree"/>
+    <function name="xmlDictGetUsage ()" link="libxml2-dict.html#xmlDictGetUsage"/>
     <function name="xmlDictLookup ()" link="libxml2-dict.html#xmlDictLookup"/>
     <function name="xmlDictOwns ()" link="libxml2-dict.html#xmlDictOwns"/>
     <function name="xmlDictQLookup ()" link="libxml2-dict.html#xmlDictQLookup"/>
     <function name="xmlDictReference ()" link="libxml2-dict.html#xmlDictReference"/>
+    <function name="xmlDictSetLimit ()" link="libxml2-dict.html#xmlDictSetLimit"/>
     <function name="xmlDictSize ()" link="libxml2-dict.html#xmlDictSize"/>
     <function name="xmlDllMain ()" link="libxml2-threads.html#xmlDllMain"/>
     <function name="xmlDocCopyNode ()" link="libxml2-tree.html#xmlDocCopyNode"/>
     <function name="xmlOutputBufferCreateFilenameDefault ()" link="libxml2-globals.html#xmlOutputBufferCreateFilenameDefault"/>
     <function name="xmlOutputBufferCreateIO ()" link="libxml2-xmlIO.html#xmlOutputBufferCreateIO"/>
     <function name="xmlOutputBufferFlush ()" link="libxml2-xmlIO.html#xmlOutputBufferFlush"/>
+    <function name="xmlOutputBufferGetContent ()" link="libxml2-xmlIO.html#xmlOutputBufferGetContent"/>
+    <function name="xmlOutputBufferGetSize ()" link="libxml2-xmlIO.html#xmlOutputBufferGetSize"/>
     <function name="xmlOutputBufferWrite ()" link="libxml2-xmlIO.html#xmlOutputBufferWrite"/>
     <function name="xmlOutputBufferWriteEscape ()" link="libxml2-xmlIO.html#xmlOutputBufferWriteEscape"/>
     <function name="xmlOutputBufferWriteString ()" link="libxml2-xmlIO.html#xmlOutputBufferWriteString"/>
     <function name="xmlSchemaValidateListSimpleTypeFacet ()" link="libxml2-xmlschemastypes.html#xmlSchemaValidateListSimpleTypeFacet"/>
     <function name="xmlSchemaValidateOneElement ()" link="libxml2-xmlschemas.html#xmlSchemaValidateOneElement"/>
     <function name="xmlSchemaValidatePredefinedType ()" link="libxml2-xmlschemastypes.html#xmlSchemaValidatePredefinedType"/>
+    <function name="xmlSchemaValidateSetFilename ()" link="libxml2-xmlschemas.html#xmlSchemaValidateSetFilename"/>
+    <function name="xmlSchemaValidateSetLocator ()" link="libxml2-xmlschemas.html#xmlSchemaValidateSetLocator"/>
     <function name="xmlSchemaValidateStream ()" link="libxml2-xmlschemas.html#xmlSchemaValidateStream"/>
     <function name="xmlSchemaValueAppend ()" link="libxml2-xmlschemastypes.html#xmlSchemaValueAppend"/>
     <function name="xmlSchemaValueGetAsBoolean ()" link="libxml2-xmlschemastypes.html#xmlSchemaValueGetAsBoolean"/>
     <function name="xmlTextWriterFullEndElement ()" link="libxml2-xmlwriter.html#xmlTextWriterFullEndElement"/>
     <function name="xmlTextWriterSetIndent ()" link="libxml2-xmlwriter.html#xmlTextWriterSetIndent"/>
     <function name="xmlTextWriterSetIndentString ()" link="libxml2-xmlwriter.html#xmlTextWriterSetIndentString"/>
+    <function name="xmlTextWriterSetQuoteChar ()" link="libxml2-xmlwriter.html#xmlTextWriterSetQuoteChar"/>
     <function name="xmlTextWriterStartAttribute ()" link="libxml2-xmlwriter.html#xmlTextWriterStartAttribute"/>
     <function name="xmlTextWriterStartAttributeNS ()" link="libxml2-xmlwriter.html#xmlTextWriterStartAttributeNS"/>
     <function name="xmlTextWriterStartCDATA ()" link="libxml2-xmlwriter.html#xmlTextWriterStartCDATA"/>
     <function name="xmlXPathNextPreceding ()" link="libxml2-xpathInternals.html#xmlXPathNextPreceding"/>
     <function name="xmlXPathNextPrecedingSibling ()" link="libxml2-xpathInternals.html#xmlXPathNextPrecedingSibling"/>
     <function name="xmlXPathNextSelf ()" link="libxml2-xpathInternals.html#xmlXPathNextSelf"/>
+    <function name="xmlXPathNodeEval ()" link="libxml2-xpath.html#xmlXPathNodeEval"/>
     <function name="xmlXPathNodeLeading ()" link="libxml2-xpathInternals.html#xmlXPathNodeLeading"/>
     <function name="xmlXPathNodeLeadingSorted ()" link="libxml2-xpathInternals.html#xmlXPathNodeLeadingSorted"/>
     <function name="xmlXPathNodeSetAdd ()" link="libxml2-xpathInternals.html#xmlXPathNodeSetAdd"/>
     <function name="xmlXPathRegisteredVariablesCleanup ()" link="libxml2-xpathInternals.html#xmlXPathRegisteredVariablesCleanup"/>
     <function name="xmlXPathRoot ()" link="libxml2-xpathInternals.html#xmlXPathRoot"/>
     <function name="xmlXPathRoundFunction ()" link="libxml2-xpathInternals.html#xmlXPathRoundFunction"/>
+    <function name="xmlXPathSetContextNode ()" link="libxml2-xpath.html#xmlXPathSetContextNode"/>
     <function name="xmlXPathStartsWithFunction ()" link="libxml2-xpathInternals.html#xmlXPathStartsWithFunction"/>
     <function name="xmlXPathStringEvalNumber ()" link="libxml2-xpathInternals.html#xmlXPathStringEvalNumber"/>
     <function name="xmlXPathStringFunction ()" link="libxml2-xpathInternals.html#xmlXPathStringFunction"/>
index de24444..dd59a37 100644 (file)
@@ -7,7 +7,8 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Developer Menu</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Developer Menu</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>There are several on-line resources related to using libxml:</p><ol><li>Use the <a href="search.php">search engine</a> to look up
+</style><title>Developer Menu</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Developer Menu</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>There are several on-line resources related to using libxml:</p><ol>
+  <li>Use the <a href="search.php">search engine</a> to look up
   information.</li>
   <li>Check the <a href="FAQ.html">FAQ.</a></li>
   <li>Check the <a href="http://xmlsoft.org/html/libxml-lib.html">extensive
@@ -20,7 +21,7 @@ A:link, A:visited, A:active { text-decoration: underline }
   <li>John Fleck's libxml2 tutorial: <a href="tutorial/index.html">html</a>
     or <a href="tutorial/xmltutorial.pdf">pdf</a>.</li>
   <li>If you need to parse large files, check the <a href="xmlreader.html">xmlReader</a> API tutorial</li>
-  <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">some nice
+  <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">some nice
     documentation</a> explaining how to use the libxml SAX interface.</li>
   <li>George Lebl wrote <a href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article
     for IBM developerWorks</a> about using libxml.</li>
index f3ba4d0..20f9e57 100644 (file)
@@ -12,7 +12,8 @@ mirrors (<a href="ftp://fr.rpmfind.net/pub/libxml/">France</a> and
 Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a
 mirror in Austria</a>). (NOTE that you need both the <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a>
 packages installed to compile applications using libxml if using RPMs.)</p><p>You can find all the history of libxml(2) and libxslt releases in the <a href="http://xmlsoft.org/sources/old/">old</a> directory. The precompiled
-Windows binaries made by Igor Zlatovic are available in the <a href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p><p>Binary ports:</p><ul><li>RPMs for x86_64 are available directly on <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a>, the source RPM will compile on
+Windows binaries made by Igor Zlatovic are available in the <a href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p><p>Binary ports:</p><ul>
+  <li>RPMs for x86_64 are available directly on <a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a>, the source RPM will compile on
     any architecture supported.</li>
   <li><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a> is now the
     maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
@@ -24,11 +25,13 @@ Windows binaries made by Igor Zlatovic are available in the <a href="http://xmls
   <li>The HP-UX porting center provides <a href="http://hpux.connect.org.uk/hppd/hpux/Gnome/">HP-UX binaries</a></li>
   <li>Bull provides precompiled <a href="http://gnome.bullfreeware.com/new_index.html">RPMs for AIX</a> as
     patr of their GNOME packages</li>
-</ul><p>If you know other supported binary ports, please <a href="http://veillard.com/">contact me</a>.</p><p><a name="Snapshot" id="Snapshot">Snapshot:</a></p><ul><li>Code from the GNOME GIT base libxml2 module, updated hourly <a href="ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz">libxml2-git-snapshot.tar.gz</a>.</li>
+</ul><p>If you know other supported binary ports, please <a href="http://veillard.com/">contact me</a>.</p><p><a name="Snapshot" id="Snapshot">Snapshot:</a></p><ul>
+  <li>Code from the GNOME GIT base libxml2 module, updated hourly <a href="ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz">libxml2-git-snapshot.tar.gz</a>.</li>
   <li>Docs, content of the web site, the list archive included <a href="ftp://xmlsoft.org/libxml2/libxml-docs.tar.gz">libxml-docs.tar.gz</a>.</li>
 </ul><p><a name="Contribs" id="Contribs">Contributions:</a></p><p>I do accept external contributions, especially if compiling on another
 platform,  get in touch with the list to upload the package, wrappers for
-various languages have been provided, and can be found in the <a href="python.html">bindings section</a></p><p>Libxml2 is also available from GIT:</p><ul><li><p>See <a href="http://git.gnome.org/browse/libxml2/">libxml2 Git web</a>.
+various languages have been provided, and can be found in the <a href="python.html">bindings section</a></p><p>Libxml2 is also available from GIT:</p><ul>
+  <li><p>See <a href="http://git.gnome.org/browse/libxml2/">libxml2 Git web</a>.
          To checkout a local tree use:</p>
        <pre>git clone git://git.gnome.org/libxml2</pre>
   </li>
index 93de5bf..7c7953f 100644 (file)
@@ -13,7 +13,8 @@ by Tim Bray on Unicode and why you should care about it.</p><p>If you don't unde
 without knowing what encoding it uses</b>, then as Joel Spolsky said <a href="http://www.joelonsoftware.com/articles/Unicode.html">please do not
 write another line of code until you finish reading that article.</a>. It is
 a prerequisite to understand this page, and avoid a lot of problems with
-libxml2, XML or text processing in general.</p><p>Table of Content:</p><ol><li><a href="encoding.html#What">What does internationalization support
+libxml2, XML or text processing in general.</p><p>Table of Content:</p><ol>
+  <li><a href="encoding.html#What">What does internationalization support
     mean ?</a></li>
   <li><a href="encoding.html#internal">The internal encoding, how and
   why</a></li>
@@ -33,7 +34,8 @@ allows the document to be encoded in other encodings at the condition that
 they are clearly labeled as such. For example the following is a wellformed
 XML document encoded in ISO-8859-1 and using accentuated letters that we
 French like for both markup and content:</p><pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
-&lt;très&gt;là &lt;/très&gt;</pre><p>Having internationalization support in libxml2 means the following:</p><ul><li>the document is properly parsed</li>
+&lt;très&gt;là &lt;/très&gt;</pre><p>Having internationalization support in libxml2 means the following:</p><ul>
+  <li>the document is properly parsed</li>
   <li>information about it's encoding is saved</li>
   <li>it can be modified</li>
   <li>it can be saved in its original encoding</li>
@@ -54,7 +56,8 @@ an internationalized fashion by libxml2 too:</p><pre>&lt;!DOCTYPE HTML PUBLIC "-
 &lt;p&gt;W3C crée des standards pour le Web.&lt;/body&gt;
 &lt;/html&gt;</pre><h3><a name="internal" id="internal">The internal encoding, how and why</a></h3><p>One of the core decisions was to force all documents to be converted to a
 default internal encoding, and that encoding to be UTF-8, here are the
-rationales for those choices:</p><ul><li>keeping the native encoding in the internal form would force the libxml
+rationales for those choices:</p><ul>
+  <li>keeping the native encoding in the internal form would force the libxml
     users (or the code associated) to be fully aware of the encoding of the
     original document, for examples when adding a text node to a document,
     the content would have to be provided in the document encoding, i.e. the
@@ -67,7 +70,8 @@ rationales for those choices:</p><ul><li>keeping the native encoding in the inte
     considered an intelligent choice too since it's a direct Unicode mapping
     support. I selected UTF-8 on the basis of efficiency and compatibility
     with surrounding software:
-    <ul><li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
+    <ul>
+      <li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
         more costly to import and export CPU wise) is also far more compact
         than UTF-16 (and UCS-4) for a majority of the documents I see it used
         for right now (RPM RDF catalogs, advogato data, various configuration
@@ -86,8 +90,10 @@ rationales for those choices:</p><ul><li>keeping the native encoding in the inte
         upcoming Gnome text widget, and a lot of Unix code (yet another place
         where Unix programmer base takes a different approach from Microsoft
         - they are using UTF-16)</li>
-    </ul></li>
-</ul><p>What does this mean in practice for the libxml2 user:</p><ul><li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
+    </ul>
+  </li>
+</ul><p>What does this mean in practice for the libxml2 user:</p><ul>
+  <li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
     as UTF-8 valid strings. The proper way to terminate an xmlChar * string
     is simply to append 0 byte, as usual.</li>
   <li>One just need to make sure that when using chars outside the ASCII set,
@@ -95,7 +101,8 @@ rationales for those choices:</p><ul><li>keeping the native encoding in the inte
 </ul><h3><a name="implemente" id="implemente">How is it implemented ?</a></h3><p>Let's describe how all this works within libxml, basically the I18N
 (internationalization) support get triggered only during I/O operation, i.e.
 when reading a document or saving one. Let's look first at the reading
-sequence:</p><ol><li>when a document is processed, we usually don't know the encoding, a
+sequence:</p><ol>
+  <li>when a document is processed, we usually don't know the encoding, a
     simple heuristic allows to detect UTF-16 and UCS-4 from encodings where
     the ASCII range (0-0x7F) maps with ASCII</li>
   <li>the xml declaration if available is parsed, including the encoding
@@ -136,7 +143,8 @@ err2.xml:1: error: Unsupported encoding UnsupportedEnc
 collected/built an xmlDoc DOM like structure) ? It depends on the function
 called, xmlSaveFile() will just try to save in the original encoding, while
 xmlSaveFileTo() and xmlSaveFileEnc() can optionally save to a given
-encoding:</p><ol><li>if no encoding is given, libxml2 will look for an encoding value
+encoding:</p><ol>
+  <li>if no encoding is given, libxml2 will look for an encoding value
     associated to the document and if it exists will try to save to that
     encoding,
     <p>otherwise everything is written in the internal form, i.e. UTF-8</p>
@@ -175,7 +183,8 @@ so a couple of functions htmlGetMetaEncoding() and htmlSetMetaEncoding() have
 been provided. The parser also attempts to switch encoding on the fly when
 detecting such a tag on input. Except for that the processing is the same
 (and again reuses the same code).</p><h3><a name="Default" id="Default">Default supported encodings</a></h3><p>libxml2 has a set of default converters for the following encodings
-(located in encoding.c):</p><ol><li>UTF-8 is supported by default (null handlers)</li>
+(located in encoding.c):</p><ol>
+  <li>UTF-8 is supported by default (null handlers)</li>
   <li>UTF-16, both little and big endian</li>
   <li>ISO-Latin-1 (ISO-8859-1) covering most western languages</li>
   <li>ASCII, useful mostly for saving</li>
@@ -193,7 +202,8 @@ goal is to be able to parse document whose encoding is supported but where
 the name differs (for example from the default set of names accepted by
 iconv). The following functions allow to register and handle new aliases for
 existing encodings. Once registered libxml2 will automatically lookup the
-aliases when handling a document:</p><ul><li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
+aliases when handling a document:</p><ul>
+  <li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
   <li>int xmlDelEncodingAlias(const char *alias);</li>
   <li>const char * xmlGetEncodingAlias(const char *alias);</li>
   <li>void xmlCleanupEncodingAliases(void);</li>
index d5f71b0..50668bf 100644 (file)
@@ -113,7 +113,8 @@ DEBUG("parsePerson\n");
     }
 
     return(ret);
-}</pre><p>Here are a couple of things to notice:</p><ul><li>Usually a recursive parsing style is the more convenient one: XML data
+}</pre><p>Here are a couple of things to notice:</p><ul>
+  <li>Usually a recursive parsing style is the more convenient one: XML data
     is by nature subject to repetitive constructs and usually exhibits highly
     structured patterns.</li>
   <li>The two arguments of type <em>xmlDocPtr</em> and <em>xmlNsPtr</em>,
index bdac7bb..57af9c2 100644 (file)
-# Beware this is autogenerated by index.py
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
-DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+##
+## This file is auto-generated by index.py
+## DO NOT EDIT !!!
+##
 
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS)
+LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD)
+
+CLEANFILES = *.tmp
+
+if REBUILD_DOCS
 rebuild: examples.xml index.html
+.PHONY: rebuild
 
-examples.xml: index.py *.c
-       -@($(srcdir)/index.py)
+examples.xml: index.py $(noinst_PROGRAMS:=.c)
+       cd $(srcdir) && $(PYTHON) index.py
+       $(MAKE) Makefile
 
 index.html: examples.xml examples.xsl
-       -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+       cd $(srcdir) && xsltproc examples.xsl examples.xml && echo "Rebuilt web page"
+       -cd $(srcdir) && xmllint --valid --noout index.html
+endif
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
-
-EXTRA_DIST=examples.xsl index.py examples.xml writer.xml test3.xml tst.xml test1.xml test2.xml io2.res xpath2.res tree1.res reader4.res io1.res tree2.res reader3.res xpath1.res reader1.res 
-
-noinst_PROGRAMS=xpath2 reader1 reader4 parse2 reader2 parse3 reader3 tree2 parse4 io2 testWriter io1 xpath1 parse1 tree1 
-
-xpath2_SOURCES=xpath2.c
-xpath2_LDFLAGS=
-xpath2_DEPENDENCIES= $(DEPS)
-xpath2_LDADD= @RDL_LIBS@ $(LDADDS)
-
-reader1_SOURCES=reader1.c
-reader1_LDFLAGS=
-reader1_DEPENDENCIES= $(DEPS)
-reader1_LDADD= @RDL_LIBS@ $(LDADDS)
-
-reader4_SOURCES=reader4.c
-reader4_LDFLAGS=
-reader4_DEPENDENCIES= $(DEPS)
-reader4_LDADD= @RDL_LIBS@ $(LDADDS)
-
-parse2_SOURCES=parse2.c
-parse2_LDFLAGS=
-parse2_DEPENDENCIES= $(DEPS)
-parse2_LDADD= @RDL_LIBS@ $(LDADDS)
-
-reader2_SOURCES=reader2.c
-reader2_LDFLAGS=
-reader2_DEPENDENCIES= $(DEPS)
-reader2_LDADD= @RDL_LIBS@ $(LDADDS)
-
-parse3_SOURCES=parse3.c
-parse3_LDFLAGS=
-parse3_DEPENDENCIES= $(DEPS)
-parse3_LDADD= @RDL_LIBS@ $(LDADDS)
-
-reader3_SOURCES=reader3.c
-reader3_LDFLAGS=
-reader3_DEPENDENCIES= $(DEPS)
-reader3_LDADD= @RDL_LIBS@ $(LDADDS)
-
-tree2_SOURCES=tree2.c
-tree2_LDFLAGS=
-tree2_DEPENDENCIES= $(DEPS)
-tree2_LDADD= @RDL_LIBS@ $(LDADDS)
-
-parse4_SOURCES=parse4.c
-parse4_LDFLAGS=
-parse4_DEPENDENCIES= $(DEPS)
-parse4_LDADD= @RDL_LIBS@ $(LDADDS)
-
-io2_SOURCES=io2.c
-io2_LDFLAGS=
-io2_DEPENDENCIES= $(DEPS)
-io2_LDADD= @RDL_LIBS@ $(LDADDS)
-
-testWriter_SOURCES=testWriter.c
-testWriter_LDFLAGS=
-testWriter_DEPENDENCIES= $(DEPS)
-testWriter_LDADD= @RDL_LIBS@ $(LDADDS)
-
-io1_SOURCES=io1.c
-io1_LDFLAGS=
-io1_DEPENDENCIES= $(DEPS)
-io1_LDADD= @RDL_LIBS@ $(LDADDS)
-
-xpath1_SOURCES=xpath1.c
-xpath1_LDFLAGS=
-xpath1_DEPENDENCIES= $(DEPS)
-xpath1_LDADD= @RDL_LIBS@ $(LDADDS)
-
-parse1_SOURCES=parse1.c
-parse1_LDFLAGS=
-parse1_DEPENDENCIES= $(DEPS)
-parse1_LDADD= @RDL_LIBS@ $(LDADDS)
-
-tree1_SOURCES=tree1.c
-tree1_LDFLAGS=
-tree1_DEPENDENCIES= $(DEPS)
-tree1_LDADD= @RDL_LIBS@ $(LDADDS)
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+clean-local:
+       test -f Makefile.am || rm -f test?.xml
+
+EXTRA_DIST = \
+       examples.xml \
+       examples.xsl \
+       index.html \
+       index.py \
+       io1.res \
+       io2.res \
+       reader1.res \
+       reader3.res \
+       reader4.res \
+       test1.xml \
+       test2.xml \
+       test3.xml \
+       tree1.res \
+       tree2.res \
+       tst.xml \
+       writer.xml \
+       xpath1.res \
+       xpath2.res
+
+noinst_PROGRAMS = \
+       io1 \
+       io2 \
+       parse1 \
+       parse2 \
+       parse3 \
+       parse4 \
+       reader1 \
+       reader2 \
+       reader3 \
+       reader4 \
+       testWriter \
+       tree1 \
+       tree2 \
+       xpath1 \
+       xpath2
+
+io1_SOURCES = io1.c
+
+io2_SOURCES = io2.c
+
+parse1_SOURCES = parse1.c
+
+parse2_SOURCES = parse2.c
+
+parse3_SOURCES = parse3.c
+
+parse4_SOURCES = parse4.c
+
+reader1_SOURCES = reader1.c
+
+reader2_SOURCES = reader2.c
+
+reader3_SOURCES = reader3.c
+
+reader4_SOURCES = reader4.c
+
+testWriter_SOURCES = testWriter.c
+
+tree1_SOURCES = tree1.c
+
+tree2_SOURCES = tree2.c
+
+xpath1_SOURCES = xpath1.c
+
+xpath2_SOURCES = xpath2.c
 
 valgrind: 
        $(MAKE) CHECKER='valgrind' tests
 
 tests: $(noinst_PROGRAMS)
+       test -f Makefile.am || test -f test1.xml || $(LN_S) $(srcdir)/test?.xml .
        @(echo '## examples regression tests')
        @(echo > .memdump)
-       @($(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse2 test2.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse3)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse4 test3.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ././xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse1 test1.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-
-
+       $(CHECKER) ./io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse1 test1.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse2 test2.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse3
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse4 test3.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
index 9d08434..7b66627 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,18 +78,19 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-noinst_PROGRAMS = xpath2$(EXEEXT) reader1$(EXEEXT) reader4$(EXEEXT) \
-       parse2$(EXEEXT) reader2$(EXEEXT) parse3$(EXEEXT) \
-       reader3$(EXEEXT) tree2$(EXEEXT) parse4$(EXEEXT) io2$(EXEEXT) \
-       testWriter$(EXEEXT) io1$(EXEEXT) xpath1$(EXEEXT) \
-       parse1$(EXEEXT) tree1$(EXEEXT)
+noinst_PROGRAMS = io1$(EXEEXT) io2$(EXEEXT) parse1$(EXEEXT) \
+       parse2$(EXEEXT) parse3$(EXEEXT) parse4$(EXEEXT) \
+       reader1$(EXEEXT) reader2$(EXEEXT) reader3$(EXEEXT) \
+       reader4$(EXEEXT) testWriter$(EXEEXT) tree1$(EXEEXT) \
+       tree2$(EXEEXT) xpath1$(EXEEXT) xpath2$(EXEEXT)
 subdir = doc/examples
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -55,84 +100,126 @@ CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
 am_io1_OBJECTS = io1.$(OBJEXT)
 io1_OBJECTS = $(am_io1_OBJECTS)
+io1_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+io1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
-io1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(io1_LDFLAGS) $(LDFLAGS) -o $@
+am__v_lt_1 = 
 am_io2_OBJECTS = io2.$(OBJEXT)
 io2_OBJECTS = $(am_io2_OBJECTS)
-io2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(io2_LDFLAGS) $(LDFLAGS) -o $@
+io2_LDADD = $(LDADD)
+io2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_parse1_OBJECTS = parse1.$(OBJEXT)
 parse1_OBJECTS = $(am_parse1_OBJECTS)
-parse1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(parse1_LDFLAGS) $(LDFLAGS) -o $@
+parse1_LDADD = $(LDADD)
+parse1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_parse2_OBJECTS = parse2.$(OBJEXT)
 parse2_OBJECTS = $(am_parse2_OBJECTS)
-parse2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(parse2_LDFLAGS) $(LDFLAGS) -o $@
+parse2_LDADD = $(LDADD)
+parse2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_parse3_OBJECTS = parse3.$(OBJEXT)
 parse3_OBJECTS = $(am_parse3_OBJECTS)
-parse3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(parse3_LDFLAGS) $(LDFLAGS) -o $@
+parse3_LDADD = $(LDADD)
+parse3_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_parse4_OBJECTS = parse4.$(OBJEXT)
 parse4_OBJECTS = $(am_parse4_OBJECTS)
-parse4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(parse4_LDFLAGS) $(LDFLAGS) -o $@
+parse4_LDADD = $(LDADD)
+parse4_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_reader1_OBJECTS = reader1.$(OBJEXT)
 reader1_OBJECTS = $(am_reader1_OBJECTS)
-reader1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(reader1_LDFLAGS) $(LDFLAGS) -o $@
+reader1_LDADD = $(LDADD)
+reader1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_reader2_OBJECTS = reader2.$(OBJEXT)
 reader2_OBJECTS = $(am_reader2_OBJECTS)
-reader2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(reader2_LDFLAGS) $(LDFLAGS) -o $@
+reader2_LDADD = $(LDADD)
+reader2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_reader3_OBJECTS = reader3.$(OBJEXT)
 reader3_OBJECTS = $(am_reader3_OBJECTS)
-reader3_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(reader3_LDFLAGS) $(LDFLAGS) -o $@
+reader3_LDADD = $(LDADD)
+reader3_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_reader4_OBJECTS = reader4.$(OBJEXT)
 reader4_OBJECTS = $(am_reader4_OBJECTS)
-reader4_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(reader4_LDFLAGS) $(LDFLAGS) -o $@
+reader4_LDADD = $(LDADD)
+reader4_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_testWriter_OBJECTS = testWriter.$(OBJEXT)
 testWriter_OBJECTS = $(am_testWriter_OBJECTS)
-testWriter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(testWriter_LDFLAGS) $(LDFLAGS) -o $@
+testWriter_LDADD = $(LDADD)
+testWriter_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_tree1_OBJECTS = tree1.$(OBJEXT)
 tree1_OBJECTS = $(am_tree1_OBJECTS)
-tree1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(tree1_LDFLAGS) $(LDFLAGS) -o $@
+tree1_LDADD = $(LDADD)
+tree1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_tree2_OBJECTS = tree2.$(OBJEXT)
 tree2_OBJECTS = $(am_tree2_OBJECTS)
-tree2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(tree2_LDFLAGS) $(LDFLAGS) -o $@
+tree2_LDADD = $(LDADD)
+tree2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_xpath1_OBJECTS = xpath1.$(OBJEXT)
 xpath1_OBJECTS = $(am_xpath1_OBJECTS)
-xpath1_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(xpath1_LDFLAGS) $(LDFLAGS) -o $@
+xpath1_LDADD = $(LDADD)
+xpath1_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
 am_xpath2_OBJECTS = xpath2.$(OBJEXT)
 xpath2_OBJECTS = $(am_xpath2_OBJECTS)
-xpath2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(xpath2_LDFLAGS) $(LDFLAGS) -o $@
+xpath2_LDADD = $(LDADD)
+xpath2_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -143,22 +230,18 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(io1_SOURCES) $(io2_SOURCES) $(parse1_SOURCES) \
        $(parse2_SOURCES) $(parse3_SOURCES) $(parse4_SOURCES) \
        $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
@@ -169,6 +252,28 @@ DIST_SOURCES = $(io1_SOURCES) $(io2_SOURCES) $(parse1_SOURCES) \
        $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
        $(reader4_SOURCES) $(testWriter_SOURCES) $(tree1_SOURCES) \
        $(tree2_SOURCES) $(xpath1_SOURCES) $(xpath2_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -176,7 +281,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -213,6 +317,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -257,6 +362,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -268,7 +376,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -293,7 +400,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -326,6 +432,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -399,72 +506,45 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS)
+LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD)
+CLEANFILES = *.tmp
+EXTRA_DIST = \
+       examples.xml \
+       examples.xsl \
+       index.html \
+       index.py \
+       io1.res \
+       io2.res \
+       reader1.res \
+       reader3.res \
+       reader4.res \
+       test1.xml \
+       test2.xml \
+       test3.xml \
+       tree1.res \
+       tree2.res \
+       tst.xml \
+       writer.xml \
+       xpath1.res \
+       xpath2.res
 
-# Beware this is autogenerated by index.py
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
-DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
-EXTRA_DIST = examples.xsl index.py examples.xml writer.xml test3.xml tst.xml test1.xml test2.xml io2.res xpath2.res tree1.res reader4.res io1.res tree2.res reader3.res xpath1.res reader1.res 
-xpath2_SOURCES = xpath2.c
-xpath2_LDFLAGS = 
-xpath2_DEPENDENCIES = $(DEPS)
-xpath2_LDADD = @RDL_LIBS@ $(LDADDS)
-reader1_SOURCES = reader1.c
-reader1_LDFLAGS = 
-reader1_DEPENDENCIES = $(DEPS)
-reader1_LDADD = @RDL_LIBS@ $(LDADDS)
-reader4_SOURCES = reader4.c
-reader4_LDFLAGS = 
-reader4_DEPENDENCIES = $(DEPS)
-reader4_LDADD = @RDL_LIBS@ $(LDADDS)
+io1_SOURCES = io1.c
+io2_SOURCES = io2.c
+parse1_SOURCES = parse1.c
 parse2_SOURCES = parse2.c
-parse2_LDFLAGS = 
-parse2_DEPENDENCIES = $(DEPS)
-parse2_LDADD = @RDL_LIBS@ $(LDADDS)
-reader2_SOURCES = reader2.c
-reader2_LDFLAGS = 
-reader2_DEPENDENCIES = $(DEPS)
-reader2_LDADD = @RDL_LIBS@ $(LDADDS)
 parse3_SOURCES = parse3.c
-parse3_LDFLAGS = 
-parse3_DEPENDENCIES = $(DEPS)
-parse3_LDADD = @RDL_LIBS@ $(LDADDS)
-reader3_SOURCES = reader3.c
-reader3_LDFLAGS = 
-reader3_DEPENDENCIES = $(DEPS)
-reader3_LDADD = @RDL_LIBS@ $(LDADDS)
-tree2_SOURCES = tree2.c
-tree2_LDFLAGS = 
-tree2_DEPENDENCIES = $(DEPS)
-tree2_LDADD = @RDL_LIBS@ $(LDADDS)
 parse4_SOURCES = parse4.c
-parse4_LDFLAGS = 
-parse4_DEPENDENCIES = $(DEPS)
-parse4_LDADD = @RDL_LIBS@ $(LDADDS)
-io2_SOURCES = io2.c
-io2_LDFLAGS = 
-io2_DEPENDENCIES = $(DEPS)
-io2_LDADD = @RDL_LIBS@ $(LDADDS)
+reader1_SOURCES = reader1.c
+reader2_SOURCES = reader2.c
+reader3_SOURCES = reader3.c
+reader4_SOURCES = reader4.c
 testWriter_SOURCES = testWriter.c
-testWriter_LDFLAGS = 
-testWriter_DEPENDENCIES = $(DEPS)
-testWriter_LDADD = @RDL_LIBS@ $(LDADDS)
-io1_SOURCES = io1.c
-io1_LDFLAGS = 
-io1_DEPENDENCIES = $(DEPS)
-io1_LDADD = @RDL_LIBS@ $(LDADDS)
-xpath1_SOURCES = xpath1.c
-xpath1_LDFLAGS = 
-xpath1_DEPENDENCIES = $(DEPS)
-xpath1_LDADD = @RDL_LIBS@ $(LDADDS)
-parse1_SOURCES = parse1.c
-parse1_LDFLAGS = 
-parse1_DEPENDENCIES = $(DEPS)
-parse1_LDADD = @RDL_LIBS@ $(LDADDS)
 tree1_SOURCES = tree1.c
-tree1_LDFLAGS = 
-tree1_DEPENDENCIES = $(DEPS)
-tree1_LDADD = @RDL_LIBS@ $(LDADDS)
+tree2_SOURCES = tree2.c
+xpath1_SOURCES = xpath1.c
+xpath2_SOURCES = xpath2.c
 all: all-am
 
 .SUFFIXES:
@@ -508,51 +588,66 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-io1$(EXEEXT): $(io1_OBJECTS) $(io1_DEPENDENCIES) 
+
+io1$(EXEEXT): $(io1_OBJECTS) $(io1_DEPENDENCIES) $(EXTRA_io1_DEPENDENCIES) 
        @rm -f io1$(EXEEXT)
-       $(AM_V_CCLD)$(io1_LINK) $(io1_OBJECTS) $(io1_LDADD) $(LIBS)
-io2$(EXEEXT): $(io2_OBJECTS) $(io2_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(io1_OBJECTS) $(io1_LDADD) $(LIBS)
+
+io2$(EXEEXT): $(io2_OBJECTS) $(io2_DEPENDENCIES) $(EXTRA_io2_DEPENDENCIES) 
        @rm -f io2$(EXEEXT)
-       $(AM_V_CCLD)$(io2_LINK) $(io2_OBJECTS) $(io2_LDADD) $(LIBS)
-parse1$(EXEEXT): $(parse1_OBJECTS) $(parse1_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(io2_OBJECTS) $(io2_LDADD) $(LIBS)
+
+parse1$(EXEEXT): $(parse1_OBJECTS) $(parse1_DEPENDENCIES) $(EXTRA_parse1_DEPENDENCIES) 
        @rm -f parse1$(EXEEXT)
-       $(AM_V_CCLD)$(parse1_LINK) $(parse1_OBJECTS) $(parse1_LDADD) $(LIBS)
-parse2$(EXEEXT): $(parse2_OBJECTS) $(parse2_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(parse1_OBJECTS) $(parse1_LDADD) $(LIBS)
+
+parse2$(EXEEXT): $(parse2_OBJECTS) $(parse2_DEPENDENCIES) $(EXTRA_parse2_DEPENDENCIES) 
        @rm -f parse2$(EXEEXT)
-       $(AM_V_CCLD)$(parse2_LINK) $(parse2_OBJECTS) $(parse2_LDADD) $(LIBS)
-parse3$(EXEEXT): $(parse3_OBJECTS) $(parse3_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(parse2_OBJECTS) $(parse2_LDADD) $(LIBS)
+
+parse3$(EXEEXT): $(parse3_OBJECTS) $(parse3_DEPENDENCIES) $(EXTRA_parse3_DEPENDENCIES) 
        @rm -f parse3$(EXEEXT)
-       $(AM_V_CCLD)$(parse3_LINK) $(parse3_OBJECTS) $(parse3_LDADD) $(LIBS)
-parse4$(EXEEXT): $(parse4_OBJECTS) $(parse4_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(parse3_OBJECTS) $(parse3_LDADD) $(LIBS)
+
+parse4$(EXEEXT): $(parse4_OBJECTS) $(parse4_DEPENDENCIES) $(EXTRA_parse4_DEPENDENCIES) 
        @rm -f parse4$(EXEEXT)
-       $(AM_V_CCLD)$(parse4_LINK) $(parse4_OBJECTS) $(parse4_LDADD) $(LIBS)
-reader1$(EXEEXT): $(reader1_OBJECTS) $(reader1_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(parse4_OBJECTS) $(parse4_LDADD) $(LIBS)
+
+reader1$(EXEEXT): $(reader1_OBJECTS) $(reader1_DEPENDENCIES) $(EXTRA_reader1_DEPENDENCIES) 
        @rm -f reader1$(EXEEXT)
-       $(AM_V_CCLD)$(reader1_LINK) $(reader1_OBJECTS) $(reader1_LDADD) $(LIBS)
-reader2$(EXEEXT): $(reader2_OBJECTS) $(reader2_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(reader1_OBJECTS) $(reader1_LDADD) $(LIBS)
+
+reader2$(EXEEXT): $(reader2_OBJECTS) $(reader2_DEPENDENCIES) $(EXTRA_reader2_DEPENDENCIES) 
        @rm -f reader2$(EXEEXT)
-       $(AM_V_CCLD)$(reader2_LINK) $(reader2_OBJECTS) $(reader2_LDADD) $(LIBS)
-reader3$(EXEEXT): $(reader3_OBJECTS) $(reader3_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(reader2_OBJECTS) $(reader2_LDADD) $(LIBS)
+
+reader3$(EXEEXT): $(reader3_OBJECTS) $(reader3_DEPENDENCIES) $(EXTRA_reader3_DEPENDENCIES) 
        @rm -f reader3$(EXEEXT)
-       $(AM_V_CCLD)$(reader3_LINK) $(reader3_OBJECTS) $(reader3_LDADD) $(LIBS)
-reader4$(EXEEXT): $(reader4_OBJECTS) $(reader4_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(reader3_OBJECTS) $(reader3_LDADD) $(LIBS)
+
+reader4$(EXEEXT): $(reader4_OBJECTS) $(reader4_DEPENDENCIES) $(EXTRA_reader4_DEPENDENCIES) 
        @rm -f reader4$(EXEEXT)
-       $(AM_V_CCLD)$(reader4_LINK) $(reader4_OBJECTS) $(reader4_LDADD) $(LIBS)
-testWriter$(EXEEXT): $(testWriter_OBJECTS) $(testWriter_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(reader4_OBJECTS) $(reader4_LDADD) $(LIBS)
+
+testWriter$(EXEEXT): $(testWriter_OBJECTS) $(testWriter_DEPENDENCIES) $(EXTRA_testWriter_DEPENDENCIES) 
        @rm -f testWriter$(EXEEXT)
-       $(AM_V_CCLD)$(testWriter_LINK) $(testWriter_OBJECTS) $(testWriter_LDADD) $(LIBS)
-tree1$(EXEEXT): $(tree1_OBJECTS) $(tree1_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(testWriter_OBJECTS) $(testWriter_LDADD) $(LIBS)
+
+tree1$(EXEEXT): $(tree1_OBJECTS) $(tree1_DEPENDENCIES) $(EXTRA_tree1_DEPENDENCIES) 
        @rm -f tree1$(EXEEXT)
-       $(AM_V_CCLD)$(tree1_LINK) $(tree1_OBJECTS) $(tree1_LDADD) $(LIBS)
-tree2$(EXEEXT): $(tree2_OBJECTS) $(tree2_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(tree1_OBJECTS) $(tree1_LDADD) $(LIBS)
+
+tree2$(EXEEXT): $(tree2_OBJECTS) $(tree2_DEPENDENCIES) $(EXTRA_tree2_DEPENDENCIES) 
        @rm -f tree2$(EXEEXT)
-       $(AM_V_CCLD)$(tree2_LINK) $(tree2_OBJECTS) $(tree2_LDADD) $(LIBS)
-xpath1$(EXEEXT): $(xpath1_OBJECTS) $(xpath1_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(tree2_OBJECTS) $(tree2_LDADD) $(LIBS)
+
+xpath1$(EXEEXT): $(xpath1_OBJECTS) $(xpath1_DEPENDENCIES) $(EXTRA_xpath1_DEPENDENCIES) 
        @rm -f xpath1$(EXEEXT)
-       $(AM_V_CCLD)$(xpath1_LINK) $(xpath1_OBJECTS) $(xpath1_LDADD) $(LIBS)
-xpath2$(EXEEXT): $(xpath2_OBJECTS) $(xpath2_DEPENDENCIES) 
+       $(AM_V_CCLD)$(LINK) $(xpath1_OBJECTS) $(xpath1_LDADD) $(LIBS)
+
+xpath2$(EXEEXT): $(xpath2_OBJECTS) $(xpath2_DEPENDENCIES) $(EXTRA_xpath2_DEPENDENCIES) 
        @rm -f xpath2$(EXEEXT)
-       $(AM_V_CCLD)$(xpath2_LINK) $(xpath2_OBJECTS) $(xpath2_LDADD) $(LIBS)
+       $(AM_V_CCLD)$(LINK) $(xpath2_OBJECTS) $(xpath2_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -579,26 +674,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -606,26 +698,15 @@ mostlyclean-libtool:
 clean-libtool:
        -rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -637,15 +718,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -654,6 +731,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -702,13 +794,19 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -719,7 +817,7 @@ maintainer-clean-generic:
        @echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \
        mostlyclean-am
 
 distclean: distclean-am
@@ -790,69 +888,76 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstPROGRAMS ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am \
-       install-data-local install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-local clean-noinstPROGRAMS cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
        maintainer-clean-generic mostlyclean mostlyclean-compile \
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags uninstall uninstall-am
+       tags tags-am uninstall uninstall-am
 
 
-rebuild: examples.xml index.html
+@REBUILD_DOCS_TRUE@rebuild: examples.xml index.html
+@REBUILD_DOCS_TRUE@.PHONY: rebuild
 
-examples.xml: index.py *.c
-       -@($(srcdir)/index.py)
+@REBUILD_DOCS_TRUE@examples.xml: index.py $(noinst_PROGRAMS:=.c)
+@REBUILD_DOCS_TRUE@    cd $(srcdir) && $(PYTHON) index.py
+@REBUILD_DOCS_TRUE@    $(MAKE) Makefile
 
-index.html: examples.xml examples.xsl
-       -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+@REBUILD_DOCS_TRUE@index.html: examples.xml examples.xsl
+@REBUILD_DOCS_TRUE@    cd $(srcdir) && xsltproc examples.xsl examples.xml && echo "Rebuilt web page"
+@REBUILD_DOCS_TRUE@    -cd $(srcdir) && xmllint --valid --noout index.html
 
 install-data-local: 
-       @MKDIR_P@ $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+clean-local:
+       test -f Makefile.am || rm -f test?.xml
 
 valgrind: 
        $(MAKE) CHECKER='valgrind' tests
 
 tests: $(noinst_PROGRAMS)
+       test -f Makefile.am || test -f test1.xml || $(LN_S) $(srcdir)/test?.xml .
        @(echo '## examples regression tests')
        @(echo > .memdump)
-       @($(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse2 test2.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse3)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse4 test3.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ././xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./parse1 test1.xml)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
-       @($(CHECKER) ./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
-       @(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
+       $(CHECKER) ./io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse1 test1.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse2 test2.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse3
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./parse4 test3.xml
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
+       $(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res
+       @grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index a237a0e..28929cc 100644 (file)
@@ -1,74 +1,9 @@
 <examples>
-  <example filename='reader2.c'>
-    <synopsis>Parse and validate an XML file with an xmlReader</synopsis>
-    <purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file validating the content in the process and activating options like entities substitution, and DTD attributes defaulting. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
-    <usage>reader2 &lt;valid_xml_filename&gt;</usage>
-    <test>reader2 test2.xml &gt; reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
-    <author>Daniel Veillard</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>xmlReader</section>
-    <includes>
-      <include>&lt;libxml/xmlreader.h&gt;</include>
-    </includes>
-    <uses>
-      <function line='45' file='xmlstring' name='xmlStrlen'/>
-      <function line='109' file='parser' name='xmlCleanupParser'/>
-      <function line='38' file='xmlreader' name='xmlTextReaderNodeType'/>
-      <typedef line='60' file='xmlreader' name='xmlTextReaderPtr'/>
-      <function line='113' file='xmlmemory' name='xmlMemoryDump'/>
-      <function line='34' file='xmlreader' name='xmlTextReaderConstValue'/>
-      <enum line='70' file='parser' name='XML_PARSE_NOENT'/>
-      <function line='37' file='xmlreader' name='xmlTextReaderDepth'/>
-      <enum line='71' file='parser' name='XML_PARSE_DTDVALID'/>
-      <enum line='69' file='parser' name='XML_PARSE_DTDATTR'/>
-      <function line='84' file='xmlreader' name='xmlFreeTextReader'/>
-      <macro line='104' file='xmlversion' name='LIBXML_TEST_VERSION'/>
-      <function line='30' file='xmlreader' name='xmlTextReaderConstName'/>
-      <function line='41' file='xmlreader' name='xmlTextReaderHasValue'/>
-      <function line='76' file='xmlreader' name='xmlTextReaderRead'/>
-      <function line='40' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
-      <function line='68' file='xmlreader' name='xmlReaderForFile'/>
-      <function line='81' file='xmlreader' name='xmlTextReaderIsValid'/>
-    </uses>
-  </example>
-  <example filename='xpath2.c'>
-    <synopsis>Load a document, locate subelements with XPath, modify said elements and save the resulting document.</synopsis>
-    <purpose>Shows how to make a full round-trip from a load/edit/save</purpose>
-    <usage>xpath2 &lt;xml-file&gt; &lt;xpath-expr&gt; &lt;new-value&gt;</usage>
-    <test>xpath2 test3.xml &apos;//discarded&apos; discarded &gt; xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp</test>
-    <author>Aleksey Sanin and Daniel Veillard</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>XPath</section>
-    <includes>
-      <include>&lt;libxml/parser.h&gt;</include>
-      <include>&lt;libxml/xpath.h&gt;</include>
-      <include>&lt;libxml/xpathInternals.h&gt;</include>
-      <include>&lt;libxml/tree.h&gt;</include>
-    </includes>
-    <uses>
-      <function line='162' file='tree' name='xmlNodeSetContent'/>
-      <function line='127' file='tree' name='xmlDocDump'/>
-      <typedef line='88' file='xpath' name='xmlXPathObjectPtr'/>
-      <function line='56' file='xmlmemory' name='xmlMemoryDump'/>
-      <function line='110' file='xpath' name='xmlXPathEvalExpression'/>
-      <function line='95' file='parser' name='xmlParseFile'/>
-      <function line='123' file='xpath' name='xmlXPathFreeObject'/>
-      <function line='102' file='xpath' name='xmlXPathNewContext'/>
-      <function line='51' file='parser' name='xmlCleanupParser'/>
-      <macro line='45' file='xmlversion' name='LIBXML_TEST_VERSION'/>
-      <typedef line='87' file='xpath' name='xmlXPathContextPtr'/>
-      <function line='124' file='xpath' name='xmlXPathFreeContext'/>
-      <function line='41' file='parser' name='xmlInitParser'/>
-      <function line='131' file='tree' name='xmlFreeDoc'/>
-      <enum line='180' file='tree' name='XML_NAMESPACE_DECL'/>
-      <typedef line='86' file='tree' name='xmlDocPtr'/>
-    </uses>
-  </example>
   <example filename='xpath1.c'>
     <synopsis>Evaluate XPath expression and prints result node set.</synopsis>
     <purpose>Shows how to evaluate XPath expression and register known namespaces in XPath context.</purpose>
     <usage>xpath1 &lt;xml-file&gt; &lt;xpath-expr&gt; [&lt;known-ns-list&gt;]</usage>
-    <test>./xpath1 test3.xml &apos;//child2&apos; &gt; xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp</test>
+    <test>xpath1 test3.xml &apos;//child2&apos; &gt; xpath1.tmp &amp;&amp; diff xpath1.tmp $(srcdir)/xpath1.res</test>
     <author>Aleksey Sanin</author>
     <copy>see Copyright for the status of this software. </copy>
     <section>XPath</section>
       <typedef line='27' file='tree' name='xmlDocPtr'/>
     </uses>
   </example>
-  <example filename='io2.c'>
-    <synopsis>Output to char buffer</synopsis>
-    <purpose>Demonstrate the use of xmlDocDumpMemory to output document to a character buffer</purpose>
-    <usage>io2</usage>
-    <test>io2 &gt; io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp</test>
-    <author>John Fleck</author>
+  <example filename='reader2.c'>
+    <synopsis>Parse and validate an XML file with an xmlReader</synopsis>
+    <purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file validating the content in the process and activating options like entities substitution, and DTD attributes defaulting. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
+    <usage>reader2 &lt;valid_xml_filename&gt;</usage>
+    <test>reader2 test2.xml &gt; reader1.tmp &amp;&amp; diff reader1.tmp $(srcdir)/reader1.res</test>
+    <author>Daniel Veillard</author>
     <copy>see Copyright for the status of this software. </copy>
-    <section>InputOutput</section>
+    <section>xmlReader</section>
     <includes>
-      <include>&lt;libxml/parser.h&gt;</include>
+      <include>&lt;libxml/xmlreader.h&gt;</include>
     </includes>
     <uses>
-      <function line='29' file='tree' name='xmlNodeSetContent'/>
-      <function line='36' file='tree' name='xmlDocDumpFormatMemory'/>
-      <variable line='42' file='globals' name='xmlFree'/>
-      <function line='30' file='tree' name='xmlDocSetRootElement'/>
-      <typedef line='20' file='tree' name='xmlDocPtr'/>
-      <function line='43' file='tree' name='xmlFreeDoc'/>
-      <typedef line='19' file='tree' name='xmlNodePtr'/>
-      <function line='27' file='tree' name='xmlNewDoc'/>
-      <function line='28' file='tree' name='xmlNewNode'/>
+      <function line='45' file='xmlstring' name='xmlStrlen'/>
+      <function line='109' file='parser' name='xmlCleanupParser'/>
+      <function line='38' file='xmlreader' name='xmlTextReaderNodeType'/>
+      <typedef line='60' file='xmlreader' name='xmlTextReaderPtr'/>
+      <function line='113' file='xmlmemory' name='xmlMemoryDump'/>
+      <function line='34' file='xmlreader' name='xmlTextReaderConstValue'/>
+      <enum line='70' file='parser' name='XML_PARSE_NOENT'/>
+      <function line='37' file='xmlreader' name='xmlTextReaderDepth'/>
+      <enum line='71' file='parser' name='XML_PARSE_DTDVALID'/>
+      <enum line='69' file='parser' name='XML_PARSE_DTDATTR'/>
+      <function line='84' file='xmlreader' name='xmlFreeTextReader'/>
+      <macro line='104' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+      <function line='30' file='xmlreader' name='xmlTextReaderConstName'/>
+      <function line='41' file='xmlreader' name='xmlTextReaderHasValue'/>
+      <function line='76' file='xmlreader' name='xmlTextReaderRead'/>
+      <function line='40' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
+      <function line='68' file='xmlreader' name='xmlReaderForFile'/>
+      <function line='81' file='xmlreader' name='xmlTextReaderIsValid'/>
     </uses>
   </example>
   <example filename='tree2.c'>
     <synopsis>Creates a tree</synopsis>
     <purpose>Shows how to create document, nodes and dump it to stdout or file.</purpose>
     <usage>tree2 &lt;filename&gt;  -Default output: stdout</usage>
-    <test>tree2 &gt; tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp</test>
+    <test>tree2 &gt; tree2.tmp &amp;&amp; diff tree2.tmp $(srcdir)/tree2.res</test>
     <author>Lucas Brasilino &lt;brasilino@recife.pe.gov.br&gt;</author>
     <copy>see Copyright for the status of this software </copy>
     <section>Tree</section>
       <function line='39' file='tree' name='xmlNewDoc'/>
     </uses>
   </example>
+  <example filename='io1.c'>
+    <synopsis>Example of custom Input/Output</synopsis>
+    <purpose>Demonstrate the use of xmlRegisterInputCallbacks to build a custom I/O layer, this is used in an XInclude method context to show how dynamic document can be built in a clean way.</purpose>
+    <usage>io1</usage>
+    <test>io1 &gt; io1.tmp &amp;&amp; diff io1.tmp $(srcdir)/io1.res</test>
+    <author>Daniel Veillard</author>
+    <copy>see Copyright for the status of this software. </copy>
+    <section>InputOutput</section>
+    <includes>
+      <include>&lt;libxml/parser.h&gt;</include>
+      <include>&lt;libxml/xmlIO.h&gt;</include>
+      <include>&lt;libxml/xinclude.h&gt;</include>
+      <include>&lt;libxml/tree.h&gt;</include>
+    </includes>
+    <uses>
+      <function line='143' file='tree' name='xmlDocDump'/>
+      <function line='158' file='xmlmemory' name='xmlMemoryDump'/>
+      <function line='149' file='tree' name='xmlFreeDoc'/>
+      <function line='154' file='parser' name='xmlCleanupParser'/>
+      <macro line='117' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+      <function line='134' file='xinclude' name='xmlXIncludeProcess'/>
+      <function line='117' file='xmlIO' name='xmlRegisterInputCallbacks'/>
+      <function line='124' file='parser' name='xmlReadMemory'/>
+      <typedef line='105' file='tree' name='xmlDocPtr'/>
+    </uses>
+  </example>
+  <example filename='parse4.c'>
+    <synopsis>Parse an XML document chunk by chunk to a tree and free it</synopsis>
+    <purpose>Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
+    <usage>parse4 test3.xml</usage>
+    <test>parse4 test3.xml</test>
+    <author>Daniel Veillard</author>
+    <copy>see Copyright for the status of this software. </copy>
+    <section>Parsing</section>
+    <includes>
+      <include>&lt;libxml/tree.h&gt;</include>
+      <include>&lt;libxml/parser.h&gt;</include>
+    </includes>
+    <uses>
+      <function line='94' file='parser' name='xmlFreeParserCtxt'/>
+      <function line='86' file='parser' name='xmlParseChunk'/>
+      <function line='103' file='tree' name='xmlFreeDoc'/>
+      <function line='135' file='xmlmemory' name='xmlMemoryDump'/>
+      <function line='67' file='parser' name='xmlCreatePushParserCtxt'/>
+      <function line='131' file='parser' name='xmlCleanupParser'/>
+      <macro line='120' file='xmlversion' name='LIBXML_TEST_VERSION'/>
+      <typedef line='45' file='tree' name='xmlParserCtxtPtr'/>
+      <typedef line='47' file='tree' name='xmlDocPtr'/>
+    </uses>
+  </example>
+  <example filename='xpath2.c'>
+    <synopsis>Load a document, locate subelements with XPath, modify said elements and save the resulting document.</synopsis>
+    <purpose>Shows how to make a full round-trip from a load/edit/save</purpose>
+    <usage>xpath2 &lt;xml-file&gt; &lt;xpath-expr&gt; &lt;new-value&gt;</usage>
+    <test>xpath2 test3.xml &apos;//discarded&apos; discarded &gt; xpath2.tmp &amp;&amp; diff xpath2.tmp $(srcdir)/xpath2.res</test>
+    <author>Aleksey Sanin and Daniel Veillard</author>
+    <copy>see Copyright for the status of this software. </copy>
+    <section>XPath</section>
+    <includes>
+      <include>&lt;libxml/parser.h&gt;</include>
+      <include>&lt;libxml/xpath.h&gt;</include>
+      <include>&lt;libxml/xpathInternals.h&gt;</include>
+      <include>&lt;libxml/tree.h&gt;</include>
+    </includes>
+    <uses>
+      <function line='162' file='tree' name='xmlNodeSetContent'/>
+      <function line='127' file='tree' name='xmlDocDump'/>
+      <typedef line='88' file='xpath' name='xmlXPathObjectPtr'/>
+      <function line='110' file='xpath' name='xmlXPathEvalExpression'/>
+      <function line='95' file='parser' name='xmlParseFile'/>
+      <function line='123' file='xpath' name='xmlXPathFreeObject'/>
+      <function line='102' file='xpath' name='xmlXPathNewContext'/>
+      <typedef line='87' file='xpath' name='xmlXPathContextPtr'/>
+      <function line='124' file='xpath' name='xmlXPathFreeContext'/>
+      <function line='41' file='parser' name='xmlInitParser'/>
+      <function line='131' file='tree' name='xmlFreeDoc'/>
+      <enum line='180' file='tree' name='XML_NAMESPACE_DECL'/>
+      <typedef line='86' file='tree' name='xmlDocPtr'/>
+    </uses>
+  </example>
+  <example filename='io2.c'>
+    <synopsis>Output to char buffer</synopsis>
+    <purpose>Demonstrate the use of xmlDocDumpMemory to output document to a character buffer</purpose>
+    <usage>io2</usage>
+    <test>io2 &gt; io2.tmp &amp;&amp; diff io2.tmp $(srcdir)/io2.res</test>
+    <author>John Fleck</author>
+    <copy>see Copyright for the status of this software. </copy>
+    <section>InputOutput</section>
+    <includes>
+      <include>&lt;libxml/parser.h&gt;</include>
+    </includes>
+    <uses>
+      <function line='29' file='tree' name='xmlNodeSetContent'/>
+      <function line='36' file='tree' name='xmlDocDumpFormatMemory'/>
+      <variable line='42' file='globals' name='xmlFree'/>
+      <function line='30' file='tree' name='xmlDocSetRootElement'/>
+      <typedef line='20' file='tree' name='xmlDocPtr'/>
+      <typedef line='19' file='tree' name='xmlNodePtr'/>
+      <function line='27' file='tree' name='xmlNewDoc'/>
+      <function line='28' file='tree' name='xmlNewNode'/>
+    </uses>
+  </example>
   <example filename='reader1.c'>
     <synopsis>Parse an XML file with an xmlReader</synopsis>
     <purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file and dump the informations about the nodes found in the process. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
     <usage>reader1 &lt;filename&gt;</usage>
-    <test>reader1 test2.xml &gt; reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
+    <test>reader1 test2.xml &gt; reader1.tmp &amp;&amp; diff reader1.tmp $(srcdir)/reader1.res</test>
     <author>Daniel Veillard</author>
     <copy>see Copyright for the status of this software. </copy>
     <section>xmlReader</section>
     </includes>
     <uses>
       <function line='44' file='xmlstring' name='xmlStrlen'/>
-      <function line='94' file='parser' name='xmlCleanupParser'/>
       <function line='37' file='xmlreader' name='xmlTextReaderNodeType'/>
       <typedef line='59' file='xmlreader' name='xmlTextReaderPtr'/>
-      <function line='98' file='xmlmemory' name='xmlMemoryDump'/>
       <function line='33' file='xmlreader' name='xmlTextReaderConstValue'/>
       <function line='36' file='xmlreader' name='xmlTextReaderDepth'/>
       <function line='69' file='xmlreader' name='xmlFreeTextReader'/>
-      <macro line='89' file='xmlversion' name='LIBXML_TEST_VERSION'/>
       <function line='29' file='xmlreader' name='xmlTextReaderConstName'/>
       <function line='40' file='xmlreader' name='xmlTextReaderHasValue'/>
       <function line='67' file='xmlreader' name='xmlTextReaderRead'/>
       <function line='62' file='xmlreader' name='xmlReaderForFile'/>
     </uses>
   </example>
-  <example filename='testWriter.c'>
-    <synopsis>use various APIs for the xmlWriter</synopsis>
-    <purpose>tests a number of APIs for the xmlWriter, especially the various methods to write to a filename, to a memory buffer, to a new document, or to a subtree. It shows how to do encoding string conversions too. The resulting documents are then serialized.</purpose>
-    <usage>testWriter</usage>
-    <test>testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res</test>
-    <author>Alfred Mickautsch</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>xmlWriter</section>
-    <includes>
-      <include>&lt;libxml/encoding.h&gt;</include>
-      <include>&lt;libxml/xmlwriter.h&gt;</include>
-    </includes>
-    <uses>
-      <function line='913' file='xmlwriter' name='xmlTextWriterStartDocument'/>
-      <function line='1121' file='xmlwriter' name='xmlTextWriterEndDocument'/>
-      <variable line='1183' file='globals' name='xmlRealloc'/>
-      <function line='925' file='xmlwriter' name='xmlTextWriterWriteComment'/>
-      <function line='1156' file='encoding' name='xmlFindCharEncodingHandler'/>
-      <variable line='1166' file='globals' name='xmlMalloc'/>
-      <typedef line='879' file='tree' name='xmlDocPtr'/>
-      <typedef line='341' file='tree' name='xmlBufferPtr'/>
-      <macro line='885' file='parser' name='XML_DEFAULT_VERSION'/>
-      <function line='901' file='tree' name='xmlDocSetRootElement'/>
-      <function line='1127' file='xmlwriter' name='xmlFreeTextWriter'/>
-      <function line='1096' file='xmlwriter' name='xmlTextWriterStartElement'/>
-      <function line='347' file='tree' name='xmlBufferCreate'/>
-      <function line='1111' file='xmlwriter' name='xmlTextWriterEndElement'/>
-      <function line='76' file='xmlwriter' name='xmlNewTextWriterFilename'/>
-      <function line='959' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
-      <function line='1073' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
-      <typedef line='1151' file='encoding' name='xmlCharEncodingHandlerPtr'/>
-      <function line='1131' file='tree' name='xmlFreeDoc'/>
-      <typedef line='880' file='tree' name='xmlNodePtr'/>
-      <function line='949' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
-      <function line='632' file='xmlwriter' name='xmlNewTextWriterDoc'/>
-      <function line='894' file='tree' name='xmlNewDocNode'/>
-      <function line='1129' file='tree' name='xmlSaveFileEnc'/>
-      <function line='904' file='xmlwriter' name='xmlNewTextWriterTree'/>
-      <function line='355' file='xmlwriter' name='xmlNewTextWriterMemory'/>
-      <variable line='1180' file='globals' name='xmlFree'/>
-      <function line='613' file='tree' name='xmlBufferFree'/>
-      <typedef line='878' file='xmlwriter' name='xmlTextWriterPtr'/>
-      <function line='1103' file='xmlwriter' name='xmlTextWriterWriteElement'/>
-      <function line='885' file='tree' name='xmlNewDoc'/>
-    </uses>
-  </example>
-  <example filename='parse4.c'>
-    <synopsis>Parse an XML document chunk by chunk to a tree and free it</synopsis>
-    <purpose>Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
-    <usage>parse4 test3.xml</usage>
-    <test>parse4 test3.xml</test>
-    <author>Daniel Veillard</author>
+  <example filename='tree1.c'>
+    <synopsis>Navigates a tree to print element names</synopsis>
+    <purpose>Parse a file to a tree, use xmlDocGetRootElement() to get the root element, then walk the document and print all the element name in document order.</purpose>
+    <usage>tree1 filename_or_URL</usage>
+    <test>tree1 test2.xml &gt; tree1.tmp &amp;&amp; diff tree1.tmp $(srcdir)/tree1.res</test>
+    <author>Dodji Seketeli</author>
     <copy>see Copyright for the status of this software. </copy>
-    <section>Parsing</section>
+    <section>Tree</section>
     <includes>
       <include>&lt;libxml/tree.h&gt;</include>
       <include>&lt;libxml/parser.h&gt;</include>
     </includes>
     <uses>
-      <function line='94' file='parser' name='xmlFreeParserCtxt'/>
-      <function line='86' file='parser' name='xmlParseChunk'/>
-      <function line='67' file='parser' name='xmlCreatePushParserCtxt'/>
-      <typedef line='45' file='tree' name='xmlParserCtxtPtr'/>
-      <typedef line='47' file='tree' name='xmlDocPtr'/>
+      <enum line='36' file='tree' name='XML_ELEMENT_NODE'/>
+      <function line='74' file='tree' name='xmlDocGetRootElement'/>
+      <function line='67' file='parser' name='xmlReadFile'/>
     </uses>
   </example>
   <example filename='reader3.c'>
     <synopsis>Show how to extract subdocuments with xmlReader</synopsis>
     <purpose>Demonstrate the use of xmlTextReaderPreservePattern() to parse an XML file with the xmlReader while collecting only some subparts of the document. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
     <usage>reader3</usage>
-    <test>reader3 &gt; reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp</test>
+    <test>reader3 &gt; reader3.tmp &amp;&amp; diff reader3.tmp $(srcdir)/reader3.res</test>
     <author>Daniel Veillard</author>
     <copy>see Copyright for the status of this software. </copy>
     <section>xmlReader</section>
       <function line='38' file='xmlreader' name='xmlReaderForFile'/>
     </uses>
   </example>
-  <example filename='io1.c'>
-    <synopsis>Example of custom Input/Output</synopsis>
-    <purpose>Demonstrate the use of xmlRegisterInputCallbacks to build a custom I/O layer, this is used in an XInclude method context to show how dynamic document can be built in a clean way.</purpose>
-    <usage>io1</usage>
-    <test>io1 &gt; io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp</test>
+  <example filename='parse2.c'>
+    <synopsis>Parse and validate an XML file to a tree and free the result</synopsis>
+    <purpose>Create a parser context for an XML file, then parse and validate the file, creating a tree, check the validation result and xmlFreeDoc() to free the resulting tree.</purpose>
+    <usage>parse2 test2.xml</usage>
+    <test>parse2 test2.xml</test>
     <author>Daniel Veillard</author>
     <copy>see Copyright for the status of this software. </copy>
-    <section>InputOutput</section>
+    <section>Parsing</section>
     <includes>
-      <include>&lt;libxml/parser.h&gt;</include>
-      <include>&lt;libxml/xmlIO.h&gt;</include>
-      <include>&lt;libxml/xinclude.h&gt;</include>
       <include>&lt;libxml/tree.h&gt;</include>
+      <include>&lt;libxml/parser.h&gt;</include>
     </includes>
     <uses>
-      <function line='143' file='tree' name='xmlDocDump'/>
-      <function line='134' file='xinclude' name='xmlXIncludeProcess'/>
-      <function line='117' file='xmlIO' name='xmlRegisterInputCallbacks'/>
-      <function line='124' file='parser' name='xmlReadMemory'/>
+      <function line='47' file='parser' name='xmlFreeParserCtxt'/>
+      <enum line='35' file='parser' name='XML_PARSE_DTDVALID'/>
+      <function line='29' file='parser' name='xmlNewParserCtxt'/>
+      <typedef line='25' file='tree' name='xmlParserCtxtPtr'/>
+      <function line='35' file='parser' name='xmlCtxtReadFile'/>
     </uses>
   </example>
   <example filename='parse1.c'>
       <function line='26' file='parser' name='xmlReadFile'/>
     </uses>
   </example>
-  <example filename='tree1.c'>
-    <synopsis>Navigates a tree to print element names</synopsis>
-    <purpose>Parse a file to a tree, use xmlDocGetRootElement() to get the root element, then walk the document and print all the element name in document order.</purpose>
-    <usage>tree1 filename_or_URL</usage>
-    <test>tree1 test2.xml &gt; tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp</test>
-    <author>Dodji Seketeli</author>
-    <copy>see Copyright for the status of this software. </copy>
-    <section>Tree</section>
-    <includes>
-      <include>&lt;libxml/tree.h&gt;</include>
-      <include>&lt;libxml/parser.h&gt;</include>
-    </includes>
-    <uses>
-      <enum line='36' file='tree' name='XML_ELEMENT_NODE'/>
-      <function line='74' file='tree' name='xmlDocGetRootElement'/>
-      <function line='67' file='parser' name='xmlReadFile'/>
-    </uses>
-  </example>
   <example filename='reader4.c'>
     <synopsis>Parse multiple XML files reusing an xmlReader</synopsis>
     <purpose>Demonstrate the use of xmlReaderForFile() and xmlReaderNewFile to parse XML files while reusing the reader object and parser context.  (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
     <usage>reader4 &lt;filename&gt; [ filename ... ]</usage>
-    <test>reader4 test1.xml test2.xml test3.xml &gt; reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp</test>
+    <test>reader4 test1.xml test2.xml test3.xml &gt; reader4.tmp &amp;&amp; diff reader4.tmp $(srcdir)/reader4.res</test>
     <author>Graham Bennett</author>
     <copy>see Copyright for the status of this software. </copy>
     <section>xmlReader</section>
       <function line='72' file='xmlreader' name='xmlReaderForFile'/>
     </uses>
   </example>
-  <example filename='parse2.c'>
-    <synopsis>Parse and validate an XML file to a tree and free the result</synopsis>
-    <purpose>Create a parser context for an XML file, then parse and validate the file, creating a tree, check the validation result and xmlFreeDoc() to free the resulting tree.</purpose>
-    <usage>parse2 test2.xml</usage>
-    <test>parse2 test2.xml</test>
-    <author>Daniel Veillard</author>
+  <example filename='testWriter.c'>
+    <synopsis>use various APIs for the xmlWriter</synopsis>
+    <purpose>tests a number of APIs for the xmlWriter, especially the various methods to write to a filename, to a memory buffer, to a new document, or to a subtree. It shows how to do encoding string conversions too. The resulting documents are then serialized.</purpose>
+    <usage>testWriter</usage>
+    <test>testWriter &amp;&amp; for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done</test>
+    <author>Alfred Mickautsch</author>
     <copy>see Copyright for the status of this software. </copy>
-    <section>Parsing</section>
+    <section>xmlWriter</section>
     <includes>
-      <include>&lt;libxml/tree.h&gt;</include>
-      <include>&lt;libxml/parser.h&gt;</include>
+      <include>&lt;libxml/encoding.h&gt;</include>
+      <include>&lt;libxml/xmlwriter.h&gt;</include>
     </includes>
     <uses>
-      <function line='47' file='parser' name='xmlFreeParserCtxt'/>
-      <enum line='35' file='parser' name='XML_PARSE_DTDVALID'/>
-      <function line='29' file='parser' name='xmlNewParserCtxt'/>
-      <typedef line='25' file='tree' name='xmlParserCtxtPtr'/>
-      <function line='35' file='parser' name='xmlCtxtReadFile'/>
+      <function line='913' file='xmlwriter' name='xmlTextWriterStartDocument'/>
+      <function line='1121' file='xmlwriter' name='xmlTextWriterEndDocument'/>
+      <variable line='1183' file='globals' name='xmlRealloc'/>
+      <function line='925' file='xmlwriter' name='xmlTextWriterWriteComment'/>
+      <function line='1156' file='encoding' name='xmlFindCharEncodingHandler'/>
+      <variable line='1166' file='globals' name='xmlMalloc'/>
+      <typedef line='341' file='tree' name='xmlBufferPtr'/>
+      <macro line='885' file='parser' name='XML_DEFAULT_VERSION'/>
+      <function line='901' file='tree' name='xmlDocSetRootElement'/>
+      <function line='1127' file='xmlwriter' name='xmlFreeTextWriter'/>
+      <function line='1096' file='xmlwriter' name='xmlTextWriterStartElement'/>
+      <function line='347' file='tree' name='xmlBufferCreate'/>
+      <function line='1111' file='xmlwriter' name='xmlTextWriterEndElement'/>
+      <function line='76' file='xmlwriter' name='xmlNewTextWriterFilename'/>
+      <function line='959' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
+      <function line='1073' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
+      <typedef line='1151' file='encoding' name='xmlCharEncodingHandlerPtr'/>
+      <typedef line='880' file='tree' name='xmlNodePtr'/>
+      <function line='949' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
+      <function line='632' file='xmlwriter' name='xmlNewTextWriterDoc'/>
+      <function line='894' file='tree' name='xmlNewDocNode'/>
+      <function line='1129' file='tree' name='xmlSaveFileEnc'/>
+      <function line='904' file='xmlwriter' name='xmlNewTextWriterTree'/>
+      <function line='355' file='xmlwriter' name='xmlNewTextWriterMemory'/>
+      <variable line='1180' file='globals' name='xmlFree'/>
+      <function line='613' file='tree' name='xmlBufferFree'/>
+      <typedef line='878' file='xmlwriter' name='xmlTextWriterPtr'/>
+      <function line='1103' file='xmlwriter' name='xmlTextWriterWriteElement'/>
+      <function line='885' file='tree' name='xmlNewDoc'/>
     </uses>
   </example>
   <symbols>
     <symbol name='LIBXML_TEST_VERSION'>
-      <ref filename='reader2.c'/>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
       <ref filename='parse3.c'/>
+      <ref filename='reader2.c'/>
       <ref filename='tree2.c'/>
-      <ref filename='reader1.c'/>
+      <ref filename='io1.c'/>
+      <ref filename='parse4.c'/>
     </symbol>
     <symbol name='XML_DEFAULT_VERSION'>
       <ref filename='testWriter.c'/>
       <ref filename='tree1.c'/>
     </symbol>
     <symbol name='XML_NAMESPACE_DECL'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='XML_PARSE_DTDATTR'>
       <ref filename='reader2.c'/>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlCleanupParser'>
-      <ref filename='reader2.c'/>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
       <ref filename='parse3.c'/>
+      <ref filename='reader2.c'/>
       <ref filename='tree2.c'/>
-      <ref filename='reader1.c'/>
+      <ref filename='io1.c'/>
+      <ref filename='parse4.c'/>
     </symbol>
     <symbol name='xmlCreateIntSubset'>
       <ref filename='tree2.c'/>
       <ref filename='parse2.c'/>
     </symbol>
     <symbol name='xmlDocDump'>
+      <ref filename='io1.c'/>
       <ref filename='xpath2.c'/>
       <ref filename='reader3.c'/>
-      <ref filename='io1.c'/>
     </symbol>
     <symbol name='xmlDocDumpFormatMemory'>
       <ref filename='io2.c'/>
       <ref filename='tree1.c'/>
     </symbol>
     <symbol name='xmlDocPtr'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
       <ref filename='parse3.c'/>
-      <ref filename='io2.c'/>
-      <ref filename='testWriter.c'/>
+      <ref filename='io1.c'/>
       <ref filename='parse4.c'/>
+      <ref filename='xpath2.c'/>
+      <ref filename='io2.c'/>
     </symbol>
     <symbol name='xmlDocSetRootElement'>
-      <ref filename='io2.c'/>
       <ref filename='tree2.c'/>
+      <ref filename='io2.c'/>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlFindCharEncodingHandler'>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlFreeDoc'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
       <ref filename='parse3.c'/>
-      <ref filename='io2.c'/>
       <ref filename='tree2.c'/>
-      <ref filename='testWriter.c'/>
+      <ref filename='io1.c'/>
+      <ref filename='parse4.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlFreeParserCtxt'>
       <ref filename='parse4.c'/>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlInitParser'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlMalloc'>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlMemoryDump'>
-      <ref filename='reader2.c'/>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
       <ref filename='parse3.c'/>
+      <ref filename='reader2.c'/>
       <ref filename='tree2.c'/>
-      <ref filename='reader1.c'/>
+      <ref filename='io1.c'/>
+      <ref filename='parse4.c'/>
     </symbol>
     <symbol name='xmlNewChild'>
       <ref filename='tree2.c'/>
     </symbol>
     <symbol name='xmlNewDoc'>
-      <ref filename='io2.c'/>
       <ref filename='tree2.c'/>
+      <ref filename='io2.c'/>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlNewDocNode'>
       <ref filename='testWriter.c'/>
     </symbol>
     <symbol name='xmlNewNode'>
-      <ref filename='io2.c'/>
       <ref filename='tree2.c'/>
+      <ref filename='io2.c'/>
     </symbol>
     <symbol name='xmlNewParserCtxt'>
       <ref filename='parse2.c'/>
       <ref filename='parse4.c'/>
     </symbol>
     <symbol name='xmlParseFile'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlParserCtxtPtr'>
       <ref filename='parse4.c'/>
       <ref filename='parse2.c'/>
     </symbol>
     <symbol name='xmlReadFile'>
-      <ref filename='parse1.c'/>
       <ref filename='tree1.c'/>
+      <ref filename='parse1.c'/>
     </symbol>
     <symbol name='xmlReadMemory'>
       <ref filename='parse3.c'/>
       <ref filename='io1.c'/>
     </symbol>
     <symbol name='xmlXPathContextPtr'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathEvalExpression'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathFreeContext'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathFreeObject'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathNewContext'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathObjectPtr'>
-      <ref filename='xpath2.c'/>
       <ref filename='xpath1.c'/>
+      <ref filename='xpath2.c'/>
     </symbol>
     <symbol name='xmlXPathRegisterNs'>
       <ref filename='xpath1.c'/>
   </symbols>
   <sections>
     <section name='InputOutput'>
-      <example filename='io2.c'/>
       <example filename='io1.c'/>
+      <example filename='io2.c'/>
     </section>
     <section name='Parsing'>
       <example filename='parse3.c'/>
       <example filename='parse4.c'/>
-      <example filename='parse1.c'/>
       <example filename='parse2.c'/>
+      <example filename='parse1.c'/>
     </section>
     <section name='Tree'>
       <example filename='tree2.c'/>
       <example filename='tree1.c'/>
     </section>
     <section name='XPath'>
-      <example filename='xpath2.c'/>
       <example filename='xpath1.c'/>
+      <example filename='xpath2.c'/>
     </section>
     <section name='xmlReader'>
       <example filename='reader2.c'/>
diff --git a/doc/examples/index.html b/doc/examples/index.html
new file mode 100644 (file)
index 0000000..c9314a3
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
+TD {font-family: Verdana,Arial,Helvetica}
+BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
+H1 {font-family: Verdana,Arial,Helvetica}
+H2 {font-family: Verdana,Arial,Helvetica}
+H3 {font-family: Verdana,Arial,Helvetica}
+A:link, A:visited, A:active { text-decoration: underline }
+</style><title>Libxml2 set of examples</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Libxml2 set of examples</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Examples Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="../index.html">Home</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../html/index.html">API Menu</a></li><li><a href="#InputOutput">InputOutput Examples</a></li><li><a href="#Parsing">Parsing Examples</a></li><li><a href="#Tree">Tree Examples</a></li><li><a href="#XPath">XPath Examples</a></li><li><a href="#xmlReader">xmlReader Examples</a></li><li><a href="#xmlWriter">xmlWriter Examples</a></li><li><a href="../guidelines.html">XML Guidelines</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p> The examples are stored per section depending on the main focus
+    of the example:</p><ul><li><p><a href="#xmlWriter">xmlWriter</a> :</p><ul><li><a href="#testWriter.c">testWriter.c</a>: use various APIs for the xmlWriter</li></ul></li><li><p><a href="#InputOutput">InputOutput</a> :</p><ul><li><a href="#io1.c">io1.c</a>: Example of custom Input/Output</li><li><a href="#io2.c">io2.c</a>: Output to char buffer</li></ul></li><li><p><a href="#Tree">Tree</a> :</p><ul><li><a href="#tree2.c">tree2.c</a>: Creates a tree</li><li><a href="#tree1.c">tree1.c</a>: Navigates a tree to print element names</li></ul></li><li><p><a href="#XPath">XPath</a> :</p><ul><li><a href="#xpath1.c">xpath1.c</a>: Evaluate XPath expression and prints result node set.</li><li><a href="#xpath2.c">xpath2.c</a>: Load a document, locate subelements with XPath, modify said elements and save the resulting document.</li></ul></li><li><p><a href="#Parsing">Parsing</a> :</p><ul><li><a href="#parse3.c">parse3.c</a>: Parse an XML document in memory to a tree and free it</li><li><a href="#parse4.c">parse4.c</a>: Parse an XML document chunk by chunk to a tree and free it</li><li><a href="#parse2.c">parse2.c</a>: Parse and validate an XML file to a tree and free the result</li><li><a href="#parse1.c">parse1.c</a>: Parse an XML file to a tree and free it</li></ul></li><li><p><a href="#xmlReader">xmlReader</a> :</p><ul><li><a href="#reader2.c">reader2.c</a>: Parse and validate an XML file with an xmlReader</li><li><a href="#reader1.c">reader1.c</a>: Parse an XML file with an xmlReader</li><li><a href="#reader3.c">reader3.c</a>: Show how to extract subdocuments with xmlReader</li><li><a href="#reader4.c">reader4.c</a>: Parse multiple XML files reusing an xmlReader</li></ul></li></ul><p> Getting the compilation options and libraries dependancies needed
+to generate binaries from the examples is best done on Linux/Unix by using
+the xml2-config script which should have been installed as part of <i>make
+install</i> step or when installing the libxml2 development package:</p><pre>gcc -o example `xml2-config --cflags` example.c `xml2-config --libs`</pre><h2><a name="InputOutput" id="InputOutput"></a>InputOutput Examples</h2><h3><a name="io1.c" href="io1.c" id="io1.c">io1.c</a>: Example of custom Input/Output</h3><p>Demonstrate the use of xmlRegisterInputCallbacks to build a custom I/O layer, this is used in an XInclude method context to show how dynamic document can be built in a clean way.</p><p>Includes:</p><ul><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li><li><a href="../html/libxml-xmlIO.html">&lt;libxml/xmlIO.h&gt;</a></li><li><a href="../html/libxml-xinclude.html">&lt;libxml/xinclude.h&gt;</a></li><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 105: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 117: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 117: Function <a href="../html/libxml-xmlIO.html#xmlRegisterInputCallbacks">xmlRegisterInputCallbacks</a> from xmlIO.h</li><li> line 124: Function <a href="../html/libxml-parser.html#xmlReadMemory">xmlReadMemory</a> from parser.h</li><li> line 134: Function <a href="../html/libxml-xinclude.html#xmlXIncludeProcess">xmlXIncludeProcess</a> from xinclude.h</li><li> line 143: Function <a href="../html/libxml-tree.html#xmlDocDump">xmlDocDump</a> from tree.h</li><li> line 149: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 154: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 158: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li></ul><p>Usage:</p><p>io1</p><p>Author: Daniel Veillard</p><h3><a name="io2.c" href="io2.c" id="io2.c">io2.c</a>: Output to char buffer</h3><p>Demonstrate the use of xmlDocDumpMemory to output document to a character buffer</p><p>Includes:</p><ul><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 19: Type <a href="../html/libxml-tree.html#xmlNodePtr">xmlNodePtr</a> from tree.h</li><li> line 20: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 27: Function <a href="../html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a> from tree.h</li><li> line 28: Function <a href="../html/libxml-tree.html#xmlNewNode">xmlNewNode</a> from tree.h</li><li> line 29: Function <a href="../html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a> from tree.h</li><li> line 30: Function <a href="../html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a> from tree.h</li><li> line 36: Function <a href="../html/libxml-tree.html#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a> from tree.h</li></ul><p>Usage:</p><p>io2</p><p>Author: John Fleck</p><h2><a name="Parsing" id="Parsing"></a>Parsing Examples</h2><h3><a name="parse3.c" href="parse3.c" id="parse3.c">parse3.c</a>: Parse an XML document in memory to a tree and free it</h3><p>Demonstrate the use of xmlReadMemory() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 27: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 33: Function <a href="../html/libxml-parser.html#xmlReadMemory">xmlReadMemory</a> from parser.h</li><li> line 38: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 49: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 54: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 58: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li></ul><p>Usage:</p><p>parse3</p><p>Author: Daniel Veillard</p><h3><a name="parse4.c" href="parse4.c" id="parse4.c">parse4.c</a>: Parse an XML document chunk by chunk to a tree and free it</h3><p>Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 45: Type <a href="../html/libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> from tree.h</li><li> line 47: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 67: Function <a href="../html/libxml-parser.html#xmlCreatePushParserCtxt">xmlCreatePushParserCtxt</a> from parser.h</li><li> line 86: Function <a href="../html/libxml-parser.html#xmlParseChunk">xmlParseChunk</a> from parser.h</li><li> line 94: Function <a href="../html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a> from parser.h</li><li> line 103: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 120: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 131: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 135: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li></ul><p>Usage:</p><p>parse4 test3.xml</p><p>Author: Daniel Veillard</p><h3><a name="parse2.c" href="parse2.c" id="parse2.c">parse2.c</a>: Parse and validate an XML file to a tree and free the result</h3><p>Create a parser context for an XML file, then parse and validate the file, creating a tree, check the validation result and xmlFreeDoc() to free the resulting tree.</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 25: Type <a href="../html/libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> from tree.h</li><li> line 29: Function <a href="../html/libxml-parser.html#xmlNewParserCtxt">xmlNewParserCtxt</a> from parser.h</li><li> line 35: Function <a href="../html/libxml-parser.html#xmlCtxtReadFile">xmlCtxtReadFile</a> from parser.h</li><li> line 47: Function <a href="../html/libxml-parser.html#xmlFreeParserCtxt">xmlFreeParserCtxt</a> from parser.h</li></ul><p>Usage:</p><p>parse2 test2.xml</p><p>Author: Daniel Veillard</p><h3><a name="parse1.c" href="parse1.c" id="parse1.c">parse1.c</a>: Parse an XML file to a tree and free it</h3><p>Demonstrate the use of xmlReadFile() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 26: Function <a href="../html/libxml-parser.html#xmlReadFile">xmlReadFile</a> from parser.h</li></ul><p>Usage:</p><p>parse1 test1.xml</p><p>Author: Daniel Veillard</p><h2><a name="Tree" id="Tree"></a>Tree Examples</h2><h3><a name="tree2.c" href="tree2.c" id="tree2.c">tree2.c</a>: Creates a tree</h3><p>Shows how to create document, nodes and dump it to stdout or file.</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 34: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 39: Function <a href="../html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a> from tree.h</li><li> line 41: Function <a href="../html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a> from tree.h</li><li> line 46: Function <a href="../html/libxml-tree.html#xmlCreateIntSubset">xmlCreateIntSubset</a> from tree.h</li><li> line 74: Function <a href="../html/libxml-tree.html#xmlNewNode">xmlNewNode</a> from tree.h</li><li> line 75: Function <a href="../html/libxml-tree.html#xmlNewText">xmlNewText</a> from tree.h</li><li> line 78: Function <a href="../html/libxml-tree.html#xmlAddChild">xmlAddChild</a> from tree.h</li><li> line 88: Function <a href="../html/libxml-tree.html#xmlNewChild">xmlNewChild</a> from tree.h</li><li> line 89: Function <a href="../html/libxml-tree.html#xmlNewProp">xmlNewProp</a> from tree.h</li><li> line 96: Function <a href="../html/libxml-tree.html#xmlSaveFormatFileEnc">xmlSaveFormatFileEnc</a> from tree.h</li><li> line 99: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 105: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 110: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li></ul><p>Usage:</p><p>tree2 &lt;filename&gt;  -Default output: stdout</p><p>Author: Lucas Brasilino &lt;brasilino@recife.pe.gov.br&gt;</p><h3><a name="tree1.c" href="tree1.c" id="tree1.c">tree1.c</a>: Navigates a tree to print element names</h3><p>Parse a file to a tree, use xmlDocGetRootElement() to get the root element, then walk the document and print all the element name in document order.</p><p>Includes:</p><ul><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 67: Function <a href="../html/libxml-parser.html#xmlReadFile">xmlReadFile</a> from parser.h</li><li> line 74: Function <a href="../html/libxml-tree.html#xmlDocGetRootElement">xmlDocGetRootElement</a> from tree.h</li></ul><p>Usage:</p><p>tree1 filename_or_URL</p><p>Author: Dodji Seketeli</p><h2><a name="XPath" id="XPath"></a>XPath Examples</h2><h3><a name="xpath1.c" href="xpath1.c" id="xpath1.c">xpath1.c</a>: Evaluate XPath expression and prints result node set.</h3><p>Shows how to evaluate XPath expression and register known namespaces in XPath context.</p><p>Includes:</p><ul><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li><li><a href="../html/libxml-xpath.html">&lt;libxml/xpath.h&gt;</a></li><li><a href="../html/libxml-xpathInternals.html">&lt;libxml/xpathInternals.h&gt;</a></li><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 39: Function <a href="../html/libxml-parser.html#xmlInitParser">xmlInitParser</a> from parser.h</li><li> line 43: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 49: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 54: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li><li> line 86: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 87: Type <a href="../html/libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> from xpath.h</li><li> line 88: Type <a href="../html/libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> from xpath.h</li><li> line 94: Function <a href="../html/libxml-parser.html#xmlParseFile">xmlParseFile</a> from parser.h</li><li> line 101: Function <a href="../html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a> from xpath.h</li><li> line 117: Function <a href="../html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a> from xpath.h</li><li> line 129: Function <a href="../html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a> from xpath.h</li><li> line 130: Function <a href="../html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a> from xpath.h</li><li> line 131: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 156: Function <a href="../html/libxml-xmlstring.html#xmlStrdup">xmlStrdup</a> from xmlstring.h</li><li> line 180: Function <a href="../html/libxml-xmlstring.html#xmlStrchr">xmlStrchr</a> from xmlstring.h</li><li> line 186: Function <a href="../html/libxml-xpathInternals.html#xmlXPathRegisterNs">xmlXPathRegisterNs</a> from xpathInternals.h</li><li> line 206: Type <a href="../html/libxml-tree.html#xmlNodePtr">xmlNodePtr</a> from tree.h</li><li> line 218: Type <a href="../html/libxml-tree.html#xmlNsPtr">xmlNsPtr</a> from tree.h</li></ul><p>Usage:</p><p>xpath1 &lt;xml-file&gt; &lt;xpath-expr&gt; [&lt;known-ns-list&gt;]</p><p>Author: Aleksey Sanin</p><h3><a name="xpath2.c" href="xpath2.c" id="xpath2.c">xpath2.c</a>: Load a document, locate subelements with XPath, modify said elements and save the resulting document.</h3><p>Shows how to make a full round-trip from a load/edit/save</p><p>Includes:</p><ul><li><a href="../html/libxml-parser.html">&lt;libxml/parser.h&gt;</a></li><li><a href="../html/libxml-xpath.html">&lt;libxml/xpath.h&gt;</a></li><li><a href="../html/libxml-xpathInternals.html">&lt;libxml/xpathInternals.h&gt;</a></li><li><a href="../html/libxml-tree.html">&lt;libxml/tree.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 41: Function <a href="../html/libxml-parser.html#xmlInitParser">xmlInitParser</a> from parser.h</li><li> line 86: Type <a href="../html/libxml-tree.html#xmlDocPtr">xmlDocPtr</a> from tree.h</li><li> line 87: Type <a href="../html/libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> from xpath.h</li><li> line 88: Type <a href="../html/libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> from xpath.h</li><li> line 95: Function <a href="../html/libxml-parser.html#xmlParseFile">xmlParseFile</a> from parser.h</li><li> line 102: Function <a href="../html/libxml-xpath.html#xmlXPathNewContext">xmlXPathNewContext</a> from xpath.h</li><li> line 110: Function <a href="../html/libxml-xpath.html#xmlXPathEvalExpression">xmlXPathEvalExpression</a> from xpath.h</li><li> line 123: Function <a href="../html/libxml-xpath.html#xmlXPathFreeObject">xmlXPathFreeObject</a> from xpath.h</li><li> line 124: Function <a href="../html/libxml-xpath.html#xmlXPathFreeContext">xmlXPathFreeContext</a> from xpath.h</li><li> line 127: Function <a href="../html/libxml-tree.html#xmlDocDump">xmlDocDump</a> from tree.h</li><li> line 131: Function <a href="../html/libxml-tree.html#xmlFreeDoc">xmlFreeDoc</a> from tree.h</li><li> line 162: Function <a href="../html/libxml-tree.html#xmlNodeSetContent">xmlNodeSetContent</a> from tree.h</li></ul><p>Usage:</p><p>xpath2 &lt;xml-file&gt; &lt;xpath-expr&gt; &lt;new-value&gt;</p><p>Author: Aleksey Sanin and Daniel Veillard</p><h2><a name="xmlReader" id="xmlReader"></a>xmlReader Examples</h2><h3><a name="reader2.c" href="reader2.c" id="reader2.c">reader2.c</a>: Parse and validate an XML file with an xmlReader</h3><p>Demonstrate the use of xmlReaderForFile() to parse an XML file validating the content in the process and activating options like entities substitution, and DTD attributes defaulting. (Note that the XMLReader functions require libxml2 version later than 2.6.)</p><p>Includes:</p><ul><li><a href="../html/libxml-xmlreader.html">&lt;libxml/xmlreader.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 30: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a> from xmlreader.h</li><li> line 34: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a> from xmlreader.h</li><li> line 37: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a> from xmlreader.h</li><li> line 38: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a> from xmlreader.h</li><li> line 40: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a> from xmlreader.h</li><li> line 41: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a> from xmlreader.h</li><li> line 45: Function <a href="../html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a> from xmlstring.h</li><li> line 60: Type <a href="../html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li><li> line 68: Function <a href="../html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li><li> line 76: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li><li> line 81: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderIsValid">xmlTextReaderIsValid</a> from xmlreader.h</li><li> line 84: Function <a href="../html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li><li> line 104: Macro <a href="../html/libxml-xmlversion.html#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a> from xmlversion.h</li><li> line 109: Function <a href="../html/libxml-parser.html#xmlCleanupParser">xmlCleanupParser</a> from parser.h</li><li> line 113: Function <a href="../html/libxml-xmlmemory.html#xmlMemoryDump">xmlMemoryDump</a> from xmlmemory.h</li></ul><p>Usage:</p><p>reader2 &lt;valid_xml_filename&gt;</p><p>Author: Daniel Veillard</p><h3><a name="reader1.c" href="reader1.c" id="reader1.c">reader1.c</a>: Parse an XML file with an xmlReader</h3><p>Demonstrate the use of xmlReaderForFile() to parse an XML file and dump the informations about the nodes found in the process. (Note that the XMLReader functions require libxml2 version later than 2.6.)</p><p>Includes:</p><ul><li><a href="../html/libxml-xmlreader.html">&lt;libxml/xmlreader.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 29: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderConstName">xmlTextReaderConstName</a> from xmlreader.h</li><li> line 33: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderConstValue">xmlTextReaderConstValue</a> from xmlreader.h</li><li> line 36: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderDepth">xmlTextReaderDepth</a> from xmlreader.h</li><li> line 37: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderNodeType">xmlTextReaderNodeType</a> from xmlreader.h</li><li> line 39: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderIsEmptyElement">xmlTextReaderIsEmptyElement</a> from xmlreader.h</li><li> line 40: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderHasValue">xmlTextReaderHasValue</a> from xmlreader.h</li><li> line 44: Function <a href="../html/libxml-xmlstring.html#xmlStrlen">xmlStrlen</a> from xmlstring.h</li><li> line 59: Type <a href="../html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li><li> line 62: Function <a href="../html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li><li> line 67: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li><li> line 69: Function <a href="../html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li></ul><p>Usage:</p><p>reader1 &lt;filename&gt;</p><p>Author: Daniel Veillard</p><h3><a name="reader3.c" href="reader3.c" id="reader3.c">reader3.c</a>: Show how to extract subdocuments with xmlReader</h3><p>Demonstrate the use of xmlTextReaderPreservePattern() to parse an XML file with the xmlReader while collecting only some subparts of the document. (Note that the XMLReader functions require libxml2 version later than 2.6.)</p><p>Includes:</p><ul><li><a href="../html/libxml-xmlreader.html">&lt;libxml/xmlreader.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 32: Type <a href="../html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li><li> line 38: Function <a href="../html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li><li> line 43: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderPreservePattern">xmlTextReaderPreservePattern</a> from xmlreader.h</li><li> line 52: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li><li> line 62: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a> from xmlreader.h</li><li> line 66: Function <a href="../html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li><li> line 96: Function <a href="../html/libxml-tree.html#xmlDocDump">xmlDocDump</a> from tree.h</li></ul><p>Usage:</p><p>reader3</p><p>Author: Daniel Veillard</p><h3><a name="reader4.c" href="reader4.c" id="reader4.c">reader4.c</a>: Parse multiple XML files reusing an xmlReader</h3><p>Demonstrate the use of xmlReaderForFile() and xmlReaderNewFile to parse XML files while reusing the reader object and parser context.  (Note that the XMLReader functions require libxml2 version later than 2.6.)</p><p>Includes:</p><ul><li><a href="../html/libxml-xmlreader.html">&lt;libxml/xmlreader.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 26: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderRead">xmlTextReaderRead</a> from xmlreader.h</li><li> line 54: Type <a href="../html/libxml-xmlreader.html#xmlTextReaderPtr">xmlTextReaderPtr</a> from xmlreader.h</li><li> line 72: Function <a href="../html/libxml-xmlreader.html#xmlReaderForFile">xmlReaderForFile</a> from xmlreader.h</li><li> line 83: Function <a href="../html/libxml-xmlreader.html#xmlReaderNewFile">xmlReaderNewFile</a> from xmlreader.h</li><li> line 97: Function <a href="../html/libxml-xmlreader.html#xmlTextReaderCurrentDoc">xmlTextReaderCurrentDoc</a> from xmlreader.h</li><li> line 104: Function <a href="../html/libxml-xmlreader.html#xmlFreeTextReader">xmlFreeTextReader</a> from xmlreader.h</li></ul><p>Usage:</p><p>reader4 &lt;filename&gt; [ filename ... ]</p><p>Author: Graham Bennett</p><h2><a name="xmlWriter" id="xmlWriter"></a>xmlWriter Examples</h2><h3><a name="testWriter.c" href="testWriter.c" id="testWriter.c">testWriter.c</a>: use various APIs for the xmlWriter</h3><p>tests a number of APIs for the xmlWriter, especially the various methods to write to a filename, to a memory buffer, to a new document, or to a subtree. It shows how to do encoding string conversions too. The resulting documents are then serialized.</p><p>Includes:</p><ul><li><a href="../html/libxml-encoding.html">&lt;libxml/encoding.h&gt;</a></li><li><a href="../html/libxml-xmlwriter.html">&lt;libxml/xmlwriter.h&gt;</a></li></ul><p>Uses:</p><ul><li> line 76: Function <a href="../html/libxml-xmlwriter.html#xmlNewTextWriterFilename">xmlNewTextWriterFilename</a> from xmlwriter.h</li><li> line 341: Type <a href="../html/libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> from tree.h</li><li> line 347: Function <a href="../html/libxml-tree.html#xmlBufferCreate">xmlBufferCreate</a> from tree.h</li><li> line 355: Function <a href="../html/libxml-xmlwriter.html#xmlNewTextWriterMemory">xmlNewTextWriterMemory</a> from xmlwriter.h</li><li> line 613: Function <a href="../html/libxml-tree.html#xmlBufferFree">xmlBufferFree</a> from tree.h</li><li> line 632: Function <a href="../html/libxml-xmlwriter.html#xmlNewTextWriterDoc">xmlNewTextWriterDoc</a> from xmlwriter.h</li><li> line 878: Type <a href="../html/libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> from xmlwriter.h</li><li> line 880: Type <a href="../html/libxml-tree.html#xmlNodePtr">xmlNodePtr</a> from tree.h</li><li> line 885: Macro <a href="../html/libxml-parser.html#XML_DEFAULT_VERSION">XML_DEFAULT_VERSION</a> from parser.h</li><li> line 885: Function <a href="../html/libxml-tree.html#xmlNewDoc">xmlNewDoc</a> from tree.h</li><li> line 894: Function <a href="../html/libxml-tree.html#xmlNewDocNode">xmlNewDocNode</a> from tree.h</li><li> line 901: Function <a href="../html/libxml-tree.html#xmlDocSetRootElement">xmlDocSetRootElement</a> from tree.h</li><li> line 904: Function <a href="../html/libxml-xmlwriter.html#xmlNewTextWriterTree">xmlNewTextWriterTree</a> from xmlwriter.h</li><li> line 913: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterStartDocument">xmlTextWriterStartDocument</a> from xmlwriter.h</li><li> line 925: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterWriteComment">xmlTextWriterWriteComment</a> from xmlwriter.h</li><li> line 949: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterWriteAttribute">xmlTextWriterWriteAttribute</a> from xmlwriter.h</li><li> line 959: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterWriteFormatComment">xmlTextWriterWriteFormatComment</a> from xmlwriter.h</li><li> line 1073: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterWriteFormatElement">xmlTextWriterWriteFormatElement</a> from xmlwriter.h</li><li> line 1096: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterStartElement">xmlTextWriterStartElement</a> from xmlwriter.h</li><li> line 1103: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterWriteElement">xmlTextWriterWriteElement</a> from xmlwriter.h</li><li> line 1111: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterEndElement">xmlTextWriterEndElement</a> from xmlwriter.h</li><li> line 1121: Function <a href="../html/libxml-xmlwriter.html#xmlTextWriterEndDocument">xmlTextWriterEndDocument</a> from xmlwriter.h</li><li> line 1127: Function <a href="../html/libxml-xmlwriter.html#xmlFreeTextWriter">xmlFreeTextWriter</a> from xmlwriter.h</li><li> line 1129: Function <a href="../html/libxml-tree.html#xmlSaveFileEnc">xmlSaveFileEnc</a> from tree.h</li><li> line 1151: Type <a href="../html/libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> from encoding.h</li><li> line 1156: Function <a href="../html/libxml-encoding.html#xmlFindCharEncodingHandler">xmlFindCharEncodingHandler</a> from encoding.h</li></ul><p>Usage:</p><p>testWriter</p><p>Author: Alfred Mickautsch</p><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 11df6f0..7e0efaa 100755 (executable)
@@ -13,7 +13,7 @@ sys.path.insert(0, "..")
 from apibuild import CParser, escape
 
 examples = []
-extras = ['examples.xsl', 'index.py']
+extras = ['examples.xsl', 'index.html', 'index.py']
 tests = []
 sections = {}
 symbols = {}
@@ -177,10 +177,10 @@ def parse(filename, output):
            type = id.get_type()
            output.write("      <%s line='%d' name='%s'/>\n" % (type,
                         line, name))
-           
+
     output.write("    </uses>\n")
     output.write("  </example>\n")
-    
+
     return idx
 
 def dump_symbols(output):
@@ -220,43 +220,59 @@ def dump_Makefile():
         extras.append(file)
     for file in glob.glob('*.res'):
         extras.append(file)
-    Makefile="""# Beware this is autogenerated by index.py
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
-DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+    Makefile="""##
+## This file is auto-generated by index.py
+## DO NOT EDIT !!!
+##
+
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS)
+LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD)
 
+CLEANFILES = *.tmp
+
+if REBUILD_DOCS
 rebuild: examples.xml index.html
+.PHONY: rebuild
 
-examples.xml: index.py *.c
-       -@($(srcdir)/index.py)
+examples.xml: index.py $(noinst_PROGRAMS:=.c)
+       cd $(srcdir) && $(PYTHON) index.py
+       $(MAKE) Makefile
 
 index.html: examples.xml examples.xsl
-       -@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
+       cd $(srcdir) && xsltproc examples.xsl examples.xml && echo "Rebuilt web page"
+       -cd $(srcdir) && xmllint --valid --noout index.html
+endif
 
 install-data-local: 
-       $(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
-       -@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+       $(MKDIR_P) $(DESTDIR)$(HTML_DIR)
+       -$(INSTALL) -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
+
+clean-local:
+       test -f Makefile.am || rm -f test?.xml
 
 """
+    examples.sort()
+    extras.sort()
+    tests.sort()
     EXTRA_DIST=""
     for extra in extras:
-        EXTRA_DIST = EXTRA_DIST + extra + " "
-    Makefile = Makefile + "EXTRA_DIST=%s\n\n" % (EXTRA_DIST)
+        EXTRA_DIST = EXTRA_DIST + " \\\n\t" + extra
+    Makefile = Makefile + "EXTRA_DIST =%s\n\n" % (EXTRA_DIST)
     noinst_PROGRAMS=""
     for example in examples:
-        noinst_PROGRAMS = noinst_PROGRAMS + example + " "
-    Makefile = Makefile + "noinst_PROGRAMS=%s\n\n" % (noinst_PROGRAMS)
+        noinst_PROGRAMS = noinst_PROGRAMS + " \\\n\t" + example
+    Makefile = Makefile + "noinst_PROGRAMS =%s\n\n" % (noinst_PROGRAMS)
     for example in examples:
-        Makefile = Makefile + "%s_SOURCES=%s.c\n%s_LDFLAGS=\n%s_DEPENDENCIES= $(DEPS)\n%s_LDADD= @RDL_LIBS@ $(LDADDS)\n\n" % (example, example, example,
-              example, example)
+        Makefile = Makefile + "%s_SOURCES = %s.c\n\n" % (example, example)
     Makefile = Makefile + "valgrind: \n\t$(MAKE) CHECKER='valgrind' tests\n\n"
     Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n"
+    Makefile = Makefile + "\ttest -f Makefile.am || test -f test1.xml || $(LN_S) $(srcdir)/test?.xml .\n"
     Makefile = Makefile + "\t@(echo '## examples regression tests')\n"
     Makefile = Makefile + "\t@(echo > .memdump)\n"
     for test in tests:
-        Makefile = Makefile + "\t@($(CHECKER) %s)\n" % (test)
-        Makefile = Makefile + '\t@(grep "MORY ALLO" .memdump  | grep -v "MEMORY ALLOCATED : 0" ; exit 0)\n'
-    Makefile = Makefile + "\n\n"
+        Makefile = Makefile + "\t$(CHECKER) %s\n" % (test)
+        Makefile = Makefile + '\t@grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0\n'
     try:
        old = open("Makefile.am", "r").read()
        if old != Makefile:
@@ -264,23 +280,23 @@ install-data-local:
            print "Updated Makefile.am"
     except:
         print "Failed to read or save Makefile.am"
-    #
-    # Autogenerate the .cvsignore too ...
-    #
-    ignore = """.memdump
-Makefile.in
-Makefile
-"""
-    for example in examples:
-        ignore = ignore + "%s\n" % (example)
-    try:
-       old = open(".cvsignore", "r").read()
-       if old != ignore:
-           n = open(".cvsignore", "w").write(ignore)
-           print "Updated .cvsignore"
-    except:
-        print "Failed to read or save .cvsignore"
-    
+#    #
+#    # Autogenerate the .cvsignore too ... DEPRECATED
+#    #
+#    ignore = """.memdump
+#Makefile.in
+#Makefile
+#"""
+#    for example in examples:
+#        ignore = ignore + "%s\n" % (example)
+#    try:
+#      old = open(".cvsignore", "r").read()
+#      if old != ignore:
+#          n = open(".cvsignore", "w").write(ignore)
+#          print "Updated .cvsignore"
+#    except:
+#        print "Failed to read or save .cvsignore"
+
 if __name__ == "__main__":
     load_api()
     output = open("examples.xml", "w")
index c8a47e3..d077cd8 100644 (file)
@@ -6,7 +6,7 @@
  *          XInclude method context to show how dynamic document can
  *          be built in a clean way.
  * usage: io1
- * test: io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp
+ * test: io1 > io1.tmp && diff io1.tmp $(srcdir)/io1.res
  * author: Daniel Veillard
  * copy: see Copyright for the status of this software.
  */
index 4a4c036..adf65c7 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0"?>
 <document xmlns:xi="http://www.w3.org/2003/XInclude">
   <p>List of people:</p>
-  <list><people>a</people><people>b</people></list>
+  <list xml:base="sql://select_name_from_people"><people>a</people><people>b</people></list>
 </document>
index 814a27e..4676f4a 100644 (file)
@@ -4,7 +4,7 @@
  * purpose: Demonstrate the use of xmlDocDumpMemory
  *          to output document to a character buffer
  * usage: io2
- * test: io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp
+ * test: io2 > io2.tmp && diff io2.tmp $(srcdir)/io2.res
  * author: John Fleck
  * copy: see Copyright for the status of this software.
  */
index 90db2a1..e8a005a 100644 (file)
@@ -6,7 +6,7 @@
  *          (Note that the XMLReader functions require libxml2 version later
  *          than 2.6.)
  * usage: reader1 <filename>
- * test: reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
+ * test: reader1 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
  * author: Daniel Veillard
  * copy: see Copyright for the status of this software.
  */
index c32ada5..043b137 100644 (file)
@@ -7,7 +7,7 @@
  *          (Note that the XMLReader functions require libxml2 version later
  *          than 2.6.)
  * usage: reader2 <valid_xml_filename>
- * test: reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
+ * test: reader2 test2.xml > reader1.tmp && diff reader1.tmp $(srcdir)/reader1.res
  * author: Daniel Veillard
  * copy: see Copyright for the status of this software.
  */
index 51f9d3b..3eeb61f 100644 (file)
@@ -7,7 +7,7 @@
  *          (Note that the XMLReader functions require libxml2 version later
  *          than 2.6.)
  * usage: reader3
- * test: reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp
+ * test: reader3 > reader3.tmp && diff reader3.tmp $(srcdir)/reader3.res
  * author: Daniel Veillard
  * copy: see Copyright for the status of this software.
  */
index ed2726a..1289d0d 100644 (file)
@@ -6,7 +6,7 @@
  * and parser context.  (Note that the XMLReader functions require
  * libxml2 version later than 2.6.)
  * usage: reader4 <filename> [ filename ... ]
- * test: reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp
+ * test: reader4 test1.xml test2.xml test3.xml > reader4.tmp && diff reader4.tmp $(srcdir)/reader4.res
  * author: Graham Bennett
  * copy: see Copyright for the status of this software.
  */
index 9bf590f..f662f76 100644 (file)
@@ -7,7 +7,7 @@
  *          do encoding string conversions too. The resulting
  *          documents are then serialized.
  * usage: testWriter
- * test: testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res
+ * test: testWriter && for i in 1 2 3 4 ; do diff $(srcdir)/writer.xml writer$$i.tmp || break ; done
  * author: Alfred Mickautsch
  * copy: see Copyright for the status of this software.
  */
@@ -37,16 +37,16 @@ main(void)
     LIBXML_TEST_VERSION
 
     /* first, the file version */
-    testXmlwriterFilename("writer1.res");
+    testXmlwriterFilename("writer1.tmp");
 
     /* next, the memory version */
-    testXmlwriterMemory("writer2.res");
+    testXmlwriterMemory("writer2.tmp");
 
     /* next, the DOM version */
-    testXmlwriterDoc("writer3.res");
+    testXmlwriterDoc("writer3.tmp");
 
     /* next, the tree version */
-    testXmlwriterTree("writer4.res");
+    testXmlwriterTree("writer4.tmp");
 
     /*
      * Cleanup function for the XML library.
index 8644cf1..e6faefc 100644 (file)
@@ -5,7 +5,7 @@
  *          get the root element, then walk the document and print
  *          all the element name in document order.
  * usage: tree1 filename_or_URL
- * test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp
+ * test: tree1 test2.xml > tree1.tmp && diff tree1.tmp $(srcdir)/tree1.res
  * author: Dodji Seketeli
  * copy: see Copyright for the status of this software.
  */
index c40fc55..1cd1abe 100644 (file)
@@ -3,7 +3,7 @@
  * synopsis: Creates a tree
  * purpose:  Shows how to create document, nodes and dump it to stdout or file.
  * usage:    tree2 <filename>  -Default output: stdout
- * test:     tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
+ * test:     tree2 > tree2.tmp && diff tree2.tmp $(srcdir)/tree2.res
  * author:   Lucas Brasilino <brasilino@recife.pe.gov.br>
  * copy:     see Copyright for the status of this software
  */
index f2f7406..0a31650 100644 (file)
@@ -4,7 +4,7 @@
  * purpose:    Shows how to evaluate XPath expression and register 
  *             known namespaces in XPath context.
  * usage:      xpath1 <xml-file> <xpath-expr> [<known-ns-list>]
- * test: ./xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp
+ * test:       xpath1 test3.xml '//child2' > xpath1.tmp && diff xpath1.tmp $(srcdir)/xpath1.res
  * author:     Aleksey Sanin
  * copy:       see Copyright for the status of this software.
  */
index 6ff4008..f604114 100644 (file)
@@ -4,7 +4,7 @@
  *              said elements and save the resulting document.
  * purpose:    Shows how to make a full round-trip from a load/edit/save
  * usage:      xpath2 <xml-file> <xpath-expr> <new-value>
- * test:       xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp
+ * test:       xpath2 test3.xml '//discarded' discarded > xpath2.tmp && diff xpath2.tmp $(srcdir)/xpath2.res
  * author:     Aleksey Sanin and Daniel Veillard
  * copy:       see Copyright for the status of this software.
  */
index db9967e..1f1df2a 100644 (file)
@@ -9,7 +9,8 @@ H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>How to help</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>How to help</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>You can help the project in various ways, the best thing to do first is to
 subscribe to the mailing-list as explained before, check the <a href="http://mail.gnome.org/archives/xml/">archives </a>and the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome bug
-database</a>:</p><ol><li>Provide patches when you find problems.</li>
+database</a>:</p><ol>
+  <li>Provide patches when you find problems.</li>
   <li>Provide the diffs when you port libxml2 to a new platform. They may not
     be integrated in all cases but help pinpointing portability problems
   and</li>
index 6771189..1a58210 100644 (file)
@@ -10,4 +10,4 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
+    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines and limits exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 6771189..1a58210 100644 (file)
@@ -10,4 +10,4 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
+    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines and limits exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 2de32b0..bdd21f4 100644 (file)
@@ -18,10 +18,12 @@ The content of this structure is not made public by the API.
 <pre class="programlisting"><a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a>       <a href="#xmlDictCreateSub">xmlDictCreateSub</a>        (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> sub)</pre>
 <pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlDictExists">xmlDictExists</a>              (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int len)</pre>
 <pre class="programlisting">void       <a href="#xmlDictFree">xmlDictFree</a>                  (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting">size_t     <a href="#xmlDictGetUsage">xmlDictGetUsage</a>                  (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
 <pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlDictLookup">xmlDictLookup</a>              (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int len)</pre>
 <pre class="programlisting">int        <a href="#xmlDictOwns">xmlDictOwns</a>                  (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
 <pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlDictQLookup">xmlDictQLookup</a>            (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br />                                      const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting">int        <a href="#xmlDictReference">xmlDictReference</a>                (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
+<pre class="programlisting">size_t     <a href="#xmlDictSetLimit">xmlDictSetLimit</a>                  (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       size_t limit)</pre>
 <pre class="programlisting">int        <a href="#xmlDictSize">xmlDictSize</a>                  (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)</pre>
 <pre class="programlisting">int        <a href="#xmlInitializeDict">xmlInitializeDict</a>              (void)</pre>
 <h2>Description</h2>
@@ -37,7 +39,9 @@ The content of this structure is not made public by the API.
 </pre><p>Check if the @name exists in the dictionnary @dict.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the name, if -1 it is recomputed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the name or NULL if not found.</td></tr></tbody></table></div><h3><a name="xmlDictFree" id="xmlDictFree"></a>Function: xmlDictFree</h3><pre class="programlisting">void       xmlDictFree                     (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Free the hash @dict and its contents. The userdata is deallocated with @f if provided.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr></tbody></table></div><h3><a name="xmlDictLookup" id="xmlDictLookup"></a>Function: xmlDictLookup</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *   xmlDictLookup           (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int len)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr></tbody></table></div><h3><a name="xmlDictGetUsage" id="xmlDictGetUsage"></a>Function: xmlDictGetUsage</h3><pre class="programlisting">size_t  xmlDictGetUsage                 (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+</pre><p>Get how much memory is used by a dictionary for strings Added in 2.9.0</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the amount of strings allocated</td></tr></tbody></table></div><h3><a name="xmlDictLookup" id="xmlDictLookup"></a>Function: xmlDictLookup</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlDictLookup           (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int len)<br />
 </pre><p>Add the @name to the dictionnary @dict if not present.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the userdata</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the name, if -1 it is recomputed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the name or NULL in case of internal error</td></tr></tbody></table></div><h3><a name="xmlDictOwns" id="xmlDictOwns"></a>Function: xmlDictOwns</h3><pre class="programlisting">int    xmlDictOwns                     (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
 </pre><p>check if a string is owned by the disctionary</p>
@@ -45,8 +49,10 @@ The content of this structure is not made public by the API.
 </pre><p>Add the QName @prefix:@name to the hash @dict if not present.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal copy of the QName or NULL in case of internal error</td></tr></tbody></table></div><h3><a name="xmlDictReference" id="xmlDictReference"></a>Function: xmlDictReference</h3><pre class="programlisting">int     xmlDictReference                (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Increment the <a href="libxml-SAX.html#reference">reference</a> counter of a dictionary</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlDictSize" id="xmlDictSize"></a>Function: xmlDictSize</h3><pre class="programlisting">int        xmlDictSize                     (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlDictSetLimit" id="xmlDictSetLimit"></a>Function: xmlDictSetLimit</h3><pre class="programlisting">size_t xmlDictSetLimit                 (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict, <br />                                       size_t limit)<br />
+</pre><p>Set a size limit for the dictionary Added in 2.9.0</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>limit</tt></i>:</span></td><td>the limit in bytes</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the previous limit of the dictionary or 0</td></tr></tbody></table></div><h3><a name="xmlDictSize" id="xmlDictSize"></a>Function: xmlDictSize</h3><pre class="programlisting">int      xmlDictSize                     (<a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Query the number of elements installed in the hash @dict.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>the dictionnary</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements in the dictionnary or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlInitializeDict" id="xmlInitializeDict"></a>Function: xmlInitializeDict</h3><pre class="programlisting">int  xmlInitializeDict               (void)<br />
-</pre><p>Do the dictionary mutex initialization. this function is not thread safe, initialization should preferably be done once at startup</p>
+</pre><p>Do the dictionary mutex initialization. this function is deprecated</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if initialization was already done, and 1 if that call led to the initialization</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 989805a..b7d1455 100644 (file)
@@ -23,9 +23,9 @@ The content of this structure is not made public by the API.
 <pre class="programlisting">void       <a href="#xmlDumpEntityDecl">xmlDumpEntityDecl</a>              (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a> ent)</pre>
 <pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlEncodeEntities">xmlEncodeEntities</a>      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
 <pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a>    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                          const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a>      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlEncodeSpecialChars">xmlEncodeSpecialChars</a>      (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)</pre>
 <pre class="programlisting">void       <a href="#xmlFreeEntitiesTable">xmlFreeEntitiesTable</a>                (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   <a href="#xmlGetDocEntity">xmlGetDocEntity</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   <a href="#xmlGetDocEntity">xmlGetDocEntity</a>          (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   <a href="#xmlGetDtdEntity">xmlGetDtdEntity</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   <a href="#xmlGetParameterEntity">xmlGetParameterEntity</a>      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   <a href="#xmlGetPredefinedEntity">xmlGetPredefinedEntity</a>    (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
@@ -60,11 +60,11 @@ The content of this structure is not made public by the API.
 </pre><p>TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary compatibility People must migrate their code to <a href="libxml-entities.html#xmlEncodeEntitiesReentrant">xmlEncodeEntitiesReentrant</a> ! This routine will issue a warning when encountered.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL</td></tr></tbody></table></div><h3><a name="xmlEncodeEntitiesReentrant" id="xmlEncodeEntitiesReentrant"></a>Function: xmlEncodeEntitiesReentrant</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlEncodeEntitiesReentrant      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                          const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
 </pre><p>Do a global encoding of a string, replacing the predefined entities and non ASCII values with their entities and CharRef counterparts. Contrary to xmlEncodeEntities, this routine is reentrant, and result must be deallocated.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div><h3><a name="xmlEncodeSpecialChars" id="xmlEncodeSpecialChars"></a>Function: xmlEncodeSpecialChars</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlEncodeSpecialChars   (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div><h3><a name="xmlEncodeSpecialChars" id="xmlEncodeSpecialChars"></a>Function: xmlEncodeSpecialChars</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlEncodeSpecialChars   (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * input)<br />
 </pre><p>Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document containing the string</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>A string to convert to XML.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>A newly allocated string with the substitution done.</td></tr></tbody></table></div><h3><a name="xmlFreeEntitiesTable" id="xmlFreeEntitiesTable"></a>Function: xmlFreeEntitiesTable</h3><pre class="programlisting">void    xmlFreeEntitiesTable            (<a href="libxml-entities.html#xmlEntitiesTablePtr">xmlEntitiesTablePtr</a> table)<br />
 </pre><p>Deallocate the memory used by an entities hash table.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div><h3><a name="xmlGetDocEntity" id="xmlGetDocEntity"></a>Function: xmlGetDocEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>       xmlGetDocEntity         (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>table</tt></i>:</span></td><td>An entity table</td></tr></tbody></table></div><h3><a name="xmlGetDocEntity" id="xmlGetDocEntity"></a>Function: xmlGetDocEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>       xmlGetDocEntity         (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Do an entity lookup in the document entity hash table and</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document referencing the entity</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the entity name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the corresponding entity, otherwise a lookup is done in the predefined entities too. Returns A pointer to the entity structure or NULL if not found.</td></tr></tbody></table></div><h3><a name="xmlGetDtdEntity" id="xmlGetDtdEntity"></a>Function: xmlGetDtdEntity</h3><pre class="programlisting"><a href="libxml-tree.html#xmlEntityPtr">xmlEntityPtr</a>   xmlGetDtdEntity         (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Do an entity lookup in the DTD entity hash table and</p>
index 6771189..1a58210 100644 (file)
@@ -10,4 +10,4 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
+    </style><title>Reference Manual for libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Reference Manual for libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><h2>Table of Contents</h2><ul><li><a href="libxml-DOCBparser.html">DOCBparser</a>: old DocBook SGML parser</li><li><a href="libxml-HTMLparser.html">HTMLparser</a>: interface for an HTML 4.0 non-verifying parser</li><li><a href="libxml-HTMLtree.html">HTMLtree</a>: specific APIs to process HTML tree, especially serialization</li><li><a href="libxml-SAX.html">SAX</a>: Old SAX version 1 handler, deprecated</li><li><a href="libxml-SAX2.html">SAX2</a>: SAX2 parser interface used to build the DOM tree</li><li><a href="libxml-c14n.html">c14n</a>: Provide Canonical XML and Exclusive XML Canonicalization</li><li><a href="libxml-catalog.html">catalog</a>: interfaces to the Catalog handling system</li><li><a href="libxml-chvalid.html">chvalid</a>: Unicode character range checking</li><li><a href="libxml-debugXML.html">debugXML</a>: Tree debugging APIs</li><li><a href="libxml-dict.html">dict</a>: string dictionnary</li><li><a href="libxml-encoding.html">encoding</a>: interface for the encoding conversion functions</li><li><a href="libxml-entities.html">entities</a>: interface for the XML entities handling</li><li><a href="libxml-globals.html">globals</a>: interface for all global variables of the library</li><li><a href="libxml-hash.html">hash</a>: Chained hash tables</li><li><a href="libxml-list.html">list</a>: lists interfaces</li><li><a href="libxml-nanoftp.html">nanoftp</a>: minimal FTP implementation</li><li><a href="libxml-nanohttp.html">nanohttp</a>: minimal HTTP implementation</li><li><a href="libxml-parser.html">parser</a>: the core parser module</li><li><a href="libxml-parserInternals.html">parserInternals</a>: internals routines and limits exported by the parser.</li><li><a href="libxml-pattern.html">pattern</a>: pattern expression handling</li><li><a href="libxml-relaxng.html">relaxng</a>: implementation of the Relax-NG validation</li><li><a href="libxml-schemasInternals.html">schemasInternals</a>: internal interfaces for XML Schemas</li><li><a href="libxml-schematron.html">schematron</a>: XML Schemastron implementation</li><li><a href="libxml-threads.html">threads</a>: interfaces for thread handling</li><li><a href="libxml-tree.html">tree</a>: interfaces for tree manipulation</li><li><a href="libxml-uri.html">uri</a>: library of generic URI related routines</li><li><a href="libxml-valid.html">valid</a>: The DTD validation</li><li><a href="libxml-xinclude.html">xinclude</a>: implementation of XInclude</li><li><a href="libxml-xlink.html">xlink</a>: unfinished XLink detection module</li><li><a href="libxml-xmlIO.html">xmlIO</a>: interface for the I/O interfaces used by the parser</li><li><a href="libxml-xmlautomata.html">xmlautomata</a>: API to build regexp automata</li><li><a href="libxml-xmlerror.html">xmlerror</a>: error handling</li><li><a href="libxml-xmlexports.html">xmlexports</a>: macros for marking symbols as exportable/importable.</li><li><a href="libxml-xmlmemory.html">xmlmemory</a>: interface for the memory allocator</li><li><a href="libxml-xmlmodule.html">xmlmodule</a>: dynamic module loading</li><li><a href="libxml-xmlreader.html">xmlreader</a>: the XMLReader implementation</li><li><a href="libxml-xmlregexp.html">xmlregexp</a>: regular expressions handling</li><li><a href="libxml-xmlsave.html">xmlsave</a>: the XML document serializer</li><li><a href="libxml-xmlschemas.html">xmlschemas</a>: incomplete XML Schemas structure implementation</li><li><a href="libxml-xmlschemastypes.html">xmlschemastypes</a>: implementation of XML Schema Datatypes</li><li><a href="libxml-xmlstring.html">xmlstring</a>: set of routines to process strings</li><li><a href="libxml-xmlunicode.html">xmlunicode</a>: Unicode character APIs</li><li><a href="libxml-xmlversion.html">xmlversion</a>: compile-time version informations</li><li><a href="libxml-xmlwriter.html">xmlwriter</a>: text writing API for XML</li><li><a href="libxml-xpath.html">xpath</a>: XML Path Language implementation</li><li><a href="libxml-xpathInternals.html">xpathInternals</a>: internal interfaces for XML Path Language implementation</li><li><a href="libxml-xpointer.html">xpointer</a>: API to handle XML Pointers</li></ul><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 461b3fb..98123f7 100644 (file)
@@ -289,6 +289,7 @@ void        <a href="#xmlParserInputDeallocate">xmlParserInputDeallocate</a>        (<a href="
     <a name="XML_PARSE_HUGE" id="XML_PARSE_HUGE">XML_PARSE_HUGE</a> = 524288 : relax any hardcoded limit from the parser
     <a name="XML_PARSE_OLDSAX" id="XML_PARSE_OLDSAX">XML_PARSE_OLDSAX</a> = 1048576 : parse using SAX2 interface before 2.7.0
     <a name="XML_PARSE_IGNORE_ENC" id="XML_PARSE_IGNORE_ENC">XML_PARSE_IGNORE_ENC</a> = 2097152 : ignore internal document encoding hint
+    <a name="XML_PARSE_BIG_LINES" id="XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a> = 4194304 : Store big lines numbers in text PSVI field
 }
 </pre><h3><a name="xmlSAXHandlerV1" id="xmlSAXHandlerV1">Structure xmlSAXHandlerV1</a></h3><pre class="programlisting">Structure xmlSAXHandlerV1<br />struct _xmlSAXHandlerV1 {
     <a href="libxml-parser.html#internalSubsetSAXFunc">internalSubsetSAXFunc</a>       internalSubset
@@ -507,9 +508,9 @@ void        xmlParserInputDeallocate        (<a href="libxml-xmlstring.html#xmlChar">xmlChar</
 </pre><p>Callback for freeing some parser input allocations.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the string to deallocate</td></tr></tbody></table></div><br />
 <h3><a name="xmlParserInputGrow" id="xmlParserInputGrow"></a>Function: xmlParserInputGrow</h3><pre class="programlisting">int  xmlParserInputGrow              (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br />                                   int len)<br />
 </pre><p>This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div><h3><a name="xmlParserInputRead" id="xmlParserInputRead"></a>Function: xmlParserInputRead</h3><pre class="programlisting">int  xmlParserInputRead              (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br />                                   int len)<br />
-</pre><p>This function refresh the input for the parser. It doesn't try to preserve pointers to the input buffer, and discard already read data</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div><h3><a name="xmlPedanticParserDefault" id="xmlPedanticParserDefault"></a>Function: xmlPedanticParserDefault</h3><pre class="programlisting">int        xmlPedanticParserDefault        (int val)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the amount of char read, or -1 in case of error, 0 indicate the end of this entity</td></tr></tbody></table></div><h3><a name="xmlParserInputRead" id="xmlParserInputRead"></a>Function: xmlParserInputRead</h3><pre class="programlisting">int      xmlParserInputRead              (<a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> in, <br />                                   int len)<br />
+</pre><p>This function was internal and is deprecated.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>in</tt></i>:</span></td><td>an XML parser input</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an indicative size for the lookahead</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 as this is an error to use it.</td></tr></tbody></table></div><h3><a name="xmlPedanticParserDefault" id="xmlPedanticParserDefault"></a>Function: xmlPedanticParserDefault</h3><pre class="programlisting">int     xmlPedanticParserDefault        (int val)<br />
 </pre><p>Set and return the previous value for enabling pedantic warnings.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>int 0 or 1</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last value for 0 for no substitution, 1 for substitution.</td></tr></tbody></table></div><h3><a name="xmlReadDoc" id="xmlReadDoc"></a>Function: xmlReadDoc</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> xmlReadDoc              (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * cur, <br />                                         const char * URL, <br />                                        const char * encoding, <br />                                   int options)<br />
 </pre><p>parse an XML in-memory document and build a tree.</p>
index 681057f..4d1292b 100644 (file)
@@ -10,7 +10,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Module parserInternals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module parserInternals from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-parser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-parser.html">parser</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-pattern.html">pattern</a></th><td><a accesskey="n" href="libxml-pattern.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#INPUT_CHUNK">INPUT_CHUNK</a></pre><pre class="programlisting">#define <a href="#IS_ASCII_DIGIT">IS_ASCII_DIGIT</a></pre><pre class="programlisting">#define <a href="#IS_ASCII_LETTER">IS_ASCII_LETTER</a></pre><pre class="programlisting">#define <a href="#IS_BASECHAR">IS_BASECHAR</a></pre><pre class="programlisting">#define <a href="#IS_BLANK">IS_BLANK</a></pre><pre class="programlisting">#define <a href="#IS_BLANK_CH">IS_BLANK_CH</a></pre><pre class="programlisting">#define <a href="#IS_BYTE_CHAR">IS_BYTE_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR">IS_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR_CH">IS_CHAR_CH</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING">IS_COMBINING</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING_CH">IS_COMBINING_CH</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT">IS_DIGIT</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT_CH">IS_DIGIT_CH</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER">IS_EXTENDER</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER_CH">IS_EXTENDER_CH</a></pre><pre class="programlisting">#define <a href="#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a></pre><pre class="programlisting">#define <a href="#IS_LETTER">IS_LETTER</a></pre><pre class="programlisting">#define <a href="#IS_LETTER_CH">IS_LETTER_CH</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR">IS_PUBIDCHAR</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a></pre><pre class="programlisting">#define <a href="#MOVETO_ENDTAG">MOVETO_ENDTAG</a></pre><pre class="programlisting">#define <a href="#MOVETO_STARTTAG">MOVETO_STARTTAG</a></pre><pre class="programlisting">#define <a href="#SKIP_EOL">SKIP_EOL</a></pre><pre class="programlisting">#define <a href="#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a></pre><pre class="programlisting">#define <a href="#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a></pre><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a>     <a href="#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a>        (const char * filename, <br />                                                   const char * encoding)</pre>
+    </style><title>Module parserInternals from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module parserInternals from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-parser.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-parser.html">parser</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-pattern.html">pattern</a></th><td><a accesskey="n" href="libxml-pattern.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#INPUT_CHUNK">INPUT_CHUNK</a></pre><pre class="programlisting">#define <a href="#IS_ASCII_DIGIT">IS_ASCII_DIGIT</a></pre><pre class="programlisting">#define <a href="#IS_ASCII_LETTER">IS_ASCII_LETTER</a></pre><pre class="programlisting">#define <a href="#IS_BASECHAR">IS_BASECHAR</a></pre><pre class="programlisting">#define <a href="#IS_BLANK">IS_BLANK</a></pre><pre class="programlisting">#define <a href="#IS_BLANK_CH">IS_BLANK_CH</a></pre><pre class="programlisting">#define <a href="#IS_BYTE_CHAR">IS_BYTE_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR">IS_CHAR</a></pre><pre class="programlisting">#define <a href="#IS_CHAR_CH">IS_CHAR_CH</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING">IS_COMBINING</a></pre><pre class="programlisting">#define <a href="#IS_COMBINING_CH">IS_COMBINING_CH</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT">IS_DIGIT</a></pre><pre class="programlisting">#define <a href="#IS_DIGIT_CH">IS_DIGIT_CH</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER">IS_EXTENDER</a></pre><pre class="programlisting">#define <a href="#IS_EXTENDER_CH">IS_EXTENDER_CH</a></pre><pre class="programlisting">#define <a href="#IS_IDEOGRAPHIC">IS_IDEOGRAPHIC</a></pre><pre class="programlisting">#define <a href="#IS_LETTER">IS_LETTER</a></pre><pre class="programlisting">#define <a href="#IS_LETTER_CH">IS_LETTER_CH</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR">IS_PUBIDCHAR</a></pre><pre class="programlisting">#define <a href="#IS_PUBIDCHAR_CH">IS_PUBIDCHAR_CH</a></pre><pre class="programlisting">#define <a href="#MOVETO_ENDTAG">MOVETO_ENDTAG</a></pre><pre class="programlisting">#define <a href="#MOVETO_STARTTAG">MOVETO_STARTTAG</a></pre><pre class="programlisting">#define <a href="#SKIP_EOL">SKIP_EOL</a></pre><pre class="programlisting">#define <a href="#XML_MAX_DICTIONARY_LIMIT">XML_MAX_DICTIONARY_LIMIT</a></pre><pre class="programlisting">#define <a href="#XML_MAX_LOOKUP_LIMIT">XML_MAX_LOOKUP_LIMIT</a></pre><pre class="programlisting">#define <a href="#XML_MAX_NAMELEN">XML_MAX_NAMELEN</a></pre><pre class="programlisting">#define <a href="#XML_MAX_NAME_LENGTH">XML_MAX_NAME_LENGTH</a></pre><pre class="programlisting">#define <a href="#XML_MAX_TEXT_LENGTH">XML_MAX_TEXT_LENGTH</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_BOTH">XML_SUBSTITUTE_BOTH</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_NONE">XML_SUBSTITUTE_NONE</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_PEREF">XML_SUBSTITUTE_PEREF</a></pre><pre class="programlisting">#define <a href="#XML_SUBSTITUTE_REF">XML_SUBSTITUTE_REF</a></pre><pre class="programlisting"><a href="libxml-HTMLparser.html#htmlParserCtxtPtr">htmlParserCtxtPtr</a> <a href="#htmlCreateFileParserCtxt">htmlCreateFileParserCtxt</a>        (const char * filename, <br />                                                   const char * encoding)</pre>
 <pre class="programlisting">void       <a href="#htmlInitAutoClose">htmlInitAutoClose</a>              (void)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> <a href="#inputPop">inputPop</a>        (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt)</pre>
 <pre class="programlisting">int        <a href="#inputPush">inputPush</a>                      (<a href="libxml-tree.html#xmlParserCtxtPtr">xmlParserCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlParserInputPtr">xmlParserInputPtr</a> value)</pre>
@@ -127,8 +127,11 @@ void       <a href="#xmlEntityReferenceFunc">xmlEntityReferenceFunc</a>            (<a href="lib
 <h3><a name="MOVETO_ENDTAG" id="MOVETO_ENDTAG"></a>Macro: MOVETO_ENDTAG</h3><pre>#define MOVETO_ENDTAG</pre><p>Skips to the next '&gt;' char.</p>
 <h3><a name="MOVETO_STARTTAG" id="MOVETO_STARTTAG"></a>Macro: MOVETO_STARTTAG</h3><pre>#define MOVETO_STARTTAG</pre><p>Skips to the next '&lt;' char.</p>
 <h3><a name="SKIP_EOL" id="SKIP_EOL"></a>Macro: SKIP_EOL</h3><pre>#define SKIP_EOL</pre><p>Skips the end of line chars.</p>
+<h3><a name="XML_MAX_DICTIONARY_LIMIT" id="XML_MAX_DICTIONARY_LIMIT"></a>Macro: XML_MAX_DICTIONARY_LIMIT</h3><pre>#define XML_MAX_DICTIONARY_LIMIT</pre><p>Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use <a href="libxml-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Introduced in 2.9.0</p>
+<h3><a name="XML_MAX_LOOKUP_LIMIT" id="XML_MAX_LOOKUP_LIMIT"></a>Macro: XML_MAX_LOOKUP_LIMIT</h3><pre>#define XML_MAX_LOOKUP_LIMIT</pre><p>Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on "unfriendly' content Introduced in 2.9.0</p>
 <h3><a name="XML_MAX_NAMELEN" id="XML_MAX_NAMELEN"></a>Macro: XML_MAX_NAMELEN</h3><pre>#define XML_MAX_NAMELEN</pre><p>Identifiers can be longer, but this will be more costly at runtime.</p>
-<h3><a name="XML_MAX_TEXT_LENGTH" id="XML_MAX_TEXT_LENGTH"></a>Macro: XML_MAX_TEXT_LENGTH</h3><pre>#define XML_MAX_TEXT_LENGTH</pre><p>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use <a href="libxml-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it.</p>
+<h3><a name="XML_MAX_NAME_LENGTH" id="XML_MAX_NAME_LENGTH"></a>Macro: XML_MAX_NAME_LENGTH</h3><pre>#define XML_MAX_NAME_LENGTH</pre><p>Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use <a href="libxml-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of "unfriendly' content Introduced in 2.9.0</p>
+<h3><a name="XML_MAX_TEXT_LENGTH" id="XML_MAX_TEXT_LENGTH"></a>Macro: XML_MAX_TEXT_LENGTH</h3><pre>#define XML_MAX_TEXT_LENGTH</pre><p>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use <a href="libxml-parser.html#XML_PARSE_HUGE">XML_PARSE_HUGE</a> option to override it. Introduced in 2.9.0</p>
 <h3><a name="XML_SUBSTITUTE_BOTH" id="XML_SUBSTITUTE_BOTH"></a>Macro: XML_SUBSTITUTE_BOTH</h3><pre>#define XML_SUBSTITUTE_BOTH</pre><p>Both general and parameter entities need to be substituted.</p>
 <h3><a name="XML_SUBSTITUTE_NONE" id="XML_SUBSTITUTE_NONE"></a>Macro: XML_SUBSTITUTE_NONE</h3><pre>#define XML_SUBSTITUTE_NONE</pre><p>If no entities need to be substituted.</p>
 <h3><a name="XML_SUBSTITUTE_PEREF" id="XML_SUBSTITUTE_PEREF"></a>Macro: XML_SUBSTITUTE_PEREF</h3><pre>#define XML_SUBSTITUTE_PEREF</pre><p>Whether parameter entities need to be substituted.</p>
index 6d0ce42..1ec3192 100644 (file)
@@ -149,7 +149,7 @@ The content of this structure is not made public by the API.
 </pre><p>Pop the element end from the RelaxNG validation stack.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePushCData" id="xmlRelaxNGValidatePushCData"></a>Function: xmlRelaxNGValidatePushCData</h3><pre class="programlisting">int xmlRelaxNGValidatePushCData     (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br />                                        int len)<br />
 </pre><p>check the CData parsed for validation in the current stack</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePushElement" id="xmlRelaxNGValidatePushElement"></a>Function: xmlRelaxNGValidatePushElement</h3><pre class="programlisting">int  xmlRelaxNGValidatePushElement   (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the RelaxNG validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidatePushElement" id="xmlRelaxNGValidatePushElement"></a>Function: xmlRelaxNGValidatePushElement</h3><pre class="programlisting">int  xmlRelaxNGValidatePushElement   (<a href="libxml-relaxng.html#xmlRelaxNGValidCtxtPtr">xmlRelaxNGValidCtxtPtr</a> ctxt, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
 </pre><p>Push a new element start on the RelaxNG validation stack.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 if validating the element requires a full node, and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlRelaxNGValidityErrorFunc" id="xmlRelaxNGValidityErrorFunc"></a>Function type: xmlRelaxNGValidityErrorFunc</h3><pre class="programlisting">Function type: xmlRelaxNGValidityErrorFunc
 void   xmlRelaxNGValidityErrorFunc     (void * ctx, <br />                                      const char * msg, <br />                                        ... ...)
index eb7c2bc..e2081cc 100644 (file)
@@ -10,12 +10,15 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Module tree from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module tree from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-threads.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-threads.html">threads</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-uri.html">uri</a></th><td><a accesskey="n" href="libxml-uri.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module describes the structures found in an tree resulting from an XML or HTML parsing, as well as the API provided for various processing on that tree </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a></pre><pre class="programlisting">#define <a href="#XML_GET_CONTENT">XML_GET_CONTENT</a></pre><pre class="programlisting">#define <a href="#XML_GET_LINE">XML_GET_LINE</a></pre><pre class="programlisting">#define <a href="#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#XML_XML_ID">XML_XML_ID</a></pre><pre class="programlisting">#define <a href="#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#xmlChildrenNode">xmlChildrenNode</a></pre><pre class="programlisting">#define <a href="#xmlRootNode">xmlRootNode</a></pre><pre class="programlisting">Structure <a href="#xmlAttr">xmlAttr</a><br />struct _xmlAttr
+    </style><title>Module tree from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module tree from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-threads.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-threads.html">threads</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-uri.html">uri</a></th><td><a accesskey="n" href="libxml-uri.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>this module describes the structures found in an tree resulting from an XML or HTML parsing, as well as the API provided for various processing on that tree </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#BASE_BUFFER_SIZE">BASE_BUFFER_SIZE</a></pre><pre class="programlisting">#define <a href="#LIBXML2_NEW_BUFFER">LIBXML2_NEW_BUFFER</a></pre><pre class="programlisting">#define <a href="#XML_GET_CONTENT">XML_GET_CONTENT</a></pre><pre class="programlisting">#define <a href="#XML_GET_LINE">XML_GET_LINE</a></pre><pre class="programlisting">#define <a href="#XML_LOCAL_NAMESPACE">XML_LOCAL_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#XML_XML_ID">XML_XML_ID</a></pre><pre class="programlisting">#define <a href="#XML_XML_NAMESPACE">XML_XML_NAMESPACE</a></pre><pre class="programlisting">#define <a href="#xmlChildrenNode">xmlChildrenNode</a></pre><pre class="programlisting">#define <a href="#xmlRootNode">xmlRootNode</a></pre><pre class="programlisting">Structure <a href="#xmlAttr">xmlAttr</a><br />struct _xmlAttr
 </pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlAttr">xmlAttr</a> * <a name="xmlAttrPtr" id="xmlAttrPtr">xmlAttrPtr</a>
 </pre><pre class="programlisting">Structure <a href="#xmlAttribute">xmlAttribute</a><br />struct _xmlAttribute
 </pre><pre class="programlisting">Enum <a href="#xmlAttributeDefault">xmlAttributeDefault</a>
 </pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlAttribute">xmlAttribute</a> * <a name="xmlAttributePtr" id="xmlAttributePtr">xmlAttributePtr</a>
 </pre><pre class="programlisting">Enum <a href="#xmlAttributeType">xmlAttributeType</a>
+</pre><pre class="programlisting">Structure <a href="#xmlBuf">xmlBuf</a><br />struct _xmlBuf
+The content of this structure is not made public by the API.
+</pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlBuf">xmlBuf</a> * <a name="xmlBufPtr" id="xmlBufPtr">xmlBufPtr</a>
 </pre><pre class="programlisting">Structure <a href="#xmlBuffer">xmlBuffer</a><br />struct _xmlBuffer
 </pre><pre class="programlisting">Enum <a href="#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a>
 </pre><pre class="programlisting">Typedef <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * <a name="xmlBufferPtr" id="xmlBufferPtr">xmlBufferPtr</a>
@@ -67,11 +70,17 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlAddPrevSibling">xmlAddPrevSibling</a>      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlAddSibling">xmlAddSibling</a>              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
 <pre class="programlisting">void       <a href="#xmlAttrSerializeTxtContent">xmlAttrSerializeTxtContent</a>    (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlBufContent">xmlBufContent</a>              (const <a href="libxml-tree.html#xmlBuf">xmlBuf</a> * buf)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlBufEnd">xmlBufEnd</a>              (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf)</pre>
+<pre class="programlisting">int        <a href="#xmlBufGetNodeContent">xmlBufGetNodeContent</a>                (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
+<pre class="programlisting">size_t     <a href="#xmlBufNodeDump">xmlBufNodeDump</a>                    (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format)</pre>
+<pre class="programlisting">size_t     <a href="#xmlBufShrink">xmlBufShrink</a>                        (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  size_t len)</pre>
+<pre class="programlisting">size_t     <a href="#xmlBufUse">xmlBufUse</a>                      (const <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferAdd">xmlBufferAdd</a>                        (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         int len)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferAddHead">xmlBufferAddHead</a>                (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         int len)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferCCat">xmlBufferCCat</a>                      (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const char * str)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferCat">xmlBufferCat</a>                        (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
-<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlBufferContent">xmlBufferContent</a>        (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlBufferContent">xmlBufferContent</a>        (const <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * buf)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   <a href="#xmlBufferCreate">xmlBufferCreate</a>          (void)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   <a href="#xmlBufferCreateSize">xmlBufferCreateSize</a>  (size_t size)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   <a href="#xmlBufferCreateStatic">xmlBufferCreateStatic</a>      (void * mem, <br />                                      size_t size)</pre>
@@ -80,7 +89,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting">void       <a href="#xmlBufferEmpty">xmlBufferEmpty</a>                    (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
 <pre class="programlisting">void       <a href="#xmlBufferFree">xmlBufferFree</a>                      (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferGrow">xmlBufferGrow</a>                      (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    unsigned int len)</pre>
-<pre class="programlisting">int        <a href="#xmlBufferLength">xmlBufferLength</a>                  (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)</pre>
+<pre class="programlisting">int        <a href="#xmlBufferLength">xmlBufferLength</a>                  (const <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * buf)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferResize">xmlBufferResize</a>                  (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    unsigned int size)</pre>
 <pre class="programlisting">void       <a href="#xmlBufferSetAllocationScheme">xmlBufferSetAllocationScheme</a>        (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> scheme)</pre>
 <pre class="programlisting">int        <a href="#xmlBufferShrink">xmlBufferShrink</a>                  (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    unsigned int len)</pre>
@@ -93,8 +102,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlCopyDtd">xmlCopyDtd</a>            (<a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> dtd)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>   <a href="#xmlCopyNamespace">xmlCopyNamespace</a>        (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>   <a href="#xmlCopyNamespaceList">xmlCopyNamespaceList</a>        (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlCopyNode">xmlCopyNode</a>          (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                         int extended)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlCopyNodeList">xmlCopyNodeList</a>          (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlCopyNode">xmlCopyNode</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       int extended)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlCopyNodeList">xmlCopyNodeList</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlCopyProp">xmlCopyProp</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br />                                     <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlCopyPropList">xmlCopyPropList</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br />                                     <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlCreateIntSubset">xmlCreateIntSubset</a>    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
@@ -107,15 +116,15 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> <a href="#xmlDOMWrapNewCtxt">xmlDOMWrapNewCtxt</a>      (void)</pre>
 <pre class="programlisting">int        <a href="#xmlDOMWrapReconcileNamespaces">xmlDOMWrapReconcileNamespaces</a>      (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br />                                       int options)</pre>
 <pre class="programlisting">int        <a href="#xmlDOMWrapRemoveNode">xmlDOMWrapRemoveNode</a>                (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       int options)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocCopyNode">xmlDocCopyNode</a>            (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  int extended)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocCopyNodeList">xmlDocCopyNodeList</a>    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocCopyNode">xmlDocCopyNode</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  int extended)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocCopyNodeList">xmlDocCopyNodeList</a>    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
 <pre class="programlisting">int        <a href="#xmlDocDump">xmlDocDump</a>                    (FILE * f, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)</pre>
 <pre class="programlisting">void       <a href="#xmlDocDumpFormatMemory">xmlDocDumpFormatMemory</a>            (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br />                                  <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br />                                      int * size, <br />                                      int format)</pre>
 <pre class="programlisting">void       <a href="#xmlDocDumpFormatMemoryEnc">xmlDocDumpFormatMemoryEnc</a>      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br />                                      <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br />                                      int * doc_txt_len, <br />                                       const char * txt_encoding, <br />                                       int format)</pre>
 <pre class="programlisting">void       <a href="#xmlDocDumpMemory">xmlDocDumpMemory</a>                (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br />                                  <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** mem, <br />                                      int * size)</pre>
 <pre class="programlisting">void       <a href="#xmlDocDumpMemoryEnc">xmlDocDumpMemoryEnc</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> out_doc, <br />                                      <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** doc_txt_ptr, <br />                                      int * doc_txt_len, <br />                                       const char * txt_encoding)</pre>
 <pre class="programlisting">int        <a href="#xmlDocFormatDump">xmlDocFormatDump</a>                (FILE * f, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br />                                  int format)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocGetRootElement">xmlDocGetRootElement</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocGetRootElement">xmlDocGetRootElement</a>        (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlDocSetRootElement">xmlDocSetRootElement</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> root)</pre>
 <pre class="programlisting">void       <a href="#xmlElemDump">xmlElemDump</a>                  (FILE * f, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlFirstElementChild">xmlFirstElementChild</a>        (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)</pre>
@@ -129,18 +138,18 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting">void       <a href="#xmlFreePropList">xmlFreePropList</a>                  (<a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlBufferAllocationScheme">xmlBufferAllocationScheme</a> <a href="#xmlGetBufferAllocationScheme">xmlGetBufferAllocationScheme</a>        (void)</pre>
 <pre class="programlisting">int        <a href="#xmlGetCompressMode">xmlGetCompressMode</a>            (void)</pre>
-<pre class="programlisting">int        <a href="#xmlGetDocCompressMode">xmlGetDocCompressMode</a>              (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlGetIntSubset">xmlGetIntSubset</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlGetLastChild">xmlGetLastChild</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)</pre>
-<pre class="programlisting">long       <a href="#xmlGetLineNo">xmlGetLineNo</a>                        (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNoNsProp">xmlGetNoNsProp</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNodePath">xmlGetNodePath</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * <a href="#xmlGetNsList">xmlGetNsList</a>                (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNsProp">xmlGetNsProp</a>                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetProp">xmlGetProp</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlHasNsProp">xmlHasNsProp</a>                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlHasProp">xmlHasProp</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
-<pre class="programlisting">int        <a href="#xmlIsBlankNode">xmlIsBlankNode</a>                    (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
+<pre class="programlisting">int        <a href="#xmlGetDocCompressMode">xmlGetDocCompressMode</a>              (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlGetIntSubset">xmlGetIntSubset</a>          (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlGetLastChild">xmlGetLastChild</a>          (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * parent)</pre>
+<pre class="programlisting">long       <a href="#xmlGetLineNo">xmlGetLineNo</a>                        (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNoNsProp">xmlGetNoNsProp</a>            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNodePath">xmlGetNodePath</a>            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> * <a href="#xmlGetNsList">xmlGetNsList</a>                (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetNsProp">xmlGetNsProp</a>                (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlGetProp">xmlGetProp</a>            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlHasNsProp">xmlHasNsProp</a>                (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlHasProp">xmlHasProp</a>            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting">int        <a href="#xmlIsBlankNode">xmlIsBlankNode</a>                    (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)</pre>
 <pre class="programlisting">int        <a href="#xmlIsXHTML">xmlIsXHTML</a>                    (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemID, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicID)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlLastElementChild">xmlLastElementChild</a>  (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewCDataBlock">xmlNewCDataBlock</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
@@ -155,7 +164,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewDocPI">xmlNewDocPI</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlNewDocProp">xmlNewDocProp</a>              (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewDocRawNode">xmlNewDocRawNode</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewDocText">xmlNewDocText</a>              (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewDocText">xmlNewDocText</a>              (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewDocTextLen">xmlNewDocTextLen</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a> <a href="#xmlNewDtd">xmlNewDtd</a>              (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ExternalID, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * SystemID)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>   <a href="#xmlNewGlobalNs">xmlNewGlobalNs</a>            (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)</pre>
@@ -166,23 +175,23 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlNewNsPropEatName">xmlNewNsPropEatName</a>  (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                      const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewPI">xmlNewPI</a>                (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>       <a href="#xmlNewProp">xmlNewProp</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewReference">xmlNewReference</a>          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewReference">xmlNewReference</a>          (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewText">xmlNewText</a>            (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewTextChild">xmlNewTextChild</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent, <br />                                     <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNewTextLen">xmlNewTextLen</a>              (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlNextElementSibling">xmlNextElementSibling</a>      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeAddContent">xmlNodeAddContent</a>              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeAddContentLen">xmlNodeAddContentLen</a>                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
-<pre class="programlisting">int        <a href="#xmlNodeBufGetContent">xmlNodeBufGetContent</a>                (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
+<pre class="programlisting">int        <a href="#xmlNodeBufGetContent">xmlNodeBufGetContent</a>                (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br />                                         const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
 <pre class="programlisting">int        <a href="#xmlNodeDump">xmlNodeDump</a>                  (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeDumpOutput">xmlNodeDumpOutput</a>              (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format, <br />                                      const char * encoding)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetBase">xmlNodeGetBase</a>            (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetContent">xmlNodeGetContent</a>      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetLang">xmlNodeGetLang</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
-<pre class="programlisting">int        <a href="#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a>          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
-<pre class="programlisting">int        <a href="#xmlNodeIsText">xmlNodeIsText</a>                      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeListGetRawString">xmlNodeListGetRawString</a>  (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br />                                       int inLine)</pre>
-<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeListGetString">xmlNodeListGetString</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br />                                       int inLine)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetBase">xmlNodeGetBase</a>            (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetContent">xmlNodeGetContent</a>      (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeGetLang">xmlNodeGetLang</a>            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
+<pre class="programlisting">int        <a href="#xmlNodeGetSpacePreserve">xmlNodeGetSpacePreserve</a>          (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)</pre>
+<pre class="programlisting">int        <a href="#xmlNodeIsText">xmlNodeIsText</a>                      (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeListGetRawString">xmlNodeListGetRawString</a>  (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * list, <br />                                     int inLine)</pre>
+<pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlNodeListGetString">xmlNodeListGetString</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-tree.html#xmlNode">xmlNode</a> * list, <br />                                     int inLine)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeSetBase">xmlNodeSetBase</a>                    (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * uri)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeSetContent">xmlNodeSetContent</a>              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)</pre>
 <pre class="programlisting">void       <a href="#xmlNodeSetContentLen">xmlNodeSetContentLen</a>                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
@@ -211,8 +220,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting">void       <a href="#xmlSetTreeDoc">xmlSetTreeDoc</a>                      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> tree, <br />                                       <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
 <pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      <a href="#xmlSplitQName2">xmlSplitQName2</a>            (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** prefix)</pre>
 <pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlSplitQName3">xmlSplitQName3</a>            (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int * len)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlStringGetNodeList">xmlStringGetNodeList</a>        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
-<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a>  (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br />                                       int len)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlStringGetNodeList">xmlStringGetNodeList</a>        (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)</pre>
+<pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlStringLenGetNodeList">xmlStringLenGetNodeList</a>  (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br />                                       int len)</pre>
 <pre class="programlisting">int        <a href="#xmlTextConcat">xmlTextConcat</a>                      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlTextMerge">xmlTextMerge</a>                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br />                                      <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> second)</pre>
 <pre class="programlisting">void       <a href="#xmlUnlinkNode">xmlUnlinkNode</a>                      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
@@ -224,6 +233,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting">int        <a href="#xmlValidateQName">xmlValidateQName</a>                (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br />                                       int space)</pre>
 <h2>Description</h2>
 <h3><a name="BASE_BUFFER_SIZE" id="BASE_BUFFER_SIZE"></a>Macro: BASE_BUFFER_SIZE</h3><pre>#define BASE_BUFFER_SIZE</pre><p>default buffer size 4000.</p>
+<h3><a name="LIBXML2_NEW_BUFFER" id="LIBXML2_NEW_BUFFER"></a>Macro: LIBXML2_NEW_BUFFER</h3><pre>#define LIBXML2_NEW_BUFFER</pre><p>Macro used to express that the API use the new buffers for <a href="libxml-tree.html#xmlParserInputBuffer">xmlParserInputBuffer</a> and xmlOutputBuffer. The change was introduced in 2.9.0.</p>
 <h3><a name="XML_GET_CONTENT" id="XML_GET_CONTENT"></a>Macro: XML_GET_CONTENT</h3><pre>#define XML_GET_CONTENT</pre><p>Macro to extract the content pointer of a node.</p>
 <h3><a name="XML_GET_LINE" id="XML_GET_LINE"></a>Macro: XML_GET_LINE</h3><pre>#define XML_GET_LINE</pre><p>Macro to extract the line number of an element node.</p>
 <h3><a name="XML_LOCAL_NAMESPACE" id="XML_LOCAL_NAMESPACE"></a>Macro: XML_LOCAL_NAMESPACE</h3><pre>#define XML_LOCAL_NAMESPACE</pre><p>A namespace declaration node.</p>
@@ -279,7 +289,11 @@ A:link, A:visited, A:active { text-decoration: underline }
     <a name="XML_ATTRIBUTE_ENUMERATION" id="XML_ATTRIBUTE_ENUMERATION">XML_ATTRIBUTE_ENUMERATION</a> = 9
     <a name="XML_ATTRIBUTE_NOTATION" id="XML_ATTRIBUTE_NOTATION">XML_ATTRIBUTE_NOTATION</a> = 10
 }
-</pre><h3><a name="xmlBuffer" id="xmlBuffer">Structure xmlBuffer</a></h3><pre class="programlisting">Structure xmlBuffer<br />struct _xmlBuffer {
+</pre><h3><a name="xmlBuf" id="xmlBuf">Structure xmlBuf</a></h3><pre class="programlisting">Structure xmlBuf<br />struct _xmlBuf {
+The content of this structure is not made public by the API.
+}</pre>
+      A pointer to a buffer structure, the actual structure internals are not public
+    <h3><a name="xmlBuffer" id="xmlBuffer">Structure xmlBuffer</a></h3><pre class="programlisting">Structure xmlBuffer<br />struct _xmlBuffer {
     <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *      content : The buffer content UTF8
     unsigned int       use     : The buffer size used
     unsigned int       size    : The buffer size
@@ -478,8 +492,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     <a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a>      writecallback
     <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a>      closecallback
     <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>     encoder : I18N conversions to UTF-8
-    <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   buffer  : Local buffer encoded in UTF-8 or ISOLat
-    <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   conv    : if encoder != NULL buffer for output
+    <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buffer  : Local buffer encoded in UTF-8 or ISOLat
+    <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> conv    : if encoder != NULL buffer for output
     int        written : total number of byte written
     int        error
 }</pre><h3><a name="xmlParserCtxt" id="xmlParserCtxt">Structure xmlParserCtxt</a></h3><pre class="programlisting">Structure xmlParserCtxt<br />struct _xmlParserCtxt {
@@ -571,6 +585,7 @@ A:link, A:visited, A:active { text-decoration: underline }
     int        nodeInfoMax     : Max depth of the parsing stack
     <a href="libxml-parser.html#xmlParserNodeInfo">xmlParserNodeInfo</a> *     nodeInfoTab     : array of nodeInfos
     int        input_id        : we need to label inputs
+    unsigned long      sizeentcopy     : volume of entity copy
 }</pre><h3><a name="xmlParserInput" id="xmlParserInput">Structure xmlParserInput</a></h3><pre class="programlisting">Structure xmlParserInput<br />struct _xmlParserInput {
     <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a>     buf     : UTF-8 encoded buffer
     const char *       filename        : The file analyzed, if any
@@ -592,8 +607,8 @@ A:link, A:visited, A:active { text-decoration: underline }
     <a href="libxml-xmlIO.html#xmlInputReadCallback">xmlInputReadCallback</a>  readcallback
     <a href="libxml-xmlIO.html#xmlInputCloseCallback">xmlInputCloseCallback</a>        closecallback
     <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a>     encoder : I18N conversions to UTF-8
-    <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   buffer  : Local buffer encoded in UTF-8
-    <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>   raw     : if encoder != NULL buffer for raw input
+    <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buffer  : Local buffer encoded in UTF-8
+    <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> raw     : if encoder != NULL buffer for raw input
     int        compressed      : -1=unknown, 0=not compressed, 1=compres
     int        error
     unsigned long      rawconsumed     : amount consumed from raw
@@ -653,7 +668,19 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Add a new element @elem to the list of siblings of @cur merging adjacent TEXT nodes (@elem may be freed) If the new element was already inserted in a document it is first unlinked from its existing context.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the child node</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the new node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new element or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlAttrSerializeTxtContent" id="xmlAttrSerializeTxtContent"></a>Function: xmlAttrSerializeTxtContent</h3><pre class="programlisting">void xmlAttrSerializeTxtContent      (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> attr, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * string)<br />
 </pre><p>Serialize text <a href="libxml-SAX.html#attribute">attribute</a> values to an xml simple buffer</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> node</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the text content</td></tr></tbody></table></div><h3><a name="xmlBufferAdd" id="xmlBufferAdd"></a>Function: xmlBufferAdd</h3><pre class="programlisting">int    xmlBufferAdd                    (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         int len)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>attr</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> node</td></tr><tr><td><span class="term"><i><tt>string</tt></i>:</span></td><td>the text content</td></tr></tbody></table></div><h3><a name="xmlBufContent" id="xmlBufContent"></a>Function: xmlBufContent</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlBufContent           (const <a href="libxml-tree.html#xmlBuf">xmlBuf</a> * buf)<br />
+</pre><p>Function to extract the content of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal content</td></tr></tbody></table></div><h3><a name="xmlBufEnd" id="xmlBufEnd"></a>Function: xmlBufEnd</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlBufEnd               (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf)<br />
+</pre><p>Function to extract the end of the content of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the end of the internal content or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlBufGetNodeContent" id="xmlBufGetNodeContent"></a>Function: xmlBufGetNodeContent</h3><pre class="programlisting">int       xmlBufGetNodeContent            (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
+</pre><p>Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>a buffer <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a></td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlBufNodeDump" id="xmlBufNodeDump"></a>Function: xmlBufNodeDump</h3><pre class="programlisting">size_t    xmlBufNodeDump                  (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format)<br />
+</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written to the buffer, in case of error 0 is returned or @buf stores the error</td></tr></tbody></table></div><h3><a name="xmlBufShrink" id="xmlBufShrink"></a>Function: xmlBufShrink</h3><pre class="programlisting">size_t  xmlBufShrink                    (<a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf, <br />                                  size_t len)<br />
+</pre><p>Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> to remove</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte removed or 0 in case of failure</td></tr></tbody></table></div><h3><a name="xmlBufUse" id="xmlBufUse"></a>Function: xmlBufUse</h3><pre class="programlisting">size_t       xmlBufUse                       (const <a href="libxml-tree.html#xmlBufPtr">xmlBufPtr</a> buf)<br />
+</pre><p>Function to get the length of a buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the length of data in the internal content</td></tr></tbody></table></div><h3><a name="xmlBufferAdd" id="xmlBufferAdd"></a>Function: xmlBufferAdd</h3><pre class="programlisting">int     xmlBufferAdd                    (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         int len)<br />
 </pre><p>Add a string range to an XML buffer. if len == -1, the length of str is recomputed.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the number of #xmlChar to add</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlBufferAddHead" id="xmlBufferAddHead"></a>Function: xmlBufferAddHead</h3><pre class="programlisting">int    xmlBufferAddHead                (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         int len)<br />
 </pre><p>Add a string range to the beginning of an XML buffer. if len == -1, the length of @str is recomputed.</p>
@@ -661,7 +688,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Append a zero terminated C string to an XML buffer.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to dump</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the C char string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlBufferCat" id="xmlBufferCat"></a>Function: xmlBufferCat</h3><pre class="programlisting">int        xmlBufferCat                    (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
 </pre><p>Append a zero terminated string to an XML buffer.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to add to</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlBufferContent" id="xmlBufferContent"></a>Function: xmlBufferContent</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlBufferContent        (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to add to</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the #xmlChar string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 successful, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlBufferContent" id="xmlBufferContent"></a>Function: xmlBufferContent</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlBufferContent        (const <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * buf)<br />
 </pre><p>Function to extract the content of a buffer</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the internal content</td></tr></tbody></table></div><h3><a name="xmlBufferCreate" id="xmlBufferCreate"></a>Function: xmlBufferCreate</h3><pre class="programlisting"><a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a>     xmlBufferCreate         (void)<br />
 </pre><p>routine to create an XML buffer.</p>
@@ -679,7 +706,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Frees an XML buffer. It frees both the content and the structure which encapsulate it.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer to free</td></tr></tbody></table></div><h3><a name="xmlBufferGrow" id="xmlBufferGrow"></a>Function: xmlBufferGrow</h3><pre class="programlisting">int xmlBufferGrow                   (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    unsigned int len)<br />
 </pre><p>Grow the available space of an XML buffer.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the minimum free size to allocate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new available space or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlBufferLength" id="xmlBufferLength"></a>Function: xmlBufferLength</h3><pre class="programlisting">int      xmlBufferLength                 (const <a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the minimum free size to allocate</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new available space or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlBufferLength" id="xmlBufferLength"></a>Function: xmlBufferLength</h3><pre class="programlisting">int      xmlBufferLength                 (const <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> * buf)<br />
 </pre><p>Function to get the length of a buffer</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the buffer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the length of data in the internal content</td></tr></tbody></table></div><h3><a name="xmlBufferResize" id="xmlBufferResize"></a>Function: xmlBufferResize</h3><pre class="programlisting">int    xmlBufferResize                 (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    unsigned int size)<br />
 </pre><p>Resize a buffer to accommodate minimum size of @size.</p>
@@ -705,9 +732,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Do a copy of the namespace.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNamespaceList" id="xmlCopyNamespaceList"></a>Function: xmlCopyNamespaceList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>     xmlCopyNamespaceList    (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> cur)<br />
 </pre><p>Do a copy of an namespace list.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNode" id="xmlCopyNode"></a>Function: xmlCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlCopyNode             (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                         int extended)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the first namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNsPtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNode" id="xmlCopyNode"></a>Function: xmlCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlCopyNode             (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       int extended)<br />
 </pre><p>Do a copy of the node.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNodeList" id="xmlCopyNodeList"></a>Function: xmlCopyNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNodeList         (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyNodeList" id="xmlCopyNodeList"></a>Function: xmlCopyNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlCopyNodeList         (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
 </pre><p>Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the first node in the list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlCopyProp" id="xmlCopyProp"></a>Function: xmlCopyProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>   xmlCopyProp             (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> target, <br />                                     <a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> cur)<br />
 </pre><p>Do a copy of the attribute.</p>
@@ -719,20 +746,20 @@ A:link, A:visited, A:active { text-decoration: underline }
 <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>       xmlDOMWrapAcquireNsFunction     (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                                 <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                               const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nsName, <br />                                              const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nsPrefix)
 </pre><p>A function called to acquire namespaces (xmlNs) from the wrapper.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a DOM wrapper context</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the context node (element or attribute)</td></tr><tr><td><span class="term"><i><tt>nsName</tt></i>:</span></td><td>the requested namespace name</td></tr><tr><td><span class="term"><i><tt>nsPrefix</tt></i>:</span></td><td>the requested namespace prefix</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> or NULL in case of an error.</td></tr></tbody></table></div><br />
 <h3><a name="xmlDOMWrapAdoptNode" id="xmlDOMWrapAdoptNode"></a>Function: xmlDOMWrapAdoptNode</h3><pre class="programlisting">int       xmlDOMWrapAdoptNode             (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> sourceDoc, <br />                                    <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> destDoc, <br />                                      <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> destParent, <br />                                         int options)<br />
-</pre><p>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unliked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
+</pre><p>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the optional context for custom processing</td></tr><tr><td><span class="term"><i><tt>sourceDoc</tt></i>:</span></td><td>the optional sourceDoc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to start with</td></tr><tr><td><span class="term"><i><tt>destDoc</tt></i>:</span></td><td>the destination doc</td></tr><tr><td><span class="term"><i><tt>destParent</tt></i>:</span></td><td>the optional new parent of @node in @destDoc</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>option flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the operation succeeded, 1 if a node of unsupported type was given, 2 if a node of not yet supported type was given and -1 on API/internal errors.</td></tr></tbody></table></div><h3><a name="xmlDOMWrapCloneNode" id="xmlDOMWrapCloneNode"></a>Function: xmlDOMWrapCloneNode</h3><pre class="programlisting">int        xmlDOMWrapCloneNode             (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> sourceDoc, <br />                                    <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> * resNode, <br />                                  <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> destDoc, <br />                                      <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> destParent, <br />                                         int deep, <br />                                        int options)<br />
 </pre><p>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used. This is the case when you don't know already where the cloned branch will be added to. If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml-SAX.html#attribute">attribute</a> values or element content. TODO: 1) What to do with XInclude? Currently this returns an error for XInclude.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the optional context for custom processing</td></tr><tr><td><span class="term"><i><tt>sourceDoc</tt></i>:</span></td><td>the optional sourceDoc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to start with</td></tr><tr><td><span class="term"><i><tt>resNode</tt></i>:</span></td><td>the clone of the given @node</td></tr><tr><td><span class="term"><i><tt>destDoc</tt></i>:</span></td><td>the destination doc</td></tr><tr><td><span class="term"><i><tt>destParent</tt></i>:</span></td><td>the optional new parent of @node in @destDoc</td></tr><tr><td><span class="term"><i><tt>deep</tt></i>:</span></td><td>descend into child if set</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>option flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the operation succeeded, 1 if a node of unsupported (or not yet supported) type was given, -1 on API/internal errors.</td></tr></tbody></table></div><h3><a name="xmlDOMWrapFreeCtxt" id="xmlDOMWrapFreeCtxt"></a>Function: xmlDOMWrapFreeCtxt</h3><pre class="programlisting">void   xmlDOMWrapFreeCtxt              (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt)<br />
 </pre><p>Frees the DOM-wrapper context.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the DOM-wrapper context</td></tr></tbody></table></div><h3><a name="xmlDOMWrapNewCtxt" id="xmlDOMWrapNewCtxt"></a>Function: xmlDOMWrapNewCtxt</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a>        xmlDOMWrapNewCtxt       (void)<br />
 </pre><p>Allocates and initializes a new DOM-wrapper context.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> or NULL in case of an internal errror.</td></tr></tbody></table></div><h3><a name="xmlDOMWrapReconcileNamespaces" id="xmlDOMWrapReconcileNamespaces"></a>Function: xmlDOMWrapReconcileNamespaces</h3><pre class="programlisting">int  xmlDOMWrapReconcileNamespaces   (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br />                                       int options)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> or NULL in case of an internal error.</td></tr></tbody></table></div><h3><a name="xmlDOMWrapReconcileNamespaces" id="xmlDOMWrapReconcileNamespaces"></a>Function: xmlDOMWrapReconcileNamespaces</h3><pre class="programlisting">int   xmlDOMWrapReconcileNamespaces   (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br />                                       int options)<br />
 </pre><p>Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in <a href="libxml-SAX.html#attribute">attribute</a> values or element content. NOTE: This function was not intensively tested.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>DOM wrapper context, unused at the moment</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>the element-node</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>option flags</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if succeeded, -1 otherwise and on API/internal errors.</td></tr></tbody></table></div><h3><a name="xmlDOMWrapRemoveNode" id="xmlDOMWrapRemoveNode"></a>Function: xmlDOMWrapRemoveNode</h3><pre class="programlisting">int    xmlDOMWrapRemoveNode            (<a href="libxml-tree.html#xmlDOMWrapCtxtPtr">xmlDOMWrapCtxtPtr</a> ctxt, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       int options)<br />
 </pre><p>Unlinks the given node from its owner. This will substitute ns-references to node-&gt;nsDef for ns-references to doc-&gt;oldNs, thus ensuring the removed branch to be autark wrt ns-references. NOTE: This function was not intensively tested.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a DOM wrapper context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the doc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to be removed.</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>set of options, unused at the moment</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, 1 if the node is not supported, -1 on API and internal errors.</td></tr></tbody></table></div><h3><a name="xmlDocCopyNode" id="xmlDocCopyNode"></a>Function: xmlDocCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlDocCopyNode          (const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                         <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  int extended)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a DOM wrapper context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the doc</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to be removed.</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>set of options, unused at the moment</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 on success, 1 if the node is not supported, -1 on API and internal errors.</td></tr></tbody></table></div><h3><a name="xmlDocCopyNode" id="xmlDocCopyNode"></a>Function: xmlDocCopyNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlDocCopyNode          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  int extended)<br />
 </pre><p>Do a copy of the node to a given document.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDocCopyNodeList" id="xmlDocCopyNodeList"></a>Function: xmlDocCopyNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNodeList      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>extended</tt></i>:</span></td><td>if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDocCopyNodeList" id="xmlDocCopyNodeList"></a>Function: xmlDocCopyNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlDocCopyNodeList      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
 </pre><p>Do a recursive copy of the node list.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the target document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the first node in the list.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlNodePtr, or NULL in case of error.</td></tr></tbody></table></div><h3><a name="xmlDocDump" id="xmlDocDump"></a>Function: xmlDocDump</h3><pre class="programlisting">int   xmlDocDump                      (FILE * f, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur)<br />
 </pre><p>Dump an XML document to an open FILE.</p>
@@ -746,7 +773,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Dump the current DOM tree into memory using the character encoding specified by the caller. Note it is up to the caller of this function to free the allocated memory with xmlFree().</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out_doc</tt></i>:</span></td><td>Document to generate XML text from</td></tr><tr><td><span class="term"><i><tt>doc_txt_ptr</tt></i>:</span></td><td>Memory pointer for allocated XML text</td></tr><tr><td><span class="term"><i><tt>doc_txt_len</tt></i>:</span></td><td>Length of the generated XML text</td></tr><tr><td><span class="term"><i><tt>txt_encoding</tt></i>:</span></td><td>Character encoding to use when generating XML text</td></tr></tbody></table></div><h3><a name="xmlDocFormatDump" id="xmlDocFormatDump"></a>Function: xmlDocFormatDump</h3><pre class="programlisting">int xmlDocFormatDump                (FILE * f, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> cur, <br />                                  int format)<br />
 </pre><p>Dump an XML document to an open FILE.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div><h3><a name="xmlDocGetRootElement" id="xmlDocGetRootElement"></a>Function: xmlDocGetRootElement</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       xmlDocGetRootElement    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the FILE*</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>should formatting spaces been added</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written or -1 in case of failure. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</td></tr></tbody></table></div><h3><a name="xmlDocGetRootElement" id="xmlDocGetRootElement"></a>Function: xmlDocGetRootElement</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       xmlDocGetRootElement    (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)<br />
 </pre><p>Get the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the #xmlNodePtr for the root or NULL</td></tr></tbody></table></div><h3><a name="xmlDocSetRootElement" id="xmlDocSetRootElement"></a>Function: xmlDocSetRootElement</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlDocSetRootElement    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> root)<br />
 </pre><p>Set the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</p>
@@ -774,29 +801,29 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Types are <a href="libxml-tree.html#XML_BUFFER_ALLOC_EXACT">XML_BUFFER_ALLOC_EXACT</a> - use exact sizes, keeps memory usage down <a href="libxml-tree.html#XML_BUFFER_ALLOC_DOUBLEIT">XML_BUFFER_ALLOC_DOUBLEIT</a> - double buffer when extra needed, improves performance <a href="libxml-tree.html#XML_BUFFER_ALLOC_HYBRID">XML_BUFFER_ALLOC_HYBRID</a> - use exact sizes on small strings to keep memory usage tight in normal usage, and doubleit on large strings to avoid pathological performance.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the current allocation scheme</td></tr></tbody></table></div><h3><a name="xmlGetCompressMode" id="xmlGetCompressMode"></a>Function: xmlGetCompressMode</h3><pre class="programlisting">int   xmlGetCompressMode              (void)<br />
 </pre><p>get the default compression mode used, ZLIB based.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetDocCompressMode" id="xmlGetDocCompressMode"></a>Function: xmlGetDocCompressMode</h3><pre class="programlisting">int        xmlGetDocCompressMode           (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetDocCompressMode" id="xmlGetDocCompressMode"></a>Function: xmlGetDocCompressMode</h3><pre class="programlisting">int        xmlGetDocCompressMode           (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)<br />
 </pre><p>get the compression ratio for a document, ZLIB based</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetIntSubset" id="xmlGetIntSubset"></a>Function: xmlGetIntSubset</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a>      xmlGetIntSubset         (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 (uncompressed) to 9 (max compression)</td></tr></tbody></table></div><h3><a name="xmlGetIntSubset" id="xmlGetIntSubset"></a>Function: xmlGetIntSubset</h3><pre class="programlisting"><a href="libxml-tree.html#xmlDtdPtr">xmlDtdPtr</a>      xmlGetIntSubset         (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc)<br />
 </pre><p>Get the internal subset of a document</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the DTD structure or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlGetLastChild" id="xmlGetLastChild"></a>Function: xmlGetLastChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlGetLastChild         (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> parent)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document pointer</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the DTD structure or NULL if not found</td></tr></tbody></table></div><h3><a name="xmlGetLastChild" id="xmlGetLastChild"></a>Function: xmlGetLastChild</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlGetLastChild         (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * parent)<br />
 </pre><p>Search the last child of a node.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last child or NULL if none.</td></tr></tbody></table></div><h3><a name="xmlGetLineNo" id="xmlGetLineNo"></a>Function: xmlGetLineNo</h3><pre class="programlisting">long       xmlGetLineNo                    (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
-</pre><p>Get line number of @node. This requires activation of this option before invoking the parser by calling xmlLineNumbersDefault(1)</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>valid node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the line number if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlGetNoNsProp" id="xmlGetNoNsProp"></a>Function: xmlGetNoNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *   xmlGetNoNsProp          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>parent</tt></i>:</span></td><td>the parent node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the last child or NULL if none.</td></tr></tbody></table></div><h3><a name="xmlGetLineNo" id="xmlGetLineNo"></a>Function: xmlGetLineNo</h3><pre class="programlisting">long       xmlGetLineNo                    (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)<br />
+</pre><p>Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if <a href="libxml-parser.html#XML_PARSE_BIG_LINES">XML_PARSE_BIG_LINES</a> parser option was used</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>valid node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the line number if successful, -1 otherwise</td></tr></tbody></table></div><h3><a name="xmlGetNoNsProp" id="xmlGetNoNsProp"></a>Function: xmlGetNoNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *   xmlGetNoNsProp          (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to <a href="libxml-tree.html#xmlGetProp">xmlGetProp</a> except it will accept only an <a href="libxml-SAX.html#attribute">attribute</a> in no namespace.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetNodePath" id="xmlGetNodePath"></a>Function: xmlGetNodePath</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlGetNodePath          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetNodePath" id="xmlGetNodePath"></a>Function: xmlGetNodePath</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlGetNodePath          (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)<br />
 </pre><p>Build a structure based Path for the given node</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new path or NULL in case of error. The caller must free the returned string</td></tr></tbody></table></div><h3><a name="xmlGetNsList" id="xmlGetNsList"></a>Function: xmlGetNsList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> *    xmlGetNsList            (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new path or NULL in case of error. The caller must free the returned string</td></tr></tbody></table></div><h3><a name="xmlGetNsList" id="xmlGetNsList"></a>Function: xmlGetNsList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> *    xmlGetNsList            (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)<br />
 </pre><p>Search all the namespace applying to a given element.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined</td></tr></tbody></table></div><h3><a name="xmlGetNsProp" id="xmlGetNsProp"></a>Function: xmlGetNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlGetNsProp            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined</td></tr></tbody></table></div><h3><a name="xmlGetNsProp" id="xmlGetNsProp"></a>Function: xmlGetNsProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlGetNsProp            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
 </pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetProp" id="xmlGetProp"></a>Function: xmlGetProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlGetProp              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlGetProp" id="xmlGetProp"></a>Function: xmlGetProp</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlGetProp              (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Search and get the value of an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlHasNsProp" id="xmlHasNsProp"></a>Function: xmlHasNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlHasNsProp            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> value or NULL if not found. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlHasNsProp" id="xmlHasNsProp"></a>Function: xmlHasNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a> xmlHasNsProp            (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * nameSpace)<br />
 </pre><p>Search for an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This <a href="libxml-SAX.html#attribute">attribute</a> has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlHasProp" id="xmlHasProp"></a>Function: xmlHasProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlHasProp              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>nameSpace</tt></i>:</span></td><td>the URI of the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlHasProp" id="xmlHasProp"></a>Function: xmlHasProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlHasProp              (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Search an <a href="libxml-SAX.html#attribute">attribute</a> associated to a node This function also looks in DTD <a href="libxml-SAX.html#attribute">attribute</a> declaration for #FIXED or default declaration values unless DTD use has been turned off.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlIsBlankNode" id="xmlIsBlankNode"></a>Function: xmlIsBlankNode</h3><pre class="programlisting">int      xmlIsBlankNode                  (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> or the <a href="libxml-SAX.html#attribute">attribute</a> declaration or NULL if neither was found.</td></tr></tbody></table></div><h3><a name="xmlIsBlankNode" id="xmlIsBlankNode"></a>Function: xmlIsBlankNode</h3><pre class="programlisting">int      xmlIsBlankNode                  (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)<br />
 </pre><p>Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div><h3><a name="xmlIsXHTML" id="xmlIsXHTML"></a>Function: xmlIsXHTML</h3><pre class="programlisting">int   xmlIsXHTML                      (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * systemID, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * publicID)<br />
 </pre><p>Try to find if the document correspond to an XHTML DTD</p>
@@ -826,7 +853,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Create a new property carried by a document.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewDocRawNode" id="xmlNewDocRawNode"></a>Function: xmlNewDocRawNode</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>      xmlNewDocRawNode        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
 </pre><p>Creation of a new node element within a document. @ns and @content are optional (NULL).</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocText" id="xmlNewDocText"></a>Function: xmlNewDocText</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>     xmlNewDocText           (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content if any</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocText" id="xmlNewDocText"></a>Function: xmlNewDocText</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>     xmlNewDocText           (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
 </pre><p>Creation of a new text node within a document.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the text content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewDocTextLen" id="xmlNewDocTextLen"></a>Function: xmlNewDocTextLen</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlNewDocTextLen        (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)<br />
 </pre><p>Creation of a new text node with an extra content length parameter. The text node pertain to a given document.</p>
@@ -839,7 +866,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object. Uses xmlStrdup() to make copy of @name.</td></tr></tbody></table></div><h3><a name="xmlNewNodeEatName" id="xmlNewNodeEatName"></a>Function: xmlNewNodeEatName</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlNewNodeEatName       (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Creation of a new node element. @ns is optional (NULL).</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>namespace if any</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the node name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object, with pointer @name as new node's name. Use xmlNewNode() if a copy of @name string is is needed as new node's name.</td></tr></tbody></table></div><h3><a name="xmlNewNs" id="xmlNewNs"></a>Function: xmlNewNs</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a>      xmlNewNs                (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * href, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix)<br />
-</pre><p>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. We use href==NULL in the case of an element creation where the namespace was not defined.</p>
+</pre><p>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL. We use href==NULL in the case of an element creation where the namespace was not defined.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the element carrying the namespace</td></tr><tr><td><span class="term"><i><tt>href</tt></i>:</span></td><td>the URI associated</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>the prefix for the namespace</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new namespace pointer or NULL</td></tr></tbody></table></div><h3><a name="xmlNewNsProp" id="xmlNewNsProp"></a>Function: xmlNewNsProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlNewNsProp            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
 </pre><p>Create a new property tagged with a namespace and carried by a node.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewNsPropEatName" id="xmlNewNsPropEatName"></a>Function: xmlNewNsPropEatName</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>   xmlNewNsPropEatName     (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                      const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
@@ -848,7 +875,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Creation of a processing instruction element. Use xmlDocNewPI preferably to get string interning</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the processing instruction name</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the PI content</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewProp" id="xmlNewProp"></a>Function: xmlNewProp</h3><pre class="programlisting"><a href="libxml-tree.html#xmlAttrPtr">xmlAttrPtr</a>  xmlNewProp              (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
 </pre><p>Create a new property carried by a node.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewReference" id="xmlNewReference"></a>Function: xmlNewReference</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>    xmlNewReference         (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the holding node</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the <a href="libxml-SAX.html#attribute">attribute</a></td></tr></tbody></table></div><h3><a name="xmlNewReference" id="xmlNewReference"></a>Function: xmlNewReference</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>    xmlNewReference         (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Creation of a new <a href="libxml-SAX.html#reference">reference</a> node.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#reference">reference</a> name, or the <a href="libxml-SAX.html#reference">reference</a> string with &amp; and ;</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the new node object.</td></tr></tbody></table></div><h3><a name="xmlNewText" id="xmlNewText"></a>Function: xmlNewText</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>   xmlNewText              (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content)<br />
 </pre><p>Creation of a new text node.</p>
@@ -862,25 +889,25 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr></tbody></table></div><h3><a name="xmlNodeAddContentLen" id="xmlNodeAddContentLen"></a>Function: xmlNodeAddContentLen</h3><pre class="programlisting">void    xmlNodeAddContentLen            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)<br />
 </pre><p>Append the extra substring to the node content. NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be raw text, so unescaped XML special chars are allowed, entity references are not supported.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size of @content</td></tr></tbody></table></div><h3><a name="xmlNodeBufGetContent" id="xmlNodeBufGetContent"></a>Function: xmlNodeBufGetContent</h3><pre class="programlisting">int        xmlNodeBufGetContent            (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being modified</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>extra content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size of @content</td></tr></tbody></table></div><h3><a name="xmlNodeBufGetContent" id="xmlNodeBufGetContent"></a>Function: xmlNodeBufGetContent</h3><pre class="programlisting">int        xmlNodeBufGetContent            (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buffer, <br />                                         const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
 </pre><p>Read the value of a node @cur, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buffer</tt></i>:</span></td><td>a buffer</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlNodeDump" id="xmlNodeDump"></a>Function: xmlNodeDump</h3><pre class="programlisting">int        xmlNodeDump                     (<a href="libxml-tree.html#xmlBufferPtr">xmlBufferPtr</a> buf, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format)<br />
-</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
+</pre><p>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called Since this is using <a href="libxml-tree.html#xmlBuffer">xmlBuffer</a> structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of bytes written to the buffer or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlNodeDumpOutput" id="xmlNodeDumpOutput"></a>Function: xmlNodeDumpOutput</h3><pre class="programlisting">void       xmlNodeDumpOutput               (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> buf, <br />                                        <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        int level, <br />                                       int format, <br />                                      const char * encoding)<br />
 </pre><p>Dump an XML node, recursive behaviour, children are printed too. Note that @format = 1 provide node indenting only if <a href="libxml-globals.html#xmlIndentTreeOutput">xmlIndentTreeOutput</a> = 1 or xmlKeepBlanksDefault(0) was called</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>an optional encoding string</td></tr></tbody></table></div><h3><a name="xmlNodeGetBase" id="xmlNodeGetBase"></a>Function: xmlNodeGetBase</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *   xmlNodeGetBase          (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>the XML buffer output</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the current node</td></tr><tr><td><span class="term"><i><tt>level</tt></i>:</span></td><td>the imbrication level for indenting</td></tr><tr><td><span class="term"><i><tt>format</tt></i>:</span></td><td>is formatting allowed</td></tr><tr><td><span class="term"><i><tt>encoding</tt></i>:</span></td><td>an optional encoding string</td></tr></tbody></table></div><h3><a name="xmlNodeGetBase" id="xmlNodeGetBase"></a>Function: xmlNodeGetBase</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *   xmlNodeGetBase          (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
 </pre><p>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc-&gt;URL in this case</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the node pertains to</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetContent" id="xmlNodeGetContent"></a>Function: xmlNodeGetContent</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlNodeGetContent       (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document the node pertains to</td></tr><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the base URL, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetContent" id="xmlNodeGetContent"></a>Function: xmlNodeGetContent</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlNodeGetContent       (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
 </pre><p>Read the value of a node, this can be either the text carried directly by this node if it's a TEXT node or the aggregate string of the values carried by this node child's (TEXT and ENTITY_REF). Entity references are substituted.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetLang" id="xmlNodeGetLang"></a>Function: xmlNodeGetLang</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetLang          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being read</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetLang" id="xmlNodeGetLang"></a>Function: xmlNodeGetLang</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * xmlNodeGetLang          (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
 </pre><p>Searches the language of a node, i.e. the values of the xml:lang <a href="libxml-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetSpacePreserve" id="xmlNodeGetSpacePreserve"></a>Function: xmlNodeGetSpacePreserve</h3><pre class="programlisting">int        xmlNodeGetSpacePreserve         (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the lang value, or NULL if not found It's up to the caller to free the memory with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeGetSpacePreserve" id="xmlNodeGetSpacePreserve"></a>Function: xmlNodeGetSpacePreserve</h3><pre class="programlisting">int        xmlNodeGetSpacePreserve         (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * cur)<br />
 </pre><p>Searches the space preserving behaviour of a node, i.e. the values of the xml:space <a href="libxml-SAX.html#attribute">attribute</a> or the one carried by the nearest ancestor.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"</td></tr></tbody></table></div><h3><a name="xmlNodeIsText" id="xmlNodeIsText"></a>Function: xmlNodeIsText</h3><pre class="programlisting">int       xmlNodeIsText                   (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node being checked</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 if xml:space is not inherited, 0 if "default", 1 if "preserve"</td></tr></tbody></table></div><h3><a name="xmlNodeIsText" id="xmlNodeIsText"></a>Function: xmlNodeIsText</h3><pre class="programlisting">int       xmlNodeIsText                   (const <a href="libxml-tree.html#xmlNode">xmlNode</a> * node)<br />
 </pre><p>Is this node a Text node ?</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div><h3><a name="xmlNodeListGetRawString" id="xmlNodeListGetRawString"></a>Function: xmlNodeListGetRawString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlNodeListGetRawString (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br />                                       int inLine)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 yes, 0 no</td></tr></tbody></table></div><h3><a name="xmlNodeListGetRawString" id="xmlNodeListGetRawString"></a>Function: xmlNodeListGetRawString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlNodeListGetRawString (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-tree.html#xmlNode">xmlNode</a> * list, <br />                                     int inLine)<br />
 </pre><p>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn't do any character encoding handling.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeListGetString" id="xmlNodeListGetString"></a>Function: xmlNodeListGetString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlNodeListGetString    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> list, <br />                                       int inLine)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeListGetString" id="xmlNodeListGetString"></a>Function: xmlNodeListGetString</h3><pre class="programlisting"><a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        xmlNodeListGetString    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-tree.html#xmlNode">xmlNode</a> * list, <br />                                     int inLine)<br />
 </pre><p>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>list</tt></i>:</span></td><td>a Node list</td></tr><tr><td><span class="term"><i><tt>inLine</tt></i>:</span></td><td>should we replace entity contents or show their external form</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the string copy, the caller must free it with xmlFree().</td></tr></tbody></table></div><h3><a name="xmlNodeSetBase" id="xmlNodeSetBase"></a>Function: xmlNodeSetBase</h3><pre class="programlisting">void   xmlNodeSetBase                  (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * uri)<br />
 </pre><p>Set (or reset) the base URI of a node, i.e. the value of the xml:base attribute.</p>
@@ -938,16 +965,16 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>parse an XML qualified name string [NS 5] QName ::= (Prefix ':')? LocalPart [NS 6] Prefix ::= NCName [NS 7] LocalPart ::= NCName</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the full QName</td></tr><tr><td><span class="term"><i><tt>prefix</tt></i>:</span></td><td>a <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> **</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if not a QName, otherwise the local part, and prefix is updated to get the Prefix if any.</td></tr></tbody></table></div><h3><a name="xmlSplitQName3" id="xmlSplitQName3"></a>Function: xmlSplitQName3</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *  xmlSplitQName3          (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int * len)<br />
 </pre><p>parse an XML qualified name string,i</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the full QName</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an int *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if it is not a Qualified Name, otherwise, update len with the lenght in byte of the prefix and return a pointer to the start of the name without the prefix</td></tr></tbody></table></div><h3><a name="xmlStringGetNodeList" id="xmlStringGetNodeList"></a>Function: xmlStringGetNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlStringGetNodeList    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the full QName</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>an int *</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>NULL if it is not a Qualified Name, otherwise, update len with the length in byte of the prefix and return a pointer to the start of the name without the prefix</td></tr></tbody></table></div><h3><a name="xmlStringGetNodeList" id="xmlStringGetNodeList"></a>Function: xmlStringGetNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>        xmlStringGetNodeList    (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value)<br />
 </pre><p>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div><h3><a name="xmlStringLenGetNodeList" id="xmlStringLenGetNodeList"></a>Function: xmlStringLenGetNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlStringLenGetNodeList (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br />                                       int len)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the <a href="libxml-SAX.html#attribute">attribute</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div><h3><a name="xmlStringLenGetNodeList" id="xmlStringLenGetNodeList"></a>Function: xmlStringLenGetNodeList</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>  xmlStringLenGetNodeList (const <a href="libxml-tree.html#xmlDoc">xmlDoc</a> * doc, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * value, <br />                                       int len)<br />
 </pre><p>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the document</td></tr><tr><td><span class="term"><i><tt>value</tt></i>:</span></td><td>the value of the text</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the string value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the first child</td></tr></tbody></table></div><h3><a name="xmlTextConcat" id="xmlTextConcat"></a>Function: xmlTextConcat</h3><pre class="programlisting">int       xmlTextConcat                   (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * content, <br />                                     int len)<br />
 </pre><p>Concat the given string at the end of the existing node content</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>content</tt></i>:</span></td><td>the content</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>@content length</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlTextMerge" id="xmlTextMerge"></a>Function: xmlTextMerge</h3><pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       xmlTextMerge            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> first, <br />                                      <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> second)<br />
 </pre><p>Merge two text nodes into one</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>first</tt></i>:</span></td><td>the first text node</td></tr><tr><td><span class="term"><i><tt>second</tt></i>:</span></td><td>the second text node being merged</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the first text node augmented</td></tr></tbody></table></div><h3><a name="xmlUnlinkNode" id="xmlUnlinkNode"></a>Function: xmlUnlinkNode</h3><pre class="programlisting">void      xmlUnlinkNode                   (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)<br />
-</pre><p>Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it.</p>
+</pre><p>Unlink a node from it's current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can't be unlinked as they do not have pointer to their parent.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node</td></tr></tbody></table></div><h3><a name="xmlUnsetNsProp" id="xmlUnsetNsProp"></a>Function: xmlUnsetNsProp</h3><pre class="programlisting">int        xmlUnsetNsProp                  (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Remove an <a href="libxml-SAX.html#attribute">attribute</a> carried by a node.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>the namespace definition</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the <a href="libxml-SAX.html#attribute">attribute</a> name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if successful, -1 if not found</td></tr></tbody></table></div><h3><a name="xmlUnsetProp" id="xmlUnsetProp"></a>Function: xmlUnsetProp</h3><pre class="programlisting">int    xmlUnsetProp                    (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
index 5c15ace..94df436 100644 (file)
@@ -276,7 +276,7 @@ The content of this structure is not made public by the API.
 </pre><p>Pop the element end from the validation stack.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>qname</tt></i>:</span></td><td>the qualified name as appearing in the serialization</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePushCData" id="xmlValidatePushCData"></a>Function: xmlValidatePushCData</h3><pre class="programlisting">int       xmlValidatePushCData            (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * data, <br />                                        int len)<br />
 </pre><p>check the CData parsed for validation in the current stack</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the lenght of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePushElement" id="xmlValidatePushElement"></a>Function: xmlValidatePushElement</h3><pre class="programlisting">int        xmlValidatePushElement          (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>data</tt></i>:</span></td><td>some character data read</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the length of the data</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidatePushElement" id="xmlValidatePushElement"></a>Function: xmlValidatePushElement</h3><pre class="programlisting">int        xmlValidatePushElement          (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem, <br />                                       const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * qname)<br />
 </pre><p>Push a new element start on the validation stack.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>a document instance</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element instance</td></tr><tr><td><span class="term"><i><tt>qname</tt></i>:</span></td><td>the qualified name as appearing in the serialization</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if no validation problem was found or 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlValidateRoot" id="xmlValidateRoot"></a>Function: xmlValidateRoot</h3><pre class="programlisting">int      xmlValidateRoot                 (<a href="libxml-valid.html#xmlValidCtxtPtr">xmlValidCtxtPtr</a> ctxt, <br />                                    <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
 </pre><p>Try to validate a the root element basically it does the following check as described by the XML-1.0 recommendation: - [ VC: Root Element Type ] it doesn't try to recurse or apply other check to the element</p>
index e296535..2d2724c 100644 (file)
@@ -51,6 +51,8 @@ int   <a href="#xmlInputReadCallback">xmlInputReadCallback</a>                (void * context, <
 <pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a>       <a href="#xmlOutputBufferCreateFilename">xmlOutputBufferCreateFilename</a>      (const char * URI, <br />                                                        <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder, <br />                                                  int compression)</pre>
 <pre class="programlisting"><a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a>       <a href="#xmlOutputBufferCreateIO">xmlOutputBufferCreateIO</a>  (<a href="libxml-xmlIO.html#xmlOutputWriteCallback">xmlOutputWriteCallback</a> iowrite, <br />                                           <a href="libxml-xmlIO.html#xmlOutputCloseCallback">xmlOutputCloseCallback</a> ioclose, <br />                                           void * ioctx, <br />                                            <a href="libxml-encoding.html#xmlCharEncodingHandlerPtr">xmlCharEncodingHandlerPtr</a> encoder)</pre>
 <pre class="programlisting">int        <a href="#xmlOutputBufferFlush">xmlOutputBufferFlush</a>                (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
+<pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        <a href="#xmlOutputBufferGetContent">xmlOutputBufferGetContent</a>      (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
+<pre class="programlisting">size_t     <a href="#xmlOutputBufferGetSize">xmlOutputBufferGetSize</a>            (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)</pre>
 <pre class="programlisting">int        <a href="#xmlOutputBufferWrite">xmlOutputBufferWrite</a>                (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        int len, <br />                                         const char * buf)</pre>
 <pre class="programlisting">int        <a href="#xmlOutputBufferWriteEscape">xmlOutputBufferWriteEscape</a>    (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escaping)</pre>
 <pre class="programlisting">int        <a href="#xmlOutputBufferWriteString">xmlOutputBufferWriteString</a>    (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        const char * str)</pre>
@@ -153,7 +155,11 @@ int        xmlInputReadCallback            (void * context, <br />                                  char * buffer, <br />
 </pre><p>Create a buffered output for the progressive saving to an I/O handler</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>iowrite</tt></i>:</span></td><td>an I/O write function</td></tr><tr><td><span class="term"><i><tt>ioclose</tt></i>:</span></td><td>an I/O close function</td></tr><tr><td><span class="term"><i><tt>ioctx</tt></i>:</span></td><td>an I/O handler</td></tr><tr><td><span class="term"><i><tt>encoder</tt></i>:</span></td><td>the charset encoding if known</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the new parser output or NULL</td></tr></tbody></table></div><h3><a name="xmlOutputBufferFlush" id="xmlOutputBufferFlush"></a>Function: xmlOutputBufferFlush</h3><pre class="programlisting">int      xmlOutputBufferFlush            (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
 </pre><p>flushes the output I/O channel</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferWrite" id="xmlOutputBufferWrite"></a>Function: xmlOutputBufferWrite</h3><pre class="programlisting">int      xmlOutputBufferWrite            (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        int len, <br />                                         const char * buf)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered output</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of byte written or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferGetContent" id="xmlOutputBufferGetContent"></a>Function: xmlOutputBufferGetContent</h3><pre class="programlisting">const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *       xmlOutputBufferGetContent       (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
+</pre><p>Gives a pointer to the data currently held in the output buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a pointer to the data or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlOutputBufferGetSize" id="xmlOutputBufferGetSize"></a>Function: xmlOutputBufferGetSize</h3><pre class="programlisting">size_t   xmlOutputBufferGetSize          (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out)<br />
+</pre><p>Gives the length of the data currently held in the output buffer</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>an <a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case or error or no data is held, the size otherwise</td></tr></tbody></table></div><h3><a name="xmlOutputBufferWrite" id="xmlOutputBufferWrite"></a>Function: xmlOutputBufferWrite</h3><pre class="programlisting">int xmlOutputBufferWrite            (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        int len, <br />                                         const char * buf)<br />
 </pre><p>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>out</tt></i>:</span></td><td>a buffered parser output</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the size in bytes of the array.</td></tr><tr><td><span class="term"><i><tt>buf</tt></i>:</span></td><td>an char array</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of chars immediately written, or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlOutputBufferWriteEscape" id="xmlOutputBufferWriteEscape"></a>Function: xmlOutputBufferWriteEscape</h3><pre class="programlisting">int xmlOutputBufferWriteEscape      (<a href="libxml-tree.html#xmlOutputBufferPtr">xmlOutputBufferPtr</a> out, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                         <a href="libxml-encoding.html#xmlCharEncodingOutputFunc">xmlCharEncodingOutputFunc</a> escaping)<br />
 </pre><p>Write the content of the string in the output I/O buffer This routine escapes the caracters and then handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</p>
index c0ccb53..5c3a104 100644 (file)
@@ -48,7 +48,7 @@ void  <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a>            (void * userD
     char *     str2    : extra string information
     char *     str3    : extra string information
     int        int1    : extra number information
-    int        int2    : column number of the error or 0 if N/A
+    int        int2    : error column # or 0 if N/A (todo: renam
     void *     ctxt    : the parser context if available
     void *     node    : the node in the tree
 }</pre><h3>Enum <a name="xmlErrorDomain" id="xmlErrorDomain">xmlErrorDomain</a></h3><pre class="programlisting">Enum xmlErrorDomain {
@@ -81,6 +81,8 @@ void  <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a>            (void * userD
     <a name="XML_FROM_MODULE" id="XML_FROM_MODULE">XML_FROM_MODULE</a> = 26 : The dynamically loaded module modul
     <a name="XML_FROM_I18N" id="XML_FROM_I18N">XML_FROM_I18N</a> = 27 : The module handling character conversion
     <a name="XML_FROM_SCHEMATRONV" id="XML_FROM_SCHEMATRONV">XML_FROM_SCHEMATRONV</a> = 28 : The Schematron validator module
+    <a name="XML_FROM_BUFFER" id="XML_FROM_BUFFER">XML_FROM_BUFFER</a> = 29 : The buffers module
+    <a name="XML_FROM_URI" id="XML_FROM_URI">XML_FROM_URI</a> = 30 : The URI module
 }
 </pre><h3>Enum <a name="xmlErrorLevel" id="xmlErrorLevel">xmlErrorLevel</a></h3><pre class="programlisting">Enum xmlErrorLevel {
     <a name="XML_ERR_NONE" id="XML_ERR_NONE">XML_ERR_NONE</a> = 0
@@ -199,6 +201,8 @@ void        <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a>            (void * userD
     <a name="XML_WAR_ENTITY_REDEFINED" id="XML_WAR_ENTITY_REDEFINED">XML_WAR_ENTITY_REDEFINED</a> = 107 : 107
     <a name="XML_ERR_UNKNOWN_VERSION" id="XML_ERR_UNKNOWN_VERSION">XML_ERR_UNKNOWN_VERSION</a> = 108 : 108
     <a name="XML_ERR_VERSION_MISMATCH" id="XML_ERR_VERSION_MISMATCH">XML_ERR_VERSION_MISMATCH</a> = 109 : 109
+    <a name="XML_ERR_NAME_TOO_LONG" id="XML_ERR_NAME_TOO_LONG">XML_ERR_NAME_TOO_LONG</a> = 110 : 110
+    <a name="XML_ERR_USER_STOP" id="XML_ERR_USER_STOP">XML_ERR_USER_STOP</a> = 111 : 111
     <a name="XML_NS_ERR_XML_NAMESPACE" id="XML_NS_ERR_XML_NAMESPACE">XML_NS_ERR_XML_NAMESPACE</a> = 200
     <a name="XML_NS_ERR_UNDEFINED_NAMESPACE" id="XML_NS_ERR_UNDEFINED_NAMESPACE">XML_NS_ERR_UNDEFINED_NAMESPACE</a> = 201 : 201
     <a name="XML_NS_ERR_QNAME" id="XML_NS_ERR_QNAME">XML_NS_ERR_QNAME</a> = 202 : 202
@@ -820,8 +824,7 @@ void        <a href="#xmlStructuredErrorFunc">xmlStructuredErrorFunc</a>            (void * userD
     <a name="XML_I18N_EXCESS_HANDLER" id="XML_I18N_EXCESS_HANDLER">XML_I18N_EXCESS_HANDLER</a> = 6002 : 6002
     <a name="XML_I18N_CONV_FAILED" id="XML_I18N_CONV_FAILED">XML_I18N_CONV_FAILED</a> = 6003 : 6003
     <a name="XML_I18N_NO_OUTPUT" id="XML_I18N_NO_OUTPUT">XML_I18N_NO_OUTPUT</a> = 6004 : 6004
-    <a name="XML_CHECK_" id="XML_CHECK_">XML_CHECK_</a> = 6005 : 5033
-    <a name="XML_CHECK_X" id="XML_CHECK_X">XML_CHECK_X</a> = 6006 : 503
+    <a name="XML_BUF_OVERFLOW" id="XML_BUF_OVERFLOW">XML_BUF_OVERFLOW</a> = 7000
 }
 </pre><h3><a name="initGenericErrorDefaultFunc" id="initGenericErrorDefaultFunc"></a>Function: initGenericErrorDefaultFunc</h3><pre class="programlisting">void        initGenericErrorDefaultFunc     (<a href="libxml-xmlerror.html#xmlGenericErrorFunc">xmlGenericErrorFunc</a> * handler)<br />
 </pre><p>Set or reset (if NULL) the default handler for generic errors to the builtin error function.</p>
index c28c54b..1e25a92 100644 (file)
@@ -32,7 +32,7 @@ The content of this structure is not made public by the API.
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>module</tt></i>:</span></td><td>the module handle</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of argument error and -2 if the module could not be closed/unloaded.</td></tr></tbody></table></div><h3><a name="xmlModuleFree" id="xmlModuleFree"></a>Function: xmlModuleFree</h3><pre class="programlisting">int     xmlModuleFree                   (<a href="libxml-xmlmodule.html#xmlModulePtr">xmlModulePtr</a> module)<br />
 </pre><p>The free operations free the data associated to the module but does not unload the associated shared library which may still be in use.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>module</tt></i>:</span></td><td>the module handle</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, -1 in case of argument error</td></tr></tbody></table></div><h3><a name="xmlModuleOpen" id="xmlModuleOpen"></a>Function: xmlModuleOpen</h3><pre class="programlisting"><a href="libxml-xmlmodule.html#xmlModulePtr">xmlModulePtr</a>      xmlModuleOpen           (const char * name, <br />                                       int options)<br />
-</pre><p>Opens a module/shared library given its name or path TODO: options are not yet implemented.</p>
+</pre><p>Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * . TODO: options are not yet implemented.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the module name</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a set of <a href="libxml-xmlmodule.html#xmlModuleOption">xmlModuleOption</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>a handle for the module or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlModuleSymbol" id="xmlModuleSymbol"></a>Function: xmlModuleSymbol</h3><pre class="programlisting">int       xmlModuleSymbol                 (<a href="libxml-xmlmodule.html#xmlModulePtr">xmlModulePtr</a> module, <br />                                    const char * name, <br />                                       void ** symbol)<br />
-</pre><p>Lookup for a symbol address in the given module</p>
+</pre><p>Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * .</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>module</tt></i>:</span></td><td>the module</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the name of the symbol</td></tr><tr><td><span class="term"><i><tt>symbol</tt></i>:</span></td><td>the resulting symbol address</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the symbol was found, or -1 in case of error</td></tr></tbody></table></div><p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index f69cdab..8dda699 100644 (file)
@@ -91,15 +91,15 @@ The content of this structure is not made public by the API.
 </pre><p>Free an expression context</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an expression context</td></tr></tbody></table></div><h3><a name="xmlExpGetLanguage" id="xmlExpGetLanguage"></a>Function: xmlExpGetLanguage</h3><pre class="programlisting">int xmlExpGetLanguage               (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />                                    <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** langList, <br />                                   int len)<br />
 </pre><p>Find all the strings used in @exp and store them in @list</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>langList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated lenght of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div><h3><a name="xmlExpGetStart" id="xmlExpGetStart"></a>Function: xmlExpGetStart</h3><pre class="programlisting">int      xmlExpGetStart                  (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />                                    <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** tokList, <br />                                    int len)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>langList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated length of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div><h3><a name="xmlExpGetStart" id="xmlExpGetStart"></a>Function: xmlExpGetStart</h3><pre class="programlisting">int      xmlExpGetStart                  (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />                                    <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp, <br />                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** tokList, <br />                                    int len)<br />
 </pre><p>Find all the strings that appears at the start of the languages accepted by @exp and store them in @list. E.g. for (a, b) | c it will return the list [a, c]</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>tokList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated lenght of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div><h3><a name="xmlExpIsNillable" id="xmlExpIsNillable"></a>Function: xmlExpIsNillable</h3><pre class="programlisting">int xmlExpIsNillable                (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>tokList</tt></i>:</span></td><td>where to store the tokens</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the allocated length of @list</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of unique strings found, -1 in case of errors and -2 if there is more than @len strings</td></tr></tbody></table></div><h3><a name="xmlExpIsNillable" id="xmlExpIsNillable"></a>Function: xmlExpIsNillable</h3><pre class="programlisting">int xmlExpIsNillable                (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> exp)<br />
 </pre><p>Finds if the expression is nillable, i.e. if it accepts the empty sequqnce</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>exp</tt></i>:</span></td><td>the expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if nillable, 0 if not and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpMaxToken" id="xmlExpMaxToken"></a>Function: xmlExpMaxToken</h3><pre class="programlisting">int      xmlExpMaxToken                  (<a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> expr)<br />
 </pre><p>Indicate the maximum number of input a expression can accept</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>expr</tt></i>:</span></td><td>a compiled expression</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the maximum length or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewAtom" id="xmlExpNewAtom"></a>Function: xmlExpNewAtom</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>   xmlExpNewAtom           (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        int len)<br />
 </pre><p>Get the atom associated to this name from that context</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the atom name</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the atom name lenght in byte (or -1);</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewCtxt" id="xmlExpNewCtxt"></a>Function: xmlExpNewCtxt</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a>     xmlExpNewCtxt           (int maxNodes, <br />                                    <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the expression context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>the atom name</td></tr><tr><td><span class="term"><i><tt>len</tt></i>:</span></td><td>the atom name length in byte (or -1);</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the node or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewCtxt" id="xmlExpNewCtxt"></a>Function: xmlExpNewCtxt</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a>     xmlExpNewCtxt           (int maxNodes, <br />                                    <a href="libxml-dict.html#xmlDictPtr">xmlDictPtr</a> dict)<br />
 </pre><p>Creates a new context for manipulating expressions</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>maxNodes</tt></i>:</span></td><td>the maximum number of nodes</td></tr><tr><td><span class="term"><i><tt>dict</tt></i>:</span></td><td>optional dictionnary to use internally</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the context or NULL in case of error</td></tr></tbody></table></div><h3><a name="xmlExpNewOr" id="xmlExpNewOr"></a>Function: xmlExpNewOr</h3><pre class="programlisting"><a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a>    xmlExpNewOr             (<a href="libxml-xmlregexp.html#xmlExpCtxtPtr">xmlExpCtxtPtr</a> ctxt, <br />                                    <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> left, <br />                                    <a href="libxml-xmlregexp.html#xmlExpNodePtr">xmlExpNodePtr</a> right)<br />
 </pre><p>Get the atom associated to the choice @left | @right Note that @left and @right are consumed in the operation, to keep an handle on them use xmlExpRef() and use xmlExpFree() to release them, this is true even in case of failure (unless ctxt == NULL).</p>
index 18402a0..8cb42a1 100644 (file)
@@ -47,10 +47,15 @@ The content of this structure is not made public by the API.
 <pre class="programlisting">int        <a href="#xmlSchemaValidateDoc">xmlSchemaValidateDoc</a>                (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
 <pre class="programlisting">int        <a href="#xmlSchemaValidateFile">xmlSchemaValidateFile</a>              (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   const char * filename, <br />                                   int options)</pre>
 <pre class="programlisting">int        <a href="#xmlSchemaValidateOneElement">xmlSchemaValidateOneElement</a>  (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)</pre>
+<pre class="programlisting">void       <a href="#xmlSchemaValidateSetFilename">xmlSchemaValidateSetFilename</a>        (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br />                                  const char * filename)</pre>
+<pre class="programlisting">void       <a href="#xmlSchemaValidateSetLocator">xmlSchemaValidateSetLocator</a>  (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br />                                  <a href="libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a> f, <br />                                        void * ctxt)</pre>
 <pre class="programlisting">int        <a href="#xmlSchemaValidateStream">xmlSchemaValidateStream</a>          (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br />                                    <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br />                                  <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br />                                    void * user_data)</pre>
 <pre class="programlisting">Function type: <a href="#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a>
 void   <a href="#xmlSchemaValidityErrorFunc">xmlSchemaValidityErrorFunc</a>    (void * ctx, <br />                                      const char * msg, <br />                                        ... ...)
 </pre>
+<pre class="programlisting">Function type: <a href="#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a>
+int    <a href="#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a>        (void * ctx, <br />                                      const char ** file, <br />                                      unsigned long * line)
+</pre>
 <pre class="programlisting">Function type: <a href="#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a>
 void   <a href="#xmlSchemaValidityWarningFunc">xmlSchemaValidityWarningFunc</a>        (void * ctx, <br />                                      const char * msg, <br />                                        ... ...)
 </pre>
@@ -162,11 +167,18 @@ The content of this structure is not made public by the API.
 </pre><p>Do a schemas validation of the given resource, it will use the SAX streamable validation internally.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the URI of the instance</td></tr><tr><td><span class="term"><i><tt>options</tt></i>:</span></td><td>a future set of options, currently unused</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the document is valid, a positive error code number otherwise and -1 in case of an internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateOneElement" id="xmlSchemaValidateOneElement"></a>Function: xmlSchemaValidateOneElement</h3><pre class="programlisting">int       xmlSchemaValidateOneElement     (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> elem)<br />
 </pre><p>Validate a branch of a tree, starting with the given @elem.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the element and its subtree is valid, a positive error code number otherwise and -1 in case of an internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateStream" id="xmlSchemaValidateStream"></a>Function: xmlSchemaValidateStream</h3><pre class="programlisting">int      xmlSchemaValidateStream         (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br />                                    <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br />                                  <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br />                                    void * user_data)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>elem</tt></i>:</span></td><td>an element node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the element and its subtree is valid, a positive error code number otherwise and -1 in case of an internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateSetFilename" id="xmlSchemaValidateSetFilename"></a>Function: xmlSchemaValidateSetFilename</h3><pre class="programlisting">void      xmlSchemaValidateSetFilename    (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br />                                  const char * filename)<br />
+</pre><p>Workaround to provide file error reporting information when this is not provided by current APIs</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vctxt</tt></i>:</span></td><td>the schema validation context</td></tr><tr><td><span class="term"><i><tt>filename</tt></i>:</span></td><td>the file name</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateSetLocator" id="xmlSchemaValidateSetLocator"></a>Function: xmlSchemaValidateSetLocator</h3><pre class="programlisting">void      xmlSchemaValidateSetLocator     (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> vctxt, <br />                                  <a href="libxml-xmlschemas.html#xmlSchemaValidityLocatorFunc">xmlSchemaValidityLocatorFunc</a> f, <br />                                        void * ctxt)<br />
+</pre><p>Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>vctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>f</tt></i>:</span></td><td>the locator function pointer</td></tr><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>the locator context</td></tr></tbody></table></div><h3><a name="xmlSchemaValidateStream" id="xmlSchemaValidateStream"></a>Function: xmlSchemaValidateStream</h3><pre class="programlisting">int        xmlSchemaValidateStream         (<a href="libxml-xmlschemas.html#xmlSchemaValidCtxtPtr">xmlSchemaValidCtxtPtr</a> ctxt, <br />                                   <a href="libxml-tree.html#xmlParserInputBufferPtr">xmlParserInputBufferPtr</a> input, <br />                                    <a href="libxml-encoding.html#xmlCharEncoding">xmlCharEncoding</a> enc, <br />                                  <a href="libxml-tree.html#xmlSAXHandlerPtr">xmlSAXHandlerPtr</a> sax, <br />                                    void * user_data)<br />
 </pre><p>Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>a schema validation context</td></tr><tr><td><span class="term"><i><tt>input</tt></i>:</span></td><td>the input to use for reading the data</td></tr><tr><td><span class="term"><i><tt>enc</tt></i>:</span></td><td>an optional encoding information</td></tr><tr><td><span class="term"><i><tt>sax</tt></i>:</span></td><td>a SAX handler for the resulting events</td></tr><tr><td><span class="term"><i><tt>user_data</tt></i>:</span></td><td>the context to provide to the SAX handler.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the document is schemas valid, a positive error code number otherwise and -1 in case of internal or API error.</td></tr></tbody></table></div><h3><a name="xmlSchemaValidityErrorFunc" id="xmlSchemaValidityErrorFunc"></a>Function type: xmlSchemaValidityErrorFunc</h3><pre class="programlisting">Function type: xmlSchemaValidityErrorFunc
 void   xmlSchemaValidityErrorFunc      (void * ctx, <br />                                      const char * msg, <br />                                        ... ...)
 </pre><p>Signature of an error callback from an XSD validation</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra arguments</td></tr></tbody></table></div><br />
+<h3><a name="xmlSchemaValidityLocatorFunc" id="xmlSchemaValidityLocatorFunc"></a>Function type: xmlSchemaValidityLocatorFunc</h3><pre class="programlisting">Function type: xmlSchemaValidityLocatorFunc
+int    xmlSchemaValidityLocatorFunc    (void * ctx, <br />                                      const char ** file, <br />                                      unsigned long * line)
+</pre><p>A schemas validation locator, a callback called by the validator. This is used when file or node informations are not available to find out what file and line number are affected</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>user provided context</td></tr><tr><td><span class="term"><i><tt>file</tt></i>:</span></td><td>returned file information</td></tr><tr><td><span class="term"><i><tt>line</tt></i>:</span></td><td>returned line information</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><br />
 <h3><a name="xmlSchemaValidityWarningFunc" id="xmlSchemaValidityWarningFunc"></a>Function type: xmlSchemaValidityWarningFunc</h3><pre class="programlisting">Function type: xmlSchemaValidityWarningFunc
 void   xmlSchemaValidityWarningFunc    (void * ctx, <br />                                      const char * msg, <br />                                        ... ...)
 </pre><p>Signature of a warning callback from an XSD validation</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the validation context</td></tr><tr><td><span class="term"><i><tt>msg</tt></i>:</span></td><td>the message</td></tr><tr><td><span class="term"><i><tt>...</tt></i>:</span></td><td>extra arguments</td></tr></tbody></table></div><br />
index 1d08141..6925cfa 100644 (file)
@@ -73,9 +73,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the built-in simple type.</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the item type of @type as defined by the built-in datatype hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error.</td></tr></tbody></table></div><h3><a name="xmlSchemaGetBuiltInType" id="xmlSchemaGetBuiltInType"></a>Function: xmlSchemaGetBuiltInType</h3><pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a>   xmlSchemaGetBuiltInType (<a href="libxml-schemasInternals.html#xmlSchemaValType">xmlSchemaValType</a> type)<br />
 </pre><p>Gives you the type struct for a built-in type by its type id.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>type</tt></i>:</span></td><td>the type of the built in type</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the type if found, NULL otherwise.</td></tr></tbody></table></div><h3><a name="xmlSchemaGetCanonValue" id="xmlSchemaGetCanonValue"></a>Function: xmlSchemaGetCanonValue</h3><pre class="programlisting">int   xmlSchemaGetCanonValue          (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** retValue)<br />
-</pre><p>Get a the cononical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</p>
+</pre><p>Get the canonical lexical representation of the value. The caller has to FREE the returned retValue. WARNING: Some value types are not supported yet, resulting in a @retValue of "???". TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the precomputed value</td></tr><tr><td><span class="term"><i><tt>retValue</tt></i>:</span></td><td>the returned value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.</td></tr></tbody></table></div><h3><a name="xmlSchemaGetCanonValueWhtsp" id="xmlSchemaGetCanonValueWhtsp"></a>Function: xmlSchemaGetCanonValueWhtsp</h3><pre class="programlisting">int  xmlSchemaGetCanonValueWhtsp     (<a href="libxml-schemasInternals.html#xmlSchemaValPtr">xmlSchemaValPtr</a> val, <br />                                  const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> ** retValue, <br />                                   <a href="libxml-xmlschemastypes.html#xmlSchemaWhitespaceValueType">xmlSchemaWhitespaceValueType</a> ws)<br />
-</pre><p>Get a the cononical representation of the value. The caller has to free the returned @retValue.</p>
+</pre><p>Get the canonical representation of the value. The caller has to free the returned @retValue.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the precomputed value</td></tr><tr><td><span class="term"><i><tt>retValue</tt></i>:</span></td><td>the returned value</td></tr><tr><td><span class="term"><i><tt>ws</tt></i>:</span></td><td>the whitespace type of the value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.</td></tr></tbody></table></div><h3><a name="xmlSchemaGetFacetValueAsULong" id="xmlSchemaGetFacetValueAsULong"></a>Function: xmlSchemaGetFacetValueAsULong</h3><pre class="programlisting">unsigned long  xmlSchemaGetFacetValueAsULong   (<a href="libxml-schemasInternals.html#xmlSchemaFacetPtr">xmlSchemaFacetPtr</a> facet)<br />
 </pre><p>Extract the value of a facet</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>facet</tt></i>:</span></td><td>an schemas type facet</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the value as a long</td></tr></tbody></table></div><h3><a name="xmlSchemaGetPredefinedType" id="xmlSchemaGetPredefinedType"></a>Function: xmlSchemaGetPredefinedType</h3><pre class="programlisting"><a href="libxml-schemasInternals.html#xmlSchemaTypePtr">xmlSchemaTypePtr</a>    xmlSchemaGetPredefinedType      (const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns)<br />
index 2da967c..30e9f0e 100644 (file)
@@ -10,7 +10,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 </style><style type="text/css">
       div.deprecated pre.programlisting {border-style: double;border-color:red}
       pre.programlisting {border-style: double;background: #EECFA1}
-    </style><title>Module xmlversion from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlversion from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-xmlunicode.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlunicode.html">xmlunicode</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-xmlwriter.html">xmlwriter</a></th><td><a accesskey="n" href="libxml-xmlwriter.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>compile-time version informations for the XML library </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a></pre><pre class="programlisting">#define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a></pre><pre class="programlisting">#define <a href="#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a></pre><pre class="programlisting">#define <a href="#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a></pre><pre class="programlisting">#define <a href="#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DEBUG_RUNTIME">LIBXML_DEBUG_RUNTIME</a></pre><pre class="programlisting">#define <a href="#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DOTTED_VERSION">LIBXML_DOTTED_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_FTP_ENABLED">LIBXML_FTP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_HTML_ENABLED">LIBXML_HTML_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_HTTP_ENABLED">LIBXML_HTTP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ICONV_ENABLED">LIBXML_ICONV_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ICU_ENABLED">LIBXML_ICU_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_LZMA_ENABLED">LIBXML_LZMA_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_MODULES_ENABLED">LIBXML_MODULES_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SCHEMAS_ENABLED">LIBXML_SCHEMAS_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SCHEMATRON_ENABLED">LIBXML_SCHEMATRON_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION">LIBXML_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION_EXTRA">LIBXML_VERSION_EXTRA</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION_STRING">LIBXML_VERSION_STRING</a></pre><pre class="programlisting">#define <a href="#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ZLIB_ENABLED">LIBXML_ZLIB_ENABLED</a></pre><pre class="programlisting">#define <a href="#WITHOUT_TRIO">WITHOUT_TRIO</a></pre><pre class="programlisting">#define <a href="#WITH_TRIO">WITH_TRIO</a></pre><pre class="programlisting">void      <a href="#xmlCheckVersion">xmlCheckVersion</a>                  (int version)</pre>
+    </style><title>Module xmlversion from libxml2</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="../epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="../gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="../w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="../redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="../Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1></h1><h2>Module xmlversion from libxml2</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="../search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a style="font-weight:bold" href="../index.html">Main Menu</a></li><li><a style="font-weight:bold" href="../docs.html">Developer Menu</a></li><li><a style="font-weight:bold" href="../examples/index.html">Code Examples</a></li><li><a style="font-weight:bold" href="index.html">API Menu</a></li><li><a href="libxml-parser.html">Parser API</a></li><li><a href="libxml-tree.html">Tree API</a></li><li><a href="libxml-xmlreader.html">Reader API</a></li><li><a href="../guidelines.html">XML Guidelines</a></li><li><a href="../ChangeLog.html">ChangeLog</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="../APIchunk0.html">Alphabetic</a></li><li><a href="../APIconstructors.html">Constructors</a></li><li><a href="../APIfunctions.html">Functions/Types</a></li><li><a href="../APIfiles.html">Modules</a></li><li><a href="../APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><table class="navigation" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"><td><a accesskey="p" href="libxml-xmlunicode.html"><img src="left.png" width="24" height="24" border="0" alt="Prev" /></a></td><th align="left"><a href="libxml-xmlunicode.html">xmlunicode</a></th><td><a accesskey="u" href="index.html"><img src="up.png" width="24" height="24" border="0" alt="Up" /></a></td><th align="left"><a href="index.html">API documentation</a></th><td><a accesskey="h" href="../index.html"><img src="home.png" width="24" height="24" border="0" alt="Home" /></a></td><th align="center"><a href="../index.html">The XML C parser and toolkit of Gnome</a></th><th align="right"><a href="libxml-xmlwriter.html">xmlwriter</a></th><td><a accesskey="n" href="libxml-xmlwriter.html"><img src="right.png" width="24" height="24" border="0" alt="Next" /></a></td></tr></table><p>compile-time version informations for the XML library </p><h2>Table of Contents</h2><pre class="programlisting">#define <a href="#ATTRIBUTE_UNUSED">ATTRIBUTE_UNUSED</a></pre><pre class="programlisting">#define <a href="#DEBUG_MEMORY_LOCATION">DEBUG_MEMORY_LOCATION</a></pre><pre class="programlisting">#define <a href="#LIBXML_ATTR_ALLOC_SIZE">LIBXML_ATTR_ALLOC_SIZE</a></pre><pre class="programlisting">#define <a href="#LIBXML_ATTR_FORMAT">LIBXML_ATTR_FORMAT</a></pre><pre class="programlisting">#define <a href="#LIBXML_AUTOMATA_ENABLED">LIBXML_AUTOMATA_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_C14N_ENABLED">LIBXML_C14N_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_CATALOG_ENABLED">LIBXML_CATALOG_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DEBUG_ENABLED">LIBXML_DEBUG_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DEBUG_RUNTIME">LIBXML_DEBUG_RUNTIME</a></pre><pre class="programlisting">#define <a href="#LIBXML_DOCB_ENABLED">LIBXML_DOCB_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_DOTTED_VERSION">LIBXML_DOTTED_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_EXPR_ENABLED">LIBXML_EXPR_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_FTP_ENABLED">LIBXML_FTP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_HTML_ENABLED">LIBXML_HTML_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_HTTP_ENABLED">LIBXML_HTTP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ICONV_ENABLED">LIBXML_ICONV_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ICU_ENABLED">LIBXML_ICU_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ISO8859X_ENABLED">LIBXML_ISO8859X_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_LEGACY_ENABLED">LIBXML_LEGACY_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_LZMA_ENABLED">LIBXML_LZMA_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_MODULES_ENABLED">LIBXML_MODULES_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_MODULE_EXTENSION">LIBXML_MODULE_EXTENSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_OUTPUT_ENABLED">LIBXML_OUTPUT_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_PATTERN_ENABLED">LIBXML_PATTERN_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_PUSH_ENABLED">LIBXML_PUSH_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_READER_ENABLED">LIBXML_READER_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_REGEXP_ENABLED">LIBXML_REGEXP_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SAX1_ENABLED">LIBXML_SAX1_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SCHEMAS_ENABLED">LIBXML_SCHEMAS_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_SCHEMATRON_ENABLED">LIBXML_SCHEMATRON_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_TEST_VERSION">LIBXML_TEST_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_THREAD_ALLOC_ENABLED">LIBXML_THREAD_ALLOC_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_THREAD_ENABLED">LIBXML_THREAD_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_TREE_ENABLED">LIBXML_TREE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_UNICODE_ENABLED">LIBXML_UNICODE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_VALID_ENABLED">LIBXML_VALID_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION">LIBXML_VERSION</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION_EXTRA">LIBXML_VERSION_EXTRA</a></pre><pre class="programlisting">#define <a href="#LIBXML_VERSION_STRING">LIBXML_VERSION_STRING</a></pre><pre class="programlisting">#define <a href="#LIBXML_WRITER_ENABLED">LIBXML_WRITER_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XINCLUDE_ENABLED">LIBXML_XINCLUDE_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XPATH_ENABLED">LIBXML_XPATH_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_XPTR_ENABLED">LIBXML_XPTR_ENABLED</a></pre><pre class="programlisting">#define <a href="#LIBXML_ZLIB_ENABLED">LIBXML_ZLIB_ENABLED</a></pre><pre class="programlisting">#define <a href="#WITHOUT_TRIO">WITHOUT_TRIO</a></pre><pre class="programlisting">#define <a href="#WITH_TRIO">WITH_TRIO</a></pre><pre class="programlisting">void      <a href="#xmlCheckVersion">xmlCheckVersion</a>                  (int version)</pre>
 <h2>Description</h2>
 <h3><a name="ATTRIBUTE_UNUSED" id="ATTRIBUTE_UNUSED"></a>Macro: ATTRIBUTE_UNUSED</h3><pre>#define ATTRIBUTE_UNUSED</pre><p>Macro used to signal to GCC unused function parameters</p>
 <h3><a name="DEBUG_MEMORY_LOCATION" id="DEBUG_MEMORY_LOCATION"></a>Macro: DEBUG_MEMORY_LOCATION</h3><pre>#define DEBUG_MEMORY_LOCATION</pre><p>Whether the memory debugging is configured in</p>
@@ -43,6 +43,7 @@ A:link, A:visited, A:active { text-decoration: underline }
 <h3><a name="LIBXML_SCHEMAS_ENABLED" id="LIBXML_SCHEMAS_ENABLED"></a>Macro: LIBXML_SCHEMAS_ENABLED</h3><pre>#define LIBXML_SCHEMAS_ENABLED</pre><p>Whether the Schemas validation interfaces are compiled in</p>
 <h3><a name="LIBXML_SCHEMATRON_ENABLED" id="LIBXML_SCHEMATRON_ENABLED"></a>Macro: LIBXML_SCHEMATRON_ENABLED</h3><pre>#define LIBXML_SCHEMATRON_ENABLED</pre><p>Whether the Schematron validation interfaces are compiled in</p>
 <h3><a name="LIBXML_TEST_VERSION" id="LIBXML_TEST_VERSION"></a>Macro: LIBXML_TEST_VERSION</h3><pre>#define LIBXML_TEST_VERSION</pre><p>Macro to check that the libxml version in use is compatible with the version the software has been compiled against</p>
+<h3><a name="LIBXML_THREAD_ALLOC_ENABLED" id="LIBXML_THREAD_ALLOC_ENABLED"></a>Macro: LIBXML_THREAD_ALLOC_ENABLED</h3><pre>#define LIBXML_THREAD_ALLOC_ENABLED</pre><p>Whether the allocation hooks are per-thread</p>
 <h3><a name="LIBXML_THREAD_ENABLED" id="LIBXML_THREAD_ENABLED"></a>Macro: LIBXML_THREAD_ENABLED</h3><pre>#define LIBXML_THREAD_ENABLED</pre><p>Whether the thread support is configured in</p>
 <h3><a name="LIBXML_TREE_ENABLED" id="LIBXML_TREE_ENABLED"></a>Macro: LIBXML_TREE_ENABLED</h3><pre>#define LIBXML_TREE_ENABLED</pre><p>Whether the DOM like tree manipulation API support is configured in</p>
 <h3><a name="LIBXML_UNICODE_ENABLED" id="LIBXML_UNICODE_ENABLED"></a>Macro: LIBXML_UNICODE_ENABLED</h3><pre>#define LIBXML_UNICODE_ENABLED</pre><p>Whether the Unicode related interfaces are compiled in</p>
index 3fef445..e09ff59 100644 (file)
@@ -34,6 +34,7 @@ The content of this structure is not made public by the API.
 <pre class="programlisting">int        <a href="#xmlTextWriterFullEndElement">xmlTextWriterFullEndElement</a>  (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
 <pre class="programlisting">int        <a href="#xmlTextWriterSetIndent">xmlTextWriterSetIndent</a>            (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    int indent)</pre>
 <pre class="programlisting">int        <a href="#xmlTextWriterSetIndentString">xmlTextWriterSetIndentString</a>        (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)</pre>
+<pre class="programlisting">int        <a href="#xmlTextWriterSetQuoteChar">xmlTextWriterSetQuoteChar</a>      (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> quotechar)</pre>
 <pre class="programlisting">int        <a href="#xmlTextWriterStartAttribute">xmlTextWriterStartAttribute</a>  (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)</pre>
 <pre class="programlisting">int        <a href="#xmlTextWriterStartAttributeNS">xmlTextWriterStartAttributeNS</a>      (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br />                                      const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)</pre>
 <pre class="programlisting">int        <a href="#xmlTextWriterStartCDATA">xmlTextWriterStartCDATA</a>          (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer)</pre>
@@ -139,7 +140,9 @@ The content of this structure is not made public by the API.
 </pre><p>Set indentation output. indent = 0 do not indentation. indent &gt; 0 do indentation.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>indent</tt></i>:</span></td><td>do indentation?</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterSetIndentString" id="xmlTextWriterSetIndentString"></a>Function: xmlTextWriterSetIndentString</h3><pre class="programlisting">int       xmlTextWriterSetIndentString    (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str)<br />
 </pre><p>Set string indentation.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartAttribute" id="xmlTextWriterStartAttribute"></a>Function: xmlTextWriterStartAttribute</h3><pre class="programlisting">int      xmlTextWriterStartAttribute     (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> string</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterSetQuoteChar" id="xmlTextWriterSetQuoteChar"></a>Function: xmlTextWriterSetQuoteChar</h3><pre class="programlisting">int    xmlTextWriterSetQuoteChar       (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> quotechar)<br />
+</pre><p>Set the character used for quoting attributes.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>quotechar</tt></i>:</span></td><td>the quote character</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 on error or 0 otherwise.</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartAttribute" id="xmlTextWriterStartAttribute"></a>Function: xmlTextWriterStartAttribute</h3><pre class="programlisting">int   xmlTextWriterStartAttribute     (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name)<br />
 </pre><p>Start an xml attribute.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>writer</tt></i>:</span></td><td>the <a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a></td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>element name</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the bytes written (may be 0 because of buffering) or -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlTextWriterStartAttributeNS" id="xmlTextWriterStartAttributeNS"></a>Function: xmlTextWriterStartAttributeNS</h3><pre class="programlisting">int    xmlTextWriterStartAttributeNS   (<a href="libxml-xmlwriter.html#xmlTextWriterPtr">xmlTextWriterPtr</a> writer, <br />                                    const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * prefix, <br />                                      const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * namespaceURI)<br />
 </pre><p>Start an xml <a href="libxml-SAX.html#attribute">attribute</a> with namespace support.</p>
index 1731b2a..e47e600 100644 (file)
@@ -81,9 +81,11 @@ void <a href="#xmlXPathFunction">xmlXPathFunction</a>                (<a href="libxml-xpath.ht
 <pre class="programlisting">int        <a href="#xmlXPathIsInf">xmlXPathIsInf</a>                      (double val)</pre>
 <pre class="programlisting">int        <a href="#xmlXPathIsNaN">xmlXPathIsNaN</a>                      (double val)</pre>
 <pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a>      <a href="#xmlXPathNewContext">xmlXPathNewContext</a>    (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>        <a href="#xmlXPathNodeEval">xmlXPathNodeEval</a>        (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                               const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                                 <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)</pre>
 <pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>        <a href="#xmlXPathNodeSetCreate">xmlXPathNodeSetCreate</a>      (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
 <pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>        <a href="#xmlXPathObjectCopy">xmlXPathObjectCopy</a>    (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)</pre>
 <pre class="programlisting">long       <a href="#xmlXPathOrderDocElems">xmlXPathOrderDocElems</a>              (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)</pre>
+<pre class="programlisting">int        <a href="#xmlXPathSetContextNode">xmlXPathSetContextNode</a>            (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)</pre>
 <pre class="programlisting">Function type: <a href="#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a>
 <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>    <a href="#xmlXPathVariableLookupFunc">xmlXPathVariableLookupFunc</a>    (void * ctxt, <br />                                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)
 </pre>
@@ -167,6 +169,7 @@ The content of this structure is not made public by the API.
     <a name="XPATH_INVALID_CHAR_ERROR" id="XPATH_INVALID_CHAR_ERROR">XPATH_INVALID_CHAR_ERROR</a> = 21
     <a name="XPATH_INVALID_CTXT" id="XPATH_INVALID_CTXT">XPATH_INVALID_CTXT</a> = 22
     <a name="XPATH_STACK_ERROR" id="XPATH_STACK_ERROR">XPATH_STACK_ERROR</a> = 23
+    <a name="XPATH_FORBID_VARIABLE_ERROR" id="XPATH_FORBID_VARIABLE_ERROR">XPATH_FORBID_VARIABLE_ERROR</a> = 24
 }
 </pre><h3><a name="xmlXPathFunct" id="xmlXPathFunct">Structure xmlXPathFunct</a></h3><pre class="programlisting">Structure xmlXPathFunct<br />struct _xmlXPathFunct {
     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> *        name    : the function name
@@ -297,13 +300,17 @@ void      xmlXPathFunction                (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xml
 </pre><p>Provides a portable isnan() function to detect whether a double is a NotaNumber. Based on trio code http://sourceforge.net/projects/ctrio/</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a double value</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>1 if the value is a NaN, 0 otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathNewContext" id="xmlXPathNewContext"></a>Function: xmlXPathNewContext</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a>   xmlXPathNewContext      (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
 </pre><p>Create a new <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a></p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated. The caller will need to free it.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetCreate" id="xmlXPathNodeSetCreate"></a>Function: xmlXPathNodeSetCreate</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>  xmlXPathNodeSetCreate   (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>the XML document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathContext">xmlXPathContext</a> just allocated. The caller will need to free it.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeEval" id="xmlXPathNodeEval"></a>Function: xmlXPathNodeEval</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> xmlXPathNodeEval        (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                               const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * str, <br />                                                 <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
+</pre><p>Evaluate the XPath Location Path in the given context. The node 'node' is set as the context node. The context node is not restored.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to to use as the context node</td></tr><tr><td><span class="term"><i><tt>str</tt></i>:</span></td><td>the XPath expression</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> resulting from the evaluation or NULL. the caller has to free the object.</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetCreate" id="xmlXPathNodeSetCreate"></a>Function: xmlXPathNodeSetCreate</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>       xmlXPathNodeSetCreate   (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
 </pre><p>Create a new <a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> of type double and of value @val</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>an initial xmlNodePtr, or NULL</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathObjectCopy" id="xmlXPathObjectCopy"></a>Function: xmlXPathObjectCopy</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>        xmlXPathObjectCopy      (<a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a> val)<br />
 </pre><p>allocate a new copy of a given object</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the original object</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the newly created object.</td></tr></tbody></table></div><h3><a name="xmlXPathOrderDocElems" id="xmlXPathOrderDocElems"></a>Function: xmlXPathOrderDocElems</h3><pre class="programlisting">long xmlXPathOrderDocElems           (<a href="libxml-tree.html#xmlDocPtr">xmlDocPtr</a> doc)<br />
 </pre><p>Call this routine to speed up XPath computation on static documents. This stamps all the element nodes with the document order Like for line information, the order is kept in the element-&gt;content field, the value stored is actually - the node number (starting at -1) to be able to differentiate from line numbers.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an input document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements found in the document or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlXPathVariableLookupFunc" id="xmlXPathVariableLookupFunc"></a>Function type: xmlXPathVariableLookupFunc</h3><pre class="programlisting">Function type: xmlXPathVariableLookupFunc
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>doc</tt></i>:</span></td><td>an input document</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the number of elements found in the document or -1 in case of error.</td></tr></tbody></table></div><h3><a name="xmlXPathSetContextNode" id="xmlXPathSetContextNode"></a>Function: xmlXPathSetContextNode</h3><pre class="programlisting">int      xmlXPathSetContextNode          (<a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-xpath.html#xmlXPathContextPtr">xmlXPathContextPtr</a> ctx)<br />
+</pre><p>Sets 'node' as the context node. The node must be in the same document as that associated with the context.</p>
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the node to to use as the context node</td></tr><tr><td><span class="term"><i><tt>ctx</tt></i>:</span></td><td>the XPath context</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>-1 in case of error or 0 if successful</td></tr></tbody></table></div><h3><a name="xmlXPathVariableLookupFunc" id="xmlXPathVariableLookupFunc"></a>Function type: xmlXPathVariableLookupFunc</h3><pre class="programlisting">Function type: xmlXPathVariableLookupFunc
 <a href="libxml-xpath.html#xmlXPathObjectPtr">xmlXPathObjectPtr</a>    xmlXPathVariableLookupFunc      (void * ctxt, <br />                                                     const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * name, <br />                                                        const <a href="libxml-xmlstring.html#xmlChar">xmlChar</a> * ns_uri)
 </pre><p>Prototype for callbacks used to plug variable lookup in the XPath engine.</p><div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>ctxt</tt></i>:</span></td><td>an XPath context</td></tr><tr><td><span class="term"><i><tt>name</tt></i>:</span></td><td>name of the variable</td></tr><tr><td><span class="term"><i><tt>ns_uri</tt></i>:</span></td><td>the namespace name hosting this variable</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the XPath object value or NULL if not found.</td></tr></tbody></table></div><br />
 <p><a href="../bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 4a6bb2e..f12d808 100644 (file)
@@ -69,9 +69,9 @@ A:link, A:visited, A:active { text-decoration: underline }
 <pre class="programlisting"><a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a>       <a href="#xmlXPathNextSelf">xmlXPathNextSelf</a>        (<a href="libxml-xpath.html#xmlXPathParserContextPtr">xmlXPathParserContextPtr</a> ctxt, <br />                                  <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> cur)</pre>
 <pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>        <a href="#xmlXPathNodeLeading">xmlXPathNodeLeading</a>  (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br />                                       <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
 <pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>        <a href="#xmlXPathNodeLeadingSorted">xmlXPathNodeLeadingSorted</a>      (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br />                                               <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)</pre>
-<pre class="programlisting">void       <a href="#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a>            (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
-<pre class="programlisting">void       <a href="#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a>                (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
-<pre class="programlisting">void       <a href="#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a>        (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">int        <a href="#xmlXPathNodeSetAdd">xmlXPathNodeSetAdd</a>            (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
+<pre class="programlisting">int        <a href="#xmlXPathNodeSetAddNs">xmlXPathNodeSetAddNs</a>                (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
+<pre class="programlisting">int        <a href="#xmlXPathNodeSetAddUnique">xmlXPathNodeSetAddUnique</a>        (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
 <pre class="programlisting">int        <a href="#xmlXPathNodeSetContains">xmlXPathNodeSetContains</a>          (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
 <pre class="programlisting">void       <a href="#xmlXPathNodeSetDel">xmlXPathNodeSetDel</a>            (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)</pre>
 <pre class="programlisting">void       <a href="#xmlXPathNodeSetFreeNs">xmlXPathNodeSetFreeNs</a>              (<a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)</pre>
@@ -275,13 +275,13 @@ A:link, A:visited, A:active { text-decoration: underline }
 </pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes is sorted by document order, then #exslSetsNodeLeadingSorted is called.</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeLeadingSorted" id="xmlXPathNodeLeadingSorted"></a>Function: xmlXPathNodeLeadingSorted</h3><pre class="programlisting"><a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a>        xmlXPathNodeLeadingSorted       (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> nodes, <br />                                               <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node)<br />
 </pre><p>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set)</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAdd" id="xmlXPathNodeSetAdd"></a>Function: xmlXPathNodeSetAdd</h3><pre class="programlisting">void  xmlXPathNodeSetAdd              (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>nodes</tt></i>:</span></td><td>a node-set, sorted by document order</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>a node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>the nodes in @nodes that precede @node in document order, @nodes if @node is NULL or an empty node-set if @nodes doesn't contain @node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAdd" id="xmlXPathNodeSetAdd"></a>Function: xmlXPathNodeSetAdd</h3><pre class="programlisting">int   xmlXPathNodeSetAdd              (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
 </pre><p>add a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddNs" id="xmlXPathNodeSetAddNs"></a>Function: xmlXPathNodeSetAddNs</h3><pre class="programlisting">void      xmlXPathNodeSetAddNs            (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success, and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddNs" id="xmlXPathNodeSetAddNs"></a>Function: xmlXPathNodeSetAddNs</h3><pre class="programlisting">int     xmlXPathNodeSetAddNs            (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> node, <br />                                       <a href="libxml-tree.html#xmlNsPtr">xmlNsPtr</a> ns)<br />
 </pre><p>add a new namespace node to an existing NodeSet</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the hosting node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a the namespace node</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddUnique" id="xmlXPathNodeSetAddUnique"></a>Function: xmlXPathNodeSetAddUnique</h3><pre class="programlisting">void       xmlXPathNodeSetAddUnique        (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>node</tt></i>:</span></td><td>the hosting node</td></tr><tr><td><span class="term"><i><tt>ns</tt></i>:</span></td><td>a the namespace node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of error</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetAddUnique" id="xmlXPathNodeSetAddUnique"></a>Function: xmlXPathNodeSetAddUnique</h3><pre class="programlisting">int       xmlXPathNodeSetAddUnique        (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
 </pre><p>add a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> to an existing NodeSet, optimized version when we are sure the node is not already in the set.</p>
-<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetContains" id="xmlXPathNodeSetContains"></a>Function: xmlXPathNodeSetContains</h3><pre class="programlisting">int      xmlXPathNodeSetContains         (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
+<div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the initial node set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>a new <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a></td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>0 in case of success and -1 in case of failure</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetContains" id="xmlXPathNodeSetContains"></a>Function: xmlXPathNodeSetContains</h3><pre class="programlisting">int   xmlXPathNodeSetContains         (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
 </pre><p>checks whether @cur contains @val</p>
 <div class="variablelist"><table border="0"><col align="left" /><tbody><tr><td><span class="term"><i><tt>cur</tt></i>:</span></td><td>the node-set</td></tr><tr><td><span class="term"><i><tt>val</tt></i>:</span></td><td>the node</td></tr><tr><td><span class="term"><i><tt>Returns</tt></i>:</span></td><td>true (1) if @cur contains @val, false (0) otherwise</td></tr></tbody></table></div><h3><a name="xmlXPathNodeSetDel" id="xmlXPathNodeSetDel"></a>Function: xmlXPathNodeSetDel</h3><pre class="programlisting">void      xmlXPathNodeSetDel              (<a href="libxml-xpath.html#xmlNodeSetPtr">xmlNodeSetPtr</a> cur, <br />                                         <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> val)<br />
 </pre><p>Removes an <a href="libxml-tree.html#xmlNodePtr">xmlNodePtr</a> from an existing NodeSet</p>
index b285394..803b795 100644 (file)
@@ -1,10 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-    <link rel="SHORTCUT ICON" href="/favicon.ico" />
-    <style type="text/css">
+<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
 TD {font-family: Verdana,Arial,Helvetica}
 BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
 H1 {font-family: Verdana,Arial,Helvetica}
@@ -12,233 +9,23 @@ H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style>
-    <title>The XML C parser and toolkit of Gnome</title>
-  </head>
-  <body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
-    <table border="0" width="100%" cellpadding="5" cellspacing="0" align="center">
-      <tr>
-        <td width="120">
-          <a href="http://swpat.ffii.org/">
-            <img src="epatents.png" alt="Action against software patents" />
-          </a>
-        </td>
-        <td width="180">
-          <a href="http://www.gnome.org/">
-            <img src="gnome2.png" alt="Gnome2 Logo" />
-          </a>
-          <a href="http://www.w3.org/Status">
-            <img src="w3c.png" alt="W3C Logo" />
-          </a>
-          <a href="http://www.redhat.com/">
-            <img src="redhat.gif" alt="Red Hat Logo" />
-          </a>
-          <div align="left">
-            <a href="http://xmlsoft.org/">
-              <img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" />
-            </a>
-          </div>
-        </td>
-        <td>
-          <table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000">
-            <tr>
-              <td>
-                <table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd">
-                  <tr>
-                    <td align="center">
-                      <h1>The XML C parser and toolkit of Gnome</h1>
-                      <h2>libxml</h2>
-                    </td>
-                  </tr>
-                </table>
-              </td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-    </table>
-    <table border="0" cellpadding="4" cellspacing="0" width="100%" align="center">
-      <tr>
-        <td bgcolor="#8b7765">
-          <table border="0" cellspacing="0" cellpadding="2" width="100%">
-            <tr>
-              <td valign="top" width="200" bgcolor="#8b7765">
-                <table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000">
-                  <tr>
-                    <td>
-                      <table width="100%" border="0" cellspacing="1" cellpadding="3">
-                        <tr>
-                          <td colspan="1" bgcolor="#eecfa1" align="center">
-                            <center>
-                              <b>Main Menu</b>
-                            </center>
-                          </td>
-                        </tr>
-                        <tr>
-                          <td bgcolor="#fffacd">
-                            <form action="search.php" enctype="application/x-www-form-urlencoded" method="get">
-                              <input name="query" type="text" size="20" value="" />
-                              <input name="submit" type="submit" value="Search ..." />
-                            </form>
-                            <ul>
-                              <li>
-                                <a href="index.html">Home</a>
-                              </li>
-                              <li>
-                                <a href="html/index.html">Reference Manual</a>
-                              </li>
-                              <li>
-                                <a href="intro.html">Introduction</a>
-                              </li>
-                              <li>
-                                <a href="FAQ.html">FAQ</a>
-                              </li>
-                              <li>
-                                <a href="docs.html" style="font-weight:bold">Developer Menu</a>
-                              </li>
-                              <li>
-                                <a href="bugs.html">Reporting bugs and getting help</a>
-                              </li>
-                              <li>
-                                <a href="help.html">How to help</a>
-                              </li>
-                              <li>
-                                <a href="downloads.html">Downloads</a>
-                              </li>
-                              <li>
-                                <a href="news.html">Releases</a>
-                              </li>
-                              <li>
-                                <a href="XMLinfo.html">XML</a>
-                              </li>
-                              <li>
-                                <a href="XSLT.html">XSLT</a>
-                              </li>
-                              <li>
-                                <a href="xmldtd.html">Validation &amp; DTDs</a>
-                              </li>
-                              <li>
-                                <a href="encoding.html">Encodings support</a>
-                              </li>
-                              <li>
-                                <a href="catalog.html">Catalog support</a>
-                              </li>
-                              <li>
-                                <a href="namespaces.html">Namespaces</a>
-                              </li>
-                              <li>
-                                <a href="contribs.html">Contributions</a>
-                              </li>
-                              <li>
-                                <a href="examples/index.html" style="font-weight:bold">Code Examples</a>
-                              </li>
-                              <li>
-                                <a href="html/index.html" style="font-weight:bold">API Menu</a>
-                              </li>
-                              <li>
-                                <a href="guidelines.html">XML Guidelines</a>
-                              </li>
-                              <li>
-                                <a href="ChangeLog.html">Recent Changes</a>
-                              </li>
-                            </ul>
-                          </td>
-                        </tr>
-                      </table>
-                      <table width="100%" border="0" cellspacing="1" cellpadding="3">
-                        <tr>
-                          <td colspan="1" bgcolor="#eecfa1" align="center">
-                            <center>
-                              <b>Related links</b>
-                            </center>
-                          </td>
-                        </tr>
-                        <tr>
-                          <td bgcolor="#fffacd">
-                            <ul>
-                              <li>
-                                <a href="http://mail.gnome.org/archives/xml/">Mail archive</a>
-                              </li>
-                              <li>
-                                <a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a>
-                              </li>
-                              <li>
-                                <a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a>
-                              </li>
-                              <li>
-                                <a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a>
-                              </li>
-                              <li>
-                                <a href="ftp://xmlsoft.org/">FTP</a>
-                              </li>
-                              <li>
-                                <a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a>
-                              </li>
-                              <li>
-                                <a href="http://opencsw.org/packages/libxml2">Solaris binaries</a>
-                              </li>
-                              <li>
-                                <a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a>
-                              </li>
-                              <li>
-                                <a href="http://lxml.de/">lxml Python bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://libxml.rubyforge.org/">Ruby bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://tclxml.sourceforge.net/">Tcl bindings</a>
-                              </li>
-                              <li>
-                                <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a>
-                              </li>
-                            </ul>
-                          </td>
-                        </tr>
-                      </table>
-                    </td>
-                  </tr>
-                </table>
-              </td>
-              <td valign="top" bgcolor="#8b7765">
-                <table border="0" cellspacing="0" cellpadding="1" width="100%">
-                  <tr>
-                    <td>
-                      <table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000">
-                        <tr>
-                          <td>
-                            <table border="0" cellpadding="3" cellspacing="1" width="100%">
-                              <tr>
-                                <td bgcolor="#fffacd">
-                                  <p></p>
-                                  <p style="text-align: right; font-style: italic; font-size: 10pt">"Programming
+  <title>The XML C parser and toolkit of Gnome</title>
+  
+</head>
+<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>libxml</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p></p><p style="text-align: right; font-style: italic; font-size: 10pt">"Programming
 with libxml2 is like the thrilling embrace of an exotic stranger." <a href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
-Pilgrim</a></p>
-                                  <p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
+Pilgrim</a></p><p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
 (but usable outside of the Gnome platform), it is free software available
 under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
 License</a>. XML itself is a metalanguage to design markup languages, i.e.
 text language where semantic and structure are added to the content using
 extra "markup" information enclosed between angle brackets. HTML is the most
 well-known markup language. Though the library is written in C <a href="python.html">a variety of language bindings</a> make it available in
-other environments.</p>
-                                  <p>Libxml2 is known to be very portable, the library should build and work
+other environments.</p><p>Libxml2 is known to be very portable, the library should build and work
 without serious troubles on a variety of systems (Linux, Unix, Windows,
-CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)</p>
-                                  <p>Libxml2 implements a number of existing standards related to markup
-languages:</p>
-                                  <ul><li>the XML standard: <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
+CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)</p><p>Libxml2 implements a number of existing standards related to markup
+languages:</p><ul>
+  <li>the XML standard: <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
   <li>Namespaces in XML: <a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li>
   <li>XML Base: <a href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li>
   <li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> :
@@ -259,14 +46,12 @@ languages:</p>
     2001</a></li>
   <li>W3C <a href="http://www.w3.org/TR/xml-id/">xml:id</a> Working Draft 7
     April 2004</li>
-</ul>
-                                  <p>In most cases libxml2 tries to implement the specifications in a
+</ul><p>In most cases libxml2 tries to implement the specifications in a
 relatively strictly compliant way. As of release 2.4.16, libxml2 passed all
 1800+ tests from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
-Suite</a>.</p>
-                                  <p>To some extent libxml2 provides support for the following additional
-specifications but doesn't claim to implement them completely:</p>
-                                  <ul><li>Document Object Model (DOM) <a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
+Suite</a>.</p><p>To some extent libxml2 provides support for the following additional
+specifications but doesn't claim to implement them completely:</p><ul>
+  <li>Document Object Model (DOM) <a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
     the document model, but it doesn't implement the API itself, gdome2 does
     this on top of libxml2</li>
   <li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> :
@@ -275,12 +60,10 @@ specifications but doesn't claim to implement them completely:</p>
     HTTP/1.0, again a basic HTTP client code</li>
   <li>SAX: a SAX2 like interface and a minimal SAX1 implementation compatible
     with early expat versions</li>
-</ul>
-                                  <p>A partial implementation of <a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
+</ul><p>A partial implementation of <a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
 1: Structure</a> is being worked on but it would be far too early to make any
-conformance statement about it at the moment.</p>
-                                  <p>Separate documents:</p>
-                                  <ul><li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
+conformance statement about it at the moment.</p><p>Separate documents:</p><ul>
+  <li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
     implementation of XSLT 1.0 and common extensions like EXSLT for
   libxml2</li>
   <li><a href="http://gdome2.cs.unibo.it/">the gdome2 page</a>
@@ -290,26 +73,5 @@ conformance statement about it at the moment.</p>
     Digital Signature</a> for libxml2</li>
   <li>also check the related links section for more related and active
     projects.</li>
-</ul>
-                                  <p> Hosting sponsored by <a href="http://www.aoemedia.de/opensource-cms.html">Open Source CMS services</a> from AOE media.</p>
-                                  <p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p>
-                                  <p>
-                                    <a href="bugs.html">Daniel Veillard</a>
-                                  </p>
-                                </td>
-                              </tr>
-                            </table>
-                          </td>
-                        </tr>
-                      </table>
-                    </td>
-                  </tr>
-                </table>
-              </td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-    </table>
-  </body>
+</ul><p> Hosting sponsored by <a href="http://www.aoemedia.de/opensource-cms.html">Open Source CMS services</a> from AOE media.</p><p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body>
 </html>
index 13cc949..ce1caf3 100644 (file)
@@ -13,7 +13,7 @@ loaded using libxml), it's better to use the SAX interface of libxml. SAX is
 a <strong>callback-based interface</strong> to the parser. Before parsing,
 the application layer registers a customized set of callbacks which are
 called by the library as it progresses through the XML input.</p><p>To get more detailed step-by-step guidance on using the SAX interface of
-libxml, see the <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
+libxml, see the <a href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">nice
 documentation</a>.written by <a href="mailto:james@daa.com.au">James
 Henstridge</a>.</p><p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
 program located in the gnome-xml module (it's usually not shipped in the
index def9829..551bea4 100644 (file)
@@ -9,7 +9,8 @@ H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>Introduction</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Introduction</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>This document describes libxml, the <a href="http://www.w3.org/XML/">XML</a> C parser and toolkit developed for the
 <a href="http://www.gnome.org/">Gnome</a> project. <a href="http://www.w3.org/XML/">XML is a standard</a> for building tag-based
-structured documents/data.</p><p>Here are some key points about libxml:</p><ul><li>Libxml2 exports Push (progressive) and Pull (blocking) type parser
+structured documents/data.</p><p>Here are some key points about libxml:</p><ul>
+  <li>Libxml2 exports Push (progressive) and Pull (blocking) type parser
     interfaces for both XML and HTML.</li>
   <li>Libxml2 can do DTD validation at parse time, using a parsed document
     instance, or with an arbitrary DTD.</li>
index 92f1a05..e51139a 100644 (file)
@@ -16,10 +16,12 @@ API should <a href="#DOM">look at DOM</a>.</p><p>The <a href="html/libxml-parser
 separated from the <a href="html/libxml-htmlparser.html">HTML parser
 interfaces</a>.  Let's have a look at how the XML parser can be called:</p><h3><a name="Invoking" id="Invoking">Invoking the parser : the pull method</a></h3><p>Usually, the first thing to do is to read an XML input. The parser accepts
 documents either from in-memory strings or from files.  The functions are
-defined in "parser.h":</p><dl><dt><code>xmlDocPtr xmlParseMemory(char *buffer, int size);</code></dt>
+defined in "parser.h":</p><dl>
+  <dt><code>xmlDocPtr xmlParseMemory(char *buffer, int size);</code></dt>
     <dd><p>Parse a null-terminated string containing the document.</p>
     </dd>
-</dl><dl><dt><code>xmlDocPtr xmlParseFile(const char *filename);</code></dt>
+</dl><dl>
+  <dt><code>xmlDocPtr xmlParseFile(const char *filename);</code></dt>
     <dd><p>Parse an XML document contained in a (possibly compressed)
       file.</p>
     </dd>
@@ -88,18 +90,21 @@ adventure".</p><p><strong>NOTE</strong>: XML allows <em>PI</em>s and <em>comment
 present before the document root, so <code>doc-&gt;children</code> may point
 to an element which is not the document Root Element; a function
 <code>xmlDocGetRootElement()</code> was added for this purpose.</p><h3><a name="Modifying" id="Modifying">Modifying the tree</a></h3><p>Functions are provided for reading and writing the document content. Here
-is an excerpt from the <a href="html/libxml-tree.html">tree API</a>:</p><dl><dt><code>xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const
+is an excerpt from the <a href="html/libxml-tree.html">tree API</a>:</p><dl>
+  <dt><code>xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const
   xmlChar *value);</code></dt>
     <dd><p>This sets (or changes) an attribute carried by an ELEMENT node.
       The value can be NULL.</p>
     </dd>
-</dl><dl><dt><code>const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar
+</dl><dl>
+  <dt><code>const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar
   *name);</code></dt>
     <dd><p>This function returns a pointer to new copy of the property
       content. Note that the user must deallocate the result.</p>
     </dd>
 </dl><p>Two functions are provided for reading and writing the text associated
-with elements:</p><dl><dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar
+with elements:</p><dl>
+  <dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar
   *value);</code></dt>
     <dd><p>This function takes an "external" string and converts it to one
       text node or possibly to a list of entity and text nodes. All
@@ -107,7 +112,8 @@ with elements:</p><dl><dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, c
       internally as entity nodes, hence the result of the function may not be
       a single node.</p>
     </dd>
-</dl><dl><dt><code>xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int
+</dl><dl>
+  <dt><code>xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int
   inLine);</code></dt>
     <dd><p>This function is the inverse of
       <code>xmlStringGetNodeList()</code>. It generates a new string
@@ -117,29 +123,36 @@ with elements:</p><dl><dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, c
       XML encoding in the string, it will substitute it with its value (say,
       "GNU Network Object Model Environment").</p>
     </dd>
-</dl><h3><a name="Saving" id="Saving">Saving a tree</a></h3><p>Basically 3 options are possible:</p><dl><dt><code>void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int
+</dl><h3><a name="Saving" id="Saving">Saving a tree</a></h3><p>Basically 3 options are possible:</p><dl>
+  <dt><code>void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int
   *size);</code></dt>
     <dd><p>Returns a buffer into which the document has been saved.</p>
     </dd>
-</dl><dl><dt><code>extern void xmlDocDump(FILE *f, xmlDocPtr doc);</code></dt>
+</dl><dl>
+  <dt><code>extern void xmlDocDump(FILE *f, xmlDocPtr doc);</code></dt>
     <dd><p>Dumps a document to an open file descriptor.</p>
     </dd>
-</dl><dl><dt><code>int xmlSaveFile(const char *filename, xmlDocPtr cur);</code></dt>
+</dl><dl>
+  <dt><code>int xmlSaveFile(const char *filename, xmlDocPtr cur);</code></dt>
     <dd><p>Saves the document to a file. In this case, the compression
       interface is triggered if it has been turned on.</p>
     </dd>
 </dl><h3><a name="Compressio" id="Compressio">Compression</a></h3><p>The library transparently handles compression when doing file-based
 accesses. The level of compression on saves can be turned on either globally
-or individually for one file:</p><dl><dt><code>int  xmlGetDocCompressMode (xmlDocPtr doc);</code></dt>
+or individually for one file:</p><dl>
+  <dt><code>int  xmlGetDocCompressMode (xmlDocPtr doc);</code></dt>
     <dd><p>Gets the document compression ratio (0-9).</p>
     </dd>
-</dl><dl><dt><code>void xmlSetDocCompressMode (xmlDocPtr doc, int mode);</code></dt>
+</dl><dl>
+  <dt><code>void xmlSetDocCompressMode (xmlDocPtr doc, int mode);</code></dt>
     <dd><p>Sets the document compression ratio.</p>
     </dd>
-</dl><dl><dt><code>int  xmlGetCompressMode(void);</code></dt>
+</dl><dl>
+  <dt><code>int  xmlGetCompressMode(void);</code></dt>
     <dd><p>Gets the default compression ratio.</p>
     </dd>
-</dl><dl><dt><code>void xmlSetCompressMode(int mode);</code></dt>
+</dl><dl>
+  <dt><code>void xmlSetCompressMode(int mode);</code></dt>
     <dd><p>Sets the default compression ratio.</p>
     </dd>
 </dl><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 3bca246..f83d14f 100644 (file)
      <author>Daniel Veillard </author>
      <exports symbol='xmlDict' type='typedef'/>
      <exports symbol='xmlDictPtr' type='typedef'/>
+     <exports symbol='xmlDictGetUsage' type='function'/>
      <exports symbol='xmlDictReference' type='function'/>
      <exports symbol='xmlDictCleanup' type='function'/>
      <exports symbol='xmlDictSize' type='function'/>
      <exports symbol='xmlDictExists' type='function'/>
+     <exports symbol='xmlDictSetLimit' type='function'/>
      <exports symbol='xmlDictOwns' type='function'/>
      <exports symbol='xmlDictQLookup' type='function'/>
      <exports symbol='xmlInitializeDict' type='function'/>
      <exports symbol='XML_PARSER_EOF' type='enum'/>
      <exports symbol='XML_PARSER_CDATA_SECTION' type='enum'/>
      <exports symbol='XML_WITH_LEGACY' type='enum'/>
+     <exports symbol='XML_WITH_OUTPUT' type='enum'/>
      <exports symbol='XML_PARSE_XINCLUDE' type='enum'/>
      <exports symbol='XML_PARSE_NOCDATA' type='enum'/>
      <exports symbol='XML_PARSE_NOBASEFIX' type='enum'/>
-     <exports symbol='XML_WITH_OUTPUT' type='enum'/>
+     <exports symbol='XML_PARSE_BIG_LINES' type='enum'/>
      <exports symbol='XML_WITH_XINCLUDE' type='enum'/>
      <exports symbol='XML_WITH_PUSH' type='enum'/>
      <exports symbol='XML_PARSE_READER' type='enum'/>
      <exports symbol='xmlSetExternalEntityLoader' type='function'/>
     </file>
     <file name='parserInternals'>
-     <summary>internals routines exported by the parser.</summary>
+     <summary>internals routines and limits exported by the parser.</summary>
      <description>this module exports a number of internal parsing routines they are not really all intended for applications but can prove useful doing low level processing. </description>
      <author>Daniel Veillard </author>
      <exports symbol='XML_SUBSTITUTE_REF' type='macro'/>
      <exports symbol='IS_LETTER' type='macro'/>
      <exports symbol='IS_IDEOGRAPHIC' type='macro'/>
      <exports symbol='MOVETO_STARTTAG' type='macro'/>
+     <exports symbol='XML_MAX_NAME_LENGTH' type='macro'/>
      <exports symbol='IS_ASCII_LETTER' type='macro'/>
      <exports symbol='IS_DIGIT' type='macro'/>
+     <exports symbol='XML_MAX_DICTIONARY_LIMIT' type='macro'/>
      <exports symbol='XML_SUBSTITUTE_PEREF' type='macro'/>
      <exports symbol='MOVETO_ENDTAG' type='macro'/>
      <exports symbol='SKIP_EOL' type='macro'/>
      <exports symbol='IS_EXTENDER_CH' type='macro'/>
      <exports symbol='IS_BLANK_CH' type='macro'/>
      <exports symbol='IS_LETTER_CH' type='macro'/>
+     <exports symbol='XML_MAX_LOOKUP_LIMIT' type='macro'/>
      <exports symbol='XML_MAX_TEXT_LENGTH' type='macro'/>
      <exports symbol='XML_SUBSTITUTE_NONE' type='macro'/>
      <exports symbol='IS_COMBINING' type='macro'/>
      <description>this module describes the structures found in an tree resulting from an XML or HTML parsing, as well as the API provided for various processing on that tree </description>
      <author>Daniel Veillard </author>
      <exports symbol='XML_LOCAL_NAMESPACE' type='macro'/>
-     <exports symbol='XML_XML_NAMESPACE' type='macro'/>
+     <exports symbol='BASE_BUFFER_SIZE' type='macro'/>
      <exports symbol='XML_XML_ID' type='macro'/>
      <exports symbol='xmlRootNode' type='macro'/>
      <exports symbol='XML_GET_LINE' type='macro'/>
      <exports symbol='XML_GET_CONTENT' type='macro'/>
      <exports symbol='xmlChildrenNode' type='macro'/>
-     <exports symbol='BASE_BUFFER_SIZE' type='macro'/>
+     <exports symbol='XML_XML_NAMESPACE' type='macro'/>
+     <exports symbol='LIBXML2_NEW_BUFFER' type='macro'/>
      <exports symbol='XML_ATTRIBUTE_IMPLIED' type='enum'/>
      <exports symbol='XML_ELEMENT_CONTENT_ELEMENT' type='enum'/>
      <exports symbol='XML_ENTITY_REF_NODE' type='enum'/>
      <exports symbol='XML_ELEMENT_CONTENT_MULT' type='enum'/>
      <exports symbol='XML_ELEMENT_CONTENT_PLUS' type='enum'/>
      <exports symbol='xmlNs' type='typedef'/>
-     <exports symbol='xmlBufferPtr' type='typedef'/>
+     <exports symbol='xmlElementContent' type='typedef'/>
      <exports symbol='xmlEnumerationPtr' type='typedef'/>
      <exports symbol='xmlBuffer' type='typedef'/>
      <exports symbol='xmlParserInputPtr' type='typedef'/>
      <exports symbol='xmlBufferAllocationScheme' type='typedef'/>
      <exports symbol='xmlNode' type='typedef'/>
      <exports symbol='xmlDocPtr' type='typedef'/>
-     <exports symbol='xmlElementContent' type='typedef'/>
+     <exports symbol='xmlBufferPtr' type='typedef'/>
      <exports symbol='xmlDOMWrapCtxtPtr' type='typedef'/>
      <exports symbol='xmlRefPtr' type='typedef'/>
      <exports symbol='xmlParserInputBuffer' type='typedef'/>
      <exports symbol='xmlParserCtxt' type='typedef'/>
      <exports symbol='xmlDtdPtr' type='typedef'/>
      <exports symbol='xmlAttributeDefault' type='typedef'/>
+     <exports symbol='xmlBuf' type='typedef'/>
      <exports symbol='xmlNotation' type='typedef'/>
      <exports symbol='xmlElementType' type='typedef'/>
      <exports symbol='xmlEntity' type='typedef'/>
      <exports symbol='xmlElementTypeVal' type='typedef'/>
      <exports symbol='xmlNotationPtr' type='typedef'/>
      <exports symbol='xmlElementPtr' type='typedef'/>
+     <exports symbol='xmlBufPtr' type='typedef'/>
      <exports symbol='xmlElementContentOccur' type='typedef'/>
      <exports symbol='xmlAttrPtr' type='typedef'/>
      <exports symbol='xmlDoc' type='typedef'/>
      <exports symbol='_xmlElementContent' type='struct'/>
      <exports symbol='xmlDocCopyNode' type='function'/>
      <exports symbol='xmlNewDocRawNode' type='function'/>
-     <exports symbol='xmlGetProp' type='function'/>
+     <exports symbol='xmlBufContent' type='function'/>
      <exports symbol='xmlNewNsPropEatName' type='function'/>
+     <exports symbol='xmlStringGetNodeList' type='function'/>
      <exports symbol='xmlNewCDataBlock' type='function'/>
      <exports symbol='xmlBufferWriteCHAR' type='function'/>
      <exports symbol='xmlNodeGetBase' type='function'/>
      <exports symbol='xmlBufferCreate' type='function'/>
      <exports symbol='xmlNewDocFragment' type='function'/>
      <exports symbol='xmlDocGetRootElement' type='function'/>
-     <exports symbol='xmlStringGetNodeList' type='function'/>
+     <exports symbol='xmlGetProp' type='function'/>
      <exports symbol='xmlValidateName' type='function'/>
-     <exports symbol='xmlSetBufferAllocationScheme' type='function'/>
+     <exports symbol='xmlBufEnd' type='function'/>
      <exports symbol='xmlValidateQName' type='function'/>
      <exports symbol='xmlHasNsProp' type='function'/>
      <exports symbol='xmlAddPrevSibling' type='function'/>
      <exports symbol='xmlBufferAddHead' type='function'/>
      <exports symbol='xmlNewPI' type='function'/>
      <exports symbol='xmlDocDumpFormatMemoryEnc' type='function'/>
+     <exports symbol='xmlSetProp' type='function'/>
      <exports symbol='xmlChildElementCount' type='function'/>
      <exports symbol='xmlElemDump' type='function'/>
      <exports symbol='xmlSaveFormatFileTo' type='function'/>
      <exports symbol='xmlCopyDoc' type='function'/>
      <exports symbol='xmlDOMWrapNewCtxt' type='function'/>
      <exports symbol='xmlDocDumpMemoryEnc' type='function'/>
+     <exports symbol='xmlBufGetNodeContent' type='function'/>
      <exports symbol='xmlTextMerge' type='function'/>
      <exports symbol='xmlDocDumpMemory' type='function'/>
      <exports symbol='xmlNewDocPI' type='function'/>
      <exports symbol='xmlUnlinkNode' type='function'/>
      <exports symbol='xmlSplitQName3' type='function'/>
      <exports symbol='xmlDOMWrapAcquireNsFunction' type='function'/>
+     <exports symbol='xmlBufUse' type='function'/>
      <exports symbol='xmlDocSetRootElement' type='function'/>
      <exports symbol='xmlGetLineNo' type='function'/>
      <exports symbol='xmlBufferContent' type='function'/>
      <exports symbol='xmlLastElementChild' type='function'/>
      <exports symbol='xmlNodeGetLang' type='function'/>
      <exports symbol='xmlGetDocCompressMode' type='function'/>
+     <exports symbol='xmlBufNodeDump' type='function'/>
      <exports symbol='xmlGetNsProp' type='function'/>
      <exports symbol='xmlNewDocProp' type='function'/>
      <exports symbol='xmlFreeNode' type='function'/>
      <exports symbol='xmlGetNsList' type='function'/>
      <exports symbol='xmlBufferGrow' type='function'/>
      <exports symbol='xmlNodeIsText' type='function'/>
-     <exports symbol='xmlSetProp' type='function'/>
+     <exports symbol='xmlSetBufferAllocationScheme' type='function'/>
      <exports symbol='xmlIsXHTML' type='function'/>
      <exports symbol='xmlNodeSetLang' type='function'/>
      <exports symbol='xmlFreeDtd' type='function'/>
      <exports symbol='xmlFreeNodeList' type='function'/>
      <exports symbol='xmlFreeDoc' type='function'/>
+     <exports symbol='xmlBufShrink' type='function'/>
      <exports symbol='xmlNewDocNode' type='function'/>
      <exports symbol='xmlSaveFileEnc' type='function'/>
      <exports symbol='xmlSetNsProp' type='function'/>
      <exports symbol='xmlNormalizeWindowsPath' type='function'/>
      <exports symbol='xmlInputReadCallback' type='function'/>
      <exports symbol='xmlParserInputBufferCreateStatic' type='function'/>
+     <exports symbol='xmlOutputBufferGetContent' type='function'/>
      <exports symbol='xmlIOHTTPClose' type='function'/>
      <exports symbol='xmlOutputBufferWriteEscape' type='function'/>
      <exports symbol='xmlOutputBufferCreateFilename' type='function'/>
+     <exports symbol='xmlOutputBufferGetSize' type='function'/>
      <exports symbol='xmlCleanupOutputCallbacks' type='function'/>
      <exports symbol='xmlInputOpenCallback' type='function'/>
      <exports symbol='xmlParserInputBufferRead' type='function'/>
      <exports symbol='XML_RNGP_ELEM_CONTENT_EMPTY' type='enum'/>
      <exports symbol='XML_SCHEMAP_WARN_UNLOCATED_SCHEMA' type='enum'/>
      <exports symbol='XML_IO_EMLINK' type='enum'/>
-     <exports symbol='XML_CHECK_X' type='enum'/>
+     <exports symbol='XML_ERR_NMTOKEN_REQUIRED' type='enum'/>
      <exports symbol='XML_RNGP_ANYNAME_ATTR_ANCESTOR' type='enum'/>
      <exports symbol='XML_SCHEMAP_SRC_ATTRIBUTE_3_1' type='enum'/>
      <exports symbol='XML_ERR_PI_NOT_STARTED' type='enum'/>
      <exports symbol='XML_C14N_RELATIVE_NAMESPACE' type='enum'/>
      <exports symbol='XML_SCHEMAP_FAILED_LOAD' type='enum'/>
      <exports symbol='XML_ERR_ATTRIBUTE_WITHOUT_VALUE' type='enum'/>
+     <exports symbol='XML_ERR_NAME_TOO_LONG' type='enum'/>
      <exports symbol='XML_XPTR_SYNTAX_ERROR' type='enum'/>
      <exports symbol='XML_SCHEMAP_UNKNOWN_TYPE' type='enum'/>
      <exports symbol='XML_CHECK_WRONG_DOC' type='enum'/>
      <exports symbol='XML_RNGP_PAT_START_ATTR' type='enum'/>
      <exports symbol='XML_CHECK_WRONG_NAME' type='enum'/>
      <exports symbol='XML_SCHEMAV_NOTEMPTY' type='enum'/>
-     <exports symbol='XML_ERR_NMTOKEN_REQUIRED' type='enum'/>
      <exports symbol='XML_IO_EROFS' type='enum'/>
      <exports symbol='XML_IO_EXDEV' type='enum'/>
      <exports symbol='XML_XINCLUDE_NO_FALLBACK' type='enum'/>
      <exports symbol='XML_RNGP_INCLUDE_FAILURE' type='enum'/>
      <exports symbol='XML_ERR_COMMENT_NOT_FINISHED' type='enum'/>
      <exports symbol='XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2' type='enum'/>
-     <exports symbol='XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1' type='enum'/>
+     <exports symbol='XML_BUF_OVERFLOW' type='enum'/>
      <exports symbol='XML_IO_EMSGSIZE' type='enum'/>
      <exports symbol='XML_FROM_CATALOG' type='enum'/>
      <exports symbol='XML_SCHEMAV_ATTRINVALID' type='enum'/>
      <exports symbol='XML_RNGP_EMPTY_CONTENT' type='enum'/>
      <exports symbol='XML_IO_EALREADY' type='enum'/>
      <exports symbol='XML_IO_ERANGE' type='enum'/>
+     <exports symbol='XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1' type='enum'/>
      <exports symbol='XML_IO_ENOSYS' type='enum'/>
      <exports symbol='XML_SCHEMAP_NOTHING_TO_PARSE' type='enum'/>
      <exports symbol='XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE' type='enum'/>
      <exports symbol='XML_SCHEMAP_INVALID_MINOCCURS' type='enum'/>
      <exports symbol='XML_SCHEMAV_CVC_ELT_1' type='enum'/>
      <exports symbol='XML_SCHEMAP_COS_ALL_LIMITED' type='enum'/>
-     <exports symbol='XML_CHECK_' type='enum'/>
+     <exports symbol='XML_SCHEMATRONV_REPORT' type='enum'/>
      <exports symbol='XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID' type='enum'/>
      <exports symbol='XML_IO_EPIPE' type='enum'/>
      <exports symbol='XML_SCHEMAP_NOTYPE_NOREF' type='enum'/>
      <exports symbol='XML_ERR_NS_DECL_ERROR' type='enum'/>
      <exports symbol='XML_ERR_INTERNAL_ERROR' type='enum'/>
      <exports symbol='XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1' type='enum'/>
-     <exports symbol='XML_SCHEMATRONV_REPORT' type='enum'/>
      <exports symbol='XML_ERR_ELEMCONTENT_NOT_FINISHED' type='enum'/>
      <exports symbol='XML_FROM_NAMESPACE' type='enum'/>
      <exports symbol='XML_IO_EBUSY' type='enum'/>
      <exports symbol='XML_ERR_INVALID_URI' type='enum'/>
      <exports symbol='XML_IO_ESRCH' type='enum'/>
      <exports symbol='XML_FROM_XPOINTER' type='enum'/>
+     <exports symbol='XML_FROM_BUFFER' type='enum'/>
      <exports symbol='XML_ERR_PEREF_IN_PROLOG' type='enum'/>
      <exports symbol='XML_RNGP_TEXT_HAS_CHILD' type='enum'/>
      <exports symbol='XML_SCHEMAV_NOTNILLABLE' type='enum'/>
      <exports symbol='XML_RNGP_FOREIGN_ELEMENT' type='enum'/>
      <exports symbol='XML_SCHEMAP_DEF_AND_PREFIX' type='enum'/>
      <exports symbol='XML_ERR_MIXED_NOT_STARTED' type='enum'/>
+     <exports symbol='XML_ERR_USER_STOP' type='enum'/>
      <exports symbol='XML_CHECK_FOUND_CDATA' type='enum'/>
      <exports symbol='XML_SCHEMAP_INTERNAL' type='enum'/>
      <exports symbol='XML_SCHEMAV_INVALIDELEM' type='enum'/>
      <exports symbol='XML_IO_EEXIST' type='enum'/>
      <exports symbol='XML_SCHEMAP_MG_PROPS_CORRECT_2' type='enum'/>
      <exports symbol='XML_SCHEMAP_MG_PROPS_CORRECT_1' type='enum'/>
+     <exports symbol='XML_FROM_URI' type='enum'/>
      <exports symbol='XML_RNGP_PAT_LIST_ELEM' type='enum'/>
      <exports symbol='XML_SCHEMAV_UNDECLAREDELEM' type='enum'/>
      <exports symbol='XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2' type='enum'/>
      <exports symbol='xmlSchemaSAXUnplug' type='function'/>
      <exports symbol='xmlSchemaParse' type='function'/>
      <exports symbol='xmlSchemaFreeParserCtxt' type='function'/>
+     <exports symbol='xmlSchemaValidateSetFilename' type='function'/>
      <exports symbol='xmlSchemaNewParserCtxt' type='function'/>
      <exports symbol='xmlSchemaIsValid' type='function'/>
      <exports symbol='xmlSchemaValidityErrorFunc' type='function'/>
      <exports symbol='xmlSchemaSAXPlug' type='function'/>
      <exports symbol='xmlSchemaValidateStream' type='function'/>
      <exports symbol='xmlSchemaGetParserErrors' type='function'/>
+     <exports symbol='xmlSchemaValidateSetLocator' type='function'/>
      <exports symbol='xmlSchemaValidateOneElement' type='function'/>
      <exports symbol='xmlSchemaSetValidStructuredErrors' type='function'/>
      <exports symbol='xmlSchemaSetValidErrors' type='function'/>
      <exports symbol='xmlSchemaValidateDoc' type='function'/>
      <exports symbol='xmlSchemaFree' type='function'/>
      <exports symbol='xmlSchemaNewMemParserCtxt' type='function'/>
+     <exports symbol='xmlSchemaValidityLocatorFunc' type='function'/>
      <exports symbol='xmlSchemaGetValidErrors' type='function'/>
      <exports symbol='xmlSchemaSetValidOptions' type='function'/>
      <exports symbol='xmlSchemaSetParserErrors' type='function'/>
      <exports symbol='DEBUG_MEMORY_LOCATION' type='macro'/>
      <exports symbol='LIBXML_ATTR_FORMAT' type='macro'/>
      <exports symbol='LIBXML_TEST_VERSION' type='macro'/>
+     <exports symbol='LIBXML_THREAD_ALLOC_ENABLED' type='macro'/>
      <exports symbol='LIBXML_XPATH_ENABLED' type='macro'/>
      <exports symbol='LIBXML_PATTERN_ENABLED' type='macro'/>
      <exports symbol='LIBXML_VALID_ENABLED' type='macro'/>
      <exports symbol='xmlTextWriterEndPI' type='function'/>
      <exports symbol='xmlTextWriterWriteBase64' type='function'/>
      <exports symbol='xmlTextWriterSetIndentString' type='function'/>
-     <exports symbol='xmlFreeTextWriter' type='function'/>
+     <exports symbol='xmlTextWriterStartAttribute' type='function'/>
      <exports symbol='xmlTextWriterEndComment' type='function'/>
      <exports symbol='xmlTextWriterWriteRawLen' type='function'/>
      <exports symbol='xmlTextWriterWriteDTDExternalEntityContents' type='function'/>
      <exports symbol='xmlTextWriterStartElementNS' type='function'/>
      <exports symbol='xmlTextWriterEndDTDEntity' type='function'/>
      <exports symbol='xmlNewTextWriter' type='function'/>
-     <exports symbol='xmlTextWriterStartAttribute' type='function'/>
+     <exports symbol='xmlFreeTextWriter' type='function'/>
      <exports symbol='xmlTextWriterWriteVFormatDTDAttlist' type='function'/>
      <exports symbol='xmlTextWriterStartPI' type='function'/>
      <exports symbol='xmlTextWriterStartElement' type='function'/>
      <exports symbol='xmlTextWriterWriteVFormatElementNS' type='function'/>
      <exports symbol='xmlTextWriterWriteDTDNotation' type='function'/>
      <exports symbol='xmlTextWriterWriteFormatElement' type='function'/>
-     <exports symbol='xmlTextWriterWriteElementNS' type='function'/>
+     <exports symbol='xmlTextWriterSetQuoteChar' type='function'/>
      <exports symbol='xmlTextWriterWriteString' type='function'/>
+     <exports symbol='xmlTextWriterWriteElementNS' type='function'/>
      <exports symbol='xmlTextWriterFullEndElement' type='function'/>
      <exports symbol='xmlTextWriterWriteVFormatAttributeNS' type='function'/>
      <exports symbol='xmlTextWriterFlush' type='function'/>
      <exports symbol='XPATH_INVALID_PREDICATE_ERROR' type='enum'/>
      <exports symbol='XPATH_XSLT_TREE' type='enum'/>
      <exports symbol='XPATH_EXPR_ERROR' type='enum'/>
+     <exports symbol='XPATH_FORBID_VARIABLE_ERROR' type='enum'/>
      <exports symbol='XPATH_INVALID_TYPE' type='enum'/>
      <exports symbol='XPATH_INVALID_CTXT_POSITION' type='enum'/>
      <exports symbol='XPATH_UNDEFINED' type='enum'/>
      <exports symbol='xmlXPathNINF' type='variable'/>
      <exports symbol='xmlXPathCastNodeSetToBoolean' type='function'/>
      <exports symbol='xmlXPathFuncLookupFunc' type='function'/>
+     <exports symbol='xmlXPathNodeEval' type='function'/>
      <exports symbol='xmlXPathCastNodeToString' type='function'/>
      <exports symbol='xmlXPathIsNaN' type='function'/>
      <exports symbol='xmlXPathContextSetCache' type='function'/>
      <exports symbol='xmlXPathCtxtCompile' type='function'/>
      <exports symbol='xmlXPathEvalFunc' type='function'/>
      <exports symbol='xmlXPathCastBooleanToString' type='function'/>
+     <exports symbol='xmlXPathSetContextNode' type='function'/>
      <exports symbol='xmlXPathCastNumberToBoolean' type='function'/>
      <exports symbol='xmlXPathFreeNodeSet' type='function'/>
      <exports symbol='xmlXPathFreeCompExpr' type='function'/>
       <info>Same as IS_PUBIDCHAR but for single-byte value</info>
       <arg name='c' info='an xmlChar value (normally unsigned char)'/>
     </macro>
+    <macro name='LIBXML2_NEW_BUFFER' file='tree'>
+      <info>Macro used to express that the API use the new buffers for xmlParserInputBuffer and xmlOutputBuffer. The change was introduced in 2.9.0.</info>
+    </macro>
     <macro name='LIBXML_ATTR_ALLOC_SIZE' file='xmlversion'>
       <info>Macro used to indicate to GCC this is an allocator function</info>
     </macro>
     <macro name='LIBXML_TEST_VERSION' file='xmlversion'>
       <info>Macro to check that the libxml version in use is compatible with the version the software has been compiled against</info>
     </macro>
+    <macro name='LIBXML_THREAD_ALLOC_ENABLED' file='xmlversion'>
+      <info>Whether the allocation hooks are per-thread</info>
+    </macro>
     <macro name='LIBXML_THREAD_ENABLED' file='xmlversion'>
       <info>Whether the thread support is configured in</info>
     </macro>
     <macro name='XML_LOCAL_NAMESPACE' file='tree'>
       <info>A namespace declaration node.</info>
     </macro>
+    <macro name='XML_MAX_DICTIONARY_LIMIT' file='parserInternals'>
+      <info>Maximum size allowed by the parser for a dictionary by default This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0</info>
+    </macro>
+    <macro name='XML_MAX_LOOKUP_LIMIT' file='parserInternals'>
+      <info>Maximum size allowed by the parser for ahead lookup This is an upper boundary enforced by the parser to avoid bad behaviour on &quot;unfriendly&apos; content Introduced in 2.9.0</info>
+    </macro>
     <macro name='XML_MAX_NAMELEN' file='parserInternals'>
       <info>Identifiers can be longer, but this will be more costly at runtime.</info>
     </macro>
+    <macro name='XML_MAX_NAME_LENGTH' file='parserInternals'>
+      <info>Maximum size allowed for a markup identitier This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Note that with the use of parsing dictionaries overriding the limit may result in more runtime memory usage in face of &quot;unfriendly&apos; content Introduced in 2.9.0</info>
+    </macro>
     <macro name='XML_MAX_TEXT_LENGTH' file='parserInternals'>
-      <info>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it.</info>
+      <info>Maximum size allowed for a single text node when building a tree. This is not a limitation of the parser but a safety boundary feature, use XML_PARSE_HUGE option to override it. Introduced in 2.9.0</info>
     </macro>
     <macro name='XML_SAX2_MAGIC' file='parser'>
       <info>Special constant found in SAX2 blocks initialized fields</info>
     <enum name='XML_BUFFER_ALLOC_HYBRID' file='tree' value='5' type='xmlBufferAllocationScheme' info=' exact up to a threshold, and doubleit thereafter'/>
     <enum name='XML_BUFFER_ALLOC_IMMUTABLE' file='tree' value='3' type='xmlBufferAllocationScheme' info='immutable buffer'/>
     <enum name='XML_BUFFER_ALLOC_IO' file='tree' value='4' type='xmlBufferAllocationScheme' info='special allocation scheme used for I/O'/>
+    <enum name='XML_BUF_OVERFLOW' file='xmlerror' value='7000' type='xmlParserErrors'/>
     <enum name='XML_C14N_1_0' file='c14n' value='0' type='xmlC14NMode' info='Origianal C14N 1.0 spec'/>
     <enum name='XML_C14N_1_1' file='c14n' value='2' type='xmlC14NMode' info=' C14N 1.1 spec'/>
     <enum name='XML_C14N_CREATE_CTXT' file='xmlerror' value='1950' type='xmlParserErrors'/>
     <enum name='XML_CHAR_ENCODING_UTF16BE' file='encoding' value='3' type='xmlCharEncoding' info='UTF-16 big endian'/>
     <enum name='XML_CHAR_ENCODING_UTF16LE' file='encoding' value='2' type='xmlCharEncoding' info='UTF-16 little endian'/>
     <enum name='XML_CHAR_ENCODING_UTF8' file='encoding' value='1' type='xmlCharEncoding' info='UTF-8'/>
-    <enum name='XML_CHECK_' file='xmlerror' value='6005' type='xmlParserErrors' info='5033'/>
     <enum name='XML_CHECK_ENTITY_TYPE' file='xmlerror' value='5012' type='xmlParserErrors' info='5012'/>
     <enum name='XML_CHECK_FOUND_ATTRIBUTE' file='xmlerror' value='5001' type='xmlParserErrors' info='5001'/>
     <enum name='XML_CHECK_FOUND_CDATA' file='xmlerror' value='5003' type='xmlParserErrors' info='5003'/>
     <enum name='XML_CHECK_WRONG_NEXT' file='xmlerror' value='5021' type='xmlParserErrors' info='5021'/>
     <enum name='XML_CHECK_WRONG_PARENT' file='xmlerror' value='5029' type='xmlParserErrors' info='5029'/>
     <enum name='XML_CHECK_WRONG_PREV' file='xmlerror' value='5019' type='xmlParserErrors' info='5019'/>
-    <enum name='XML_CHECK_X' file='xmlerror' value='6006' type='xmlParserErrors' info=' 503'/>
     <enum name='XML_COMMENT_NODE' file='tree' value='8' type='xmlElementType'/>
     <enum name='XML_DOCB_DOCUMENT_NODE' file='tree' value='21' type='xmlElementType'/>
     <enum name='XML_DOCUMENT_FRAG_NODE' file='tree' value='11' type='xmlElementType'/>
@@ -4888,6 +4930,7 @@ and not by parsing an instance'/>
     <enum name='XML_ERR_MIXED_NOT_FINISHED' file='xmlerror' value='53' type='xmlParserErrors' info='53'/>
     <enum name='XML_ERR_MIXED_NOT_STARTED' file='xmlerror' value='52' type='xmlParserErrors' info='52'/>
     <enum name='XML_ERR_NAME_REQUIRED' file='xmlerror' value='68' type='xmlParserErrors' info='68'/>
+    <enum name='XML_ERR_NAME_TOO_LONG' file='xmlerror' value='110' type='xmlParserErrors' info='110'/>
     <enum name='XML_ERR_NMTOKEN_REQUIRED' file='xmlerror' value='67' type='xmlParserErrors' info='67'/>
     <enum name='XML_ERR_NONE' file='xmlerror' value='0' type='xmlErrorLevel'/>
     <enum name='XML_ERR_NOTATION_NOT_FINISHED' file='xmlerror' value='49' type='xmlParserErrors' info='49'/>
@@ -4924,6 +4967,7 @@ and not by parsing an instance'/>
     <enum name='XML_ERR_UNSUPPORTED_ENCODING' file='xmlerror' value='32' type='xmlParserErrors' info='32'/>
     <enum name='XML_ERR_URI_FRAGMENT' file='xmlerror' value='92' type='xmlParserErrors' info='92'/>
     <enum name='XML_ERR_URI_REQUIRED' file='xmlerror' value='70' type='xmlParserErrors' info='70'/>
+    <enum name='XML_ERR_USER_STOP' file='xmlerror' value='111' type='xmlParserErrors' info='111'/>
     <enum name='XML_ERR_VALUE_REQUIRED' file='xmlerror' value='84' type='xmlParserErrors' info='84'/>
     <enum name='XML_ERR_VERSION_MISMATCH' file='xmlerror' value='109' type='xmlParserErrors' info='109'/>
     <enum name='XML_ERR_VERSION_MISSING' file='xmlerror' value='96' type='xmlParserErrors' info='96'/>
@@ -4939,6 +4983,7 @@ and not by parsing an instance'/>
     <enum name='XML_EXTERNAL_GENERAL_PARSED_ENTITY' file='entities' value='2' type='xmlEntityType'/>
     <enum name='XML_EXTERNAL_GENERAL_UNPARSED_ENTITY' file='entities' value='3' type='xmlEntityType'/>
     <enum name='XML_EXTERNAL_PARAMETER_ENTITY' file='entities' value='5' type='xmlEntityType'/>
+    <enum name='XML_FROM_BUFFER' file='xmlerror' value='29' type='xmlErrorDomain' info='The buffers module'/>
     <enum name='XML_FROM_C14N' file='xmlerror' value='21' type='xmlErrorDomain' info='The Canonicalization module'/>
     <enum name='XML_FROM_CATALOG' file='xmlerror' value='20' type='xmlErrorDomain' info='The Catalog module'/>
     <enum name='XML_FROM_CHECK' file='xmlerror' value='24' type='xmlErrorDomain' info='The error checking module'/>
@@ -4960,8 +5005,9 @@ and not by parsing an instance'/>
     <enum name='XML_FROM_RELAXNGV' file='xmlerror' value='19' type='xmlErrorDomain' info='The Relax-NG validator module'/>
     <enum name='XML_FROM_SCHEMASP' file='xmlerror' value='16' type='xmlErrorDomain' info='The W3C XML Schemas parser module'/>
     <enum name='XML_FROM_SCHEMASV' file='xmlerror' value='17' type='xmlErrorDomain' info='The W3C XML Schemas validation module'/>
-    <enum name='XML_FROM_SCHEMATRONV' file='xmlerror' value='28' type='xmlErrorDomain' info=' The Schematron validator module'/>
+    <enum name='XML_FROM_SCHEMATRONV' file='xmlerror' value='28' type='xmlErrorDomain' info='The Schematron validator module'/>
     <enum name='XML_FROM_TREE' file='xmlerror' value='2' type='xmlErrorDomain' info='The tree module'/>
+    <enum name='XML_FROM_URI' file='xmlerror' value='30' type='xmlErrorDomain' info=' The URI module'/>
     <enum name='XML_FROM_VALID' file='xmlerror' value='23' type='xmlErrorDomain' info='The XML DTD validation with valid context'/>
     <enum name='XML_FROM_WRITER' file='xmlerror' value='25' type='xmlErrorDomain' info='The xmlwriter module'/>
     <enum name='XML_FROM_XINCLUDE' file='xmlerror' value='11' type='xmlErrorDomain' info='The XInclude processing'/>
@@ -5081,6 +5127,7 @@ and not by parsing an instance'/>
     <enum name='XML_PARSER_SUBST_ENTITIES' file='xmlreader' value='4' type='xmlParserProperties'/>
     <enum name='XML_PARSER_SYSTEM_LITERAL' file='parser' value='13' type='xmlParserInputState' info='within a SYSTEM value'/>
     <enum name='XML_PARSER_VALIDATE' file='xmlreader' value='3' type='xmlParserProperties'/>
+    <enum name='XML_PARSE_BIG_LINES' file='parser' value='4194304' type='xmlParserOption' info=' Store big lines numbers in text PSVI field'/>
     <enum name='XML_PARSE_COMPACT' file='parser' value='65536' type='xmlParserOption' info='compact small text nodes; no modification of
 the tree allowed afterwards (will possibly
 crash if you try to modify the tree)'/>
@@ -5089,7 +5136,7 @@ crash if you try to modify the tree)'/>
     <enum name='XML_PARSE_DTDLOAD' file='parser' value='4' type='xmlParserOption' info='load the external subset'/>
     <enum name='XML_PARSE_DTDVALID' file='parser' value='16' type='xmlParserOption' info='validate with the DTD'/>
     <enum name='XML_PARSE_HUGE' file='parser' value='524288' type='xmlParserOption' info='relax any hardcoded limit from the parser'/>
-    <enum name='XML_PARSE_IGNORE_ENC' file='parser' value='2097152' type='xmlParserOption' info=' ignore internal document encoding hint'/>
+    <enum name='XML_PARSE_IGNORE_ENC' file='parser' value='2097152' type='xmlParserOption' info='ignore internal document encoding hint'/>
     <enum name='XML_PARSE_NOBASEFIX' file='parser' value='262144' type='xmlParserOption' info='do not fixup XINCLUDE xml:base uris'/>
     <enum name='XML_PARSE_NOBLANKS' file='parser' value='256' type='xmlParserOption' info='remove blank nodes'/>
     <enum name='XML_PARSE_NOCDATA' file='parser' value='16384' type='xmlParserOption' info='merge CDATA as text nodes'/>
@@ -5827,6 +5874,7 @@ crash if you try to modify the tree)'/>
     <enum name='XPATH_ENCODING_ERROR' file='xpath' value='20' type='xmlXPathError'/>
     <enum name='XPATH_EXPRESSION_OK' file='xpath' value='0' type='xmlXPathError'/>
     <enum name='XPATH_EXPR_ERROR' file='xpath' value='7' type='xmlXPathError'/>
+    <enum name='XPATH_FORBID_VARIABLE_ERROR' file='xpath' value='24' type='xmlXPathError'/>
     <enum name='XPATH_INVALID_ARITY' file='xpath' value='12' type='xmlXPathError'/>
     <enum name='XPATH_INVALID_CHAR_ERROR' file='xpath' value='21' type='xmlXPathError'/>
     <enum name='XPATH_INVALID_CTXT' file='xpath' value='22' type='xmlXPathError'/>
@@ -5970,6 +6018,10 @@ if necessary or NULL'/>
     <typedef name='xmlAutomataStatePtr' file='xmlautomata' type='xmlAutomataState *'>
       <info>A state int the automata description,</info>
     </typedef>
+    <struct name='xmlBuf' file='tree' type='struct _xmlBuf'/>
+    <typedef name='xmlBufPtr' file='tree' type='xmlBuf *'>
+      <info>A pointer to a buffer structure, the actual structure internals are not public</info>
+    </typedef>
     <struct name='xmlBuffer' file='tree' type='struct _xmlBuffer'>
       <field name='content' type='xmlChar *' info=' The buffer content UTF8'/>
       <field name='use' type='unsigned int' info=' The buffer size used'/>
@@ -6139,8 +6191,9 @@ set at the end of parsing'/>
       <field name='nexte' type='struct _xmlEntity *' info=' unused'/>
       <field name='URI' type='const xmlChar *' info=' the full URI as computed'/>
       <field name='owner' type='int' info=' does the entity own the childrens'/>
-      <field name='checked' type='int' info=' was the entity content checked this is also used to count entites
-* references done from that entity'/>
+      <field name='checked' type='int' info=' was the entity content checked this is also used to count entities
+* references done from that entity
+* and if it contains &apos;&lt;&apos;'/>
     </struct>
     <typedef name='xmlEntityPtr' file='tree' type='xmlEntity *'/>
     <typedef name='xmlEntityType' file='entities' type='enum'/>
@@ -6160,7 +6213,7 @@ set at the end of parsing'/>
       <field name='str2' type='char *' info=' extra string information'/>
       <field name='str3' type='char *' info=' extra string information'/>
       <field name='int1' type='int' info=' extra number information'/>
-      <field name='int2' type='int' info=' column number of the error or 0 if N/A (todo: rename this field when we would break ABI)'/>
+      <field name='int2' type='int' info=' error column # or 0 if N/A (todo: rename field when we would brk ABI)'/>
       <field name='ctxt' type='void *' info=' the parser context if available'/>
       <field name='node' type='void *' info=' the node in the tree'/>
     </struct>
@@ -6287,8 +6340,8 @@ set at the end of parsing'/>
       <field name='writecallback' type='xmlOutputWriteCallback' info=''/>
       <field name='closecallback' type='xmlOutputCloseCallback' info=''/>
       <field name='encoder' type='xmlCharEncodingHandlerPtr' info=' I18N conversions to UTF-8'/>
-      <field name='buffer' type='xmlBufferPtr' info=' Local buffer encoded in UTF-8 or ISOLatin'/>
-      <field name='conv' type='xmlBufferPtr' info=' if encoder != NULL buffer for output'/>
+      <field name='buffer' type='xmlBufPtr' info=' Local buffer encoded in UTF-8 or ISOLatin'/>
+      <field name='conv' type='xmlBufPtr' info=' if encoder != NULL buffer for output'/>
       <field name='written' type='int' info=' total number of byte written'/>
       <field name='error' type='int' info=''/>
     </struct>
@@ -6390,6 +6443,7 @@ actually an xmlCharEncoding'/>
       <field name='nodeInfoMax' type='int' info=' Max depth of the parsing stack'/>
       <field name='nodeInfoTab' type='xmlParserNodeInfo *' info=' array of nodeInfos'/>
       <field name='input_id' type='int' info=' we need to label inputs'/>
+      <field name='sizeentcopy' type='unsigned long' info=' volume of entity copy'/>
     </struct>
     <typedef name='xmlParserCtxtPtr' file='tree' type='xmlParserCtxt *'/>
     <typedef name='xmlParserErrors' file='xmlerror' type='enum'/>
@@ -6418,8 +6472,8 @@ actually an xmlCharEncoding'/>
       <field name='readcallback' type='xmlInputReadCallback' info=''/>
       <field name='closecallback' type='xmlInputCloseCallback' info=''/>
       <field name='encoder' type='xmlCharEncodingHandlerPtr' info=' I18N conversions to UTF-8'/>
-      <field name='buffer' type='xmlBufferPtr' info=' Local buffer encoded in UTF-8'/>
-      <field name='raw' type='xmlBufferPtr' info=' if encoder != NULL buffer for raw input'/>
+      <field name='buffer' type='xmlBufPtr' info=' Local buffer encoded in UTF-8'/>
+      <field name='raw' type='xmlBufPtr' info=' if encoder != NULL buffer for raw input'/>
       <field name='compressed' type='int' info=' -1=unknown, 0=not compressed, 1=compressed'/>
       <field name='error' type='int' info=''/>
       <field name='rawconsumed' type='unsigned long' info=' amount consumed from raw'/>
@@ -8305,7 +8359,7 @@ Could we use @subtypes for this?'/>
       <arg name='SystemID' type='const xmlChar *' info='the system identifier or NULL'/>
     </function>
     <function name='xmlAddPrevSibling' file='tree' module='tree'>
-      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
+      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)</cond>
       <info>Add a new node @elem as the previous sibling of @cur merging adjacent TEXT nodes (@elem may be freed) If the new node was already inserted in a document it is first unlinked from its existing context. If the new node is ATTRIBUTE, it is added into properties instead of children. If there is an attribute with equal name, it is first destroyed.</info>
       <return type='xmlNodePtr' info='the new node or NULL in case of error.'/>
       <arg name='cur' type='xmlNodePtr' info='the child node'/>
@@ -8507,6 +8561,43 @@ Could we use @subtypes for this?'/>
       <return type='const char *' info='a pointer to either &quot;True&quot; or &quot;False&quot;'/>
       <arg name='boolval' type='int' info='a bool to turn into text'/>
     </function>
+    <function name='xmlBufContent' file='tree' module='buf'>
+      <info>Function to extract the content of a buffer</info>
+      <return type='xmlChar *' info='the internal content'/>
+      <arg name='buf' type='const xmlBuf *' info='the buffer'/>
+    </function>
+    <function name='xmlBufEnd' file='tree' module='buf'>
+      <info>Function to extract the end of the content of a buffer</info>
+      <return type='xmlChar *' info='the end of the internal content or NULL in case of error'/>
+      <arg name='buf' type='xmlBufPtr' info='the buffer'/>
+    </function>
+    <function name='xmlBufGetNodeContent' file='tree' module='tree'>
+      <info>Read the value of a node @cur, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buf with this value</info>
+      <return type='int' info='0 in case of success and -1 in case of error.'/>
+      <arg name='buf' type='xmlBufPtr' info='a buffer xmlBufPtr'/>
+      <arg name='cur' type='const xmlNode *' info='the node being read'/>
+    </function>
+    <function name='xmlBufNodeDump' file='tree' module='xmlsave'>
+      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
+      <info>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+      <return type='size_t' info='the number of bytes written to the buffer, in case of error 0 is returned or @buf stores the error'/>
+      <arg name='buf' type='xmlBufPtr' info='the XML buffer output'/>
+      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='cur' type='xmlNodePtr' info='the current node'/>
+      <arg name='level' type='int' info='the imbrication level for indenting'/>
+      <arg name='format' type='int' info='is formatting allowed'/>
+    </function>
+    <function name='xmlBufShrink' file='tree' module='buf'>
+      <info>Remove the beginning of an XML buffer. NOTE that this routine behaviour differs from xmlBufferShrink() as it will return 0 on error instead of -1 due to size_t being used as the return type.</info>
+      <return type='size_t' info='the number of byte removed or 0 in case of failure'/>
+      <arg name='buf' type='xmlBufPtr' info='the buffer to dump'/>
+      <arg name='len' type='size_t' info='the number of xmlChar to remove'/>
+    </function>
+    <function name='xmlBufUse' file='tree' module='buf'>
+      <info>Function to get the length of a buffer</info>
+      <return type='size_t' info='the length of data in the internal content'/>
+      <arg name='buf' type='const xmlBufPtr' info='the buffer'/>
+    </function>
     <function name='xmlBufferAdd' file='tree' module='tree'>
       <info>Add a string range to an XML buffer. if len == -1, the length of str is recomputed.</info>
       <return type='int' info='0 successful, a positive error code number otherwise and -1 in case of internal or API error.'/>
@@ -8536,7 +8627,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlBufferContent' file='tree' module='tree'>
       <info>Function to extract the content of a buffer</info>
       <return type='const xmlChar *' info='the internal content'/>
-      <arg name='buf' type='const xmlBufferPtr' info='the buffer'/>
+      <arg name='buf' type='const xmlBuffer *' info='the buffer'/>
     </function>
     <function name='xmlBufferCreate' file='tree' module='tree'>
       <info>routine to create an XML buffer.</info>
@@ -8583,7 +8674,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlBufferLength' file='tree' module='tree'>
       <info>Function to get the length of a buffer</info>
       <return type='int' info='the length of data in the internal content'/>
-      <arg name='buf' type='const xmlBufferPtr' info='the buffer'/>
+      <arg name='buf' type='const xmlBuffer *' info='the buffer'/>
     </function>
     <function name='xmlBufferResize' file='tree' module='tree'>
       <info>Resize a buffer to accommodate minimum size of @size.</info>
@@ -9054,13 +9145,13 @@ Could we use @subtypes for this?'/>
     <function name='xmlCopyNode' file='tree' module='tree'>
       <info>Do a copy of the node.</info>
       <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
-      <arg name='node' type='const xmlNodePtr' info='the node'/>
+      <arg name='node' type='xmlNodePtr' info='the node'/>
       <arg name='extended' type='int' info='if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)'/>
     </function>
     <function name='xmlCopyNodeList' file='tree' module='tree'>
       <info>Do a recursive copy of the node list. Use xmlDocCopyNodeList() if possible to ensure string interning.</info>
       <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
-      <arg name='node' type='const xmlNodePtr' info='the first node in the list.'/>
+      <arg name='node' type='xmlNodePtr' info='the first node in the list.'/>
     </function>
     <function name='xmlCopyNotationTable' file='valid' module='valid'>
       <cond>defined(LIBXML_TREE_ENABLED)</cond>
@@ -9242,7 +9333,7 @@ Could we use @subtypes for this?'/>
       <arg name='nsPrefix' type='const xmlChar *' info='the requested namespace prefix'/>
     </functype>
     <function name='xmlDOMWrapAdoptNode' file='tree' module='tree'>
-      <info>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unliked node and just want to move it to the context of  If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.</info>
+      <info>References of out-of scope ns-decls are remapped to point to @destDoc: 1) If @destParent is given, then nsDef entries on element-nodes are used 2) If *no* @destParent is given, then @destDoc-&gt;oldNs entries are used This is the case when you have an unlinked node and just want to move it to the context of  If @destParent is given, it ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content. NOTE: This function was not intensively tested.</info>
       <return type='int' info='0 if the operation succeeded, 1 if a node of unsupported type was given, 2 if a node of not yet supported type was given and -1 on API/internal errors.'/>
       <arg name='ctxt' type='xmlDOMWrapCtxtPtr' info='the optional context for custom processing'/>
       <arg name='sourceDoc' type='xmlDocPtr' info='the optional sourceDoc'/>
@@ -9270,7 +9361,7 @@ Could we use @subtypes for this?'/>
     </function>
     <function name='xmlDOMWrapNewCtxt' file='tree' module='tree'>
       <info>Allocates and initializes a new DOM-wrapper context.</info>
-      <return type='xmlDOMWrapCtxtPtr' info='the xmlDOMWrapCtxtPtr or NULL in case of an internal errror.'/>
+      <return type='xmlDOMWrapCtxtPtr' info='the xmlDOMWrapCtxtPtr or NULL in case of an internal error.'/>
     </function>
     <function name='xmlDOMWrapReconcileNamespaces' file='tree' module='tree'>
       <info>Ensures that ns-references point to ns-decls hold on element-nodes. Ensures that the tree is namespace wellformed by creating additional ns-decls where needed. Note that, since prefixes of already existent ns-decls can be shadowed by this process, it could break QNames in attribute values or element content.  NOTE: This function was not intensively tested.</info>
@@ -9430,6 +9521,11 @@ Could we use @subtypes for this?'/>
       <return type='void'/>
       <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
     </function>
+    <function name='xmlDictGetUsage' file='dict' module='dict'>
+      <info>Get how much memory is used by a dictionary for strings Added in 2.9.0</info>
+      <return type='size_t' info='the amount of strings allocated'/>
+      <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+    </function>
     <function name='xmlDictLookup' file='dict' module='dict'>
       <info>Add the @name to the dictionnary @dict if not present.</info>
       <return type='const xmlChar *' info='the internal copy of the name or NULL in case of internal error'/>
@@ -9455,6 +9551,12 @@ Could we use @subtypes for this?'/>
       <return type='int' info='0 in case of success and -1 in case of error'/>
       <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
     </function>
+    <function name='xmlDictSetLimit' file='dict' module='dict'>
+      <info>Set a size limit for the dictionary Added in 2.9.0</info>
+      <return type='size_t' info='the previous limit of the dictionary or 0'/>
+      <arg name='dict' type='xmlDictPtr' info='the dictionnary'/>
+      <arg name='limit' type='size_t' info='the limit in bytes'/>
+    </function>
     <function name='xmlDictSize' file='dict' module='dict'>
       <info>Query the number of elements installed in the hash @dict.</info>
       <return type='int' info='the number of elements in the dictionnary or -1 in case of error'/>
@@ -9470,7 +9572,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlDocCopyNode' file='tree' module='tree'>
       <info>Do a copy of the node to a given document.</info>
       <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
-      <arg name='node' type='const xmlNodePtr' info='the node'/>
+      <arg name='node' type='xmlNodePtr' info='the node'/>
       <arg name='doc' type='xmlDocPtr' info='the document'/>
       <arg name='extended' type='int' info='if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable)'/>
     </function>
@@ -9478,7 +9580,7 @@ Could we use @subtypes for this?'/>
       <info>Do a recursive copy of the node list.</info>
       <return type='xmlNodePtr' info='a new #xmlNodePtr, or NULL in case of error.'/>
       <arg name='doc' type='xmlDocPtr' info='the target document'/>
-      <arg name='node' type='const xmlNodePtr' info='the first node in the list.'/>
+      <arg name='node' type='xmlNodePtr' info='the first node in the list.'/>
     </function>
     <function name='xmlDocDump' file='tree' module='xmlsave'>
       <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
@@ -9534,7 +9636,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlDocGetRootElement' file='tree' module='tree'>
       <info>Get the root element of the document (doc-&gt;children is a list containing possibly comments, PIs, etc ...).</info>
       <return type='xmlNodePtr' info='the #xmlNodePtr for the root or NULL'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
     </function>
     <function name='xmlDocSetRootElement' file='tree' module='tree'>
       <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)</cond>
@@ -9623,7 +9725,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlEncodeSpecialChars' file='entities' module='entities'>
       <info>Do a global encoding of a string, replacing the predefined entities this routine is reentrant, and result must be deallocated.</info>
       <return type='xmlChar *' info='A newly allocated string with the substitution done.'/>
-      <arg name='doc' type='xmlDocPtr' info='the document containing the string'/>
+      <arg name='doc' type='const xmlDoc *' info='the document containing the string'/>
       <arg name='input' type='const xmlChar *' info='A string to convert to XML.'/>
     </function>
     <functype name='xmlEntityReferenceFunc' file='parserInternals' module='parserInternals'>
@@ -9687,7 +9789,7 @@ Could we use @subtypes for this?'/>
       <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
       <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
       <arg name='langList' type='const xmlChar **' info='where to store the tokens'/>
-      <arg name='len' type='int' info='the allocated lenght of @list'/>
+      <arg name='len' type='int' info='the allocated length of @list'/>
     </function>
     <function name='xmlExpGetStart' file='xmlregexp' module='xmlregexp'>
       <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
@@ -9696,7 +9798,7 @@ Could we use @subtypes for this?'/>
       <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
       <arg name='exp' type='xmlExpNodePtr' info='the expression'/>
       <arg name='tokList' type='const xmlChar **' info='where to store the tokens'/>
-      <arg name='len' type='int' info='the allocated lenght of @list'/>
+      <arg name='len' type='int' info='the allocated length of @list'/>
     </function>
     <function name='xmlExpIsNillable' file='xmlregexp' module='xmlregexp'>
       <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
@@ -9716,7 +9818,7 @@ Could we use @subtypes for this?'/>
       <return type='xmlExpNodePtr' info='the node or NULL in case of error'/>
       <arg name='ctxt' type='xmlExpCtxtPtr' info='the expression context'/>
       <arg name='name' type='const xmlChar *' info='the atom name'/>
-      <arg name='len' type='int' info='the atom name lenght in byte (or -1);'/>
+      <arg name='len' type='int' info='the atom name length in byte (or -1);'/>
     </function>
     <function name='xmlExpNewCtxt' file='xmlregexp' module='xmlregexp'>
       <cond>defined(LIBXML_REGEXP_ENABLED) &amp;&amp; defined(LIBXML_EXPR_ENABLED)</cond>
@@ -10035,12 +10137,12 @@ Could we use @subtypes for this?'/>
     <function name='xmlGetDocCompressMode' file='tree' module='tree'>
       <info>get the compression ratio for a document, ZLIB based</info>
       <return type='int' info='0 (uncompressed) to 9 (max compression)'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
     </function>
     <function name='xmlGetDocEntity' file='entities' module='entities'>
       <info>Do an entity lookup in the document entity hash table and</info>
       <return type='xmlEntityPtr' info='the corresponding entity, otherwise a lookup is done in the predefined entities too.  Returns A pointer to the entity structure or NULL if not found.'/>
-      <arg name='doc' type='xmlDocPtr' info='the document referencing the entity'/>
+      <arg name='doc' type='const xmlDoc *' info='the document referencing the entity'/>
       <arg name='name' type='const xmlChar *' info='the entity name'/>
     </function>
     <function name='xmlGetDtdAttrDesc' file='valid' module='valid'>
@@ -10120,45 +10222,45 @@ Could we use @subtypes for this?'/>
     <function name='xmlGetIntSubset' file='tree' module='tree'>
       <info>Get the internal subset of a document</info>
       <return type='xmlDtdPtr' info='a pointer to the DTD structure or NULL if not found'/>
-      <arg name='doc' type='xmlDocPtr' info='the document pointer'/>
+      <arg name='doc' type='const xmlDoc *' info='the document pointer'/>
     </function>
     <function name='xmlGetLastChild' file='tree' module='tree'>
       <info>Search the last child of a node.</info>
       <return type='xmlNodePtr' info='the last child or NULL if none.'/>
-      <arg name='parent' type='xmlNodePtr' info='the parent node'/>
+      <arg name='parent' type='const xmlNode *' info='the parent node'/>
     </function>
     <function name='xmlGetLastError' file='xmlerror' module='error'>
       <info>Get the last global error registered. This is per thread if compiled with thread support.</info>
       <return type='xmlErrorPtr' info='NULL if no error occured or a pointer to the error'/>
     </function>
     <function name='xmlGetLineNo' file='tree' module='tree'>
-      <info>Get line number of @node. This requires activation of this option before invoking the parser by calling xmlLineNumbersDefault(1)</info>
+      <info>Get line number of @node. Try to override the limitation of lines being store in 16 bits ints if XML_PARSE_BIG_LINES parser option was used</info>
       <return type='long' info='the line number if successful, -1 otherwise'/>
-      <arg name='node' type='xmlNodePtr' info='valid node'/>
+      <arg name='node' type='const xmlNode *' info='valid node'/>
     </function>
     <function name='xmlGetNoNsProp' file='tree' module='tree'>
       <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. This function is similar to xmlGetProp except it will accept only an attribute in no namespace.</info>
       <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
     </function>
     <function name='xmlGetNodePath' file='tree' module='tree'>
       <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)</cond>
       <info>Build a structure based Path for the given node</info>
       <return type='xmlChar *' info='the new path or NULL in case of error. The caller must free the returned string'/>
-      <arg name='node' type='xmlNodePtr' info='a node'/>
+      <arg name='node' type='const xmlNode *' info='a node'/>
     </function>
     <function name='xmlGetNsList' file='tree' module='tree'>
       <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)</cond>
       <info>Search all the namespace applying to a given element.</info>
       <return type='xmlNsPtr *' info='an NULL terminated array of all the #xmlNsPtr found that need to be freed by the caller or NULL if no namespace if defined'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
-      <arg name='node' type='xmlNodePtr' info='the current node'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
+      <arg name='node' type='const xmlNode *' info='the current node'/>
     </function>
     <function name='xmlGetNsProp' file='tree' module='tree'>
       <info>Search and get the value of an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
       <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
       <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
     </function>
@@ -10176,7 +10278,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlGetProp' file='tree' module='tree'>
       <info>Search and get the value of an attribute associated to a node This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. NOTE: this function acts independently of namespaces associated to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp() for namespace aware processing.</info>
       <return type='xmlChar *' info='the attribute value or NULL if not found. It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
     </function>
     <function name='xmlGetRefs' file='valid' module='valid'>
@@ -10210,14 +10312,14 @@ Could we use @subtypes for this?'/>
     <function name='xmlHasNsProp' file='tree' module='tree'>
       <info>Search for an attribute associated to a node This attribute has to be anchored in the namespace specified. This does the entity substitution. This function looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off. Note that a namespace of NULL indicates to use the default namespace.</info>
       <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
       <arg name='nameSpace' type='const xmlChar *' info='the URI of the namespace'/>
     </function>
     <function name='xmlHasProp' file='tree' module='tree'>
       <info>Search an attribute associated to a node This function also looks in DTD attribute declaration for #FIXED or default declaration values unless DTD use has been turned off.</info>
       <return type='xmlAttrPtr' info='the attribute or the attribute declaration or NULL if neither was found.'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
       <arg name='name' type='const xmlChar *' info='the attribute name'/>
     </function>
     <function name='xmlHashAddEntry' file='hash' module='hash'>
@@ -10536,7 +10638,7 @@ Could we use @subtypes for this?'/>
       <return type='void'/>
     </function>
     <function name='xmlInitializeDict' file='dict' module='dict'>
-      <info>Do the dictionary mutex initialization. this function is not thread safe, initialization should preferably be done once at startup</info>
+      <info>Do the dictionary mutex initialization. this function is deprecated</info>
       <return type='int' info='0 if initialization was already done, and 1 if that call led to the initialization'/>
     </function>
     <function name='xmlInitializeGlobalState' file='globals' module='globals'>
@@ -10584,7 +10686,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlIsBlankNode' file='tree' module='tree'>
       <info>Checks whether this node is an empty or whitespace only (and possibly ignorable) text-node.</info>
       <return type='int' info='1 yes, 0 no'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
     </function>
     <function name='xmlIsChar' file='chvalid' module='chvalid'>
       <info>This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ instead</info>
@@ -10984,14 +11086,14 @@ Could we use @subtypes for this?'/>
     </function>
     <function name='xmlModuleOpen' file='xmlmodule' module='xmlmodule'>
       <cond>defined(LIBXML_MODULES_ENABLED)</cond>
-      <info>Opens a module/shared library given its name or path TODO: options are not yet implemented.</info>
+      <info>Opens a module/shared library given its name or path NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * . TODO: options are not yet implemented.</info>
       <return type='xmlModulePtr' info='a handle for the module or NULL in case of error'/>
       <arg name='name' type='const char *' info='the module name'/>
       <arg name='options' type='int' info='a set of xmlModuleOption'/>
     </function>
     <function name='xmlModuleSymbol' file='xmlmodule' module='xmlmodule'>
       <cond>defined(LIBXML_MODULES_ENABLED)</cond>
-      <info>Lookup for a symbol address in the given module</info>
+      <info>Lookup for a symbol address in the given module NOTE: that due to portability issues, behaviour can only be guaranteed with @name using ASCII. We canot guarantee that an UTF-8 string would work, which is why name is a const char * and not a const xmlChar * .</info>
       <return type='int' info='0 if the symbol was found, or -1 in case of error'/>
       <arg name='module' type='xmlModulePtr' info='the module'/>
       <arg name='name' type='const char *' info='the name of the symbol'/>
@@ -11403,7 +11505,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlNewDocText' file='tree' module='tree'>
       <info>Creation of a new text node within a document.</info>
       <return type='xmlNodePtr' info='a pointer to the new node object.'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
       <arg name='content' type='const xmlChar *' info='the text content'/>
     </function>
     <function name='xmlNewDocTextLen' file='tree' module='tree'>
@@ -11486,7 +11588,7 @@ Could we use @subtypes for this?'/>
       <arg name='name' type='xmlChar *' info='the node name'/>
     </function>
     <function name='xmlNewNs' file='tree' module='tree'>
-      <info>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. We use href==NULL in the case of an element creation where the namespace was not defined.</info>
+      <info>Creation of a new Namespace. This function will refuse to create a namespace with a similar prefix than an existing one present on this node. Note that for a default namespace, @prefix should be NULL.  We use href==NULL in the case of an element creation where the namespace was not defined.</info>
       <return type='xmlNsPtr' info='a new namespace pointer or NULL'/>
       <arg name='node' type='xmlNodePtr' info='the element carrying the namespace'/>
       <arg name='href' type='const xmlChar *' info='the URI associated'/>
@@ -11533,7 +11635,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlNewReference' file='tree' module='tree'>
       <info>Creation of a new reference node.</info>
       <return type='xmlNodePtr' info='a pointer to the new node object.'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
       <arg name='name' type='const xmlChar *' info='the reference name, or the reference string with &amp; and ;'/>
     </function>
     <function name='xmlNewStringInputStream' file='parserInternals' module='parserInternals'>
@@ -11657,11 +11759,11 @@ Could we use @subtypes for this?'/>
       <info>Read the value of a node @cur, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted. Fills up the buffer @buffer with this value</info>
       <return type='int' info='0 in case of success and -1 in case of error.'/>
       <arg name='buffer' type='xmlBufferPtr' info='a buffer'/>
-      <arg name='cur' type='xmlNodePtr' info='the node being read'/>
+      <arg name='cur' type='const xmlNode *' info='the node being read'/>
     </function>
     <function name='xmlNodeDump' file='tree' module='xmlsave'>
       <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
-      <info>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called</info>
+      <info>Dump an XML node, recursive behaviour,children are printed too. Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was called Since this is using xmlBuffer structures it is limited to 2GB and somehow deprecated, use xmlBufNodeDump() instead.</info>
       <return type='int' info='the number of bytes written to the buffer or -1 in case of error'/>
       <arg name='buf' type='xmlBufferPtr' info='the XML buffer output'/>
       <arg name='doc' type='xmlDocPtr' info='the document'/>
@@ -11683,42 +11785,42 @@ Could we use @subtypes for this?'/>
     <function name='xmlNodeGetBase' file='tree' module='tree'>
       <info>Searches for the BASE URL. The code should work on both XML and HTML document even if base mechanisms are completely different. It returns the base as defined in RFC 2396 sections 5.1.1. Base URI within Document Content and 5.1.2. Base URI from the Encapsulating Entity However it does not return the document base (5.1.3), use doc-&gt;URL in this case</info>
       <return type='xmlChar *' info='a pointer to the base URL, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='doc' type='xmlDocPtr' info='the document the node pertains to'/>
-      <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+      <arg name='doc' type='const xmlDoc *' info='the document the node pertains to'/>
+      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
     </function>
     <function name='xmlNodeGetContent' file='tree' module='tree'>
       <info>Read the value of a node, this can be either the text carried directly by this node if it&apos;s a TEXT node or the aggregate string of the values carried by this node child&apos;s (TEXT and ENTITY_REF). Entity references are substituted.</info>
       <return type='xmlChar *' info='a new #xmlChar * or NULL if no content is available. It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='cur' type='xmlNodePtr' info='the node being read'/>
+      <arg name='cur' type='const xmlNode *' info='the node being read'/>
     </function>
     <function name='xmlNodeGetLang' file='tree' module='tree'>
       <info>Searches the language of a node, i.e. the values of the xml:lang attribute or the one carried by the nearest ancestor.</info>
       <return type='xmlChar *' info='a pointer to the lang value, or NULL if not found It&apos;s up to the caller to free the memory with xmlFree().'/>
-      <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
     </function>
     <function name='xmlNodeGetSpacePreserve' file='tree' module='tree'>
       <info>Searches the space preserving behaviour of a node, i.e. the values of the xml:space attribute or the one carried by the nearest ancestor.</info>
       <return type='int' info='-1 if xml:space is not inherited, 0 if &quot;default&quot;, 1 if &quot;preserve&quot;'/>
-      <arg name='cur' type='xmlNodePtr' info='the node being checked'/>
+      <arg name='cur' type='const xmlNode *' info='the node being checked'/>
     </function>
     <function name='xmlNodeIsText' file='tree' module='tree'>
       <info>Is this node a Text node ?</info>
       <return type='int' info='1 yes, 0 no'/>
-      <arg name='node' type='xmlNodePtr' info='the node'/>
+      <arg name='node' type='const xmlNode *' info='the node'/>
     </function>
     <function name='xmlNodeListGetRawString' file='tree' module='tree'>
       <cond>defined(LIBXML_TREE_ENABLED)</cond>
       <info>Builds the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString() this function doesn&apos;t do any character encoding handling.</info>
       <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
-      <arg name='list' type='xmlNodePtr' info='a Node list'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
+      <arg name='list' type='const xmlNode *' info='a Node list'/>
       <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
     </function>
     <function name='xmlNodeListGetString' file='tree' module='tree'>
       <info>Build the string equivalent to the text contained in the Node list made of TEXTs and ENTITY_REFs</info>
       <return type='xmlChar *' info='a pointer to the string copy, the caller must free it with xmlFree().'/>
       <arg name='doc' type='xmlDocPtr' info='the document'/>
-      <arg name='list' type='xmlNodePtr' info='a Node list'/>
+      <arg name='list' type='const xmlNode *' info='a Node list'/>
       <arg name='inLine' type='int' info='should we replace entity contents or show their external form'/>
     </function>
     <function name='xmlNodeSetBase' file='tree' module='tree'>
@@ -11835,6 +11937,18 @@ Could we use @subtypes for this?'/>
       <return type='int' info='the number of byte written or -1 in case of error.'/>
       <arg name='out' type='xmlOutputBufferPtr' info='a buffered output'/>
     </function>
+    <function name='xmlOutputBufferGetContent' file='xmlIO' module='xmlIO'>
+      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
+      <info>Gives a pointer to the data currently held in the output buffer</info>
+      <return type='const xmlChar *' info='a pointer to the data or NULL in case of error'/>
+      <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
+    </function>
+    <function name='xmlOutputBufferGetSize' file='xmlIO' module='xmlIO'>
+      <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
+      <info>Gives the length of the data currently held in the output buffer</info>
+      <return type='size_t' info='0 in case or error or no data is held, the size otherwise'/>
+      <arg name='out' type='xmlOutputBufferPtr' info='an xmlOutputBufferPtr'/>
+    </function>
     <function name='xmlOutputBufferWrite' file='xmlIO' module='xmlIO'>
       <cond>defined(LIBXML_OUTPUT_ENABLED)</cond>
       <info>Write the content of the array in the output I/O buffer This routine handle the I18N transcoding from internal UTF-8 The buffer is lossless, i.e. will store in case of partial or delayed writes.</info>
@@ -12382,13 +12496,13 @@ Could we use @subtypes for this?'/>
     </functype>
     <function name='xmlParserInputGrow' file='parser' module='parserInternals'>
       <info>This function increase the input for the parser. It tries to preserve pointers to the input buffer, and keep already read data</info>
-      <return type='int' info='the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity'/>
+      <return type='int' info='the amount of char read, or -1 in case of error, 0 indicate the end of this entity'/>
       <arg name='in' type='xmlParserInputPtr' info='an XML parser input'/>
       <arg name='len' type='int' info='an indicative size for the lookahead'/>
     </function>
     <function name='xmlParserInputRead' file='parser' module='parserInternals'>
-      <info>This function refresh the input for the parser. It doesn&apos;t try to preserve pointers to the input buffer, and discard already read data</info>
-      <return type='int' info='the number of xmlChars read, or -1 in case of error, 0 indicate the end of this entity'/>
+      <info>This function was internal and is deprecated.</info>
+      <return type='int' info='-1 as this is an error to use it.'/>
       <arg name='in' type='xmlParserInputPtr' info='an XML parser input'/>
       <arg name='len' type='int' info='an indicative size for the lookahead'/>
     </function>
@@ -13008,7 +13122,7 @@ Could we use @subtypes for this?'/>
       <return type='int' info='1 if no validation problem was found or -1 otherwise'/>
       <arg name='ctxt' type='xmlRelaxNGValidCtxtPtr' info='the RelaxNG validation context'/>
       <arg name='data' type='const xmlChar *' info='some character data read'/>
-      <arg name='len' type='int' info='the lenght of the data'/>
+      <arg name='len' type='int' info='the length of the data'/>
     </function>
     <function name='xmlRelaxNGValidatePushElement' file='relaxng' module='relaxng'>
       <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
@@ -13119,7 +13233,7 @@ Could we use @subtypes for this?'/>
       <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
     </function>
     <function name='xmlSAX2EndElement' file='SAX2' module='SAX2'>
-      <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)</cond>
+      <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)</cond>
       <info>called when the end of an element has been detected.</info>
       <return type='void'/>
       <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
@@ -13271,7 +13385,7 @@ Could we use @subtypes for this?'/>
       <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
     </function>
     <function name='xmlSAX2StartElement' file='SAX2' module='SAX2'>
-      <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)</cond>
+      <cond>defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)</cond>
       <info>called when an opening tag has been processed.</info>
       <return type='void'/>
       <arg name='ctx' type='void *' info='the user data (XML parser context)'/>
@@ -13627,14 +13741,14 @@ Could we use @subtypes for this?'/>
     </function>
     <function name='xmlSchemaGetCanonValue' file='xmlschemastypes' module='xmlschemastypes'>
       <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
-      <info>Get a the cononical lexical representation of the value. The caller has to FREE the returned retValue.  WARNING: Some value types are not supported yet, resulting in a @retValue of &quot;???&quot;.  TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</info>
+      <info>Get the canonical lexical representation of the value. The caller has to FREE the returned retValue.  WARNING: Some value types are not supported yet, resulting in a @retValue of &quot;???&quot;.  TODO: XML Schema 1.0 does not define canonical representations for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay, anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.</info>
       <return type='int' info='0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.'/>
       <arg name='val' type='xmlSchemaValPtr' info='the precomputed value'/>
       <arg name='retValue' type='const xmlChar **' info='the returned value'/>
     </function>
     <function name='xmlSchemaGetCanonValueWhtsp' file='xmlschemastypes' module='xmlschemastypes'>
       <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
-      <info>Get a the cononical representation of the value. The caller has to free the returned @retValue.</info>
+      <info>Get the canonical representation of the value. The caller has to free the returned @retValue.</info>
       <return type='int' info='0 if the value could be built, 1 if the value type is not supported yet and -1 in case of API errors.'/>
       <arg name='val' type='xmlSchemaValPtr' info='the precomputed value'/>
       <arg name='retValue' type='const xmlChar **' info='the returned value'/>
@@ -13917,6 +14031,21 @@ Could we use @subtypes for this?'/>
       <arg name='value' type='const xmlChar *' info='the value to check'/>
       <arg name='val' type='xmlSchemaValPtr *' info='the return computed value'/>
     </function>
+    <function name='xmlSchemaValidateSetFilename' file='xmlschemas' module='xmlschemas'>
+      <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
+      <info>Workaround to provide file error reporting information when this is not provided by current APIs</info>
+      <return type='void'/>
+      <arg name='vctxt' type='xmlSchemaValidCtxtPtr' info='the schema validation context'/>
+      <arg name='filename' type='const char *' info='the file name'/>
+    </function>
+    <function name='xmlSchemaValidateSetLocator' file='xmlschemas' module='xmlschemas'>
+      <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
+      <info>Allows to set a locator function to the validation context, which will be used to provide file and line information since those are not provided as part of the SAX validation flow Setting @f to NULL disable the locator.</info>
+      <return type='void'/>
+      <arg name='vctxt' type='xmlSchemaValidCtxtPtr' info='a schema validation context'/>
+      <arg name='f' type='xmlSchemaValidityLocatorFunc' info='the locator function pointer'/>
+      <arg name='ctxt' type='void *' info='the locator context'/>
+    </function>
     <function name='xmlSchemaValidateStream' file='xmlschemas' module='xmlschemas'>
       <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
       <info>Validate an input based on a flow of SAX event from the parser and forward the events to the @sax handler with the provided @user_data the user provided @sax handler must be a SAX2 one.</info>
@@ -13935,6 +14064,14 @@ Could we use @subtypes for this?'/>
       <arg name='msg' type='const char *' info='the message'/>
       <arg name='...' type='...' info='extra arguments'/>
     </functype>
+    <functype name='xmlSchemaValidityLocatorFunc' file='xmlschemas' module='xmlschemas'>
+      <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
+      <info>A schemas validation locator, a callback called by the validator. This is used when file or node informations are not available to find out what file and line number are affected</info>
+      <return type='int' info='0 in case of success and -1 in case of error'/>
+      <arg name='ctx' type='void *' info='user provided context'/>
+      <arg name='file' type='const char **' info='returned file information'/>
+      <arg name='line' type='unsigned long *' info='returned line information'/>
+    </functype>
     <functype name='xmlSchemaValidityWarningFunc' file='xmlschemas' module='xmlschemas'>
       <cond>defined(LIBXML_SCHEMAS_ENABLED)</cond>
       <info>Signature of a warning callback from an XSD validation</info>
@@ -14320,7 +14457,7 @@ Could we use @subtypes for this?'/>
     </function>
     <function name='xmlSplitQName3' file='tree' module='tree'>
       <info>parse an XML qualified name string,i</info>
-      <return type='const xmlChar *' info='NULL if it is not a Qualified Name, otherwise, update len with the lenght in byte of the prefix and return a pointer to the start of the name without the prefix'/>
+      <return type='const xmlChar *' info='NULL if it is not a Qualified Name, otherwise, update len with the length in byte of the prefix and return a pointer to the start of the name without the prefix'/>
       <arg name='name' type='const xmlChar *' info='the full QName'/>
       <arg name='len' type='int *' info='an int *'/>
     </function>
@@ -14463,7 +14600,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlStringGetNodeList' file='tree' module='tree'>
       <info>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</info>
       <return type='xmlNodePtr' info='a pointer to the first child'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
       <arg name='value' type='const xmlChar *' info='the value of the attribute'/>
     </function>
     <function name='xmlStringLenDecodeEntities' file='parserInternals' module='parser'>
@@ -14480,7 +14617,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlStringLenGetNodeList' file='tree' module='tree'>
       <info>Parse the value string and build the node list associated. Should produce a flat tree with only TEXTs and ENTITY_REFs.</info>
       <return type='xmlNodePtr' info='a pointer to the first child'/>
-      <arg name='doc' type='xmlDocPtr' info='the document'/>
+      <arg name='doc' type='const xmlDoc *' info='the document'/>
       <arg name='value' type='const xmlChar *' info='the value of the text'/>
       <arg name='len' type='int' info='the length of the string value'/>
     </function>
@@ -15133,6 +15270,13 @@ Could we use @subtypes for this?'/>
       <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
       <arg name='str' type='const xmlChar *' info='the xmlChar string'/>
     </function>
+    <function name='xmlTextWriterSetQuoteChar' file='xmlwriter' module='xmlwriter'>
+      <cond>defined(LIBXML_WRITER_ENABLED)</cond>
+      <info>Set the character used for quoting attributes.</info>
+      <return type='int' info='-1 on error or 0 otherwise.'/>
+      <arg name='writer' type='xmlTextWriterPtr' info='the xmlTextWriterPtr'/>
+      <arg name='quotechar' type='xmlChar' info='the quote character'/>
+    </function>
     <function name='xmlTextWriterStartAttribute' file='xmlwriter' module='xmlwriter'>
       <cond>defined(LIBXML_WRITER_ENABLED)</cond>
       <info>Start an xml attribute.</info>
@@ -16799,7 +16943,7 @@ Could we use @subtypes for this?'/>
       <arg name='len' type='int' info='total number to copy'/>
     </function>
     <function name='xmlUnlinkNode' file='tree' module='tree'>
-      <info>Unlink a node from it&apos;s current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it.</info>
+      <info>Unlink a node from it&apos;s current context, the node is not freed If one need to free the node, use xmlFreeNode() routine after the unlink to discard it. Note that namespace nodes can&apos;t be unlinked as they do not have pointer to their parent.</info>
       <return type='void'/>
       <arg name='cur' type='xmlNodePtr' info='the node'/>
     </function>
@@ -16927,7 +17071,7 @@ Could we use @subtypes for this?'/>
       <arg name='elem' type='xmlElementPtr' info='an element definition'/>
     </function>
     <function name='xmlValidateNCName' file='tree' module='tree'>
-      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)</cond>
+      <cond>defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)</cond>
       <info>Check that a value conforms to the lexical space of NCName</info>
       <return type='int' info='0 if this validates, a positive error code number otherwise and -1 in case of internal or API error.'/>
       <arg name='value' type='const xmlChar *' info='the value to check'/>
@@ -17031,7 +17175,7 @@ Could we use @subtypes for this?'/>
       <return type='int' info='1 if no validation problem was found or 0 otherwise'/>
       <arg name='ctxt' type='xmlValidCtxtPtr' info='the validation context'/>
       <arg name='data' type='const xmlChar *' info='some character data read'/>
-      <arg name='len' type='int' info='the lenght of the data'/>
+      <arg name='len' type='int' info='the length of the data'/>
     </function>
     <function name='xmlValidatePushElement' file='valid' module='valid'>
       <cond>defined(LIBXML_VALID_ENABLED) &amp;&amp; defined(LIBXML_REGEXP_ENABLED)</cond>
@@ -17765,6 +17909,14 @@ Could we use @subtypes for this?'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='cur' type='xmlNodePtr' info='the current node in the traversal'/>
     </function>
+    <function name='xmlXPathNodeEval' file='xpath' module='xpath'>
+      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
+      <info>Evaluate the XPath Location Path in the given context. The node &apos;node&apos; is set as the context node. The context node is not restored.</info>
+      <return type='xmlXPathObjectPtr' info='the xmlXPathObjectPtr resulting from the evaluation or NULL. the caller has to free the object.'/>
+      <arg name='node' type='xmlNodePtr' info='the node to to use as the context node'/>
+      <arg name='str' type='const xmlChar *' info='the XPath expression'/>
+      <arg name='ctx' type='xmlXPathContextPtr' info='the XPath context'/>
+    </function>
     <function name='xmlXPathNodeLeading' file='xpathInternals' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED)</cond>
       <info>Implements the EXSLT - Sets leading() function: node-set set:leading (node-set, node-set) @nodes is sorted by document order, then #exslSetsNodeLeadingSorted is called.</info>
@@ -17782,14 +17934,14 @@ Could we use @subtypes for this?'/>
     <function name='xmlXPathNodeSetAdd' file='xpathInternals' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED)</cond>
       <info>add a new xmlNodePtr to an existing NodeSet</info>
-      <return type='void'/>
+      <return type='int' info='0 in case of success, and -1 in case of error'/>
       <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
       <arg name='val' type='xmlNodePtr' info='a new xmlNodePtr'/>
     </function>
     <function name='xmlXPathNodeSetAddNs' file='xpathInternals' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED)</cond>
       <info>add a new namespace node to an existing NodeSet</info>
-      <return type='void'/>
+      <return type='int' info='0 in case of success and -1 in case of error'/>
       <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
       <arg name='node' type='xmlNodePtr' info='the hosting node'/>
       <arg name='ns' type='xmlNsPtr' info='a the namespace node'/>
@@ -17797,7 +17949,7 @@ Could we use @subtypes for this?'/>
     <function name='xmlXPathNodeSetAddUnique' file='xpathInternals' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED)</cond>
       <info>add a new xmlNodePtr to an existing NodeSet, optimized version when we are sure the node is not already in the set.</info>
-      <return type='void'/>
+      <return type='int' info='0 in case of success and -1 in case of failure'/>
       <arg name='cur' type='xmlNodeSetPtr' info='the initial node set'/>
       <arg name='val' type='xmlNodePtr' info='a new xmlNodePtr'/>
     </function>
@@ -18051,6 +18203,13 @@ Could we use @subtypes for this?'/>
       <arg name='ctxt' type='xmlXPathParserContextPtr' info='the XPath Parser context'/>
       <arg name='nargs' type='int' info='the number of arguments'/>
     </function>
+    <function name='xmlXPathSetContextNode' file='xpath' module='xpath'>
+      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
+      <info>Sets &apos;node&apos; as the context node. The node must be in the same document as that associated with the context.</info>
+      <return type='int' info='-1 in case of error or 0 if successful'/>
+      <arg name='node' type='xmlNodePtr' info='the node to to use as the context node'/>
+      <arg name='ctx' type='xmlXPathContextPtr' info='the XPath context'/>
+    </function>
     <function name='xmlXPathStartsWithFunction' file='xpathInternals' module='xpath'>
       <cond>defined(LIBXML_XPATH_ENABLED)</cond>
       <info>Implement the starts-with() XPath function boolean starts-with(string, string) The starts-with function returns true if the first argument string starts with the second argument string, and otherwise returns false.</info>
index 574f83b..da61d57 100644 (file)
@@ -8,59 +8,95 @@
   </vendor>
   <product id="libxml2">
     <name>libxml2</name>
-    <version>2.7.8</version>
-    <last-release> Nov 4 2010</last-release>
+    <version>2.9.1</version>
+    <last-release> Apr 19 2013</last-release>
     <info-url>http://xmlsoft.org/</info-url>
     <changes>   -  Features:
-    480323 add code to plug in ICU converters by default (Giuseppe Iuculano),
-    Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg)
+    Support for Python3 (Daniel Veillard),
+    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)
   
    -  Documentation:
-    Fix devhelp documentation installation (Mike Hommey),
-    Fix web site encoding problems (Daniel Veillard),
-    Fix a couple of typo in HTML parser error messages (Michael Day),
-    Forgot to update the news page for 0.7.7 (Daniel Veillard)
+    Add documentation for xmllint --xpath (Daniel Veillard),
+    Fix the URL of the SAX documentation from James (Daniel Veillard),
+    Fix spelling of "length". (Michael Wood)
   
    -  Portability:
-    607273 Fix python detection on MSys/Windows (LRN),
-    614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer),
-    Fix compilation with Clang (Koop Mast),
-    Fix Win32 build (Rob Richards)
+    Fix python bindings with versions older than 2.7 (Daniel Veillard),
+    rebuild docs:Makefile.am (Roumen Petrov),
+    elfgcchack.h after rebuild in doc (Roumen Petrov),
+    elfgcchack for buf module (Roumen Petrov),
+    Fix a uneeded and wrong extra link parameter (Daniel Veillard),
+    Few cleanup patches for Windows (Denis Pauk),
+    Fix rpmbuild --nocheck (Mark Salter),
+    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),
+    Fix Broken multi-arch support in xml2-config (Daniel Veillard),
+    Fix a portability issue for GCC &lt; 3.4.0 (Daniel Veillard),
+    Windows build fixes (Daniel Richard),
+    Fix a thread portability problem (Friedrich Haubensak),
+    Downgrade autoconf requirement to 2.63 (Daniel Veillard)
   
    -  Bug Fixes:
-    595789 fix a remaining potential Solaris problem (Daniel Veillard),
-    617468 fix progressive HTML parsing with style using "'" (Denis Pauk),
-    616478 Fix xmllint shell write command (Gwenn Kahz),
-    614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile),
-    627987 Fix XSD IDC errors in imported schemas (Jim Panetta),
-    629325 XPath rounding errors first cleanup (Phil Shafer),
-    630140 fix iso995x encoding error (Daniel Veillard),
-    make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard),
-    Fix a change of semantic on XPath preceding and following axis (Daniel Veillard),
-    Fix a potential segfault due to weak symbols on pthreads (Mike Hommey),
-    Fix a leak in XPath compilation (Daniel Veillard),
-    Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard),
-    Avoid a descriptor leak in catalog loading code (Carlo Bramini),
-    Fix a small bug in XPath evaluation code (Marius Wachtler),
-    Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard),
-    Fix errors in XSD double validation check (Csaba Raduly),
-    Fix handling of apos in URIs (Daniel Veillard),
-    xmlTextReaderReadOuterXml should handle DTD (Rob Richards),
-    Autogen.sh needs to create m4 directory (Rob Richards)
+    Fix a linking error for python bindings (Daniel Veillard),
+    Fix a couple of return without value (Jüri Aedla),
+    Improve the hashing functions (Daniel Franke),
+    Improve handling of xmlStopParser() (Daniel Veillard),
+    Remove risk of lockup in dictionary initialization (Daniel Veillard),
+    Activate detection of encoding in external subset (Daniel Veillard),
+    Fix an output buffer flushing conversion bug (Mikhail Titov),
+    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),
+    Fix configure cannot remove messages (Gilles Espinasse),
+    fix schema validation in combination with xsi:nil (Daniel Veillard),
+    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),
+    Fix a few problems with setEntityLoader (Alexey Neyman),
+    Detect excessive entities expansion upon replacement (Daniel Veillard),
+    Fix the flushing out of raw buffers on encoding conversions (Daniel,
+Veillard),
+    Fix some buffer conversion issues (Daniel Veillard),
+    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,
+Veillard),
+    Fix an error in the progressive DTD parsing code (Dan Winship),
+    xmllint should not load DTD by default when using the reader (Daniel,
+Veillard),
+    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),
+    Fix potential out of bound access (Daniel Veillard),
+    Fix large parse of file from memory (Daniel Veillard),
+    Fix a bug in the nsclean option of the parser (Daniel Veillard),
+    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,
+Veillard),
+    Remove potential calls to exit() (Daniel Veillard)
   
    -  Improvements:
-    606592 update language ID parser to RFC 5646 (Daniel Veillard),
-    Sort python generated stubs (Mike Hommey),
-    Add an HTML parser option to avoid a default doctype (Daniel Veillard)
+    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),
+    Fix tree iterators broken by 2to3 script (Daniel Veillard),
+    update all tests for Python3 and Python2 (Daniel Veillard),
+    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),
+    Fix compilation on Python3 (Daniel Veillard),
+    Converting apibuild.py to python3 (Daniel Veillard),
+    First pass at starting porting to python3 (Daniel Veillard),
+    updated configure.in for python3 (Daniel Veillard),
+    Add support for xpathRegisterVariable in Python (Shaun McCance),
+    Added a regression tests from bug 694228 data (Daniel Veillard),
+    Cache presence of '&lt;' in entities content (Daniel Veillard),
+    Avoid extra processing on entities (Daniel Veillard),
+    Python binding for xmlRegisterInputCallback (Alexey Neyman),
+    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),
+    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),
+    Adding streaming validation to runtest checks (Daniel Veillard),
+    Add a --pushsmall option to xmllint (Daniel Veillard)
   
    -  Cleanups:
-    618831 don't ship generated files in git (Adrian Bunk),
-    Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk),
-    Various cleanups on encoding handling (Daniel Veillard),
-    Fix xmllint to use format=1 for default formatting (Adam Spragg),
-    Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg),
-    Cleanup encoding pointer comparison (Nikolay Sivov),
-    Small code cleanup on previous patch (Daniel Veillard)
+    Switched comment in file to UTF-8 encoding (Daniel Veillard),
+    Extend gitignore (Daniel Veillard),
+    Silent the new python test on input (Alexey Neyman),
+    Cleanup of a duplicate test (Daniel Veillard),
+    Cleanup on duplicate test expressions (Daniel Veillard),
+    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,
+Gansterer),
+    Spec cleanups and a fix for multiarch support (Daniel Veillard),
+    Silence a clang warning (Daniel Veillard),
+    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),
+    rand_seed should be static in dict.c (Wouter Van Rooy),
+    Fix typos in parser comments (Jan Pokorný)
   
 
 </changes>
index 1e7da8e..5c03ba3 100644 (file)
@@ -7,13 +7,417 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Releases</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Releases</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Items not finished and worked on, get in touch with the list if you want
-to help those</p><ul><li>More testing on RelaxNG</li>
-  <li>Finishing up <a href="http://www.w3.org/TR/xmlschema-1/">XML
-  Schemas</a></li>
-</ul><p>The <a href="ChangeLog.html">change log</a> describes the recents commits
-to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</p><p>Here is the list of public releases:</p><h3>2.8.0: May 23 2012</h3><ul><li>Features:
-- add lzma compression support (Anders F Bjorklund)
+</style><title>Releases</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Releases</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>The <a href="ChangeLog.html">change log</a> describes the recents commits
+to the <a href="http://git.gnome.org/browse/libxml2/">GIT</a> code base.</p><p>Here is the list of public releases:</p><h3>2.9.2: Oct 16 2014</h3><ul>
+  <li>Security:<br />
+  Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),<br />
+  CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)<br />
+  </li>
+
+  <li>Bug Fixes:<br />
+  fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),<br />
+  xmlmemory: handle realloc properly (Yegor Yefremov),<br />
+  Python generator bug raised by the const change (Daniel Veillard),<br />
+  Windows Critical sections not released correctly (Daniel Veillard),<br />
+  Parser error on repeated recursive entity expansion containing &amp;lt; (Daniel Veillard),<br />
+  xpointer : fixing Null Pointers (Gaurav Gupta),<br />
+  Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),<br />
+  parser bug on misformed namespace attributes (Dennis Filder),<br />
+  Pointer dereferenced before null check (Daniel Veillard),<br />
+  Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),<br />
+  Possible overflow in HTMLParser.c (Daniel Veillard),<br />
+  python/tests/sync.py assumes Python dictionaries are ordered (John Beck),<br />
+  Fix Enum check and missing break (Gaurav Gupta),<br />
+  xmlIO: Handle error returns from dup() (Philip Withnall),<br />
+  Fix a problem properly saving URIs (Daniel Veillard),<br />
+  wrong error column in structured error when parsing attribute values (Juergen Keil),<br />
+  wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),<br />
+  no error column in structured error handler for xml schema validation errors (Juergen Keil),<br />
+  Couple of Missing Null checks (Gaurav Gupta),<br />
+  Add couple of missing Null checks (Daniel Veillard),<br />
+  xmlschemastypes: Fix potential array overflow (Philip Withnall),<br />
+  runtest: Fix a memory leak on parse failure (Philip Withnall),<br />
+  xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),<br />
+  xmlcatalog: Fix a memory leak on quit (Philip Withnall),<br />
+  HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),<br />
+  Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),<br />
+  Avoid Possible Null Pointer in trio.c (Gaurav Gupta),<br />
+  Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),<br />
+  XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),<br />
+  Fix various Missing Null checks (Gaurav Gupta),<br />
+  Fix a potential NULL dereference (Daniel Veillard),<br />
+  Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),<br />
+  Add a missing argument check (Gaurav Gupta),<br />
+  Adding a check in case of allocation error (Gaurav Gupta),<br />
+  xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),<br />
+  Adding some missing NULL checks (Gaurav),<br />
+  Fixes for xmlInitParserCtxt (Daniel Veillard),<br />
+  Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),<br />
+  erroneously ignores a validation error if no error callback set (Daniel Veillard),<br />
+  xmllint was not parsing the --c14n11 flag (Sérgio Batista),<br />
+  Avoid Possible null pointer dereference in memory debug mode (Gaurav),<br />
+  Avoid Double Null Check (Gaurav),<br />
+  Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),<br />
+  Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),<br />
+  Avoid a possible NULL pointer dereference (Gaurav),<br />
+  Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),<br />
+  Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),<br />
+  fixing a ptotential uninitialized access (Daniel Veillard),<br />
+  Fix an fd leak in an error case (Daniel Veillard),<br />
+  Missing initialization for the catalog module (Daniel Veillard),<br />
+  Handling of XPath function arguments in error case (Nick Wellnhofer),<br />
+  Fix a couple of missing NULL checks (Gaurav),<br />
+  Avoid a possibility of dangling encoding handler (Gaurav),<br />
+  Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),<br />
+  Fix a bug loading some compressed files (Mike Alexander),<br />
+  Fix XPath node comparison bug (Gaurav),<br />
+  Type mismatch in xmlschemas.c (Gaurav),<br />
+  Type mismatch in xmlschemastypes.c (Gaurav),<br />
+  Avoid a deadcode in catalog.c (Daniel Veillard),<br />
+  run close socket on Solaris, same as we do on other platforms (Denis Pauk),<br />
+  Fix pointer dereferenced before null check (Gaurav),<br />
+  Fix a potential NULL dereference in tree code (Daniel Veillard),<br />
+  Fix potential NULL pointer dereferences in regexp code (Gaurav),<br />
+  xmllint --pretty crashed without following numeric argument (Tim Galeckas),<br />
+  Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),<br />
+  Fix XPath '//' optimization with predicates (Nick Wellnhofer),<br />
+  Clear up a potential NULL dereference (Daniel Veillard),<br />
+  Fix a possible NULL dereference (Gaurav),<br />
+  Avoid crash if allocation fails (Daniel Veillard),<br />
+  Remove occasional leading space in XPath number formatting (Daniel Veillard),<br />
+  Fix handling of mmap errors (Daniel Veillard),<br />
+  Catch malloc error and exit accordingly (Daniel Veillard),<br />
+  missing else in xlink.c (Ami Fischman),<br />
+  Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),<br />
+  Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),<br />
+  properly quote the namespace uris written out during c14n (Aleksey Sanin),<br />
+  Remove premature XInclude check on URI being relative (Alexey Neyman),<br />
+  Fix missing break on last() function for attributes (dcb),<br />
+  Do not URI escape in server side includes (Romain Bondue),<br />
+  Fix an error in xmlCleanupParser (Alexander Pastukhov)<br />
+  </li>
+
+  <li>Documentation:<br />
+  typo in error messages "colon are forbidden from..." (Daniel Veillard),<br />
+  Fix a link to James SAX documentation old page (Daniel Veillard),<br />
+  Fix typos in relaxng.c (Jan Pokorný),<br />
+  Fix a doc typo (Daniel Veillard),<br />
+  Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),<br />
+  Add limitations about encoding conversion (Daniel Veillard),<br />
+  Fix typos in xmlschemas{,types}.c (Jan Pokorný),<br />
+  Fix incorrect spelling entites-&gt;entities (Jan Pokorný),<br />
+  Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)<br />
+  </li>
+
+  <li>Portability:<br />
+  AC_CONFIG_FILES and executable bit (Roumen Petrov),<br />
+  remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),<br />
+  fix some tabs mixing incompatible with python3 (Roumen Petrov),<br />
+  Visual Studio 14 CTP defines snprintf() (Francis Dupont),<br />
+  OS400: do not try to copy unexisting doc files (Patrick Monnerat),<br />
+  OS400: use either configure.ac or configure.in. (Patrick Monnerat),<br />
+  os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),<br />
+  OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),<br />
+  OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),<br />
+  OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),<br />
+  OS400: include in distribution tarball. (Patrick Monnerat),<br />
+  OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),<br />
+  OS400: Add compilation scripts. (Patrick Monnerat),<br />
+  OS400: ILE RPG language header files. (Patrick Monnerat),<br />
+  OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),<br />
+  OS400: UTF8&lt;--&gt;EBCDIC wrappers for system and external library calls (Patrick Monnerat),<br />
+  OS400: Easy character transcoding support (Patrick Monnerat),<br />
+  OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),<br />
+  OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),<br />
+  Fix building when configuring without xpath and xptr (Daniel Veillard),<br />
+  configure: Add --with-python-install-dir (Jonas Eriksson),<br />
+  Fix compilation with minimum and xinclude. (Nicolas Le Cam),<br />
+  Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),<br />
+  Fix compilation with minimum and schematron. (Nicolas Le Cam),<br />
+  Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),<br />
+  Don't use xmlValidateName() when not available. (Nicolas Le Cam),<br />
+  Fix a portability issue on Windows (Longstreth Jon),<br />
+  Various portability patches for OpenVMS (Jacob (Jouk) Jansen),<br />
+  Use specific macros for portability to OS/400 (Patrick Monnerat),<br />
+  Add macros needed for OS/400 portability (Patrick Monnerat),<br />
+  Portability patch for fopen on OS/400 (Patrick Monnerat),<br />
+  Portability fixes for OS/400 (Patrick Monnerat),<br />
+  Improve va_list portability (Patrick Monnerat),<br />
+  Portability fix (Patrick Monnerat),<br />
+  Portability fix (Patrick Monnerat),<br />
+  Generic portability fix (Patrick Monnerat),<br />
+  Shortening lines in headers (Patrick Monnerat),<br />
+  build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),<br />
+  build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),<br />
+  fix some tabs mixing incompatible with python3 (Daniel Veillard),<br />
+  add additional defines checks for support "./configure --with-minimum" (Denis Pauk),<br />
+  Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),<br />
+  python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),<br />
+  python: Fix compiler warnings when building python3 bindings (Armin K),<br />
+  Fix for compilation with python 2.6.8 (Petr Sumbera)<br />
+  </li>
+
+  <li>Improvements:<br />
+  win32/libxml2.def.src after rebuild in doc (Roumen Petrov),<br />
+  elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),<br />
+  elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),<br />
+  Provide cmake module (Samuel Martin),<br />
+  Fix a couple of issues raised by make dist (Daniel Veillard),<br />
+  Fix and add const qualifiers (Kurt Roeckx),<br />
+  Preparing for upcoming release of 2.9.2 (Daniel Veillard),<br />
+  Fix zlib and lzma libraries check via command line (Dmitriy),<br />
+  wrong error column in structured error when parsing end tag (Juergen Keil),<br />
+  doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),<br />
+  Add methods for python3 iterator (Ron Angeles),<br />
+  Support element node traversal in document fragments. (Kyle VanderBeek),<br />
+  xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),<br />
+  Added macros for argument casts (Eric Zurcher),<br />
+  adding init calls to xml and html Read parsing entry points (Daniel Veillard),<br />
+  Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),<br />
+  Implement choice for name classes on attributes (Shaun McCance),<br />
+  Two small namespace tweaks (Daniel Veillard),<br />
+  xmllint --memory should fail on empty files (Daniel Veillard),<br />
+  Cast encoding name to char pointer to match arg type (Nikolay Sivov)<br />
+  </li>
+
+  <li>Cleanups:<br />
+  Removal of old configure.in (Daniel Veillard),<br />
+  Unreachable code in tree.c (Gaurav Gupta),<br />
+  Remove a couple of dead conditions (Gaurav Gupta),<br />
+  Avoid some dead code and cleanup in relaxng.c (Gaurav),<br />
+  Drop not needed checks (Denis Pauk),<br />
+  Fix a wrong test (Daniel Veillard)<br />
+  </li>
+</ul><h3>2.9.1: Apr 19 2013</h3><ul>
+  <li> Features:<br />
+    Support for Python3 (Daniel Veillard),<br />
+    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)<br />
+  </li>
+
+  <li> Documentation:<br />
+    Add documentation for xmllint --xpath (Daniel Veillard),<br />
+    Fix the URL of the SAX documentation from James (Daniel Veillard),<br />
+    Fix spelling of "length". (Michael Wood)<br />
+  </li>
+
+  <li> Portability:<br />
+    Fix python bindings with versions older than 2.7 (Daniel Veillard),<br />
+    rebuild docs:Makefile.am (Roumen Petrov),<br />
+    elfgcchack.h after rebuild in doc (Roumen Petrov),<br />
+    elfgcchack for buf module (Roumen Petrov),<br />
+    Fix a uneeded and wrong extra link parameter (Daniel Veillard),<br />
+    Few cleanup patches for Windows (Denis Pauk),<br />
+    Fix rpmbuild --nocheck (Mark Salter),<br />
+    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),<br />
+    Fix Broken multi-arch support in xml2-config (Daniel Veillard),<br />
+    Fix a portability issue for GCC &lt; 3.4.0 (Daniel Veillard),<br />
+    Windows build fixes (Daniel Richard),<br />
+    Fix a thread portability problem (Friedrich Haubensak),<br />
+    Downgrade autoconf requirement to 2.63 (Daniel Veillard)<br />
+  </li>
+
+  <li> Bug Fixes:<br />
+    Fix a linking error for python bindings (Daniel Veillard),<br />
+    Fix a couple of return without value (Jüri Aedla),<br />
+    Improve the hashing functions (Daniel Franke),<br />
+    Improve handling of xmlStopParser() (Daniel Veillard),<br />
+    Remove risk of lockup in dictionary initialization (Daniel Veillard),<br />
+    Activate detection of encoding in external subset (Daniel Veillard),<br />
+    Fix an output buffer flushing conversion bug (Mikhail Titov),<br />
+    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),<br />
+    Fix configure cannot remove messages (Gilles Espinasse),<br />
+    fix schema validation in combination with xsi:nil (Daniel Veillard),<br />
+    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),<br />
+    Fix a few problems with setEntityLoader (Alexey Neyman),<br />
+    Detect excessive entities expansion upon replacement (Daniel Veillard),<br />
+    Fix the flushing out of raw buffers on encoding conversions (Daniel,<br />
+Veillard),<br />
+    Fix some buffer conversion issues (Daniel Veillard),<br />
+    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,<br />
+Veillard),<br />
+    Fix an error in the progressive DTD parsing code (Dan Winship),<br />
+    xmllint should not load DTD by default when using the reader (Daniel,<br />
+Veillard),<br />
+    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),<br />
+    Fix potential out of bound access (Daniel Veillard),<br />
+    Fix large parse of file from memory (Daniel Veillard),<br />
+    Fix a bug in the nsclean option of the parser (Daniel Veillard),<br />
+    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,<br />
+Veillard),<br />
+    Remove potential calls to exit() (Daniel Veillard)<br />
+  </li>
+
+  <li> Improvements:<br />
+    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),<br />
+    Fix tree iterators broken by 2to3 script (Daniel Veillard),<br />
+    update all tests for Python3 and Python2 (Daniel Veillard),<br />
+    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),<br />
+    Fix compilation on Python3 (Daniel Veillard),<br />
+    Converting apibuild.py to python3 (Daniel Veillard),<br />
+    First pass at starting porting to python3 (Daniel Veillard),<br />
+    updated configure.in for python3 (Daniel Veillard),<br />
+    Add support for xpathRegisterVariable in Python (Shaun McCance),<br />
+    Added a regression tests from bug 694228 data (Daniel Veillard),<br />
+    Cache presence of '&lt;' in entities content (Daniel Veillard),<br />
+    Avoid extra processing on entities (Daniel Veillard),<br />
+    Python binding for xmlRegisterInputCallback (Alexey Neyman),<br />
+    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),<br />
+    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),<br />
+    Adding streaming validation to runtest checks (Daniel Veillard),<br />
+    Add a --pushsmall option to xmllint (Daniel Veillard)<br />
+  </li>
+
+  <li> Cleanups:<br />
+    Switched comment in file to UTF-8 encoding (Daniel Veillard),<br />
+    Extend gitignore (Daniel Veillard),<br />
+    Silent the new python test on input (Alexey Neyman),<br />
+    Cleanup of a duplicate test (Daniel Veillard),<br />
+    Cleanup on duplicate test expressions (Daniel Veillard),<br />
+    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,<br />
+Gansterer),<br />
+    Spec cleanups and a fix for multiarch support (Daniel Veillard),<br />
+    Silence a clang warning (Daniel Veillard),<br />
+    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),<br />
+    rand_seed should be static in dict.c (Wouter Van Rooy),<br />
+    Fix typos in parser comments (Jan Pokorný)<br />
+  </li>
+</ul><h3>2.9.0: Sep 11 2012</h3><ul>
+  <li> Features:<br />
+    A few new API entry points,<br />
+    More resilient push parser mode,<br />
+    A lot of portability improvement,<br />
+    Faster XPath evaluation<br />
+  </li>
+
+  <li> Documentation:<br />
+    xml2-config.1 markup error (Christian Weisgerber),<br />
+    libxml(3) manpage typo fix (John Bradshaw),<br />
+    More cleanups to the documentation part of libxml2 (Daniel Richard G)<br />
+  </li>
+
+  <li> Portability:<br />
+    Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),<br />
+    fix builds not having stdint.h (Rob Richards),<br />
+    GetProcAddressA is available only on WinCE (Daniel Veillard),<br />
+    More updates and cleanups on autotools and Makefiles (Daniel Richard G),<br />
+    More changes for Win32 compilation (Eric Zurcher),<br />
+    Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),<br />
+    Bundles all generated files for python into the distribution (Daniel Richard G),<br />
+    Fix compiler warnings of wincecompat.c (Patrick Gansterer),<br />
+    Fix non __GNUC__ build (Patrick Gansterer),<br />
+    Fix windows unicode build (Patrick Gansterer),<br />
+    clean redefinition of {v}snprintf in C-source (Roumen Petrov),<br />
+    use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),<br />
+    fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),<br />
+    Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),<br />
+    Various "make distcheck" and portability fixups (Daniel Richard G),<br />
+    Fix compilation on older Visual Studio (Daniel Veillard)<br />
+  </li>
+
+  <li> Bug Fixes:<br />
+    Change the XPath code to percolate allocation errors (Daniel Veillard),<br />
+    Fix reuse of xmlInitParser (Daniel Veillard),<br />
+    Fix potential crash on entities errors (Daniel Veillard),<br />
+    initialize var (Rob Richards),<br />
+    Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),<br />
+    Fix problem with specific and generic error handlers (Pietro Cerutti),<br />
+    Avoid a potential infinite recursion (Daniel Veillard),<br />
+    Fix an XSD error when generating internal automata (Daniel Veillard),<br />
+    Patch for xinclude of text using multibyte characters (Vitaly Ostanin),<br />
+    Fix a segfault on XSD validation on pattern error (Daniel Veillard),<br />
+    Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),<br />
+    Add a missing element check (Daniel Veillard),<br />
+    Adding various checks on node type though the API (Daniel Veillard),<br />
+    Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),<br />
+    Fix make dist to include new private header files (Daniel Veillard),<br />
+    More fixups on the push parser behaviour (Daniel Veillard),<br />
+    Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),<br />
+    Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),<br />
+    Fixup limits parser (Daniel Veillard),<br />
+    Do not fetch external parsed entities (Daniel Veillard),<br />
+    Fix an error in previous commit (Aron Xu),<br />
+    Fix entities local buffers size problems (Daniel Veillard),<br />
+    Fix parser local buffers size problems (Daniel Veillard),<br />
+    Fix a failure to report xmlreader parsing failures (Daniel Veillard)<br />
+  </li>
+
+  <li> Improvements:<br />
+    Keep libxml2.syms when running "make distclean" (Daniel Veillard),<br />
+    Allow to set the quoting character of an xmlWriter (Csaba Raduly),<br />
+    Keep non-significant blanks node in HTML parser (Daniel Veillard),<br />
+    Add a forbidden variable error number and message to XPath (Daniel Veillard),<br />
+    Support long path names on WNT (Michael Stahl),<br />
+    Improve HTML escaping of attribute on output (Daniel Veillard),<br />
+    Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),<br />
+    Switching XPath node sorting to Timsort (Vojtech Fried),<br />
+    Optimizing '//' in XPath expressions (Nick Wellnhofer),<br />
+    Expose xmlBufShrink in the public tree API (Daniel Veillard),<br />
+    Visible HTML elements close the head tag (Conrad Irwin),<br />
+    Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),<br />
+    Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),<br />
+    minimize use of HAVE_CONFIG_H (Roumen Petrov),<br />
+    fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),<br />
+    Add support for big line numbers in error reporting (Daniel Veillard),<br />
+    Avoid using xmlBuffer for serialization (Daniel Veillard),<br />
+    Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),<br />
+    Provide new accessors for xmlOutputBuffer (Daniel Veillard),<br />
+    Improvements for old buffer compatibility (Daniel Veillard),<br />
+    Expand the limit test program (Daniel Veillard),<br />
+    Improve error reporting on parser errors (Daniel Veillard),<br />
+    Implement some default limits in the XPath module (Daniel Veillard),<br />
+    Introduce some default parser limits (Daniel Veillard),<br />
+    Cleanups and new limit APIs for dictionaries (Daniel Veillard),<br />
+    Fixup for buf.c (Daniel Veillard),<br />
+    Cleanup URI module memory allocation code (Daniel Veillard),<br />
+    Extend testlimits (Daniel Veillard),<br />
+    More avoid quadratic behaviour (Daniel Veillard),<br />
+    Impose a reasonable limit on PI size (Daniel Veillard),<br />
+    first version of testlimits new test (Daniel Veillard),<br />
+    Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),<br />
+    Impose a reasonable limit on comment size (Daniel Veillard),<br />
+    Impose a reasonable limit on attribute size (Daniel Veillard),<br />
+    Harden the buffer code and make it more compatible (Daniel Veillard),<br />
+    More cleanups for input/buffers code (Daniel Veillard),<br />
+    Cleanup function xmlBufResetInput(),<br /> to set input from Buffer (Daniel Veillard)
+    Swicth the test program for characters to new input buffers (Daniel Veillard),<br />
+    Convert the HTML tree module to the new buffers (Daniel Veillard),<br />
+    Convert of the HTML parser to new input buffers (Daniel Veillard),<br />
+    Convert the writer to new output buffer and save APIs (Daniel Veillard),<br />
+    Convert XMLReader to the new input buffers (Daniel Veillard),<br />
+    New saving functions using xmlBuf and conversion (Daniel Veillard),<br />
+    Provide new xmlBuf based saving functions (Daniel Veillard),<br />
+    Convert XInclude to the new input buffers (Daniel Veillard),<br />
+    Convert catalog code to the new input buffers (Daniel Veillard),<br />
+    Convert C14N to the new Input buffer (Daniel Veillard),<br />
+    Convert xmlIO.c to the new input and output buffers (Daniel Veillard),<br />
+    Convert XML parser to the new input buffers (Daniel Veillard),<br />
+    Incompatible change to the Input and Output buffers (Daniel Veillard),<br />
+    Adding new encoding function to deal with the new structures (Daniel Veillard),<br />
+    Convert XPath to xmlBuf (Daniel Veillard),<br />
+    Adding a new buf module for buffers (Daniel Veillard),<br />
+    Memory error within SAX2 reuse common framework (Daniel Veillard),<br />
+    Fix xmllint --xpath node initialization (Daniel Veillard)<br />
+  </li>
+
+  <li> Cleanups:<br />
+    Various cleanups to avoid compiler warnings (Daniel Veillard),<br />
+    Big space and tab cleanup (Daniel Veillard),<br />
+    Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),<br />
+    Second round of cleanups for LibXML2 docs/examples (Daniel Richard),<br />
+    Remove all .cvsignore as they are not used anymore (Daniel Veillard),<br />
+    Fix a Timsort function helper comment (Daniel Veillard),<br />
+    Small cleanup for valgrind target (Daniel Veillard),<br />
+    Patch for portability of latin characters in C files (Daniel Veillard),<br />
+    Cleanup some of the parser code (Daniel Veillard),<br />
+    Fix a variable name in comment (Daniel Veillard),<br />
+    Regenerated testapi.c (Daniel Veillard),<br />
+    Regenerating docs and API files (Daniel Veillard),<br />
+    Small cleanup of unused variables in test (Daniel Veillard),<br />
+    Expand .gitignore with more files (Daniel Veillard)<br />
+  </li>
+</ul><h3>2.8.0: May 23 2012</h3><ul>
+  <li>Features:
+  add lzma compression support (Anders F Bjorklund)
   </li>
 
   <li>Documentation:
@@ -151,7 +555,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost),
     xpath: remove unused variable (Stefan Kost)
   </li>
-</ul><h3>2.7.8: Nov 4 2010</h3><ul><li> Features:
+</ul><h3>2.7.8: Nov 4 2010</h3><ul>
+  <li> Features:
     480323 add code to plug in ICU converters by default (Giuseppe Iuculano),
     Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg)
   </li>
@@ -202,7 +607,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     Cleanup encoding pointer comparison (Nikolay Sivov),
     Small code cleanup on previous patch (Daniel Veillard)
   </li>
-</ul><h3>2.7.7: Mar 15 2010</h3><ul><li> Improvements:
+</ul><h3>2.7.7: Mar 15 2010</h3><ul>
+  <li> Improvements:
     Adding a --xpath option to xmllint (Daniel Veillard),
     Make HTML parser non-recursive (Eugene Pimenov)
   </li>
@@ -245,12 +651,14 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li> Cleanups:
     Cleanup a couple of weirdness in HTML parser (Eugene Pimenov)
   </li>
-</ul><h3>2.7.6: Oct  6 2009</h3><ul><li> Bug Fixes:
+</ul><h3>2.7.6: Oct  6 2009</h3><ul>
+  <li> Bug Fixes:
      Restore thread support in default configuration (Andrew W. Nosenko),
      URI with no path parsing problem (Daniel Veillard),
      Minor patch for conditional defines in threads.c (Eric Zurcher)
   </li>
-</ul><h3>2.7.5: Sep 24 2009</h3><ul><li> Bug Fixes:
+</ul><h3>2.7.5: Sep 24 2009</h3><ul>
+  <li> Bug Fixes:
     Restore behavior of --with-threads without argument (Andrew W. Nosenko),
     Fix memory leak when doc is NULL (Rob Richards),
     595792 fixing a RelaxNG bug introduced in 2.7.4 (Daniel Veillard),
@@ -262,7 +670,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li> Cleanup:
     Adding symbols.xml to EXTRA_DIST (Daniel Veillard)
   </li>
-</ul><h3>2.7.4: Sep 10 2009</h3><ul><li>Improvements:
+</ul><h3>2.7.4: Sep 10 2009</h3><ul>
+  <li>Improvements:
     Switch to GIT (GNOME),
     Add symbol versioning to libxml2 shared libs (Daniel Veillard)
   </li>
@@ -382,7 +791,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     570806 changed include of config.h (William M. Brack),
     cleanups and error reports when xmlTextWriterVSprintf fails (Jinmei Tatuya)
   </li>
-</ul><h3>2.7.3: Jan 18 2009</h3><ul><li>Build fix: fix build when HTML support is not included.</li>
+</ul><h3>2.7.3: Jan 18 2009</h3><ul>
+  <li>Build fix: fix build when HTML support is not included.</li>
   <li>Bug fixes: avoid memory overflow in gigantic text nodes,
       indentation problem on the writed (Rob Richards),
       xmlAddChildList pointer problem (Rob Richards and Kevin Milburn),
@@ -394,19 +804,22 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       APIs, add a parser option to enable pre 2.7 SAX behavior (Rob Richards),
       add gcc malloc checking (Marcus Meissner), add gcc printf like functions
       parameters checking (Marcus Meissner).</li>
-</ul><h3>2.7.2: Oct 3 2008</h3><ul><li>Portability fix: fix solaris compilation problem, fix compilation
+</ul><h3>2.7.2: Oct 3 2008</h3><ul>
+    <li>Portability fix: fix solaris compilation problem, fix compilation
         if XPath is not configured in</li>
     <li>Bug fixes: nasty entity bug introduced in 2.7.0, restore old behaviour
         when saving an HTML doc with an xml dump function, HTML UTF-8 parsing
         bug, fix reader custom error handlers (Riccardo Scussat)
     </li><li>Improvement: xmlSave options for more flexibility to save as
         XML/HTML/XHTML, handle leading BOM in HTML documents</li>
-</ul><h3>2.7.1: Sep 1 2008</h3><ul><li>Portability fix: Borland C fix (Moritz Both)</li>
+</ul><h3>2.7.1: Sep 1 2008</h3><ul>
+    <li>Portability fix: Borland C fix (Moritz Both)</li>
     <li>Bug fixes: python serialization wrappers, XPath QName corner
         case handking and leaks (Martin)</li>
     <li>Improvement: extend the xmlSave to handle HTML documents and trees</li>
     <li>Cleanup: python serialization wrappers</li>
-</ul><h3>2.7.0: Aug 30 2008</h3><ul><li>Documentation: switch ChangeLog to UTF-8, improve mutithreads and
+</ul><h3>2.7.0: Aug 30 2008</h3><ul>
+  <li>Documentation: switch ChangeLog to UTF-8, improve mutithreads and
       xmlParserCleanup docs</li>
   <li>Portability fixes: Older Win32 platforms (Rob Richards), MSVC
       porting fix (Rob Richards), Mac OS X regression tests (Sven Herzberg),
@@ -430,7 +843,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       regression test tools and code coverage display, better algorithms
       to detect various versions of the billion laughts attacks, make
       arbitrary parser limits avoidable as a parser option</li>
-</ul><h3>2.6.32: Apr 8 2008</h3><ul><li>Documentation: returning heap memory to kernel (Wolfram Sang),
+</ul><h3>2.6.32: Apr 8 2008</h3><ul>
+  <li>Documentation: returning heap memory to kernel (Wolfram Sang),
       trying to clarify xmlCleanupParser() use, xmlXPathContext improvement
       (Jack Jansen), improve the *Recover* functions documentation,
       XmlNodeType doc link fix (Martijn Arts)</li>
@@ -463,7 +877,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       (Ashwin), VMS makefile fix (Tycho Hilhorst)</li>
   <li>improvements: better plug of schematron in the normal error handling
       (Tobias Minich)</li>
-</ul><h3>2.6.31: Jan 11 2008</h3><ul><li>Security fix: missing of checks in UTF-8 parsing</li>
+</ul><h3>2.6.31: Jan 11 2008</h3><ul>
+  <li>Security fix: missing of checks in UTF-8 parsing</li>
   <li>Bug fixes: regexp bug, dump attribute from XHTML document, fix
       xmlFree(NULL) to not crash in debug mode, Schematron parsing crash
       (Rob Richards), global lock free on Windows (Marc-Antoine Ruel),
@@ -480,7 +895,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       some make distcheck realted fixes (John Carr)</li>
   <li>Improvements: HTTP Header: includes port number (William Brack),
       testURI --debug option, </li>
-</ul><h3>2.6.30: Aug 23 2007</h3><ul><li>Portability: Solaris crash on error handling, windows path fixes
+</ul><h3>2.6.30: Aug 23 2007</h3><ul>
+  <li>Portability: Solaris crash on error handling, windows path fixes
       (Roland Schwarz and Rob Richards), mingw build (Roland Schwarz)</li>
   <li>Bugfixes: xmlXPathNodeSetSort problem (William Brack), leak when
       reusing a writer for a new document (Dodji Seketeli), Schemas
@@ -490,7 +906,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       generation for complex regexp counts problems, Schemas IDC import
       problems (Frank Gross), xpath predicate evailation error handling
       (William Brack)</li>
-</ul><h3>2.6.29: Jun 12 2007</h3><ul><li>Portability: patches from Andreas Stricke for WinCEi,
+</ul><h3>2.6.29: Jun 12 2007</h3><ul>
+  <li>Portability: patches from Andreas Stricke for WinCEi,
       fix compilation warnings (William Brack), avoid warnings on Apple OS/X
       (Wendy Doyle and Mark Rowe), Windows compilation and threading
       improvements (Rob Richards), compilation against old Python versions,
@@ -513,7 +930,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       the name, IDness of name in HTML (Dagfinn I. MannsÃ¥ker) </li>
   <li>Improvement: keep URI query parts in raw form (Richard Jones),
       embed tag support in HTML (Michael Day) </li>
-</ul><h3>2.6.28: Apr 17 2007</h3><ul><li>Documentation: comment fixes (Markus Keim), xpath comments fixes too
+</ul><h3>2.6.28: Apr 17 2007</h3><ul>
+  <li>Documentation: comment fixes (Markus Keim), xpath comments fixes too
       (James Dennett)</li>
   <li>Bug fixes: XPath bug (William Brack), HTML parser autoclose stack usage
       (Usamah Malik), various regexp bug fixes (DV and William), path conversion
@@ -536,7 +954,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       (Michael Day), catalog patch for Win32 (Christian Ehrlicher),
       Windows CE fixes (Andreas Stricke)</li>
   <li>Various CVS to SVN infrastructure changes</li>
-</ul><h3>2.6.27: Oct 25 2006</h3><ul><li>Portability fixes: file names on windows (Roland Schwingel, 
+</ul><h3>2.6.27: Oct 25 2006</h3><ul>
+  <li>Portability fixes: file names on windows (Roland Schwingel, 
       Emelyanov Alexey), windows compile fixup (Rob Richards), 
       AIX iconv() is apparently case sensitive</li>
   <li>improvements: Python XPath types mapping (Nic Ferrier), XPath optimization
@@ -586,7 +1005,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       fix xmlXPathCastToString documentation, improve man pages for
       xmllitn and xmlcatalog (Daniel Leidert), fixed comments of a few
       functions</li>
-</ul><h3>2.6.26: Jun 6 2006</h3><ul><li>portability fixes: Python detection (Joseph Sacco), compilation
+</ul><h3>2.6.26: Jun 6 2006</h3><ul>
+  <li>portability fixes: Python detection (Joseph Sacco), compilation
     error(William Brack and Graham Bennett), LynxOS patch (Olli Savia)</li>
   <li>bug fixes: encoding buffer problem, mix of code and data in
     xmlIO.c(Kjartan Maraas), entities in XSD validation (Kasimier Buchcik),
@@ -596,7 +1016,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     selfdocument.</li>
   <li>improvements: Xpath optimizations (Kasimier), XPath object
     cache(Kasimier)</li>
-</ul><h3>2.6.25: Jun 6 2006:</h3><p>Do not use or package 2.6.25</p><h3>2.6.24: Apr 28 2006</h3><ul><li>Portability fixes: configure on Windows, testapi compile on windows
+</ul><h3>2.6.25: Jun 6 2006:</h3><p>Do not use or package 2.6.25</p><h3>2.6.24: Apr 28 2006</h3><ul>
+  <li>Portability fixes: configure on Windows, testapi compile on windows
       (Kasimier Buchcik, venkat naidu), Borland C++ 6 compile (Eric Zurcher),
       HP-UX compiler workaround (Rick Jones), xml2-config bugfix, gcc-4.1
       cleanups, Python detection scheme (Joseph Sacco), UTF-8 file paths on
@@ -620,7 +1041,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
       line break in writer after end PI (Jason Viers). </li>
   <li>Documentation: man pages updates and cleanups (Daniel Leidert).</li>
   <li>New features: Relax NG structure error handlers.</li>
-</ul><h3>2.6.23: Jan 5 2006</h3><ul><li>portability fixes: Windows (Rob Richards), getaddrinfo on Windows
+</ul><h3>2.6.23: Jan 5 2006</h3><ul>
+  <li>portability fixes: Windows (Rob Richards), getaddrinfo on Windows
     (Kolja Nowak, Rob Richards), icc warnings (Kjartan Maraas),
     --with-minimum compilation fixes (William Brack), error case handling fix
     on Solaris (Albert Chin), don't use 'list' as parameter name reported by
@@ -662,7 +1084,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     htmlDocDumpMemoryFormat. (Rob Richards),</li>
   <li>documentation: typo (Michael Day), libxml man page (Albert Chin), save
     function to XML buffer (Geert Jansen), small doc fix (Aron Stansvik),</li>
-</ul><h3>2.6.22: Sep 12 2005</h3><ul><li>build fixes: compile without schematron (Stéphane Bidoul)</li>
+</ul><h3>2.6.22: Sep 12 2005</h3><ul>
+  <li>build fixes: compile without schematron (Stéphane Bidoul)</li>
   <li>bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i,
     CDATA push parser bug, xmlElemDump problem with XHTML1 doc,
     XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some
@@ -674,7 +1097,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     derive (Kasimier Buchcik).</li>
   <li>documentation: generation of gtk-doc like docs, integration with
     devhelp.</li>
-</ul><h3>2.6.21: Sep 4 2005</h3><ul><li>build fixes: Cygwin portability fixes (Gerrit P. Haase), calling
+</ul><h3>2.6.21: Sep 4 2005</h3><ul>
+  <li>build fixes: Cygwin portability fixes (Gerrit P. Haase), calling
     convention problems on Windows (Marcus Boerger), cleanups based on Linus'
     sparse tool, update of win32/configure.js (Rob Richards), remove warnings
     on Windows(Marcus Boerger), compilation without SAX1, detection of the
@@ -710,7 +1134,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     yet, more lax mode for the HTML parser, parser XML_PARSE_COMPACT option
     for text nodes allocation.</li>
   <li>documentation: xmllint man page had --nonet duplicated</li>
-</ul><h3>2.6.20: Jul 10 2005</h3><ul><li>build fixes: Windows build (Rob Richards), Mingw compilation (Igor
+</ul><h3>2.6.20: Jul 10 2005</h3><ul>
+  <li>build fixes: Windows build (Rob Richards), Mingw compilation (Igor
     Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and
     andriy@google.com), use gcc weak references to pthread to avoid the
     pthread dependancy on Linux, compilation problem (Steve Nairn), compiling
@@ -745,7 +1170,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     standalone testing tools (Kasimier and William),
     xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug() SAX
     Schemas APIs, Schemas xmlReader support.</li>
-</ul><h3>2.6.19: Apr 02 2005</h3><ul><li>build fixes: drop .la from RPMs, --with-minimum build fix (William
+</ul><h3>2.6.19: Apr 02 2005</h3><ul>
+  <li>build fixes: drop .la from RPMs, --with-minimum build fix (William
     Brack), use XML_SOCKLEN_T instead of SOCKLEN_T because it breaks with AIX
     5.3 compiler, fixed elfgcchack.h generation and PLT reduction code on
     Linux/ELF/gcc4</li>
@@ -763,7 +1189,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>improvements: lot of work on Schemas by Kasimier Buchcik on facets
     checking and also mixed handling.</li>
   <li></li>
-</ul><h3>2.6.18: Mar 13 2005</h3><ul><li>build fixes: warnings (Peter Breitenlohner), testapi.c generation,
+</ul><h3>2.6.18: Mar 13 2005</h3><ul>
+  <li>build fixes: warnings (Peter Breitenlohner), testapi.c generation,
     Bakefile support (Francesco Montorsi), Windows compilation (Joel Reed),
     some gcc4 fixes, HP-UX portability fixes (Rick Jones).</li>
   <li>bug fixes: xmlSchemaElementDump namespace (Kasimier Buchcik), push and
@@ -786,7 +1213,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     values handling (Kasimier), add xmlTextReaderByteConsumed (Aron
   Stansvik),</li>
   <li>Documentation: Wiki support (Joel Reed)</li>
-</ul><h3>2.6.17: Jan 16 2005</h3><ul><li>build fixes: Windows, warnings removal (William Brack),
+</ul><h3>2.6.17: Jan 16 2005</h3><ul>
+  <li>build fixes: Windows, warnings removal (William Brack),
     maintainer-clean dependency(William), build in a different directory
     (William), fixing --with-minimum configure build (William), BeOS build
     (Marcin Konicki), Python-2.4 detection (William), compilation on AIX (Dan
@@ -810,7 +1238,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     (Phil Shafer)</li>
   <li>documentation: site improvement (John Fleck), FAQ entries
   (William).</li>
-</ul><h3>2.6.16: Nov 10 2004</h3><ul><li>general hardening and bug fixing crossing all the API based on new
+</ul><h3>2.6.16: Nov 10 2004</h3><ul>
+  <li>general hardening and bug fixing crossing all the API based on new
     automated regression testing</li>
   <li>build fix: IPv6 build and test on AIX (Dodji Seketeli)</li>
   <li>bug fixes: problem with XML::Libxml reported by Petr Pajas,  encoding
@@ -820,7 +1249,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     were updated.</li>
   <li>improvements: DTD validation APIs provided at the Python level (Brent
     Hendricks)</li>
-</ul><h3>2.6.15: Oct 27 2004</h3><ul><li>security fixes on the nanoftp and nanohttp modules</li>
+</ul><h3>2.6.15: Oct 27 2004</h3><ul>
+  <li>security fixes on the nanoftp and nanohttp modules</li>
   <li>build fixes: xmllint detection bug in configure, building outside the
     source tree (Thomas Fitzsimmons)</li>
   <li>bug fixes: HTML parser on broken ASCII chars in names (William), Python
@@ -835,7 +1265,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>improvements: better XInclude error reports (William), tree debugging
     module and tests, convenience functions at the Reader API (Graham
     Bennett), add support for PI in the HTML parser.</li>
-</ul><h3>2.6.14: Sep 29 2004</h3><ul><li>build fixes: configure paths for xmllint and xsltproc, compilation
+</ul><h3>2.6.14: Sep 29 2004</h3><ul>
+  <li>build fixes: configure paths for xmllint and xsltproc, compilation
     without HTML parser, compilation warning cleanups (William Brack &amp;
     Malcolm Tredinnick), VMS makefile update (Craig Berry),</li>
   <li>bug fixes: xmlGetUTF8Char (William Brack), QName properties (Kasimier
@@ -850,7 +1281,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     (Malcolm Tredinnick), Python libxml2 driver improvement (Malcolm
     Tredinnick), Schemas support for xsi:schemaLocation,
     xsi:noNamespaceSchemaLocation, xsi:type (Kasimier Buchcik)</li>
-</ul><h3>2.6.13: Aug 31 2004</h3><ul><li>build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc,
+</ul><h3>2.6.13: Aug 31 2004</h3><ul>
+  <li>build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc,
     Solaris compiler warning, fixing RPM BuildRequires,</li>
   <li>fixes: DTD loading on Windows (Igor), Schemas error reports APIs
     (Kasimier Buchcik), Schemas validation crash, xmlCheckUTF8 (William Brack
@@ -860,7 +1292,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>Improvements: Schemas validity improvements (Kasimier), added --path
     and --load-trace options to xmllint</li>
   <li>documentation: tutorial update (John Fleck)</li>
-</ul><h3>2.6.12: Aug 22 2004</h3><ul><li>build fixes: fix --with-minimum, elfgcchack.h fixes (Peter
+</ul><h3>2.6.12: Aug 22 2004</h3><ul>
+  <li>build fixes: fix --with-minimum, elfgcchack.h fixes (Peter
     Breitenlohner), perl path lookup (William), diff on Solaris (Albert
     Chin), some 64bits cleanups.</li>
   <li>Python: avoid a warning with 2.3 (William Brack), tab and space mixes
@@ -885,7 +1318,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     tag (William)</li>
   <li>documentation: web pages fixes, validity API docs fixes (William)
     schemas API fix (Eric Haszlakiewicz), xmllint man page (John Fleck)</li>
-</ul><h3>2.6.11: July 5 2004</h3><ul><li>Schemas: a lot of changes and improvements by Kasimier Buchcik for
+</ul><h3>2.6.11: July 5 2004</h3><ul>
+  <li>Schemas: a lot of changes and improvements by Kasimier Buchcik for
     attributes, namespaces and simple types.</li>
   <li>build fixes: --with-minimum (William Brack),  some gcc cleanup
     (William), --with-thread-alloc (William)</li>
@@ -912,7 +1346,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>performance: hack done with Arjan van de Ven to reduce ELF footprint
     and generated code on Linux, plus use gcc runtime profiling to optimize
     the code generated in the RPM packages.</li>
-</ul><h3>2.6.10: May 17 2004</h3><ul><li>Web page generated for ChangeLog</li>
+</ul><h3>2.6.10: May 17 2004</h3><ul>
+  <li>Web page generated for ChangeLog</li>
   <li>build fixes: --without-html problems, make check without make all</li>
   <li>portability: problem with xpath.c on Windows (MSC and Borland), memcmp
     vs. strncmp on Solaris, XPath tests on Windows (Mark Vakoc), C++ do not
@@ -929,7 +1364,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     Buchcik), XInclude fallback problem (William), weird problems with DTD
     (William), structured error handler callback context (William), reverse
     xmlEncodeSpecialChars() behaviour back to escaping '"'</li>
-</ul><h3>2.6.9: Apr 18 2004</h3><ul><li>implement xml:id Working Draft, relaxed XPath id() checking</li>
+</ul><h3>2.6.9: Apr 18 2004</h3><ul>
+  <li>implement xml:id Working Draft, relaxed XPath id() checking</li>
   <li>bugfixes: xmlCtxtReset (Brent Hendricks), line number and CDATA (Dave
     Beckett), Relax-NG compilation (William Brack), Regexp patches (with
     William), xmlUriEscape (Mark Vakoc), a Relax-NG notAllowed problem (with
@@ -946,7 +1382,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     example (load, xpath, modify, save), xmlCatalogDump() comments,</li>
   <li>Windows: Borland C++ builder (Eric Zurcher), work around Microsoft
     compiler NaN handling bug (Mark Vakoc)</li>
-</ul><h3>2.6.8: Mar 23 2004</h3><ul><li>First step of the cleanup of the serialization code and APIs</li>
+</ul><h3>2.6.8: Mar 23 2004</h3><ul>
+  <li>First step of the cleanup of the serialization code and APIs</li>
   <li>XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
     Dickmeiss), anyURI for "" (John Belmonte)</li>
   <li>Python: Canonicalization C14N support added (Anthony Carrico)</li>
@@ -968,7 +1405,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
     to Windows (Christophe de Vienne),  --with-html-dir fixup (Julio Merino
     Vidal), Windows build (Eric Zurcher)</li>
-</ul><h3>2.6.7: Feb 23 2004</h3><ul><li>documentation: tutorial updates (John Fleck), benchmark results</li>
+</ul><h3>2.6.7: Feb 23 2004</h3><ul>
+  <li>documentation: tutorial updates (John Fleck), benchmark results</li>
   <li>xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)</li>
   <li>XPath optimization (Petr Pajas)</li>
   <li>DTD ID handling optimization</li>
@@ -978,7 +1416,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     handling NULL, trying to fix Relax-NG/Perl interface.</li>
   <li>python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)</li>
   <li>Added relaxng option to xmllint --shell</li>
-</ul><h3>2.6.6: Feb 12 2004</h3><ul><li>nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
+</ul><h3>2.6.6: Feb 12 2004</h3><ul>
+  <li>nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
     William) reported by Yuuichi Teranishi</li>
   <li>bugfixes: make test and path issues, xmlWriter attribute serialization
     (William Brack), xmlWriter indentation (William), schemas validation
@@ -1000,7 +1439,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   patch</li>
   <li>Parsers: added xmlByteConsumed(ctxt) API to get the byte offest in
     input.</li>
-</ul><h3>2.6.5: Jan 25 2004</h3><ul><li>Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
+</ul><h3>2.6.5: Jan 25 2004</h3><ul>
+  <li>Bugfixes: dictionnaries for schemas (William Brack), regexp segfault
     (William), xs:all problem (William), a number of XPointer bugfixes
     (William), xmllint error go to stderr, DTD validation problem with
     namespace, memory leak (William), SAX1 cleanup and minimal options fixes
@@ -1021,7 +1461,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>Windows: compiler patches (Mark Vakoc)</li>
   <li>Parser optimizations, a few new XPath and dictionnary APIs for future
     XSLT optimizations.</li>
-</ul><h3>2.6.4: Dec 24 2003</h3><ul><li>Windows build fixes (Igor Zlatkovic)</li>
+</ul><h3>2.6.4: Dec 24 2003</h3><ul>
+  <li>Windows build fixes (Igor Zlatkovic)</li>
   <li>Some serious XInclude problems reported by Oleg Paraschenko and</li>
   <li>Unix and Makefile packaging fixes (me, William Brack,</li>
   <li>Documentation improvements (John Fleck, William Brack), example fix
@@ -1032,7 +1473,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     again (William Brack), xmlGetNodePath() generating '(null)' (William
     Brack), DTD validation and namespace bug (William Brack), XML Schemas
     double inclusion behaviour</li>
-</ul><h3>2.6.3: Dec 10 2003</h3><ul><li>documentation updates and cleanup (DV, William Brack, John Fleck)</li>
+</ul><h3>2.6.3: Dec 10 2003</h3><ul>
+  <li>documentation updates and cleanup (DV, William Brack, John Fleck)</li>
   <li>added a repository of examples, examples from Aleksey Sanin, Dodji
     Seketeli, Alfred Mickautsch</li>
   <li>Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
@@ -1056,7 +1498,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     constraints), added xmlTextReaderPreservePattern() to collect subdocument
     when streaming.</li>
   <li>various fixes in the structured error handling</li>
-</ul><h3>2.6.2: Nov 4 2003</h3><ul><li>XPath context unregistration fixes</li>
+</ul><h3>2.6.2: Nov 4 2003</h3><ul>
+  <li>XPath context unregistration fixes</li>
   <li>text node coalescing fixes (Mark Lilback)</li>
   <li>API to screate a W3C Schemas from an existing document (Steve Ball)</li>
   <li>BeOS patches (Marcin 'Shard' Konicki)</li>
@@ -1076,7 +1519,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>fixed xmllint --html to use the HTML serializer on output (added
     --xmlout to implement the previous behaviour of saving it using the XML
     serializer)</li>
-</ul><h3>2.6.1: Oct 28 2003</h3><ul><li>Mostly bugfixes after the big 2.6.0 changes</li>
+</ul><h3>2.6.1: Oct 28 2003</h3><ul>
+  <li>Mostly bugfixes after the big 2.6.0 changes</li>
   <li>Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
     (William Brack)</li>
   <li>Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
@@ -1095,7 +1539,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>general bug fixes: mandatory encoding in text decl, serializing
     Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
     XPath errors not reported,  slow HTML parsing of large documents.</li>
-</ul><h3>2.6.0: Oct 20 2003</h3><ul><li>Major revision release: should be API and ABI compatible but got a lot
+</ul><h3>2.6.0: Oct 20 2003</h3><ul>
+  <li>Major revision release: should be API and ABI compatible but got a lot
     of change</li>
   <li>Increased the library modularity, far more options can be stripped out,
     a --with-minimum configuration will weight around 160KBytes</li>
@@ -1159,9 +1604,11 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>libxml-2.0-uninstalled.pc from Malcolm Tredinnick</li>
   <li>deactivated the broken docBook SGML parser code and plugged the XML
     parser instead.</li>
-</ul><h3>2.5.11: Sep 9 2003</h3><p>A bugfix only release:</p><ul><li>risk of crash in Relax-NG</li>
+</ul><h3>2.5.11: Sep 9 2003</h3><p>A bugfix only release:</p><ul>
+  <li>risk of crash in Relax-NG</li>
   <li>risk of crash when using multithreaded programs</li>
-</ul><h3>2.5.10: Aug 15 2003</h3><p>A bugfixes only release</p><ul><li>Windows Makefiles (William Brack)</li>
+</ul><h3>2.5.10: Aug 15 2003</h3><p>A bugfixes only release</p><ul>
+  <li>Windows Makefiles (William Brack)</li>
   <li>UTF-16 support fixes (Mark Itzcovitz)</li>
   <li>Makefile and portability (William Brack) automake, Linux alpha, Mingw
     on Windows (Mikhail Grushinskiy)</li>
@@ -1170,7 +1617,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>XML parser performance problem reported by Grant Goodale</li>
   <li>xmlSAXParseDTD() bug fix from Malcolm Tredinnick</li>
   <li>and a couple other cleanup</li>
-</ul><h3>2.5.9: Aug 9 2003</h3><ul><li>bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
+</ul><h3>2.5.9: Aug 9 2003</h3><ul>
+  <li>bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
     (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
     (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
     xmlReader, Relax-NG schemas compilation, namespace handling,  EXSLT (Sean
@@ -1186,7 +1634,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>xmlTextReader cleanup + enum for node types (Bjorn Reese)</li>
   <li>general compilation/warning cleanup Solaris/HP-UX/... (William
   Brack)</li>
-</ul><h3>2.5.8: Jul 6 2003</h3><ul><li>bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
+</ul><h3>2.5.8: Jul 6 2003</h3><ul>
+  <li>bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
     Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
     PI related memleak, compilation without schemas or without xpath (Joerg
     Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
@@ -1203,7 +1652,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     generator</li>
   <li>added --nonet option to xmllint</li>
   <li>documentation improvements (John Fleck)</li>
-</ul><h3>2.5.7: Apr 25 2003</h3><ul><li>Relax-NG: Compiling to regexp and streaming validation on top of the
+</ul><h3>2.5.7: Apr 25 2003</h3><ul>
+  <li>Relax-NG: Compiling to regexp and streaming validation on top of the
     xmlReader interface, added to xmllint --stream</li>
   <li>xmlReader: Expand(), Next() and DOM access glue, bug fixes</li>
   <li>Support for large files: RGN validated a 4.5GB instance</li>
@@ -1220,7 +1670,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     xmlReader interfaces, removed excessive thread locking</li>
   <li>Documentation: man page (John Fleck), xmlReader documentation</li>
   <li>Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)</li>
-</ul><h3>2.5.6: Apr 1 2003</h3><ul><li>Fixed W3C XML Schemas datatype, should be compliant now except for
+</ul><h3>2.5.6: Apr 1 2003</h3><ul>
+  <li>Fixed W3C XML Schemas datatype, should be compliant now except for
     binHex and base64 which are not supported yet.</li>
   <li>bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
     XInclude entities handling, encoding detection on external subsets, XML
@@ -1229,7 +1680,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>documentation: added --relaxng option to xmllint man page (John)</li>
   <li>improved error reporting: xml:space, start/end tag mismatches, Relax NG
     errors</li>
-</ul><h3>2.5.5: Mar 24 2003</h3><ul><li>Lot of fixes on the Relax NG implementation. More testing including
+</ul><h3>2.5.5: Mar 24 2003</h3><ul>
+  <li>Lot of fixes on the Relax NG implementation. More testing including
     DocBook and TEI examples.</li>
   <li>Increased the support for W3C XML Schemas datatype</li>
   <li>Several bug fixes in the URI handling layer</li>
@@ -1237,7 +1689,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     conversion, line counting in the parser.</li>
   <li>Added support for $XMLLINT_INDENT environment variable, FTP delete</li>
   <li>Fixed the RPM spec file name</li>
-</ul><h3>2.5.4: Feb 20 2003</h3><ul><li>Conformance testing and lot of fixes on Relax NG and XInclude
+</ul><h3>2.5.4: Feb 20 2003</h3><ul>
+  <li>Conformance testing and lot of fixes on Relax NG and XInclude
     implementation</li>
   <li>Implementation of XPointer element() scheme</li>
   <li>Bug fixes: XML parser, XInclude entities merge, validity checking on
@@ -1248,13 +1701,15 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>Portability: windows updates and path canonicalization (Igor)</li>
   <li>A few typo fixes (Kjartan Maraas)</li>
   <li>Python bindings generator fixes (Stephane Bidoul)</li>
-</ul><h3>2.5.3: Feb 10 2003</h3><ul><li>RelaxNG and XML Schemas datatypes improvements, and added a first
+</ul><h3>2.5.3: Feb 10 2003</h3><ul>
+  <li>RelaxNG and XML Schemas datatypes improvements, and added a first
     version of RelaxNG Python bindings</li>
   <li>Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
     serializing namespace nodes, encoding conversion bug, XHTML1
   serialization</li>
   <li>Portability fixes: Windows (Igor), AMD 64bits RPM spec file</li>
-</ul><h3>2.5.2: Feb 5 2003</h3><ul><li>First implementation of RelaxNG, added --relaxng flag to xmllint</li>
+</ul><h3>2.5.2: Feb 5 2003</h3><ul>
+  <li>First implementation of RelaxNG, added --relaxng flag to xmllint</li>
   <li>Schemas support now compiled in by default.</li>
   <li>Bug fixes: DTD validation, namespace checking, XInclude and entities,
     delegateURI in XML Catalogs, HTML parser, XML reader (Stéphane Bidoul),
@@ -1268,10 +1723,12 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>Added python bindings for XPointer, contextual error reporting
     (Stéphane Bidoul)</li>
   <li>URI/file escaping problems (Stefano Zacchiroli)</li>
-</ul><h3>2.5.1: Jan 8 2003</h3><ul><li>Fixes a memory leak and configuration/compilation problems in 2.5.0</li>
+</ul><h3>2.5.1: Jan 8 2003</h3><ul>
+  <li>Fixes a memory leak and configuration/compilation problems in 2.5.0</li>
   <li>documentation updates (John)</li>
   <li>a couple of XmlTextReader fixes</li>
-</ul><h3>2.5.0: Jan 6 2003</h3><ul><li>New <a href="xmlreader.html">XmltextReader interface</a> based on C#
+</ul><h3>2.5.0: Jan 6 2003</h3><ul>
+  <li>New <a href="xmlreader.html">XmltextReader interface</a> based on C#
     API (with help of Stéphane Bidoul)</li>
   <li>Windows: more exports, including the new API (Igor)</li>
   <li>XInclude fallback fix</li>
@@ -1286,10 +1743,12 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>new API to optionally track node creation and deletion (Lukas
   Schroeder)</li>
   <li>Added documentation for the XmltextReader interface and some <a href="guidelines.html">XML guidelines</a></li>
-</ul><h3>2.4.30: Dec 12 2002</h3><ul><li>2.4.29 broke the python bindings, rereleasing</li>
+</ul><h3>2.4.30: Dec 12 2002</h3><ul>
+  <li>2.4.29 broke the python bindings, rereleasing</li>
   <li>Improvement/fixes of the XML API generator, and couple of minor code
     fixes.</li>
-</ul><h3>2.4.29: Dec 11 2002</h3><ul><li>Windows fixes (Igor): Windows CE port, pthread linking, python bindings
+</ul><h3>2.4.29: Dec 11 2002</h3><ul>
+  <li>Windows fixes (Igor): Windows CE port, pthread linking, python bindings
     (Stéphane Bidoul), Mingw (Magnus Henoch), and export list updates</li>
   <li>Fix for prev in python bindings (ERDI Gergo)</li>
   <li>Fix for entities handling (Marcus Clarke)</li>
@@ -1300,14 +1759,16 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>added an TextXmlReader (C#) like API (work in progress)</li>
   <li>Rewrote the API in XML generation script, includes a C parser and saves
     more information needed for C# bindings</li>
-</ul><h3>2.4.28: Nov 22 2002</h3><ul><li>a couple of python binding fixes</li>
+</ul><h3>2.4.28: Nov 22 2002</h3><ul>
+  <li>a couple of python binding fixes</li>
   <li>2 bug fixes in the XML push parser</li>
   <li>potential memory leak removed (Martin Stoilov)</li>
   <li>fix to the configure script for Unix (Dimitri Papadopoulos)</li>
   <li>added encoding support for XInclude parse="text"</li>
   <li>autodetection of XHTML1 and specific serialization rules added</li>
   <li>nasty threading bug fixed (William Brack)</li>
-</ul><h3>2.4.27: Nov 17 2002</h3><ul><li>fixes for the Python bindings</li>
+</ul><h3>2.4.27: Nov 17 2002</h3><ul>
+  <li>fixes for the Python bindings</li>
   <li>a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
     HTML parser,  Schemas (Charles Bozeman), document fragment support
     (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
@@ -1319,11 +1780,13 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
     better thread support on Windows</li>
   <li>cleanup of Unix Makefiles and spec file</li>
   <li>Improvements to the documentation (John Fleck)</li>
-</ul><h3>2.4.26: Oct 18 2002</h3><ul><li>Patches for Windows CE port, improvements on Windows paths handling</li>
+</ul><h3>2.4.26: Oct 18 2002</h3><ul>
+  <li>Patches for Windows CE port, improvements on Windows paths handling</li>
   <li>Fixes to the validation  code (DTD and Schemas), xmlNodeGetPath() ,
     HTML serialization, Namespace compliance,  and a number of small
   problems</li>
-</ul><h3>2.4.25: Sep 26 2002</h3><ul><li>A number of bug fixes: XPath, validation, Python bindings, DOM and
+</ul><h3>2.4.25: Sep 26 2002</h3><ul>
+  <li>A number of bug fixes: XPath, validation, Python bindings, DOM and
     tree, xmlI/O,  Html</li>
   <li>Serious rewrite of XInclude</li>
   <li>Made XML Schemas regexp part of the default build and APIs, small fix
@@ -1340,7 +1803,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>removal of all stderr/perror use for error reporting</li>
   <li>Better error reporting: XPath and DTD validation</li>
   <li>update of the trio portability layer (Bjorn Reese)</li>
-</ul><p><strong>2.4.24: Aug 22 2002</strong></p><ul><li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
+</ul><p><strong>2.4.24: Aug 22 2002</strong></p><ul>
+  <li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
   <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
     (fcrozat)</li>
   <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
@@ -1348,7 +1812,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>doc cleanups: Rick Jones</li>
   <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
   <li>XInclude: implementation of fallback and xml:base fixup added</li>
-</ul><h3>2.4.23: July 6 2002</h3><ul><li>performances patches: Peter Jacobi</li>
+</ul><h3>2.4.23: July 6 2002</h3><ul>
+  <li>performances patches: Peter Jacobi</li>
   <li>c14n fixes, testsuite and performances: Aleksey Sanin</li>
   <li>added xmlDocFormatDump: Chema Celorio</li>
   <li>new tutorial: John Fleck</li>
@@ -1357,7 +1822,8 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
   <li>a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
     HTML parsers, ID lookup function</li>
   <li>removal of all remaining sprintf: Aleksey Sanin</li>
-</ul><h3>2.4.22: May 27 2002</h3><ul><li>a number of bug fixes: configure scripts, base handling, parser, memory
+</ul><h3>2.4.22: May 27 2002</h3><ul>
+  <li>a number of bug fixes: configure scripts, base handling, parser, memory
     usage, HTML parser, XPath, documentation (Christian Cornelssen),
     indentation, URI parsing</li>
   <li>Optimizations for XMLSec, fixing and making public some of the network
@@ -1369,39 +1835,48 @@ to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</
 Schemas <a href="http://www.w3.org/TR/xmlschema-1/">structures</a> and <a href="http://www.w3.org/TR/xmlschema-2/">datatypes</a> code, beware, all
 interfaces are likely to change, there is huge holes, it is clearly a work in
 progress and don't even think of putting this code in a production system,
-it's actually not compiled in by default. The real fixes are:</p><ul><li>a couple of bugs or limitations introduced in 2.4.20</li>
+it's actually not compiled in by default. The real fixes are:
+</p><ul>
+  <li>a couple of bugs or limitations introduced in 2.4.20</li>
   <li>patches for Borland C++ and MSC by Igor</li>
   <li>some fixes on XPath strings and conformance patches by Richard
   Jinks</li>
   <li>patch from Aleksey for the ExcC14N specification</li>
   <li>OSF/1 bug fix by Bjorn</li>
-</ul><h3>2.4.20: Apr 15 2002</h3><ul><li>bug fixes: file descriptor leak, XPath, HTML output, DTD validation</li>
+</ul><h3>2.4.20: Apr 15 2002</h3><ul>
+  <li>bug fixes: file descriptor leak, XPath, HTML output, DTD validation</li>
   <li>XPath conformance testing by Richard Jinks</li>
   <li>Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
     libxml.m4</li>
-</ul><h3>2.4.19: Mar 25 2002</h3><ul><li>bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
+</ul><h3>2.4.19: Mar 25 2002</h3><ul>
+  <li>bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
     encoder</li>
   <li>portability fixes in the HTTP code</li>
   <li>memory allocation checks using valgrind, and profiling tests</li>
   <li>revamp of the Windows build and Makefiles</li>
-</ul><h3>2.4.18: Mar 18 2002</h3><ul><li>bug fixes: tree, SAX, canonicalization, validation, portability,
+</ul><h3>2.4.18: Mar 18 2002</h3><ul>
+  <li>bug fixes: tree, SAX, canonicalization, validation, portability,
   XPath</li>
   <li>removed the --with-buffer option it was becoming unmaintainable</li>
   <li>serious cleanup of the Python makefiles</li>
   <li>speedup patch to XPath very effective for DocBook stylesheets</li>
   <li>Fixes for Windows build, cleanup of the documentation</li>
-</ul><h3>2.4.17: Mar 8 2002</h3><ul><li>a lot of bug fixes, including "namespace nodes have no parents in
+</ul><h3>2.4.17: Mar 8 2002</h3><ul>
+  <li>a lot of bug fixes, including "namespace nodes have no parents in
   XPath"</li>
   <li>fixed/improved the Python wrappers, added more examples and more
     regression tests, XPath extension functions can now return node-sets</li>
   <li>added the XML Canonicalization support from Aleksey Sanin</li>
-</ul><h3>2.4.16: Feb 20 2002</h3><ul><li>a lot of bug fixes, most of them were triggered by the XML Testsuite
+</ul><h3>2.4.16: Feb 20 2002</h3><ul>
+  <li>a lot of bug fixes, most of them were triggered by the XML Testsuite
     from OASIS and W3C. Compliance has been significantly improved.</li>
   <li>a couple of portability fixes too.</li>
-</ul><h3>2.4.15: Feb 11 2002</h3><ul><li>Fixed the Makefiles, especially the python module ones</li>
+</ul><h3>2.4.15: Feb 11 2002</h3><ul>
+  <li>Fixed the Makefiles, especially the python module ones</li>
   <li>A few bug fixes and cleanup</li>
   <li>Includes cleanup</li>
-</ul><h3>2.4.14: Feb 8 2002</h3><ul><li>Change of License to the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
+</ul><h3>2.4.14: Feb 8 2002</h3><ul>
+  <li>Change of License to the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
     License</a> basically for integration in XFree86 codebase, and removing
     confusion around the previous dual-licensing</li>
   <li>added Python bindings, beta software but should already be quite
@@ -1410,35 +1885,42 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     manipulations</li>
   <li>cleanup of the headers, generation of a reference API definition in
   XML</li>
-</ul><h3>2.4.13: Jan 14 2002</h3><ul><li>update of the documentation: John Fleck and Charlie Bozeman</li>
+</ul><h3>2.4.13: Jan 14 2002</h3><ul>
+  <li>update of the documentation: John Fleck and Charlie Bozeman</li>
   <li>cleanup of timing code from Justin Fletcher</li>
   <li>fixes for Windows and initial thread support on Win32: Igor and Serguei
     Narojnyi</li>
   <li>Cygwin patch from Robert Collins</li>
   <li>added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg</li>
-</ul><h3>2.4.12: Dec 7 2001</h3><ul><li>a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
+</ul><h3>2.4.12: Dec 7 2001</h3><ul>
+  <li>a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
     XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
   (robert)</li>
   <li>Eric Lavigne contributed project files for MacOS</li>
   <li>some makefiles cleanups</li>
-</ul><h3>2.4.11: Nov 26 2001</h3><ul><li>fixed a couple of errors in the includes, fixed a few bugs, some code
+</ul><h3>2.4.11: Nov 26 2001</h3><ul>
+  <li>fixed a couple of errors in the includes, fixed a few bugs, some code
     cleanups</li>
   <li>xmllint man pages improvement by Heiko Rupp</li>
   <li>updated VMS build instructions from John A Fotheringham</li>
   <li>Windows Makefiles updates from Igor</li>
-</ul><h3>2.4.10: Nov 10 2001</h3><ul><li>URI escaping fix (Joel Young)</li>
+</ul><h3>2.4.10: Nov 10 2001</h3><ul>
+  <li>URI escaping fix (Joel Young)</li>
   <li>added xmlGetNodePath() (for paths or XPointers generation)</li>
   <li>Fixes namespace handling problems when using DTD and validation</li>
   <li>improvements on xmllint: Morus Walter patches for --format and
     --encode, Stefan Kost and Heiko Rupp improvements on the --shell</li>
   <li>fixes for xmlcatalog linking pointed by Weiqi Gao</li>
   <li>fixes to the HTML parser</li>
-</ul><h3>2.4.9: Nov 6 2001</h3><ul><li>fixes more catalog bugs</li>
+</ul><h3>2.4.9: Nov 6 2001</h3><ul>
+  <li>fixes more catalog bugs</li>
   <li>avoid a compilation problem, improve xmlGetLineNo()</li>
-</ul><h3>2.4.8: Nov 4 2001</h3><ul><li>fixed SGML catalogs broken in previous release, updated xmlcatalog
+</ul><h3>2.4.8: Nov 4 2001</h3><ul>
+  <li>fixed SGML catalogs broken in previous release, updated xmlcatalog
   tool</li>
   <li>fixed a compile errors and some includes troubles.</li>
-</ul><h3>2.4.7: Oct 30 2001</h3><ul><li>exported some debugging interfaces</li>
+</ul><h3>2.4.7: Oct 30 2001</h3><ul>
+  <li>exported some debugging interfaces</li>
   <li>serious rewrite of the catalog code</li>
   <li>integrated Gary Pennington thread safety patch, added configure option
     and regression tests</li>
@@ -1450,40 +1932,49 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>general bug fixes</li>
   <li>updated xmllint man page by John Fleck</li>
   <li>some VMS and Windows updates</li>
-</ul><h3>2.4.6: Oct 10 2001</h3><ul><li>added an updated man pages by John Fleck</li>
+</ul><h3>2.4.6: Oct 10 2001</h3><ul>
+  <li>added an updated man pages by John Fleck</li>
   <li>portability and configure fixes</li>
   <li>an infinite loop on the HTML parser was removed (William)</li>
   <li>Windows makefile patches from Igor</li>
   <li>fixed half a dozen bugs reported for libxml or libxslt</li>
   <li>updated xmlcatalog to be able to modify SGML super catalogs</li>
-</ul><h3>2.4.5: Sep 14 2001</h3><ul><li>Remove a few annoying bugs in 2.4.4</li>
+</ul><h3>2.4.5: Sep 14 2001</h3><ul>
+  <li>Remove a few annoying bugs in 2.4.4</li>
   <li>forces the HTML serializer to output decimal charrefs since some
     version of Netscape can't handle hexadecimal ones</li>
-</ul><h3>1.8.16: Sep 14 2001</h3><ul><li>maintenance release of the old libxml1 branch, couple of bug and
+</ul><h3>1.8.16: Sep 14 2001</h3><ul>
+  <li>maintenance release of the old libxml1 branch, couple of bug and
     portability fixes</li>
-</ul><h3>2.4.4: Sep 12 2001</h3><ul><li>added --convert to xmlcatalog, bug fixes and cleanups of XML
+</ul><h3>2.4.4: Sep 12 2001</h3><ul>
+  <li>added --convert to xmlcatalog, bug fixes and cleanups of XML
   Catalog</li>
   <li>a few bug fixes and some portability changes</li>
   <li>some documentation cleanups</li>
-</ul><h3>2.4.3:  Aug 23 2001</h3><ul><li>XML Catalog support see the doc</li>
+</ul><h3>2.4.3:  Aug 23 2001</h3><ul>
+  <li>XML Catalog support see the doc</li>
   <li>New NaN/Infinity floating point code</li>
   <li>A few bug fixes</li>
-</ul><h3>2.4.2:  Aug 15 2001</h3><ul><li>adds xmlLineNumbersDefault() to control line number generation</li>
+</ul><h3>2.4.2:  Aug 15 2001</h3><ul>
+  <li>adds xmlLineNumbersDefault() to control line number generation</li>
   <li>lot of bug fixes</li>
   <li>the Microsoft MSC projects files should now be up to date</li>
   <li>inheritance of namespaces from DTD defaulted attributes</li>
   <li>fixes a serious potential security bug</li>
   <li>added a --format option to xmllint</li>
-</ul><h3>2.4.1:  July 24 2001</h3><ul><li>possibility to keep line numbers in the tree</li>
+</ul><h3>2.4.1:  July 24 2001</h3><ul>
+  <li>possibility to keep line numbers in the tree</li>
   <li>some computation NaN fixes</li>
   <li>extension of the XPath API</li>
   <li>cleanup for alpha and ia64 targets</li>
   <li>patch to allow saving through HTTP PUT or POST</li>
-</ul><h3>2.4.0: July 10 2001</h3><ul><li>Fixed a few bugs in XPath, validation, and tree handling.</li>
+</ul><h3>2.4.0: July 10 2001</h3><ul>
+  <li>Fixed a few bugs in XPath, validation, and tree handling.</li>
   <li>Fixed XML Base implementation, added a couple of examples to the
     regression tests</li>
   <li>A bit of cleanup</li>
-</ul><h3>2.3.14: July 5 2001</h3><ul><li>fixed some entities problems and reduce memory requirement when
+</ul><h3>2.3.14: July 5 2001</h3><ul>
+  <li>fixed some entities problems and reduce memory requirement when
     substituting them</li>
   <li>lots of improvements in the XPath queries interpreter can be
     substantially faster</li>
@@ -1491,11 +1982,14 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>Fixes to XPath variable eval, and compare on empty node set</li>
   <li>HTML tag closing bug fixed</li>
   <li>Fixed an URI reference computation problem when validating</li>
-</ul><h3>2.3.13: June 28 2001</h3><ul><li>2.3.12 configure.in was broken as well as the push mode XML parser</li>
+</ul><h3>2.3.13: June 28 2001</h3><ul>
+  <li>2.3.12 configure.in was broken as well as the push mode XML parser</li>
   <li>a few more fixes for compilation on Windows MSC by Yon Derek</li>
-</ul><h3>1.8.14: June 28 2001</h3><ul><li>Zbigniew Chyla gave a patch to use the old XML parser in push mode</li>
+</ul><h3>1.8.14: June 28 2001</h3><ul>
+  <li>Zbigniew Chyla gave a patch to use the old XML parser in push mode</li>
   <li>Small Makefile fix</li>
-</ul><h3>2.3.12: June 26 2001</h3><ul><li>lots of cleanup</li>
+</ul><h3>2.3.12: June 26 2001</h3><ul>
+  <li>lots of cleanup</li>
   <li>a couple of validation fix</li>
   <li>fixed line number counting</li>
   <li>fixed serious problems in the XInclude processing</li>
@@ -1507,7 +2001,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     compilation on Windows MSC</li>
   <li>update of libxml-doc.el (Felix Natter)</li>
   <li>fixed 2 bugs in URI normalization code</li>
-</ul><h3>2.3.11: June 17 2001</h3><ul><li>updates to trio, Makefiles and configure should fix some portability
+</ul><h3>2.3.11: June 17 2001</h3><ul>
+  <li>updates to trio, Makefiles and configure should fix some portability
     problems (alpha)</li>
   <li>fixed some HTML serialization problems (pre, script, and block/inline
     handling), added encoding aware APIs, cleanup of this code</li>
@@ -1520,11 +2015,14 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>fixed XInclude routine to implement the recursive behaviour</li>
   <li>fixed xmlFreeNode problem when libxml is included statically twice</li>
   <li>added --version to xmllint for bug reports</li>
-</ul><h3>2.3.10: June 1 2001</h3><ul><li>fixed the SGML catalog support</li>
+</ul><h3>2.3.10: June 1 2001</h3><ul>
+  <li>fixed the SGML catalog support</li>
   <li>a number of reported bugs got fixed, in XPath, iconv detection,
     XInclude processing</li>
   <li>XPath string function should now handle unicode correctly</li>
-</ul><h3>2.3.9: May 19 2001</h3><p>Lots of bugfixes, and added a basic SGML catalog support:</p><ul><li>HTML push bugfix #54891 and another patch from Jonas Borgström</li>
+</ul><h3>2.3.9: May 19 2001</h3><p>Lots of bugfixes, and added a basic SGML catalog support:
+</p><ul>
+  <li>HTML push bugfix #54891 and another patch from Jonas Borgstrom</li>
   <li>some serious speed optimization again</li>
   <li>some documentation cleanups</li>
   <li>trying to get better linking on Solaris (-R)</li>
@@ -1538,8 +2036,10 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>bugfix in xmlNodeGetLang()</li>
   <li>fixed a small configure portability problem</li>
   <li>fixed an inversion of SYSTEM and PUBLIC identifier in HTML document</li>
-</ul><h3>1.8.13: May 14 2001</h3><ul><li>bugfixes release of the old libxml1 branch used by Gnome</li>
-</ul><h3>2.3.8: May 3 2001</h3><ul><li>Integrated an SGML DocBook parser for the Gnome project</li>
+</ul><h3>1.8.13: May 14 2001</h3><ul>
+  <li>bugfixes release of the old libxml1 branch used by Gnome</li>
+</ul><h3>2.3.8: May 3 2001</h3><ul>
+  <li>Integrated an SGML DocBook parser for the Gnome project</li>
   <li>Fixed a few things in the HTML parser</li>
   <li>Fixed some XPath bugs raised by XSLT use, tried to fix the floating
     point portability issue</li>
@@ -1549,7 +2049,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>added xmlSaveFormatFile()</li>
   <li>fixed problems in copying nodes with entities references (gdome)</li>
   <li>removed some troubles surrounding the new validation module</li>
-</ul><h3>2.3.7: April 22 2001</h3><ul><li>lots of small bug fixes, corrected XPointer</li>
+</ul><h3>2.3.7: April 22 2001</h3><ul>
+  <li>lots of small bug fixes, corrected XPointer</li>
   <li>Non deterministic content model validation support</li>
   <li>added xmlDocCopyNode for gdome2</li>
   <li>revamped the way the HTML parser handles end of tags</li>
@@ -1559,7 +2060,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>Improved validation speed sensible for DocBook</li>
   <li>fixed a big bug with ID declared in external parsed entities</li>
   <li>portability fixes, update of Trio from Bjorn Reese</li>
-</ul><h3>2.3.6: April 8 2001</h3><ul><li>Code cleanup using extreme gcc compiler warning options, found and
+</ul><h3>2.3.6: April 8 2001</h3><ul>
+  <li>Code cleanup using extreme gcc compiler warning options, found and
     cleared half a dozen potential problem</li>
   <li>the Eazel team found an XML parser bug</li>
   <li>cleaned up the user of some of the string formatting function. used the
@@ -1568,12 +2070,14 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>xpath: removed a memory leak and fixed the predicate evaluation
     problem, extended the testsuite and cleaned up the result. XPointer seems
     broken ...</li>
-</ul><h3>2.3.5: Mar 23 2001</h3><ul><li>Biggest change is separate parsing and evaluation of XPath expressions,
+</ul><h3>2.3.5: Mar 23 2001</h3><ul>
+  <li>Biggest change is separate parsing and evaluation of XPath expressions,
     there is some new APIs for this too</li>
   <li>included a number of bug fixes(XML push parser, 51876, notations,
   52299)</li>
   <li>Fixed some portability issues</li>
-</ul><h3>2.3.4: Mar 10 2001</h3><ul><li>Fixed bugs #51860 and #51861</li>
+</ul><h3>2.3.4: Mar 10 2001</h3><ul>
+  <li>Fixed bugs #51860 and #51861</li>
   <li>Added a global variable xmlDefaultBufferSize to allow default buffer
     size to be application tunable.</li>
   <li>Some cleanup in the validation code, still a bug left and this part
@@ -1585,19 +2089,23 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>Fixed a loop reported in the HTML parsing</li>
   <li>blank space are reported even if the Dtd content model proves that they
     are formatting spaces, this is for XML conformance</li>
-</ul><h3>2.3.3: Mar 1 2001</h3><ul><li>small change in XPath for XSLT</li>
+</ul><h3>2.3.3: Mar 1 2001</h3><ul>
+  <li>small change in XPath for XSLT</li>
   <li>documentation cleanups</li>
   <li>fix in validation by Gary Pennington</li>
   <li>serious parsing performances improvements</li>
-</ul><h3>2.3.2: Feb 24 2001</h3><ul><li>chasing XPath bugs, found a bunch, completed some TODO</li>
+</ul><h3>2.3.2: Feb 24 2001</h3><ul>
+  <li>chasing XPath bugs, found a bunch, completed some TODO</li>
   <li>fixed a Dtd parsing bug</li>
   <li>fixed a bug in xmlNodeGetContent</li>
   <li>ID/IDREF support partly rewritten by Gary Pennington</li>
-</ul><h3>2.3.1: Feb 15 2001</h3><ul><li>some XPath and HTML bug fixes for XSLT</li>
+</ul><h3>2.3.1: Feb 15 2001</h3><ul>
+  <li>some XPath and HTML bug fixes for XSLT</li>
   <li>small extension of the hash table interfaces for DOM gdome2
     implementation</li>
   <li>A few bug fixes</li>
-</ul><h3>2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track)</h3><ul><li>Lots of XPath bug fixes</li>
+</ul><h3>2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track)</h3><ul>
+  <li>Lots of XPath bug fixes</li>
   <li>Add a mode with Dtd lookup but without validation error reporting for
     XSLT</li>
   <li>Add support for text node without escaping (XSLT)</li>
@@ -1611,30 +2119,36 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>tree copying bugfixes</li>
   <li>updates to Windows makefiles</li>
   <li>optimization patch from Bjorn Reese</li>
-</ul><h3>2.2.11: Jan 4 2001</h3><ul><li>bunch of bug fixes (memory I/O, xpath, ftp/http, ...)</li>
+</ul><h3>2.2.11: Jan 4 2001</h3><ul>
+  <li>bunch of bug fixes (memory I/O, xpath, ftp/http, ...)</li>
   <li>added htmlHandleOmittedElem()</li>
   <li>Applied Bjorn Reese's IPV6 first patch</li>
   <li>Applied Paul D. Smith patches for validation of XInclude results</li>
   <li>added XPointer xmlns() new scheme support</li>
-</ul><h3>2.2.10: Nov 25 2000</h3><ul><li>Fix the Windows problems of 2.2.8</li>
+</ul><h3>2.2.10: Nov 25 2000</h3><ul>
+  <li>Fix the Windows problems of 2.2.8</li>
   <li>integrate OpenVMS patches</li>
   <li>better handling of some nasty HTML input</li>
   <li>Improved the XPointer implementation</li>
   <li>integrate a number of provided patches</li>
-</ul><h3>2.2.9: Nov 25 2000</h3><ul><li>erroneous release :-(</li>
-</ul><h3>2.2.8: Nov 13 2000</h3><ul><li>First version of <a href="http://www.w3.org/TR/xinclude">XInclude</a>
+</ul><h3>2.2.9: Nov 25 2000</h3><ul>
+  <li>erroneous release :-(</li>
+</ul><h3>2.2.8: Nov 13 2000</h3><ul>
+  <li>First version of <a href="http://www.w3.org/TR/xinclude">XInclude</a>
     support</li>
   <li>Patch in conditional section handling</li>
   <li>updated MS compiler project</li>
   <li>fixed some XPath problems</li>
   <li>added an URI escaping function</li>
   <li>some other bug fixes</li>
-</ul><h3>2.2.7: Oct 31 2000</h3><ul><li>added message redirection</li>
+</ul><h3>2.2.7: Oct 31 2000</h3><ul>
+  <li>added message redirection</li>
   <li>XPath improvements (thanks TOM !)</li>
   <li>xmlIOParseDTD() added</li>
   <li>various small fixes in the HTML, URI, HTTP and XPointer support</li>
   <li>some cleanup of the Makefile, autoconf and the distribution content</li>
-</ul><h3>2.2.6: Oct 25 2000:</h3><ul><li>Added an hash table module, migrated a number of internal structure to
+</ul><h3>2.2.6: Oct 25 2000:</h3><ul>
+  <li>Added an hash table module, migrated a number of internal structure to
     those</li>
   <li>Fixed a posteriori validation problems</li>
   <li>HTTP module cleanups</li>
@@ -1642,7 +2156,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     normalization)</li>
   <li>coalescing of adjacent text nodes</li>
   <li>couple of XPath bug fixes, exported the internal API</li>
-</ul><h3>2.2.5: Oct 15 2000:</h3><ul><li>XPointer implementation and testsuite</li>
+</ul><h3>2.2.5: Oct 15 2000:</h3><ul>
+  <li>XPointer implementation and testsuite</li>
   <li>Lot of XPath fixes, added variable and functions registration, more
     tests</li>
   <li>Portability fixes, lots of enhancements toward an easy Windows build
@@ -1651,24 +2166,30 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>Integrated a lot of contributed patches</li>
   <li>added memory management docs</li>
   <li>a performance problem when using large buffer seems fixed</li>
-</ul><h3>2.2.4: Oct 1 2000:</h3><ul><li>main XPath problem fixed</li>
+</ul><h3>2.2.4: Oct 1 2000:</h3><ul>
+  <li>main XPath problem fixed</li>
   <li>Integrated portability patches for Windows</li>
   <li>Serious bug fixes on the URI and HTML code</li>
-</ul><h3>2.2.3: Sep 17 2000</h3><ul><li>bug fixes</li>
+</ul><h3>2.2.3: Sep 17 2000</h3><ul>
+  <li>bug fixes</li>
   <li>cleanup of entity handling code</li>
   <li>overall review of all loops in the parsers, all sprintf usage has been
     checked too</li>
   <li>Far better handling of larges Dtd. Validating against DocBook XML Dtd
     works smoothly now.</li>
-</ul><h3>1.8.10: Sep 6 2000</h3><ul><li>bug fix release for some Gnome projects</li>
-</ul><h3>2.2.2: August 12 2000</h3><ul><li>mostly bug fixes</li>
+</ul><h3>1.8.10: Sep 6 2000</h3><ul>
+  <li>bug fix release for some Gnome projects</li>
+</ul><h3>2.2.2: August 12 2000</h3><ul>
+  <li>mostly bug fixes</li>
   <li>started adding routines to access xml parser context options</li>
-</ul><h3>2.2.1: July 21 2000</h3><ul><li>a purely bug fixes release</li>
+</ul><h3>2.2.1: July 21 2000</h3><ul>
+  <li>a purely bug fixes release</li>
   <li>fixed an encoding support problem when parsing from a memory block</li>
   <li>fixed a DOCTYPE parsing problem</li>
   <li>removed a bug in the function allowing to override the memory
     allocation routines</li>
-</ul><h3>2.2.0: July 14 2000</h3><ul><li>applied a lot of portability fixes</li>
+</ul><h3>2.2.0: July 14 2000</h3><ul>
+  <li>applied a lot of portability fixes</li>
   <li>better encoding support/cleanup and saving (content is now always
     encoded in UTF-8)</li>
   <li>the HTML parser now correctly handles encodings</li>
@@ -1678,25 +2199,31 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>cleanup, bugfixes, etc ...</li>
   <li>Added a page about <a href="encoding.html">libxml Internationalization
     support</a></li>
-</ul><h3>1.8.9:  July 9 2000</h3><ul><li>fixed the spec the RPMs should be better</li>
+</ul><h3>1.8.9:  July 9 2000</h3><ul>
+  <li>fixed the spec the RPMs should be better</li>
   <li>fixed a serious bug in the FTP implementation, released 1.8.9 to solve
     rpmfind users problem</li>
-</ul><h3>2.1.1: July 1 2000</h3><ul><li>fixes a couple of bugs in the 2.1.0 packaging</li>
+</ul><h3>2.1.1: July 1 2000</h3><ul>
+  <li>fixes a couple of bugs in the 2.1.0 packaging</li>
   <li>improvements on the HTML parser</li>
-</ul><h3>2.1.0 and 1.8.8: June 29 2000</h3><ul><li>1.8.8 is mostly a commodity package for upgrading to libxml2 according
+</ul><h3>2.1.0 and 1.8.8: June 29 2000</h3><ul>
+  <li>1.8.8 is mostly a commodity package for upgrading to libxml2 according
     to <a href="upgrade.html">new instructions</a>. It fixes a nasty problem
     about &amp;#38; charref parsing</li>
   <li>2.1.0 also ease the upgrade from libxml v1 to the recent version. it
     also contains numerous fixes and enhancements:
-    <ul><li>added xmlStopParser() to stop parsing</li>
+    <ul>
+      <li>added xmlStopParser() to stop parsing</li>
       <li>improved a lot parsing speed when there is large CDATA blocs</li>
       <li>includes XPath patches provided by Picdar Technology</li>
       <li>tried to fix as much as possible DTD validation and namespace
         related problems</li>
       <li>output to a given encoding has been added/tested</li>
       <li>lot of various fixes</li>
-    </ul></li>
-</ul><h3>2.0.0: Apr 12 2000</h3><ul><li>First public release of libxml2. If you are using libxml, it's a good
+    </ul>
+  </li>
+</ul><h3>2.0.0: Apr 12 2000</h3><ul>
+  <li>First public release of libxml2. If you are using libxml, it's a good
     idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
     scheduled for Apr 3 the release occurred only on Apr 12 due to massive
     workload.</li>
@@ -1720,7 +2247,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     number of the libxml module in use</li>
   <li>a number of optional features of libxml can now be excluded at
     configure time (FTP/HTTP/HTML/XPath/Debug)</li>
-</ul><h3>2.0.0beta: Mar 14 2000</h3><ul><li>This is a first Beta release of libxml version 2</li>
+</ul><h3>2.0.0beta: Mar 14 2000</h3><ul>
+  <li>This is a first Beta release of libxml version 2</li>
   <li>It's available only from<a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org
     FTP</a>, it's packaged as libxml2-2.0.0beta and available as tar and
   RPMs</li>
@@ -1731,7 +2259,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     <a href="upgrade.html">upgrade page</a></li>
   <li>Some interfaces may changes (especially a bit about encoding).</li>
   <li>the updates includes:
-    <ul><li>fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
+    <ul>
+      <li>fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
         handled now</li>
       <li>Better handling of entities, especially well-formedness checking
         and proper PEref extensions in external subsets</li>
@@ -1739,12 +2268,14 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
       <li>Validation now correctly handle entities content</li>
       <li><a href="http://rpmfind.net/tools/gdome/messages/0039.html">change
         structures to accommodate DOM</a></li>
-    </ul></li>
+    </ul>
+  </li>
   <li>Serious progress were made toward compliance, <a href="conf/result.html">here are the result of the test</a> against the
     OASIS testsuite (except the Japanese tests since I don't support that
     encoding yet). This URL is rebuilt every couple of hours using the CVS
     head version.</li>
-</ul><h3>1.8.7: Mar 6 2000</h3><ul><li>This is a bug fix release:</li>
+</ul><h3>1.8.7: Mar 6 2000</h3><ul>
+  <li>This is a bug fix release:</li>
   <li>It is possible to disable the ignorable blanks heuristic used by
     libxml-1.x, a new function  xmlKeepBlanksDefault(0) will allow this. Note
     that for adherence to XML spec, this behaviour will be disabled by
@@ -1756,20 +2287,24 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
     compilation on some platforms has been fixed</li>
   <li>nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
   URIs</li>
-</ul><h3>1.8.6: Jan 31 2000</h3><ul><li>added a nanoFTP transport module, debugged until the new version of <a href="http://rpmfind.net/linux/rpm2html/rpmfind.html">rpmfind</a> can use
+</ul><h3>1.8.6: Jan 31 2000</h3><ul>
+  <li>added a nanoFTP transport module, debugged until the new version of <a href="http://rpmfind.net/linux/rpm2html/rpmfind.html">rpmfind</a> can use
     it without troubles</li>
-</ul><h3>1.8.5: Jan 21 2000</h3><ul><li>adding APIs to parse a well balanced chunk of XML (production <a href="http://www.w3.org/TR/REC-xml#NT-content">[43] content</a> of the
+</ul><h3>1.8.5: Jan 21 2000</h3><ul>
+  <li>adding APIs to parse a well balanced chunk of XML (production <a href="http://www.w3.org/TR/REC-xml#NT-content">[43] content</a> of the
     XML spec)</li>
   <li>fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no</li>
   <li>Jody Goldberg &lt;jgoldberg@home.com&gt; provided another patch trying
     to solve the zlib checks problems</li>
   <li>The current state in gnome CVS base is expected to ship as 1.8.5 with
     gnumeric soon</li>
-</ul><h3>1.8.4: Jan 13 2000</h3><ul><li>bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()</li>
+</ul><h3>1.8.4: Jan 13 2000</h3><ul>
+  <li>bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()</li>
   <li>all exit() call should have been removed from libxml</li>
   <li>fixed a problem with INCLUDE_WINSOCK on WIN32 platform</li>
   <li>added newDocFragment()</li>
-</ul><h3>1.8.3: Jan 5 2000</h3><ul><li>a Push interface for the XML and HTML parsers</li>
+</ul><h3>1.8.3: Jan 5 2000</h3><ul>
+  <li>a Push interface for the XML and HTML parsers</li>
   <li>a shell-like interface to the document tree (try tester --shell :-)</li>
   <li>lots of bug fixes and improvement added over XMas holidays</li>
   <li>fixed the DTD parsing code to work with the xhtml DTD</li>
@@ -1778,13 +2313,15 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>External entity loading code has been revamped, now it uses
     xmlLoadExternalEntity(), some fix on entities processing were added</li>
   <li>cleaned up WIN32 includes of socket stuff</li>
-</ul><h3>1.8.2: Dec 21 1999</h3><ul><li>I got another problem with includes and C++, I hope this issue is fixed
+</ul><h3>1.8.2: Dec 21 1999</h3><ul>
+  <li>I got another problem with includes and C++, I hope this issue is fixed
     for good this time</li>
   <li>Added a few tree modification functions: xmlReplaceNode,
     xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
     xmlDocSetRootElement</li>
   <li>Tried to improve the HTML output with help from <a href="mailto:clahey@umich.edu">Chris Lahey</a></li>
-</ul><h3>1.8.1: Dec 18 1999</h3><ul><li>various patches to avoid troubles when using libxml with C++ compilers
+</ul><h3>1.8.1: Dec 18 1999</h3><ul>
+  <li>various patches to avoid troubles when using libxml with C++ compilers
     the "namespace" keyword and C escaping in include files</li>
   <li>a problem in one of the core macros IS_CHAR was corrected</li>
   <li>fixed a bug introduced in 1.8.0 breaking default namespace processing,
@@ -1792,7 +2329,8 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>fixed a posteriori validation (validation after parsing, or by using a
     Dtd not specified in the original document)</li>
   <li>fixed a bug in</li>
-</ul><h3>1.8.0: Dec 12 1999</h3><ul><li>cleanup, especially memory wise</li>
+</ul><h3>1.8.0: Dec 12 1999</h3><ul>
+  <li>cleanup, especially memory wise</li>
   <li>the parser should be more reliable, especially the HTML one, it should
     not crash, whatever the input !</li>
   <li>Integrated various patches, especially a speedup improvement for large
@@ -1801,21 +2339,25 @@ it's actually not compiled in by default. The real fixes are:</p><ul><li>a coupl
   <li>attribute normalization, oops should have been added long ago !</li>
   <li>attributes defaulted from DTDs should be available, xmlSetProp() now
     does entities escaping by default.</li>
-</ul><h3>1.7.4: Oct 25 1999</h3><ul><li>Lots of HTML improvement</li>
+</ul><h3>1.7.4: Oct 25 1999</h3><ul>
+  <li>Lots of HTML improvement</li>
   <li>Fixed some errors when saving both XML and HTML</li>
   <li>More examples, the regression tests should now look clean</li>
   <li>Fixed a bug with contiguous charref</li>
-</ul><h3>1.7.3: Sep 29 1999</h3><ul><li>portability problems fixed</li>
+</ul><h3>1.7.3: Sep 29 1999</h3><ul>
+  <li>portability problems fixed</li>
   <li>snprintf was used unconditionally, leading to link problems on system
     were it's not available, fixed</li>
-</ul><h3>1.7.1: Sep 24 1999</h3><ul><li>The basic type for strings manipulated by libxml has been renamed in
+</ul><h3>1.7.1: Sep 24 1999</h3><ul>
+  <li>The basic type for strings manipulated by libxml has been renamed in
     1.7.1 from <strong>CHAR</strong> to <strong>xmlChar</strong>. The reason
     is that CHAR was conflicting with a predefined type on Windows. However
     on non WIN32 environment, compatibility is provided by the way of  a
     <strong>#define </strong>.</li>
   <li>Changed another error : the use of a structure field called errno, and
     leading to troubles on platforms where it's a macro</li>
-</ul><h3>1.7.0: Sep 23 1999</h3><ul><li>Added the ability to fetch remote DTD or parsed entities, see the <a href="html/libxml-nanohttp.html">nanohttp</a> module.</li>
+</ul><h3>1.7.0: Sep 23 1999</h3><ul>
+  <li>Added the ability to fetch remote DTD or parsed entities, see the <a href="html/libxml-nanohttp.html">nanohttp</a> module.</li>
   <li>Added an errno to report errors by another mean than a simple printf
     like callback</li>
   <li>Finished ID/IDREF support and checking when validation</li>
index e7e955b..bd52649 100644 (file)
@@ -11,7 +11,8 @@ A:link, A:visited, A:active { text-decoration: underline }
 libxml2, the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
 (<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
 order to get updates to this list or to discuss the specific topic of libxml2
-or libxslt wrappers or bindings:</p><ul><li><a href="http://libxmlplusplus.sourceforge.net/">Libxml++</a> seems the
+or libxslt wrappers or bindings:</p><ul>
+  <li><a href="http://libxmlplusplus.sourceforge.net/">Libxml++</a> seems the
     most up-to-date C++ bindings for libxml2, check the <a href="http://libxmlplusplus.sourceforge.net/reference/html/hierarchy.html">documentation</a>
     and the <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/libxmlplusplus/libxml%2b%2b/examples/">examples</a>.</li>
   <li>There is another <a href="http://libgdome-cpp.berlios.de/">C++ wrapper
@@ -62,7 +63,8 @@ of the Python bindings</a>.</p><p>Note to people interested in building bindings
 <a href="libxml2-api.xml">an XML API description file</a> which allows to
 automate a large part of the Python bindings, this includes function
 descriptions, enums, structures, typedefs, etc... The Python script used to
-build the bindings is python/generator.py in the source distribution.</p><p>To install the Python bindings there are 2 options:</p><ul><li>If you use an RPM based distribution, simply install the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
+build the bindings is python/generator.py in the source distribution.</p><p>To install the Python bindings there are 2 options:</p><ul>
+  <li>If you use an RPM based distribution, simply install the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
     RPM</a> (and if needed the <a href="http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python">libxslt-python
     RPM</a>).</li>
   <li>Otherwise use the <a href="ftp://xmlsoft.org/libxml2/python/">libxml2-python
@@ -89,7 +91,8 @@ if child.name != "foo":
 doc.freeDoc()</pre><p>The Python module is called libxml2; parseFile is the equivalent of
 xmlParseFile (most of the bindings are automatically generated, and the xml
 prefix is removed and the casing convention are kept). All node seen at the
-binding level share the same subset of accessors:</p><ul><li><code>name</code> : returns the node name</li>
+binding level share the same subset of accessors:</p><ul>
+  <li><code>name</code> : returns the node name</li>
   <li><code>type</code> : returns a string indicating the node type</li>
   <li><code>content</code> : returns the content of the node, it is based on
     xmlNodeGetContent() and hence is recursive.</li>
index 1695bb3..ec275e7 100644 (file)
     <symbol file="tree">xmlBufferDetach</symbol>
     <symbol file="dict">xmlInitializeDict</symbol>
   </release>
+  <release version="2.9.0">
+    <symbol file="tree">xmlBufContent</symbol>
+    <symbol file="tree">xmlBufEnd</symbol>
+    <symbol file="tree">xmlBufGetNodeContent</symbol>
+    <symbol file="tree">xmlBufNodeDump</symbol>
+    <symbol file="tree">xmlBufShrink</symbol>
+    <symbol file="tree">xmlBufUse</symbol>
+    <symbol file="dict">xmlDictGetUsage</symbol>
+    <symbol file="dict">xmlDictSetLimit</symbol>
+    <symbol file="xmlschemas">xmlSchemaValidateSetFilename</symbol>
+    <symbol file="xmlschemas">xmlSchemaValidateSetLocator</symbol>
+    <symbol file="xmlIO">xmlOutputBufferGetContent</symbol>
+    <symbol file="xmlIO">xmlOutputBufferGetSize</symbol>
+    <symbol file="xmlwriter">xmlTextWriterSetQuoteChar</symbol>
+  </release>
+  <release version="2.9.1">
+    <symbol file="xpath">xmlXPathNodeEval</symbol>
+    <symbol file="xpath">xmlXPathSetContextNode</symbol>
+  </release>
 </symbols>
index d206f54..f7ac957 100644 (file)
@@ -9,13 +9,15 @@ H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>Thread safety</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Thread safety</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Starting with 2.4.7, libxml2 makes provisions to ensure that concurrent
 threads can safely work in parallel parsing different documents. There is
-however a couple of things to do to ensure it:</p><ul><li>configure the library accordingly using the --with-threads options</li>
+however a couple of things to do to ensure it:</p><ul>
+  <li>configure the library accordingly using the --with-threads options</li>
   <li>call xmlInitParser() in the "main" thread before using any of the
     libxml2 API (except possibly selecting a different memory allocator)</li>
 </ul><p>Note that the thread safety cannot be ensured for multiple threads sharing
 the same document, the locking must be done at the application level, libxml
 exports a basic mutex and reentrant mutexes API in &lt;libxml/threads.h&gt;.
-The parts of the library checked for thread safety are:</p><ul><li>concurrent loading</li>
+The parts of the library checked for thread safety are:</p><ul>
+  <li>concurrent loading</li>
   <li>file access resolution</li>
   <li>catalog access</li>
   <li>catalog building</li>
index b649178..569c3c1 100644 (file)
@@ -8,7 +8,8 @@ H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
 </style><title>Upgrading 1.x code</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Upgrading 1.x code</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Incompatible changes:</p><p>Version 2 of libxml2 is the first version introducing serious backward
-incompatible changes. The main goals were:</p><ul><li>a general cleanup. A number of mistakes inherited from the very early
+incompatible changes. The main goals were:</p><ul>
+  <li>a general cleanup. A number of mistakes inherited from the very early
     versions couldn't be changed due to compatibility constraints. Example
     the "childs" element in the nodes.</li>
   <li>Uniformization of the various nodes, at least for their header and link
@@ -24,7 +25,8 @@ incompatible changes. The main goals were:</p><ul><li>a general cleanup. A numbe
 changed to compile against version 2.x of libxml. Here is a list of changes
 that I have collected, they may not be sufficient, so in case you find other
 change which are required, <a href="mailto:Daniel.Veillard@w3.org">drop me a
-mail</a>:</p><ol><li>The package name have changed from libxml to libxml2, the library name
+mail</a>:</p><ol>
+  <li>The package name have changed from libxml to libxml2, the library name
     is now -lxml2 . There is a new xml2-config script which should be used to
     select the right parameters libxml2</li>
   <li>Node <strong>childs</strong> field has been renamed
@@ -44,7 +46,8 @@ mail</a>:</p><ol><li>The package name have changed from libxml to libxml2, the l
     and formatting the document content becomes significant. So they are
     reported by SAX and if your using the DOM tree, corresponding nodes are
     generated. Too approach can be taken:
-    <ol><li>lazy one, use the compatibility call
+    <ol>
+      <li>lazy one, use the compatibility call
         <strong>xmlKeepBlanksDefault(0)</strong> but be aware that you are
         relying on a special (and possibly broken) set of heuristics of
         libxml to detect ignorable blanks. Don't complain if it breaks or
@@ -54,7 +57,8 @@ mail</a>:</p><ol><li>The package name have changed from libxml to libxml2, the l
         nodes. You can spot them using the commodity function
         <strong>xmlIsBlankNode(node)</strong> returning 1 for such blank
         nodes.</li>
-    </ol><p>Note also that with the new default the output functions don't add any
+    </ol>
+    <p>Note also that with the new default the output functions don't add any
     extra indentation when saving a tree in order to be able to round trip
     (read and save) without inflating the document with extra formatting
     chars.</p>
@@ -70,7 +74,8 @@ mail</a>:</p><ol><li>The package name have changed from libxml to libxml2, the l
     byte of the head of the document available for character detection.</li>
 </ol><h3>Ensuring both libxml-1.x and libxml-2.x compatibility</h3><p>Two new version of libxml (1.8.11) and libxml2 (2.3.4) have been released
 to allow smooth upgrade of existing libxml v1code while retaining
-compatibility. They offers the following:</p><ol><li>similar include naming, one should use
+compatibility. They offers the following:</p><ol>
+  <li>similar include naming, one should use
     <strong>#include&lt;libxml/...&gt;</strong> in both cases.</li>
   <li>similar identifiers defined via macros for the child and root fields:
     respectively <strong>xmlChildrenNode</strong> and
@@ -78,7 +83,8 @@ compatibility. They offers the following:</p><ol><li>similar include naming, one
   <li>a new macro <strong>LIBXML_TEST_VERSION</strong> which should be
     inserted once in the client code</li>
 </ol><p>So the roadmap to upgrade your existing libxml applications is the
-following:</p><ol><li>install the  libxml-1.8.8 (and libxml-devel-1.8.8) packages</li>
+following:</p><ol>
+  <li>install the  libxml-1.8.8 (and libxml-devel-1.8.8) packages</li>
   <li>find all occurrences where the xmlDoc <strong>root</strong> field is
     used and change it to <strong>xmlRootNode</strong></li>
   <li>similarly find all occurrences where the xmlNode
index 2f73b54..373285d 100644 (file)
@@ -508,7 +508,7 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
   <li>If you need to parse large files, check the <a
     href="xmlreader.html">xmlReader</a> API tutorial</li>
   <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a
-    href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">some nice
+    href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">some nice
     documentation</a> explaining how to use the libxml SAX interface.</li>
   <li>George Lebl wrote <a
     href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article
@@ -704,23 +704,428 @@ href="python.html">bindings section</a></p>
 
 <h2><a name="News">Releases</a></h2>
 
-<p>Items not finished and worked on, get in touch with the list if you want
-to help those</p>
+<p>The <a href="ChangeLog.html">change log</a> describes the recents commits
+to the <a href="http://git.gnome.org/browse/libxml2/">GIT</a> code base.</p>
+
+<p>Here is the list of public releases:</p>
+
+<h3>2.9.2: Oct 16 2014</h3>
 <ul>
-  <li>More testing on RelaxNG</li>
-  <li>Finishing up <a href="http://www.w3.org/TR/xmlschema-1/">XML
-  Schemas</a></li>
+  <li>Security:<br/>
+  Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),<br/>
+  CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)<br/>
+  </li>
+
+  <li>Bug Fixes:<br/>
+  fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),<br/>
+  xmlmemory: handle realloc properly (Yegor Yefremov),<br/>
+  Python generator bug raised by the const change (Daniel Veillard),<br/>
+  Windows Critical sections not released correctly (Daniel Veillard),<br/>
+  Parser error on repeated recursive entity expansion containing &amp;lt; (Daniel Veillard),<br/>
+  xpointer : fixing Null Pointers (Gaurav Gupta),<br/>
+  Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),<br/>
+  parser bug on misformed namespace attributes (Dennis Filder),<br/>
+  Pointer dereferenced before null check (Daniel Veillard),<br/>
+  Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),<br/>
+  Possible overflow in HTMLParser.c (Daniel Veillard),<br/>
+  python/tests/sync.py assumes Python dictionaries are ordered (John Beck),<br/>
+  Fix Enum check and missing break (Gaurav Gupta),<br/>
+  xmlIO: Handle error returns from dup() (Philip Withnall),<br/>
+  Fix a problem properly saving URIs (Daniel Veillard),<br/>
+  wrong error column in structured error when parsing attribute values (Juergen Keil),<br/>
+  wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),<br/>
+  no error column in structured error handler for xml schema validation errors (Juergen Keil),<br/>
+  Couple of Missing Null checks (Gaurav Gupta),<br/>
+  Add couple of missing Null checks (Daniel Veillard),<br/>
+  xmlschemastypes: Fix potential array overflow (Philip Withnall),<br/>
+  runtest: Fix a memory leak on parse failure (Philip Withnall),<br/>
+  xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),<br/>
+  xmlcatalog: Fix a memory leak on quit (Philip Withnall),<br/>
+  HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),<br/>
+  Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),<br/>
+  Avoid Possible Null Pointer in trio.c (Gaurav Gupta),<br/>
+  Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),<br/>
+  XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),<br/>
+  Fix various Missing Null checks (Gaurav Gupta),<br/>
+  Fix a potential NULL dereference (Daniel Veillard),<br/>
+  Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),<br/>
+  Add a missing argument check (Gaurav Gupta),<br/>
+  Adding a check in case of allocation error (Gaurav Gupta),<br/>
+  xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),<br/>
+  Adding some missing NULL checks (Gaurav),<br/>
+  Fixes for xmlInitParserCtxt (Daniel Veillard),<br/>
+  Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),<br/>
+  erroneously ignores a validation error if no error callback set (Daniel Veillard),<br/>
+  xmllint was not parsing the --c14n11 flag (Sérgio Batista),<br/>
+  Avoid Possible null pointer dereference in memory debug mode (Gaurav),<br/>
+  Avoid Double Null Check (Gaurav),<br/>
+  Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),<br/>
+  Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),<br/>
+  Avoid a possible NULL pointer dereference (Gaurav),<br/>
+  Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),<br/>
+  Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),<br/>
+  fixing a ptotential uninitialized access (Daniel Veillard),<br/>
+  Fix an fd leak in an error case (Daniel Veillard),<br/>
+  Missing initialization for the catalog module (Daniel Veillard),<br/>
+  Handling of XPath function arguments in error case (Nick Wellnhofer),<br/>
+  Fix a couple of missing NULL checks (Gaurav),<br/>
+  Avoid a possibility of dangling encoding handler (Gaurav),<br/>
+  Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),<br/>
+  Fix a bug loading some compressed files (Mike Alexander),<br/>
+  Fix XPath node comparison bug (Gaurav),<br/>
+  Type mismatch in xmlschemas.c (Gaurav),<br/>
+  Type mismatch in xmlschemastypes.c (Gaurav),<br/>
+  Avoid a deadcode in catalog.c (Daniel Veillard),<br/>
+  run close socket on Solaris, same as we do on other platforms (Denis Pauk),<br/>
+  Fix pointer dereferenced before null check (Gaurav),<br/>
+  Fix a potential NULL dereference in tree code (Daniel Veillard),<br/>
+  Fix potential NULL pointer dereferences in regexp code (Gaurav),<br/>
+  xmllint --pretty crashed without following numeric argument (Tim Galeckas),<br/>
+  Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),<br/>
+  Fix XPath '//' optimization with predicates (Nick Wellnhofer),<br/>
+  Clear up a potential NULL dereference (Daniel Veillard),<br/>
+  Fix a possible NULL dereference (Gaurav),<br/>
+  Avoid crash if allocation fails (Daniel Veillard),<br/>
+  Remove occasional leading space in XPath number formatting (Daniel Veillard),<br/>
+  Fix handling of mmap errors (Daniel Veillard),<br/>
+  Catch malloc error and exit accordingly (Daniel Veillard),<br/>
+  missing else in xlink.c (Ami Fischman),<br/>
+  Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),<br/>
+  Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),<br/>
+  properly quote the namespace uris written out during c14n (Aleksey Sanin),<br/>
+  Remove premature XInclude check on URI being relative (Alexey Neyman),<br/>
+  Fix missing break on last() function for attributes (dcb),<br/>
+  Do not URI escape in server side includes (Romain Bondue),<br/>
+  Fix an error in xmlCleanupParser (Alexander Pastukhov)<br/>
+  </li>
+
+  <li>Documentation:<br/>
+  typo in error messages "colon are forbidden from..." (Daniel Veillard),<br/>
+  Fix a link to James SAX documentation old page (Daniel Veillard),<br/>
+  Fix typos in relaxng.c (Jan Pokorný),<br/>
+  Fix a doc typo (Daniel Veillard),<br/>
+  Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),<br/>
+  Add limitations about encoding conversion (Daniel Veillard),<br/>
+  Fix typos in xmlschemas{,types}.c (Jan Pokorný),<br/>
+  Fix incorrect spelling entites-&gt;entities (Jan Pokorný),<br/>
+  Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)<br/>
+  </li>
+
+  <li>Portability:<br/>
+  AC_CONFIG_FILES and executable bit (Roumen Petrov),<br/>
+  remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),<br/>
+  fix some tabs mixing incompatible with python3 (Roumen Petrov),<br/>
+  Visual Studio 14 CTP defines snprintf() (Francis Dupont),<br/>
+  OS400: do not try to copy unexisting doc files (Patrick Monnerat),<br/>
+  OS400: use either configure.ac or configure.in. (Patrick Monnerat),<br/>
+  os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),<br/>
+  OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),<br/>
+  OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),<br/>
+  OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),<br/>
+  OS400: include in distribution tarball. (Patrick Monnerat),<br/>
+  OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),<br/>
+  OS400: Add compilation scripts. (Patrick Monnerat),<br/>
+  OS400: ILE RPG language header files. (Patrick Monnerat),<br/>
+  OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),<br/>
+  OS400: UTF8&lt;--&gt;EBCDIC wrappers for system and external library calls (Patrick Monnerat),<br/>
+  OS400: Easy character transcoding support (Patrick Monnerat),<br/>
+  OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),<br/>
+  OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),<br/>
+  Fix building when configuring without xpath and xptr (Daniel Veillard),<br/>
+  configure: Add --with-python-install-dir (Jonas Eriksson),<br/>
+  Fix compilation with minimum and xinclude. (Nicolas Le Cam),<br/>
+  Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),<br/>
+  Fix compilation with minimum and schematron. (Nicolas Le Cam),<br/>
+  Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),<br/>
+  Don't use xmlValidateName() when not available. (Nicolas Le Cam),<br/>
+  Fix a portability issue on Windows (Longstreth Jon),<br/>
+  Various portability patches for OpenVMS (Jacob (Jouk) Jansen),<br/>
+  Use specific macros for portability to OS/400 (Patrick Monnerat),<br/>
+  Add macros needed for OS/400 portability (Patrick Monnerat),<br/>
+  Portability patch for fopen on OS/400 (Patrick Monnerat),<br/>
+  Portability fixes for OS/400 (Patrick Monnerat),<br/>
+  Improve va_list portability (Patrick Monnerat),<br/>
+  Portability fix (Patrick Monnerat),<br/>
+  Portability fix (Patrick Monnerat),<br/>
+  Generic portability fix (Patrick Monnerat),<br/>
+  Shortening lines in headers (Patrick Monnerat),<br/>
+  build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),<br/>
+  build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),<br/>
+  fix some tabs mixing incompatible with python3 (Daniel Veillard),<br/>
+  add additional defines checks for support "./configure --with-minimum" (Denis Pauk),<br/>
+  Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),<br/>
+  python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),<br/>
+  python: Fix compiler warnings when building python3 bindings (Armin K),<br/>
+  Fix for compilation with python 2.6.8 (Petr Sumbera)<br/>
+  </li>
+
+  <li>Improvements:<br/>
+  win32/libxml2.def.src after rebuild in doc (Roumen Petrov),<br/>
+  elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),<br/>
+  elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),<br/>
+  Provide cmake module (Samuel Martin),<br/>
+  Fix a couple of issues raised by make dist (Daniel Veillard),<br/>
+  Fix and add const qualifiers (Kurt Roeckx),<br/>
+  Preparing for upcoming release of 2.9.2 (Daniel Veillard),<br/>
+  Fix zlib and lzma libraries check via command line (Dmitriy),<br/>
+  wrong error column in structured error when parsing end tag (Juergen Keil),<br/>
+  doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),<br/>
+  Add methods for python3 iterator (Ron Angeles),<br/>
+  Support element node traversal in document fragments. (Kyle VanderBeek),<br/>
+  xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),<br/>
+  Added macros for argument casts (Eric Zurcher),<br/>
+  adding init calls to xml and html Read parsing entry points (Daniel Veillard),<br/>
+  Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),<br/>
+  Implement choice for name classes on attributes (Shaun McCance),<br/>
+  Two small namespace tweaks (Daniel Veillard),<br/>
+  xmllint --memory should fail on empty files (Daniel Veillard),<br/>
+  Cast encoding name to char pointer to match arg type (Nikolay Sivov)<br/>
+  </li>
+
+  <li>Cleanups:<br/>
+  Removal of old configure.in (Daniel Veillard),<br/>
+  Unreachable code in tree.c (Gaurav Gupta),<br/>
+  Remove a couple of dead conditions (Gaurav Gupta),<br/>
+  Avoid some dead code and cleanup in relaxng.c (Gaurav),<br/>
+  Drop not needed checks (Denis Pauk),<br/>
+  Fix a wrong test (Daniel Veillard)<br/>
+  </li>
 </ul>
+<h3>2.9.1: Apr 19 2013</h3>
+<ul>
+  <li> Features:<br/>
+    Support for Python3 (Daniel Veillard),<br/>
+    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)<br/>
+  </li>
 
-<p>The <a href="ChangeLog.html">change log</a> describes the recents commits
-to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</p>
+  <li> Documentation:<br/>
+    Add documentation for xmllint --xpath (Daniel Veillard),<br/>
+    Fix the URL of the SAX documentation from James (Daniel Veillard),<br/>
+    Fix spelling of "length". (Michael Wood)<br/>
+  </li>
 
-<p>Here is the list of public releases:</p>
+  <li> Portability:<br/>
+    Fix python bindings with versions older than 2.7 (Daniel Veillard),<br/>
+    rebuild docs:Makefile.am (Roumen Petrov),<br/>
+    elfgcchack.h after rebuild in doc (Roumen Petrov),<br/>
+    elfgcchack for buf module (Roumen Petrov),<br/>
+    Fix a uneeded and wrong extra link parameter (Daniel Veillard),<br/>
+    Few cleanup patches for Windows (Denis Pauk),<br/>
+    Fix rpmbuild --nocheck (Mark Salter),<br/>
+    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),<br/>
+    Fix Broken multi-arch support in xml2-config (Daniel Veillard),<br/>
+    Fix a portability issue for GCC &lt; 3.4.0 (Daniel Veillard),<br/>
+    Windows build fixes (Daniel Richard),<br/>
+    Fix a thread portability problem (Friedrich Haubensak),<br/>
+    Downgrade autoconf requirement to 2.63 (Daniel Veillard)<br/>
+  </li>
 
+  <li> Bug Fixes:<br/>
+    Fix a linking error for python bindings (Daniel Veillard),<br/>
+    Fix a couple of return without value (Jüri Aedla),<br/>
+    Improve the hashing functions (Daniel Franke),<br/>
+    Improve handling of xmlStopParser() (Daniel Veillard),<br/>
+    Remove risk of lockup in dictionary initialization (Daniel Veillard),<br/>
+    Activate detection of encoding in external subset (Daniel Veillard),<br/>
+    Fix an output buffer flushing conversion bug (Mikhail Titov),<br/>
+    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),<br/>
+    Fix configure cannot remove messages (Gilles Espinasse),<br/>
+    fix schema validation in combination with xsi:nil (Daniel Veillard),<br/>
+    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),<br/>
+    Fix a few problems with setEntityLoader (Alexey Neyman),<br/>
+    Detect excessive entities expansion upon replacement (Daniel Veillard),<br/>
+    Fix the flushing out of raw buffers on encoding conversions (Daniel,<br/>
+Veillard),<br/>
+    Fix some buffer conversion issues (Daniel Veillard),<br/>
+    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,<br/>
+Veillard),<br/>
+    Fix an error in the progressive DTD parsing code (Dan Winship),<br/>
+    xmllint should not load DTD by default when using the reader (Daniel,<br/>
+Veillard),<br/>
+    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),<br/>
+    Fix potential out of bound access (Daniel Veillard),<br/>
+    Fix large parse of file from memory (Daniel Veillard),<br/>
+    Fix a bug in the nsclean option of the parser (Daniel Veillard),<br/>
+    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,<br/>
+Veillard),<br/>
+    Remove potential calls to exit() (Daniel Veillard)<br/>
+  </li>
+
+  <li> Improvements:<br/>
+    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),<br/>
+    Fix tree iterators broken by 2to3 script (Daniel Veillard),<br/>
+    update all tests for Python3 and Python2 (Daniel Veillard),<br/>
+    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),<br/>
+    Fix compilation on Python3 (Daniel Veillard),<br/>
+    Converting apibuild.py to python3 (Daniel Veillard),<br/>
+    First pass at starting porting to python3 (Daniel Veillard),<br/>
+    updated configure.in for python3 (Daniel Veillard),<br/>
+    Add support for xpathRegisterVariable in Python (Shaun McCance),<br/>
+    Added a regression tests from bug 694228 data (Daniel Veillard),<br/>
+    Cache presence of '&lt;' in entities content (Daniel Veillard),<br/>
+    Avoid extra processing on entities (Daniel Veillard),<br/>
+    Python binding for xmlRegisterInputCallback (Alexey Neyman),<br/>
+    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),<br/>
+    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),<br/>
+    Adding streaming validation to runtest checks (Daniel Veillard),<br/>
+    Add a --pushsmall option to xmllint (Daniel Veillard)<br/>
+  </li>
+
+  <li> Cleanups:<br/>
+    Switched comment in file to UTF-8 encoding (Daniel Veillard),<br/>
+    Extend gitignore (Daniel Veillard),<br/>
+    Silent the new python test on input (Alexey Neyman),<br/>
+    Cleanup of a duplicate test (Daniel Veillard),<br/>
+    Cleanup on duplicate test expressions (Daniel Veillard),<br/>
+    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,<br/>
+Gansterer),<br/>
+    Spec cleanups and a fix for multiarch support (Daniel Veillard),<br/>
+    Silence a clang warning (Daniel Veillard),<br/>
+    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),<br/>
+    rand_seed should be static in dict.c (Wouter Van Rooy),<br/>
+    Fix typos in parser comments (Jan Pokorný)<br/>
+  </li>
+</ul>
+<h3>2.9.0: Sep 11 2012</h3>
+<ul>
+  <li> Features:<br/>
+    A few new API entry points,<br/>
+    More resilient push parser mode,<br/>
+    A lot of portability improvement,<br/>
+    Faster XPath evaluation<br/>
+  </li>
+
+  <li> Documentation:<br/>
+    xml2-config.1 markup error (Christian Weisgerber),<br/>
+    libxml(3) manpage typo fix (John Bradshaw),<br/>
+    More cleanups to the documentation part of libxml2 (Daniel Richard G)<br/>
+  </li>
+
+  <li> Portability:<br/>
+    Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),<br/>
+    fix builds not having stdint.h (Rob Richards),<br/>
+    GetProcAddressA is available only on WinCE (Daniel Veillard),<br/>
+    More updates and cleanups on autotools and Makefiles (Daniel Richard G),<br/>
+    More changes for Win32 compilation (Eric Zurcher),<br/>
+    Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),<br/>
+    Bundles all generated files for python into the distribution (Daniel Richard G),<br/>
+    Fix compiler warnings of wincecompat.c (Patrick Gansterer),<br/>
+    Fix non __GNUC__ build (Patrick Gansterer),<br/>
+    Fix windows unicode build (Patrick Gansterer),<br/>
+    clean redefinition of {v}snprintf in C-source (Roumen Petrov),<br/>
+    use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),<br/>
+    fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),<br/>
+    Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),<br/>
+    Various "make distcheck" and portability fixups (Daniel Richard G),<br/>
+    Fix compilation on older Visual Studio (Daniel Veillard)<br/>
+  </li>
+
+  <li> Bug Fixes:<br/>
+    Change the XPath code to percolate allocation errors (Daniel Veillard),<br/>
+    Fix reuse of xmlInitParser (Daniel Veillard),<br/>
+    Fix potential crash on entities errors (Daniel Veillard),<br/>
+    initialize var (Rob Richards),<br/>
+    Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),<br/>
+    Fix problem with specific and generic error handlers (Pietro Cerutti),<br/>
+    Avoid a potential infinite recursion (Daniel Veillard),<br/>
+    Fix an XSD error when generating internal automata (Daniel Veillard),<br/>
+    Patch for xinclude of text using multibyte characters (Vitaly Ostanin),<br/>
+    Fix a segfault on XSD validation on pattern error (Daniel Veillard),<br/>
+    Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),<br/>
+    Add a missing element check (Daniel Veillard),<br/>
+    Adding various checks on node type though the API (Daniel Veillard),<br/>
+    Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),<br/>
+    Fix make dist to include new private header files (Daniel Veillard),<br/>
+    More fixups on the push parser behaviour (Daniel Veillard),<br/>
+    Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),<br/>
+    Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),<br/>
+    Fixup limits parser (Daniel Veillard),<br/>
+    Do not fetch external parsed entities (Daniel Veillard),<br/>
+    Fix an error in previous commit (Aron Xu),<br/>
+    Fix entities local buffers size problems (Daniel Veillard),<br/>
+    Fix parser local buffers size problems (Daniel Veillard),<br/>
+    Fix a failure to report xmlreader parsing failures (Daniel Veillard)<br/>
+  </li>
+
+  <li> Improvements:<br/>
+    Keep libxml2.syms when running "make distclean" (Daniel Veillard),<br/>
+    Allow to set the quoting character of an xmlWriter (Csaba Raduly),<br/>
+    Keep non-significant blanks node in HTML parser (Daniel Veillard),<br/>
+    Add a forbidden variable error number and message to XPath (Daniel Veillard),<br/>
+    Support long path names on WNT (Michael Stahl),<br/>
+    Improve HTML escaping of attribute on output (Daniel Veillard),<br/>
+    Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),<br/>
+    Switching XPath node sorting to Timsort (Vojtech Fried),<br/>
+    Optimizing '//' in XPath expressions (Nick Wellnhofer),<br/>
+    Expose xmlBufShrink in the public tree API (Daniel Veillard),<br/>
+    Visible HTML elements close the head tag (Conrad Irwin),<br/>
+    Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),<br/>
+    Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),<br/>
+    minimize use of HAVE_CONFIG_H (Roumen Petrov),<br/>
+    fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),<br/>
+    Add support for big line numbers in error reporting (Daniel Veillard),<br/>
+    Avoid using xmlBuffer for serialization (Daniel Veillard),<br/>
+    Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),<br/>
+    Provide new accessors for xmlOutputBuffer (Daniel Veillard),<br/>
+    Improvements for old buffer compatibility (Daniel Veillard),<br/>
+    Expand the limit test program (Daniel Veillard),<br/>
+    Improve error reporting on parser errors (Daniel Veillard),<br/>
+    Implement some default limits in the XPath module (Daniel Veillard),<br/>
+    Introduce some default parser limits (Daniel Veillard),<br/>
+    Cleanups and new limit APIs for dictionaries (Daniel Veillard),<br/>
+    Fixup for buf.c (Daniel Veillard),<br/>
+    Cleanup URI module memory allocation code (Daniel Veillard),<br/>
+    Extend testlimits (Daniel Veillard),<br/>
+    More avoid quadratic behaviour (Daniel Veillard),<br/>
+    Impose a reasonable limit on PI size (Daniel Veillard),<br/>
+    first version of testlimits new test (Daniel Veillard),<br/>
+    Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),<br/>
+    Impose a reasonable limit on comment size (Daniel Veillard),<br/>
+    Impose a reasonable limit on attribute size (Daniel Veillard),<br/>
+    Harden the buffer code and make it more compatible (Daniel Veillard),<br/>
+    More cleanups for input/buffers code (Daniel Veillard),<br/>
+    Cleanup function xmlBufResetInput(),<br/> to set input from Buffer (Daniel Veillard)
+    Swicth the test program for characters to new input buffers (Daniel Veillard),<br/>
+    Convert the HTML tree module to the new buffers (Daniel Veillard),<br/>
+    Convert of the HTML parser to new input buffers (Daniel Veillard),<br/>
+    Convert the writer to new output buffer and save APIs (Daniel Veillard),<br/>
+    Convert XMLReader to the new input buffers (Daniel Veillard),<br/>
+    New saving functions using xmlBuf and conversion (Daniel Veillard),<br/>
+    Provide new xmlBuf based saving functions (Daniel Veillard),<br/>
+    Convert XInclude to the new input buffers (Daniel Veillard),<br/>
+    Convert catalog code to the new input buffers (Daniel Veillard),<br/>
+    Convert C14N to the new Input buffer (Daniel Veillard),<br/>
+    Convert xmlIO.c to the new input and output buffers (Daniel Veillard),<br/>
+    Convert XML parser to the new input buffers (Daniel Veillard),<br/>
+    Incompatible change to the Input and Output buffers (Daniel Veillard),<br/>
+    Adding new encoding function to deal with the new structures (Daniel Veillard),<br/>
+    Convert XPath to xmlBuf (Daniel Veillard),<br/>
+    Adding a new buf module for buffers (Daniel Veillard),<br/>
+    Memory error within SAX2 reuse common framework (Daniel Veillard),<br/>
+    Fix xmllint --xpath node initialization (Daniel Veillard)<br/>
+  </li>
+
+  <li> Cleanups:<br/>
+    Various cleanups to avoid compiler warnings (Daniel Veillard),<br/>
+    Big space and tab cleanup (Daniel Veillard),<br/>
+    Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),<br/>
+    Second round of cleanups for LibXML2 docs/examples (Daniel Richard),<br/>
+    Remove all .cvsignore as they are not used anymore (Daniel Veillard),<br/>
+    Fix a Timsort function helper comment (Daniel Veillard),<br/>
+    Small cleanup for valgrind target (Daniel Veillard),<br/>
+    Patch for portability of latin characters in C files (Daniel Veillard),<br/>
+    Cleanup some of the parser code (Daniel Veillard),<br/>
+    Fix a variable name in comment (Daniel Veillard),<br/>
+    Regenerated testapi.c (Daniel Veillard),<br/>
+    Regenerating docs and API files (Daniel Veillard),<br/>
+    Small cleanup of unused variables in test (Daniel Veillard),<br/>
+    Expand .gitignore with more files (Daniel Veillard)<br/>
+  </li>
+</ul>
 <h3>2.8.0: May 23 2012</h3>
 <ul>
   <li>Features:
-- add lzma compression support (Anders F Bjorklund)
+  add lzma compression support (Anders F Bjorklund)
   </li>
 
   <li>Documentation:
@@ -2326,7 +2731,9 @@ Schemas <a href="http://www.w3.org/TR/xmlschema-1/">structures</a> and <a
 href="http://www.w3.org/TR/xmlschema-2/">datatypes</a> code, beware, all
 interfaces are likely to change, there is huge holes, it is clearly a work in
 progress and don't even think of putting this code in a production system,
-it's actually not compiled in by default. The real fixes are:</p>
+it's actually not compiled in by default. The real fixes are:
+</p>
+
 <ul>
   <li>a couple of bugs or limitations introduced in 2.4.20</li>
   <li>patches for Borland C++ and MSC by Igor</li>
@@ -2600,9 +3007,10 @@ it's actually not compiled in by default. The real fixes are:</p>
 
 <h3>2.3.9: May 19 2001</h3>
 
-<p>Lots of bugfixes, and added a basic SGML catalog support:</p>
+<p>Lots of bugfixes, and added a basic SGML catalog support:
+</p>
 <ul>
-  <li>HTML push bugfix #54891 and another patch from Jonas Borgström</li>
+  <li>HTML push bugfix #54891 and another patch from Jonas Borgstrom</li>
   <li>some serious speed optimization again</li>
   <li>some documentation cleanups</li>
   <li>trying to get better linking on Solaris (-R)</li>
@@ -3563,7 +3971,7 @@ called by the library as it progresses through the XML input.</p>
 
 <p>To get more detailed step-by-step guidance on using the SAX interface of
 libxml, see the <a
-href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
+href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">nice
 documentation</a>.written by <a href="mailto:james@daa.com.au">James
 Henstridge</a>.</p>
 
index 603bb26..36333f0 100644 (file)
@@ -7,13 +7,16 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Validation &amp; DTDs</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Validation &amp; DTDs</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General5">General overview</a></li>
+</style><title>Validation &amp; DTDs</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Validation &amp; DTDs</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol>
+  <li><a href="#General5">General overview</a></li>
   <li><a href="#definition">The definition</a></li>
   <li><a href="#Simple">Simple rules</a>
-    <ol><li><a href="#reference">How to reference a DTD from a document</a></li>
+    <ol>
+      <li><a href="#reference">How to reference a DTD from a document</a></li>
       <li><a href="#Declaring">Declaring elements</a></li>
       <li><a href="#Declaring1">Declaring attributes</a></li>
-    </ol></li>
+    </ol>
+  </li>
   <li><a href="#Some">Some examples</a></li>
   <li><a href="#validate">How to validate</a></li>
   <li><a href="#Other">Other resources</a></li>
@@ -28,7 +31,8 @@ found within your document, what is the formal shape of your document tree
 expression for the allowed list of children, or mixed content i.e. both text
 and children). The DTD also defines the valid attributes for all elements and
 the types of those attributes.</p><h3><a name="definition1" id="definition1">The definition</a></h3><p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
-Rev1</a>):</p><ul><li><a href="http://www.w3.org/TR/REC-xml#elemdecls">Declaring
+Rev1</a>):</p><ul>
+  <li><a href="http://www.w3.org/TR/REC-xml#elemdecls">Declaring
   elements</a></li>
   <li><a href="http://www.w3.org/TR/REC-xml#attdecls">Declaring
   attributes</a></li>
@@ -40,7 +44,8 @@ harder to design. I will just focus on DTDs for a formats with a fixed simple
 structure. It is just a set of basic rules, and definitely not exhaustive nor
 usable for complex DTD design.</p><h4><a name="reference1" id="reference1">How to reference a DTD from a document</a>:</h4><p>Assuming the top element of the document is <code>spec</code> and the dtd
 is placed in the file <code>mydtd</code> in the subdirectory
-<code>dtds</code> of the directory from where the document were loaded:</p><p><code>&lt;!DOCTYPE spec SYSTEM "dtds/mydtd"&gt;</code></p><p>Notes:</p><ul><li>The system string is actually an URI-Reference (as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>) so you can use a
+<code>dtds</code> of the directory from where the document were loaded:</p><p><code>&lt;!DOCTYPE spec SYSTEM "dtds/mydtd"&gt;</code></p><p>Notes:</p><ul>
+  <li>The system string is actually an URI-Reference (as defined in <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>) so you can use a
     full URL string indicating the location of your DTD on the Web. This is a
     really good thing to do if you want others to validate your document.</li>
   <li>It is also possible to associate a <code>PUBLIC</code> identifier (a
@@ -76,7 +81,8 @@ of type <code>ID</code>, usable for reference from attribute of type
 IDREF:</p><p><code>&lt;!ATTLIST chapter id ID #IMPLIED&gt;</code></p><p>The last value of an attribute definition can be <code>#REQUIRED
 </code>meaning that the attribute has to be given, <code>#IMPLIED</code>
 meaning that it is optional, or the default value (possibly prefixed by
-<code>#FIXED</code> if it is the only allowed).</p><p>Notes:</p><ul><li>Usually the attributes pertaining to a given element are declared in a
+<code>#FIXED</code> if it is the only allowed).</p><p>Notes:</p><ul>
+  <li>Usually the attributes pertaining to a given element are declared in a
     single expression, but it is just a convention adopted by a lot of DTD
     writers:
     <pre>&lt;!ATTLIST termdef
@@ -94,7 +100,8 @@ For example the following validates a copy of the first revision of the XML
 1.0 specification:</p><p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p><p>the -- noout is used to disable output of the resulting tree.</p><p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
 against a given DTD.</p><p>Libxml2 exports an API to handle DTDs and validation, check the <a href="http://xmlsoft.org/html/libxml-valid.html">associated
 description</a>.</p><h3><a name="Other1" id="Other1">Other resources</a></h3><p>DTDs are as old as SGML. So there may be a number of examples on-line, I
-will just list one for now, others pointers welcome:</p><ul><li><a href="http://www.xml101.com:8081/dtd/">XML-101 DTD</a></li>
+will just list one for now, others pointers welcome:</p><ul>
+  <li><a href="http://www.xml101.com:8081/dtd/">XML-101 DTD</a></li>
 </ul><p>I suggest looking at the examples found under test/valid/dtd and any of
 the large number of books available on XML. The dia example in test/valid
 should be both simple and complete enough to allow you to build your own.</p><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
index 31f5df5..51bb646 100644 (file)
@@ -7,14 +7,16 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>I/O Interfaces</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>I/O Interfaces</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General1">General overview</a></li>
+</style><title>I/O Interfaces</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>I/O Interfaces</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol>
+  <li><a href="#General1">General overview</a></li>
   <li><a href="#basic">The basic buffer type</a></li>
   <li><a href="#Input">Input I/O handlers</a></li>
   <li><a href="#Output">Output I/O handlers</a></li>
   <li><a href="#entities">The entities loader</a></li>
   <li><a href="#Example2">Example of customized I/O</a></li>
 </ol><h3><a name="General1" id="General1">General overview</a></h3><p>The module <code><a href="http://xmlsoft.org/html/libxml-xmlio.html">xmlIO.h</a></code> provides
-the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p><ul><li>Entities loader, this is a routine which tries to fetch the entities
+the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p><ul>
+  <li>Entities loader, this is a routine which tries to fetch the entities
     (files) based on their PUBLIC and SYSTEM identifiers. The default loader
     don't look at the public identifier since libxml2 do not maintain a
     catalog. You can redefine you own entity loader by using
@@ -33,7 +35,8 @@ the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p><ul>
     handlers for certain names.</p>
   </li>
 </ul><p>The general mechanism used when loading http://rpmfind.net/xml.html for
-example in the HTML parser is the following:</p><ol><li>The default entity loader calls <code>xmlNewInputFromFile()</code> with
+example in the HTML parser is the following:</p><ol>
+  <li>The default entity loader calls <code>xmlNewInputFromFile()</code> with
     the parsing context and the URI string.</li>
   <li>the URI string is checked against the existing registered handlers
     using their match() callback function, if the HTTP module was compiled
@@ -102,7 +105,8 @@ int main(..) {
 }</pre><h3><a name="Example2" id="Example2">Example of customized I/O</a></h3><p>This example come from <a href="http://xmlsoft.org/messages/0708.html">a
 real use case</a>,  xmlDocDump() closes the FILE * passed by the application
 and this was a problem. The <a href="http://xmlsoft.org/messages/0711.html">solution</a> was to redefine a
-new output handler with the closing call deactivated:</p><ol><li>First define a new I/O output allocator where the output don't close
+new output handler with the closing call deactivated:</p><ol>
+  <li>First define a new I/O output allocator where the output don't close
     the file:
     <pre>xmlOutputBufferPtr
 xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
index 10caf40..540a114 100644 (file)
@@ -1,18 +1,38 @@
-.\" ** You probably do not want to edit this file directly **
-.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
-.\" Instead of manually editing it, you probably should edit the DocBook XML
-.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
-.TH "XMLLINT" "1" "$Date$" "libxml2" ""
+'\" t
+.\"     Title: xmllint
+.\"    Author: John Fleck <jfleck@inkstain.net>
+.\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/>
+.\"      Date: $Date$
+.\"    Manual: xmllint Manual
+.\"    Source: libxml2
+.\"  Language: English
+.\"
+.TH "XMLLINT" "1" "$Date$" "libxml2" "xmllint Manual"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\" -----------------------------------------------------------------
+.\" * set default formatting
+.\" -----------------------------------------------------------------
 .\" disable hyphenation
 .nh
 .\" disable justification (adjust text to left margin only)
 .ad l
+.\" -----------------------------------------------------------------
+.\" * MAIN CONTENT STARTS HERE *
+.\" -----------------------------------------------------------------
 .SH "NAME"
 xmllint \- command line XML tool
 .SH "SYNOPSIS"
-.HP 8
-\fBxmllint\fR [\fB\-\-version\fR \fB\-\-debug\fR \fB\-\-shell\fR \fB\-\-debugent\fR \fB\-\-copy\fR \fB\-\-recover\fR \fB\-\-noent\fR \fB\-\-noout\fR \fB\-\-nonet\fR \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR \fB\-\-load\-trace\fR \fB\-\-htmlout\fR \fB\-\-nowrap\fR \fB\-\-valid\fR \fB\-\-postvalid\fR \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR \fB\-\-timing\fR \fB\-\-output\ \fR\fB\fIFILE\fR\fR \fB\-\-repeat\fR \fB\-\-insert\fR \fB\-\-compress\fR \fB\-\-html\fR \fB\-\-xmlout\fR \fB\-\-push\fR \fB\-\-memory\fR \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR \fB\-\-nowarning\fR \fB\-\-noblanks\fR \fB\-\-nocdata\fR \fB\-\-format\fR \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR \fB\-\-dropdtd\fR \fB\-\-nsclean\fR \fB\-\-testIO\fR \fB\-\-catalogs\fR \fB\-\-nocatalogs\fR \fB\-\-auto\fR \fB\-\-xinclude\fR \fB\-\-noxincludenode\fR \fB\-\-loaddtd\fR \fB\-\-dtdattr\fR \fB\-\-stream\fR \fB\-\-walker\fR \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR \fB\-\-chkregister\fR \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR \fB\-\-c14n\fR] {\fIXML\-FILE(S)\fR... \-}
-.HP 8
+.HP \w'\fBxmllint\fR\ 'u
+\fBxmllint\fR [\fB\-\-version\fR | \fB\-\-debug\fR | \fB\-\-shell\fR | \fB\-\-xpath\ "\fR\fB\fIXPath_expression\fR\fR\fB"\fR | \fB\-\-debugent\fR | \fB\-\-copy\fR | \fB\-\-recover\fR | \fB\-\-noent\fR | \fB\-\-noout\fR | \fB\-\-nonet\fR | \fB\-\-path\ "\fR\fB\fIPATH(S)\fR\fR\fB"\fR | \fB\-\-load\-trace\fR | \fB\-\-htmlout\fR | \fB\-\-nowrap\fR | \fB\-\-valid\fR | \fB\-\-postvalid\fR | \fB\-\-dtdvalid\ \fR\fB\fIURL\fR\fR | \fB\-\-dtdvalidfpi\ \fR\fB\fIFPI\fR\fR | \fB\-\-timing\fR | \fB\-\-output\ \fR\fB\fIFILE\fR\fR | \fB\-\-repeat\fR | \fB\-\-insert\fR | \fB\-\-compress\fR | \fB\-\-html\fR | \fB\-\-xmlout\fR | \fB\-\-push\fR | \fB\-\-memory\fR | \fB\-\-maxmem\ \fR\fB\fINBBYTES\fR\fR | \fB\-\-nowarning\fR | \fB\-\-noblanks\fR | \fB\-\-nocdata\fR | \fB\-\-format\fR | \fB\-\-encode\ \fR\fB\fIENCODING\fR\fR | \fB\-\-dropdtd\fR | \fB\-\-nsclean\fR | \fB\-\-testIO\fR | \fB\-\-catalogs\fR | \fB\-\-nocatalogs\fR | \fB\-\-auto\fR | \fB\-\-xinclude\fR | \fB\-\-noxincludenode\fR | \fB\-\-loaddtd\fR | \fB\-\-dtdattr\fR | \fB\-\-stream\fR | \fB\-\-walker\fR | \fB\-\-pattern\ \fR\fB\fIPATTERNVALUE\fR\fR | \fB\-\-chkregister\fR | \fB\-\-relaxng\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-schema\ \fR\fB\fISCHEMA\fR\fR | \fB\-\-c14n\fR] {\fIXML\-FILE(S)\fR... | \-}
+.HP \w'\fBxmllint\fR\ 'u
 \fBxmllint\fR \fB\-\-help\fR
 .SH "DESCRIPTION"
 .PP
@@ -24,404 +44,604 @@ files, specified on the command line as
 \fIXML\-FILE\fR
 (or the standard input if the filename provided is
 \fB\-\fR
-). It prints various types of output, depending upon the options selected. It is useful for detecting errors both in
+)\&. It prints various types of output, depending upon the options selected\&. It is useful for detecting errors both in
 XML
 code and in the
 XML
-parser itself.
+parser itself\&.
 .PP
 \fBxmllint\fR
 is included in
-\fBlibxml\fR(3).
+\fBlibxml\fR(3)\&.
 .SH "OPTIONS"
 .PP
 \fBxmllint\fR
 accepts the following options (in alphabetical order):
-.TP
+.PP
 \fB\-\-auto\fR
-Generate a small document for testing purposes.
-.TP
+.RS 4
+Generate a small document for testing purposes\&.
+.RE
+.PP
 \fB\-\-catalogs\fR
+.RS 4
 Use the
 SGML
 catalog(s) from
-\fBSGML_CATALOG_FILES\fR. Otherwise
+\fBSGML_CATALOG_FILES\fR\&. Otherwise
 XML
 catalogs starting from
-\fI/etc/xml/catalog\fR
-are used by default.
-.TP
+/etc/xml/catalog
+are used by default\&.
+.RE
+.PP
 \fB\-\-chkregister\fR
-Turn on node registration. Useful for developers testing
+.RS 4
+Turn on node registration\&. Useful for developers testing
 \fBlibxml\fR(3)
-node tracking code.
-.TP
+node tracking code\&.
+.RE
+.PP
 \fB\-\-compress\fR
+.RS 4
 Turn on
 \fBgzip\fR(1)
-compression of output.
-.TP
+compression of output\&.
+.RE
+.PP
 \fB\-\-copy\fR
-Test the internal copy implementation.
-.TP
+.RS 4
+Test the internal copy implementation\&.
+.RE
+.PP
 \fB\-\-c14n\fR
+.RS 4
 Use the W3C
 XML
 Canonicalisation (C14N) to serialize the result of parsing to
-\fIstdout\fR. It keeps comments in the result.
-.TP
+stdout\&. It keeps comments in the result\&.
+.RE
+.PP
 \fB\-\-dtdvalid \fR\fB\fIURL\fR\fR
+.RS 4
 Use the
 DTD
 specified by an
 \fIURL\fR
-for validation.
-.TP
+for validation\&.
+.RE
+.PP
 \fB\-\-dtdvalidfpi \fR\fB\fIFPI\fR\fR
+.RS 4
 Use the
 DTD
 specified by a Formal Public Identifier
 \fIFPI\fR
-for validation, note that this will require a catalog exporting that Formal Public Identifier to work.
-.TP
+for validation, note that this will require a catalog exporting that Formal Public Identifier to work\&.
+.RE
+.PP
 \fB\-\-debug\fR
-Parse a file and output an annotated tree of the in\-memory version of the document.
-.TP
+.RS 4
+Parse a file and output an annotated tree of the in\-memory version of the document\&.
+.RE
+.PP
 \fB\-\-debugent\fR
-Debug the entities defined in the document.
-.TP
+.RS 4
+Debug the entities defined in the document\&.
+.RE
+.PP
 \fB\-\-dropdtd\fR
+.RS 4
 Remove
 DTD
-from output.
-.TP
+from output\&.
+.RE
+.PP
 \fB\-\-dtdattr\fR
+.RS 4
 Fetch external
 DTD
-and populate the tree with inherited attributes.
-.TP
+and populate the tree with inherited attributes\&.
+.RE
+.PP
 \fB\-\-encode \fR\fB\fIENCODING\fR\fR
-Output in the given encoding.
-.TP
+.RS 4
+Output in the given encoding\&. Note that this works for full document not fragments or result from XPath queries\&.
+.RE
+.PP
 \fB\-\-format\fR
-Reformat and reindent the output. The
+.RS 4
+Reformat and reindent the output\&. The
 \fBXMLLINT_INDENT\fR
-environment variable controls the indentation. The default value is two spaces " ").
-.TP
+environment variable controls the indentation\&. The default value is two spaces " ")\&.
+.RE
+.PP
 \fB\-\-help\fR
+.RS 4
 Print out a short usage summary for
-\fBxmllint\fR.
-.TP
+\fBxmllint\fR\&.
+.RE
+.PP
 \fB\-\-html\fR
+.RS 4
 Use the
 HTML
-parser.
-.TP
+parser\&.
+.RE
+.PP
 \fB\-\-htmlout\fR
+.RS 4
 Output results as an
 HTML
-file. This causes
+file\&. This causes
 \fBxmllint\fR
 to output the necessary
 HTML
-tags surrounding the result tree output so the results can be displayed/viewed in a browser.
-.TP
+tags surrounding the result tree output so the results can be displayed/viewed in a browser\&.
+.RE
+.PP
 \fB\-\-insert\fR
-Test for valid insertions.
-.TP
+.RS 4
+Test for valid insertions\&.
+.RE
+.PP
 \fB\-\-loaddtd\fR
+.RS 4
 Fetch an external
-DTD.
-.TP
+DTD\&.
+.RE
+.PP
 \fB\-\-load\-trace\fR
+.RS 4
 Display all the documents loaded during the processing to
-\fIstderr\fR.
-.TP
+stderr\&.
+.RE
+.PP
 \fB\-\-maxmem \fR\fB\fINNBYTES\fR\fR
-Test the parser memory support.
+.RS 4
+Test the parser memory support\&.
 \fINNBYTES\fR
-is the maximum number of bytes the library is allowed to allocate. This can also be used to make sure batch processing of
+is the maximum number of bytes the library is allowed to allocate\&. This can also be used to make sure batch processing of
 XML
-files will not exhaust the virtual memory of the server running them.
-.TP
+files will not exhaust the virtual memory of the server running them\&.
+.RE
+.PP
 \fB\-\-memory\fR
-Parse from memory.
-.TP
+.RS 4
+Parse from memory\&.
+.RE
+.PP
 \fB\-\-noblanks\fR
-Drop ignorable blank spaces.
-.TP
+.RS 4
+Drop ignorable blank spaces\&.
+.RE
+.PP
 \fB\-\-nocatalogs\fR
-Do not use any catalogs.
-.TP
+.RS 4
+Do not use any catalogs\&.
+.RE
+.PP
 \fB\-\-nocdata\fR
-Substitute CDATA section by equivalent text nodes.
-.TP
+.RS 4
+Substitute CDATA section by equivalent text nodes\&.
+.RE
+.PP
 \fB\-\-noent\fR
-Substitute entity values for entity references. By default,
+.RS 4
+Substitute entity values for entity references\&. By default,
 \fBxmllint\fR
-leaves entity references in place.
-.TP
+leaves entity references in place\&.
+.RE
+.PP
 \fB\-\-nonet\fR
+.RS 4
 Do not use the Internet to fetch
-DTDs or entities.
-.TP
+DTDs or entities\&.
+.RE
+.PP
 \fB\-\-noout\fR
-Suppress output. By default,
+.RS 4
+Suppress output\&. By default,
 \fBxmllint\fR
-outputs the result tree.
-.TP
+outputs the result tree\&.
+.RE
+.PP
 \fB\-\-nowarning\fR
-Do not emit warnings from the parser and/or validator.
-.TP
+.RS 4
+Do not emit warnings from the parser and/or validator\&.
+.RE
+.PP
 \fB\-\-nowrap\fR
+.RS 4
 Do not output
 HTML
-doc wrapper.
-.TP
+doc wrapper\&.
+.RE
+.PP
 \fB\-\-noxincludenode\fR
-Do XInclude processing but do not generate XInclude start and end nodes.
-.TP
+.RS 4
+Do XInclude processing but do not generate XInclude start and end nodes\&.
+.RE
+.PP
 \fB\-\-nsclean\fR
-Remove redundant namespace declarations.
-.TP
+.RS 4
+Remove redundant namespace declarations\&.
+.RE
+.PP
 \fB\-\-output \fR\fB\fIFILE\fR\fR
+.RS 4
 Define a file path where
 \fBxmllint\fR
-will save the result of parsing. Usually the programs build a tree and save it on
-\fIstdout\fR, with this option the result
+will save the result of parsing\&. Usually the programs build a tree and save it on
+stdout, with this option the result
 XML
-instance will be saved onto a file.
-.TP
+instance will be saved onto a file\&.
+.RE
+.PP
 \fB\-\-path "\fR\fB\fIPATH(S)\fR\fR\fB"\fR
+.RS 4
 Use the (space\- or colon\-separated) list of filesystem paths specified by
 \fIPATHS\fR
 to load
-DTDs or entities. Enclose space\-separated lists by quotation marks.
-.TP
+DTDs or entities\&. Enclose space\-separated lists by quotation marks\&.
+.RE
+.PP
 \fB\-\-pattern \fR\fB\fIPATTERNVALUE\fR\fR
-Used to exercise the pattern recognition engine, which can be used with the reader interface to the parser. It allows to select some nodes in the document based on an XPath (subset) expression. Used for debugging.
-.TP
+.RS 4
+Used to exercise the pattern recognition engine, which can be used with the reader interface to the parser\&. It allows to select some nodes in the document based on an XPath (subset) expression\&. Used for debugging\&.
+.RE
+.PP
 \fB\-\-postvalid\fR
-Validate after parsing has completed.
-.TP
+.RS 4
+Validate after parsing has completed\&.
+.RE
+.PP
 \fB\-\-push\fR
-Use the push mode of the parser.
-.TP
+.RS 4
+Use the push mode of the parser\&.
+.RE
+.PP
 \fB\-\-recover\fR
-Output any parsable portions of an invalid document.
-.TP
+.RS 4
+Output any parsable portions of an invalid document\&.
+.RE
+.PP
 \fB\-\-relaxng \fR\fB\fISCHEMA\fR\fR
+.RS 4
 Use RelaxNG file named
 \fISCHEMA\fR
-for validation.
-.TP
+for validation\&.
+.RE
+.PP
 \fB\-\-repeat\fR
-Repeat 100 times, for timing or profiling.
-.TP
+.RS 4
+Repeat 100 times, for timing or profiling\&.
+.RE
+.PP
 \fB\-\-schema \fR\fB\fISCHEMA\fR\fR
+.RS 4
 Use a W3C
 XML
 Schema file named
 \fISCHEMA\fR
-for validation.
-.TP
+for validation\&.
+.RE
+.PP
 \fB\-\-shell\fR
-Run a navigating shell. Details on available commands in shell mode are below (see
-the section called \(lqSHELL COMMANDS\(rq).
-.TP
+.RS 4
+Run a navigating shell\&. Details on available commands in shell mode are below (see
+the section called \(lqSHELL COMMANDS\(rq)\&.
+.RE
+.PP
+\fB\-\-xpath "\fR\fB\fIXPath_expression\fR\fR\fB"\fR
+.RS 4
+Run an XPath expression given as argument and print the result\&. In case of a nodeset result, each node in the node set is serialized in full in the output\&. In case of an empty node set the "XPath set is empty" result will be shown and an error exit code will be returned\&.
+.RE
+.PP
 \fB\-\-stream\fR
+.RS 4
 Use streaming
 API
 \- useful when used in combination with
 \fB\-\-relaxng\fR
 or
 \fB\-\-valid\fR
-options for validation of files that are too large to be held in memory.
-.TP
+options for validation of files that are too large to be held in memory\&.
+.RE
+.PP
 \fB\-\-testIO\fR
-Test user input/output support.
-.TP
+.RS 4
+Test user input/output support\&.
+.RE
+.PP
 \fB\-\-timing\fR
+.RS 4
 Output information about the time it takes
 \fBxmllint\fR
-to perform the various steps.
-.TP
+to perform the various steps\&.
+.RE
+.PP
 \fB\-\-valid\fR
-Determine if the document is a valid instance of the included Document Type Definition (DTD). A
+.RS 4
+Determine if the document is a valid instance of the included Document Type Definition (DTD)\&. A
 DTD
 to be validated against also can be specified at the command line using the
 \fB\-\-dtdvalid\fR
-option. By default,
+option\&. By default,
 \fBxmllint\fR
-also checks to determine if the document is well\-formed.
-.TP
+also checks to determine if the document is well\-formed\&.
+.RE
+.PP
 \fB\-\-version\fR
+.RS 4
 Display the version of
 \fBlibxml\fR(3)
-used.
-.TP
+used\&.
+.RE
+.PP
 \fB\-\-walker\fR
+.RS 4
 Test the walker module, which is a reader interface but for a document tree, instead of using the reader
 API
-on an unparsed document it works on an existing in\-memory tree. Used for debugging.
-.TP
+on an unparsed document it works on an existing in\-memory tree\&. Used for debugging\&.
+.RE
+.PP
 \fB\-\-xinclude\fR
-Do XInclude processing.
-.TP
+.RS 4
+Do XInclude processing\&.
+.RE
+.PP
 \fB\-\-xmlout\fR
+.RS 4
 Used in conjunction with
-\fB\-\-html\fR. Usually when
+\fB\-\-html\fR\&. Usually when
 HTML
 is parsed the document is saved with the
 HTML
-serializer. But with this option the resulting document is saved with the
+serializer\&. But with this option the resulting document is saved with the
 XML
-serializer. This is primarily used to generate
+serializer\&. This is primarily used to generate
 XHTML
 from
 HTML
-input.
+input\&.
+.RE
 .SH "SHELL COMMANDS"
 .PP
 \fBxmllint\fR
 offers an interactive shell mode invoked with the
 \fB\-\-shell\fR
-command. Available commands in shell mode include (in alphabetical order):
-.TP
+command\&. Available commands in shell mode include (in alphabetical order):
+.PP
 \fBbase\fR
+.RS 4
 Display
 XML
-base of the node.
-.TP
+base of the node\&.
+.RE
+.PP
 \fBbye\fR
-Leave the shell.
-.TP
+.RS 4
+Leave the shell\&.
+.RE
+.PP
 \fBcat \fR\fB\fINODE\fR\fR
-Display the given node or the current one.
-.TP
+.RS 4
+Display the given node or the current one\&.
+.RE
+.PP
 \fBcd \fR\fB\fIPATH\fR\fR
-Change the current node to the given path (if unique) or root if no argument is given.
-.TP
+.RS 4
+Change the current node to the given path (if unique) or root if no argument is given\&.
+.RE
+.PP
 \fBdir \fR\fB\fIPATH\fR\fR
-Dumps information about the node (namespace, attributes, content).
-.TP
+.RS 4
+Dumps information about the node (namespace, attributes, content)\&.
+.RE
+.PP
 \fBdu \fR\fB\fIPATH\fR\fR
-Show the structure of the subtree under the given path or the current node.
-.TP
+.RS 4
+Show the structure of the subtree under the given path or the current node\&.
+.RE
+.PP
 \fBexit\fR
-Leave the shell.
-.TP
+.RS 4
+Leave the shell\&.
+.RE
+.PP
 \fBhelp\fR
-Show this help.
-.TP
+.RS 4
+Show this help\&.
+.RE
+.PP
 \fBfree\fR
-Display memory usage.
-.TP
+.RS 4
+Display memory usage\&.
+.RE
+.PP
 \fBload \fR\fB\fIFILENAME\fR\fR
-Load a new document with the given filename.
-.TP
+.RS 4
+Load a new document with the given filename\&.
+.RE
+.PP
 \fBls \fR\fB\fIPATH\fR\fR
-List contents of the given path or the current directory.
-.TP
+.RS 4
+List contents of the given path or the current directory\&.
+.RE
+.PP
 \fBpwd\fR
-Display the path to the current node.
-.TP
+.RS 4
+Display the path to the current node\&.
+.RE
+.PP
 \fBquit\fR
-Leave the shell.
-.TP
+.RS 4
+Leave the shell\&.
+.RE
+.PP
 \fBsave \fR\fB\fIFILENAME\fR\fR
-Save the current document to the given filename or to the original name.
-.TP
+.RS 4
+Save the current document to the given filename or to the original name\&.
+.RE
+.PP
 \fBvalidate\fR
-Check the document for errors.
-.TP
+.RS 4
+Check the document for errors\&.
+.RE
+.PP
 \fBwrite \fR\fB\fIFILENAME\fR\fR
-Write the current node to the given filename.
+.RS 4
+Write the current node to the given filename\&.
+.RE
 .SH "ENVIRONMENT"
-.TP
+.PP
 \fBSGML_CATALOG_FILES\fR
+.RS 4
 SGML
-catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the
+catalog behavior can be changed by redirecting queries to the user\*(Aqs own set of catalogs\&. This can be done by setting the
 \fBSGML_CATALOG_FILES\fR
-environment variable to a list of catalogs. An empty one should deactivate loading the default
-\fI/etc/sgml/catalog\fR
-catalog.
-.TP
+environment variable to a list of catalogs\&. An empty one should deactivate loading the default
+/etc/sgml/catalog
+catalog\&.
+.RE
+.PP
 \fBXML_CATALOG_FILES\fR
+.RS 4
 XML
-catalog behavior can be changed by redirecting queries to the user's own set of catalogs. This can be done by setting the
+catalog behavior can be changed by redirecting queries to the user\*(Aqs own set of catalogs\&. This can be done by setting the
 \fBXML_CATALOG_FILES\fR
-environment variable to a list of catalogs. An empty one should deactivate loading the default
-\fI/etc/xml/catalog\fR
-catalog.
-.TP
+environment variable to a list of catalogs\&. An empty one should deactivate loading the default
+/etc/xml/catalog
+catalog\&.
+.RE
+.PP
 \fBXML_DEBUG_CATALOG\fR
+.RS 4
 Setting the environment variable
 \fBXML_DEBUG_CATALOG\fR
 to
 \fInon\-zero\fR
 using the
 \fBexport\fR
-command outputs debugging information related to catalog operations.
-.TP
+command outputs debugging information related to catalog operations\&.
+.RE
+.PP
 \fBXMLLINT_INDENT\fR
+.RS 4
 Setting the environment variable
 \fBXMLLINT_INDENT\fR
-controls the indentation. The default value is two spaces " ".
+controls the indentation\&. The default value is two spaces " "\&.
+.RE
 .SH "DIAGNOSTICS"
 .PP
 \fBxmllint\fR
-return codes provide information that can be used when calling it from scripts.
-.TP
+return codes provide information that can be used when calling it from scripts\&.
+.PP
 \fB0\fR
+.RS 4
 No error
-.TP
+.RE
+.PP
 \fB1\fR
+.RS 4
 Unclassified
-.TP
+.RE
+.PP
 \fB2\fR
+.RS 4
 Error in
 DTD
-.TP
+.RE
+.PP
 \fB3\fR
+.RS 4
 Validation error
-.TP
+.RE
+.PP
 \fB4\fR
+.RS 4
 Validation error
-.TP
+.RE
+.PP
 \fB5\fR
+.RS 4
 Error in schema compilation
-.TP
+.RE
+.PP
 \fB6\fR
+.RS 4
 Error writing output
-.TP
+.RE
+.PP
 \fB7\fR
+.RS 4
 Error in pattern (generated when
 \fB\-\-pattern\fR
 option is used)
-.TP
+.RE
+.PP
 \fB8\fR
+.RS 4
 Error in Reader registration (generated when
 \fB\-\-chkregister\fR
 option is used)
-.TP
+.RE
+.PP
 \fB9\fR
+.RS 4
 Out of memory error
+.RE
 .SH "SEE ALSO"
 .PP
 \fBlibxml\fR(3)
 .PP
 More information can be found at
-.TP 3
-\(bu
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
 \fBlibxml\fR(3)
 web page
-\fI\%http://www.xmlsoft.org/\fR
-.TP
-\(bu
+\m[blue]\fB\%http://www.xmlsoft.org/\fR\m[]
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
 W3C
 XSLT
 page
-\fI\%http://www.w3.org/TR/xslt\fR
-.SH "AUTHOR"
-John Fleck <jfleck@inkstain.net>, Ziying Sherwin <sherwin@nlm.nih.gov>, Heiko Rupp <hwr@pilhuhn.de>. 
+\m[blue]\fB\%http://www.w3.org/TR/xslt\fR\m[]
+.RE
+.sp
+.SH "AUTHORS"
+.PP
+\fBJohn Fleck\fR <\&jfleck@inkstain\&.net\&>
+.RS 4
+Author.
+.RE
+.PP
+\fBZiying Sherwin\fR <\&sherwin@nlm\&.nih\&.gov\&>
+.RS 4
+Author.
+.RE
+.PP
+\fBHeiko Rupp\fR <\&hwr@pilhuhn\&.de\&>
+.RS 4
+Author.
+.RE
+.SH "COPYRIGHT"
+.br
+Copyright \(co 2001, 2004
+.br
index 9a41b4e..1008179 100644 (file)
@@ -69,6 +69,7 @@
                        <arg choice="plain"><option>--version</option></arg>
                        <arg choice="plain"><option>--debug</option></arg>
                        <arg choice="plain"><option>--shell</option></arg>
+                       <arg choice="plain"><option>--xpath "<replaceable class="option">XPath_expression</replaceable>"</option></arg>
                        <arg choice="plain"><option>--debugent</option></arg>
                        <arg choice="plain"><option>--copy</option></arg>
                        <arg choice="plain"><option>--recover</option></arg>
                <varlistentry>
        <term><option>--encode <replaceable class="option">ENCODING</replaceable></option></term>
        <listitem>
-               <para>Output in the given encoding.</para>
+               <para>Output in the given encoding. Note that this works for full document not fragments or result from XPath queries.</para>
        </listitem>
                </varlistentry>
 
                </varlistentry>
 
                <varlistentry>
+       <term><option>--xpath "<replaceable class="option">XPath_expression</replaceable>"</option></term>
+       <listitem>
+               <para>
+                       Run an XPath expression given as argument and print the
+                       result. In case of a nodeset result, each node in the
+                       node set is serialized in full in the output. In case
+                       of an empty node set the "XPath set is empty" result
+                       will be shown and an error exit code will be returned.
+               </para>
+       </listitem>
+               </varlistentry>
+
+               <varlistentry>
        <term><option>--stream</option></term>
        <listitem>
                <para>
index a979f7d..ba9e517 100644 (file)
@@ -7,21 +7,24 @@ H1 {font-family: Verdana,Arial,Helvetica}
 H2 {font-family: Verdana,Arial,Helvetica}
 H3 {font-family: Verdana,Arial,Helvetica}
 A:link, A:visited, A:active { text-decoration: underline }
-</style><title>Memory Management</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Memory Management</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol><li><a href="#General3">General overview</a></li>
+</style><title>Memory Management</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo" /></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo" /></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo" /></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center"><h1>The XML C parser and toolkit of Gnome</h1><h2>Memory Management</h2></td></tr></table></td></tr></table></td></tr></table><table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Developer Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html" style="font-weight:bold">Main Menu</a></li><li><a href="html/index.html" style="font-weight:bold">Reference Manual</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="tutorial/index.html">Tutorial</a></li><li><a href="xmlreader.html">The Reader Interface</a></li><li><a href="ChangeLog.html">ChangeLog</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="python.html">Python and bindings</a></li><li><a href="architecture.html">libxml2 architecture</a></li><li><a href="tree.html">The tree output</a></li><li><a href="interface.html">The SAX interface</a></li><li><a href="xmlmem.html">Memory Management</a></li><li><a href="xmlio.html">I/O Interfaces</a></li><li><a href="library.html">The parser interfaces</a></li><li><a href="entities.html">Entities or no entities</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="upgrade.html">Upgrading 1.x code</a></li><li><a href="threads.html">Thread safety</a></li><li><a href="DOM.html">DOM Principles</a></li><li><a href="example.html">A real example</a></li><li><a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="APIchunk0.html">Alphabetic</a></li><li><a href="APIconstructors.html">Constructors</a></li><li><a href="APIfunctions.html">Functions/Types</a></li><li><a href="APIfiles.html">Modules</a></li><li><a href="APIsymbols.html">Symbols</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd"><p>Table of Content:</p><ol>
+  <li><a href="#General3">General overview</a></li>
   <li><a href="#setting">Setting libxml2 set of memory routines</a></li>
   <li><a href="#cleanup">Cleaning up after using the library</a></li>
   <li><a href="#Debugging">Debugging routines</a></li>
   <li><a href="#General4">General memory requirements</a></li>
   <li><a href="#Compacting">Returning memory to the kernel</a></li>
 </ol><h3><a name="General3" id="General3">General overview</a></h3><p>The module <code><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlmemory.h</a></code>
-provides the interfaces to the libxml2 memory system:</p><ul><li>libxml2 does not use the libc memory allocator directly but xmlFree(),
+provides the interfaces to the libxml2 memory system:</p><ul>
+  <li>libxml2 does not use the libc memory allocator directly but xmlFree(),
     xmlMalloc() and xmlRealloc()</li>
   <li>those routines can be reallocated to a specific set of routine, by
     default the libc ones i.e. free(), malloc() and realloc()</li>
   <li>the xmlmemory.c module includes a set of debugging routine</li>
 </ul><h3><a name="setting" id="setting">Setting libxml2 set of memory routines</a></h3><p>It is sometimes useful to not use the default memory allocator, either for
 debugging, analysis or to implement a specific behaviour on memory management
-(like on embedded systems). Two function calls are available to do so:</p><ul><li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemGet
+(like on embedded systems). Two function calls are available to do so:</p><ul>
+  <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemGet
     ()</a> which return the current set of functions in use by the parser</li>
   <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemSetup()</a>
     which allow to set up a new set of memory allocation functions</li>
@@ -31,7 +34,8 @@ compatibles).</p><h3><a name="cleanup" id="cleanup">Cleaning up after using the
 allocation before the parser is fully functional (some encoding structures
 for example). This also mean that once parsing is finished there is a tiny
 amount of memory (a few hundred bytes) which can be recollected if you don't
-reuse the library or any document built with it:</p><ul><li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlCleanupParser
+reuse the library or any document built with it:</p><ul>
+  <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlCleanupParser
     ()</a> is a centralized routine to free the library state and data. Note
     that it won't deallocate any produced tree if any (use the xmlFreeDoc()
     and related routines for this). This should be called only when the library
@@ -47,7 +51,8 @@ of the consequences in multithreaded applications.</p><h3><a name="Debugging" id
 a set of memory allocation debugging routines keeping track of all allocated
 blocks and the location in the code where the routine was called. A couple of
 other debugging routines allow to dump the memory allocated infos to a file
-or call a specific routine when a given block number is allocated:</p><ul><li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMallocLoc()</a>
+or call a specific routine when a given block number is allocated:</p><ul>
+  <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMallocLoc()</a>
     <a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlReallocLoc()</a>
     and <a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemStrdupLoc()</a>
     are the memory debugging replacement allocation routines</li>
@@ -63,7 +68,8 @@ resulting in major portability problems!).</p><p>If the .memdump reports a leak,
 also tries to give some information about the content and structure of the
 allocated blocks left. This is sufficient in most cases to find the culprit,
 but not always. Assuming the allocation problem is reproducible, it is
-possible to find more easily:</p><ol><li>write down the block number xxxx not allocated</li>
+possible to find more easily:</p><ol>
+  <li>write down the block number xxxx not allocated</li>
   <li>export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest
     when using GDB is to simply give the command
     <p><code>set environment XML_MEM_BREAKPOINT xxxx</code></p>
@@ -81,7 +87,8 @@ used and proved extremely efficient until now. Lately I have also used <a href="
 success, it is tied to the i386 architecture since it works by emulating the
 processor and instruction set, it is slow but  extremely efficient, i.e. it
 spot memory usage errors in a very precise way.</p><h3><a name="General4" id="General4">General memory requirements</a></h3><p>How much libxml2 memory require ? It's hard to tell in average it depends
-of a number of things:</p><ul><li>the parser itself should work  in a fixed amount of memory, except for
+of a number of things:</p><ul>
+  <li>the parser itself should work  in a fixed amount of memory, except for
     information maintained about the stacks of names and  entities locations.
     The I/O and encoding handlers will probably account for a few KBytes.
     This is true for both the XML and HTML parser (though the HTML parser
index 84e8151..8c52884 100644 (file)
@@ -1061,7 +1061,7 @@ extern __typeof (xmlAddNotationDecl) xmlAddNotationDecl__internal_alias __attrib
 #endif
 #endif
 
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
 #ifdef bottom_tree
 #undef xmlAddPrevSibling
 extern __typeof (xmlAddPrevSibling) xmlAddPrevSibling __attribute((alias("xmlAddPrevSibling__internal_alias")));
@@ -1343,6 +1343,68 @@ extern __typeof (xmlBoolToText) xmlBoolToText__internal_alias __attribute((visib
 #endif
 #endif
 
+#ifdef bottom_buf
+#undef xmlBufContent
+extern __typeof (xmlBufContent) xmlBufContent __attribute((alias("xmlBufContent__internal_alias")));
+#else
+#ifndef xmlBufContent
+extern __typeof (xmlBufContent) xmlBufContent__internal_alias __attribute((visibility("hidden")));
+#define xmlBufContent xmlBufContent__internal_alias
+#endif
+#endif
+
+#ifdef bottom_buf
+#undef xmlBufEnd
+extern __typeof (xmlBufEnd) xmlBufEnd __attribute((alias("xmlBufEnd__internal_alias")));
+#else
+#ifndef xmlBufEnd
+extern __typeof (xmlBufEnd) xmlBufEnd__internal_alias __attribute((visibility("hidden")));
+#define xmlBufEnd xmlBufEnd__internal_alias
+#endif
+#endif
+
+#ifdef bottom_tree
+#undef xmlBufGetNodeContent
+extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent __attribute((alias("xmlBufGetNodeContent__internal_alias")));
+#else
+#ifndef xmlBufGetNodeContent
+extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent__internal_alias __attribute((visibility("hidden")));
+#define xmlBufGetNodeContent xmlBufGetNodeContent__internal_alias
+#endif
+#endif
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+#ifdef bottom_xmlsave
+#undef xmlBufNodeDump
+extern __typeof (xmlBufNodeDump) xmlBufNodeDump __attribute((alias("xmlBufNodeDump__internal_alias")));
+#else
+#ifndef xmlBufNodeDump
+extern __typeof (xmlBufNodeDump) xmlBufNodeDump__internal_alias __attribute((visibility("hidden")));
+#define xmlBufNodeDump xmlBufNodeDump__internal_alias
+#endif
+#endif
+#endif
+
+#ifdef bottom_buf
+#undef xmlBufShrink
+extern __typeof (xmlBufShrink) xmlBufShrink __attribute((alias("xmlBufShrink__internal_alias")));
+#else
+#ifndef xmlBufShrink
+extern __typeof (xmlBufShrink) xmlBufShrink__internal_alias __attribute((visibility("hidden")));
+#define xmlBufShrink xmlBufShrink__internal_alias
+#endif
+#endif
+
+#ifdef bottom_buf
+#undef xmlBufUse
+extern __typeof (xmlBufUse) xmlBufUse __attribute((alias("xmlBufUse__internal_alias")));
+#else
+#ifndef xmlBufUse
+extern __typeof (xmlBufUse) xmlBufUse__internal_alias __attribute((visibility("hidden")));
+#define xmlBufUse xmlBufUse__internal_alias
+#endif
+#endif
+
 #ifdef bottom_tree
 #undef xmlBufferAdd
 extern __typeof (xmlBufferAdd) xmlBufferAdd __attribute((alias("xmlBufferAdd__internal_alias")));
@@ -1424,6 +1486,16 @@ extern __typeof (xmlBufferCreateStatic) xmlBufferCreateStatic__internal_alias __
 #endif
 
 #ifdef bottom_tree
+#undef xmlBufferDetach
+extern __typeof (xmlBufferDetach) xmlBufferDetach __attribute((alias("xmlBufferDetach__internal_alias")));
+#else
+#ifndef xmlBufferDetach
+extern __typeof (xmlBufferDetach) xmlBufferDetach__internal_alias __attribute((visibility("hidden")));
+#define xmlBufferDetach xmlBufferDetach__internal_alias
+#endif
+#endif
+
+#ifdef bottom_tree
 #undef xmlBufferDump
 extern __typeof (xmlBufferDump) xmlBufferDump __attribute((alias("xmlBufferDump__internal_alias")));
 #else
@@ -2840,6 +2912,16 @@ extern __typeof (xmlDictFree) xmlDictFree__internal_alias __attribute((visibilit
 #endif
 
 #ifdef bottom_dict
+#undef xmlDictGetUsage
+extern __typeof (xmlDictGetUsage) xmlDictGetUsage __attribute((alias("xmlDictGetUsage__internal_alias")));
+#else
+#ifndef xmlDictGetUsage
+extern __typeof (xmlDictGetUsage) xmlDictGetUsage__internal_alias __attribute((visibility("hidden")));
+#define xmlDictGetUsage xmlDictGetUsage__internal_alias
+#endif
+#endif
+
+#ifdef bottom_dict
 #undef xmlDictLookup
 extern __typeof (xmlDictLookup) xmlDictLookup __attribute((alias("xmlDictLookup__internal_alias")));
 #else
@@ -2880,6 +2962,16 @@ extern __typeof (xmlDictReference) xmlDictReference__internal_alias __attribute(
 #endif
 
 #ifdef bottom_dict
+#undef xmlDictSetLimit
+extern __typeof (xmlDictSetLimit) xmlDictSetLimit __attribute((alias("xmlDictSetLimit__internal_alias")));
+#else
+#ifndef xmlDictSetLimit
+extern __typeof (xmlDictSetLimit) xmlDictSetLimit__internal_alias __attribute((visibility("hidden")));
+#define xmlDictSetLimit xmlDictSetLimit__internal_alias
+#endif
+#endif
+
+#ifdef bottom_dict
 #undef xmlDictSize
 extern __typeof (xmlDictSize) xmlDictSize __attribute((alias("xmlDictSize__internal_alias")));
 #else
@@ -4601,6 +4693,16 @@ extern __typeof (xmlInitializeCatalog) xmlInitializeCatalog__internal_alias __at
 #endif
 #endif
 
+#ifdef bottom_dict
+#undef xmlInitializeDict
+extern __typeof (xmlInitializeDict) xmlInitializeDict __attribute((alias("xmlInitializeDict__internal_alias")));
+#else
+#ifndef xmlInitializeDict
+extern __typeof (xmlInitializeDict) xmlInitializeDict__internal_alias __attribute((visibility("hidden")));
+#define xmlInitializeDict xmlInitializeDict__internal_alias
+#endif
+#endif
+
 #ifdef bottom_globals
 #undef xmlInitializeGlobalState
 extern __typeof (xmlInitializeGlobalState) xmlInitializeGlobalState __attribute((alias("xmlInitializeGlobalState__internal_alias")));
@@ -6757,6 +6859,30 @@ extern __typeof (xmlOutputBufferFlush) xmlOutputBufferFlush__internal_alias __at
 
 #if defined(LIBXML_OUTPUT_ENABLED)
 #ifdef bottom_xmlIO
+#undef xmlOutputBufferGetContent
+extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent __attribute((alias("xmlOutputBufferGetContent__internal_alias")));
+#else
+#ifndef xmlOutputBufferGetContent
+extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent__internal_alias __attribute((visibility("hidden")));
+#define xmlOutputBufferGetContent xmlOutputBufferGetContent__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+#ifdef bottom_xmlIO
+#undef xmlOutputBufferGetSize
+extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize __attribute((alias("xmlOutputBufferGetSize__internal_alias")));
+#else
+#ifndef xmlOutputBufferGetSize
+extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize__internal_alias __attribute((visibility("hidden")));
+#define xmlOutputBufferGetSize xmlOutputBufferGetSize__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+#ifdef bottom_xmlIO
 #undef xmlOutputBufferWrite
 extern __typeof (xmlOutputBufferWrite) xmlOutputBufferWrite __attribute((alias("xmlOutputBufferWrite__internal_alias")));
 #else
@@ -8759,7 +8885,7 @@ extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument__internal_alias __attrib
 #endif
 #endif
 
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef bottom_SAX2
 #undef xmlSAX2EndElement
 extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement __attribute((alias("xmlSAX2EndElement__internal_alias")));
@@ -9005,7 +9131,7 @@ extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument__internal_alias __at
 #endif
 #endif
 
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef bottom_SAX2
 #undef xmlSAX2StartElement
 extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement __attribute((alias("xmlSAX2StartElement__internal_alias")));
@@ -10043,6 +10169,30 @@ extern __typeof (xmlSchemaValidatePredefinedType) xmlSchemaValidatePredefinedTyp
 
 #if defined(LIBXML_SCHEMAS_ENABLED)
 #ifdef bottom_xmlschemas
+#undef xmlSchemaValidateSetFilename
+extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename __attribute((alias("xmlSchemaValidateSetFilename__internal_alias")));
+#else
+#ifndef xmlSchemaValidateSetFilename
+extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaValidateSetFilename xmlSchemaValidateSetFilename__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
+#undef xmlSchemaValidateSetLocator
+extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator __attribute((alias("xmlSchemaValidateSetLocator__internal_alias")));
+#else
+#ifndef xmlSchemaValidateSetLocator
+extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator__internal_alias __attribute((visibility("hidden")));
+#define xmlSchemaValidateSetLocator xmlSchemaValidateSetLocator__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlschemas
 #undef xmlSchemaValidateStream
 extern __typeof (xmlSchemaValidateStream) xmlSchemaValidateStream __attribute((alias("xmlSchemaValidateStream__internal_alias")));
 #else
@@ -11715,6 +11865,18 @@ extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate__int
 
 #if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
 #ifdef bottom_xmlreader
+#undef xmlTextReaderRelaxNGValidateCtxt
+extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt __attribute((alias("xmlTextReaderRelaxNGValidateCtxt__internal_alias")));
+#else
+#ifndef xmlTextReaderRelaxNGValidateCtxt
+extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt__internal_alias __attribute((visibility("hidden")));
+#define xmlTextReaderRelaxNGValidateCtxt xmlTextReaderRelaxNGValidateCtxt__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+#ifdef bottom_xmlreader
 #undef xmlTextReaderSchemaValidate
 extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate __attribute((alias("xmlTextReaderSchemaValidate__internal_alias")));
 #else
@@ -12003,6 +12165,18 @@ extern __typeof (xmlTextWriterSetIndentString) xmlTextWriterSetIndentString__int
 
 #if defined(LIBXML_WRITER_ENABLED)
 #ifdef bottom_xmlwriter
+#undef xmlTextWriterSetQuoteChar
+extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar __attribute((alias("xmlTextWriterSetQuoteChar__internal_alias")));
+#else
+#ifndef xmlTextWriterSetQuoteChar
+extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar__internal_alias __attribute((visibility("hidden")));
+#define xmlTextWriterSetQuoteChar xmlTextWriterSetQuoteChar__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_WRITER_ENABLED)
+#ifdef bottom_xmlwriter
 #undef xmlTextWriterStartAttribute
 extern __typeof (xmlTextWriterStartAttribute) xmlTextWriterStartAttribute __attribute((alias("xmlTextWriterStartAttribute__internal_alias")));
 #else
@@ -15189,7 +15363,7 @@ extern __typeof (xmlValidateElementDecl) xmlValidateElementDecl__internal_alias
 #endif
 #endif
 
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef bottom_tree
 #undef xmlValidateNCName
 extern __typeof (xmlValidateNCName) xmlValidateNCName __attribute((alias("xmlValidateNCName__internal_alias")));
@@ -16595,6 +16769,18 @@ extern __typeof (xmlXPathNextSelf) xmlXPathNextSelf__internal_alias __attribute(
 
 #if defined(LIBXML_XPATH_ENABLED)
 #ifdef bottom_xpath
+#undef xmlXPathNodeEval
+extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval __attribute((alias("xmlXPathNodeEval__internal_alias")));
+#else
+#ifndef xmlXPathNodeEval
+extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval__internal_alias __attribute((visibility("hidden")));
+#define xmlXPathNodeEval xmlXPathNodeEval__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_XPATH_ENABLED)
+#ifdef bottom_xpath
 #undef xmlXPathNodeLeading
 extern __typeof (xmlXPathNodeLeading) xmlXPathNodeLeading __attribute((alias("xmlXPathNodeLeading__internal_alias")));
 #else
@@ -17099,6 +17285,18 @@ extern __typeof (xmlXPathRoundFunction) xmlXPathRoundFunction__internal_alias __
 
 #if defined(LIBXML_XPATH_ENABLED)
 #ifdef bottom_xpath
+#undef xmlXPathSetContextNode
+extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode __attribute((alias("xmlXPathSetContextNode__internal_alias")));
+#else
+#ifndef xmlXPathSetContextNode
+extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode__internal_alias __attribute((visibility("hidden")));
+#define xmlXPathSetContextNode xmlXPathSetContextNode__internal_alias
+#endif
+#endif
+#endif
+
+#if defined(LIBXML_XPATH_ENABLED)
+#ifdef bottom_xpath
 #undef xmlXPathStartsWithFunction
 extern __typeof (xmlXPathStartsWithFunction) xmlXPathStartsWithFunction __attribute((alias("xmlXPathStartsWithFunction__internal_alias")));
 #else
diff --git a/enc.h b/enc.h
new file mode 100644 (file)
index 0000000..057d206
--- /dev/null
+++ b/enc.h
@@ -0,0 +1,32 @@
+/*
+ * Summary: Internal Interfaces for encoding in libxml2
+ * Description: this module describes a few interfaces which were
+ *              addded along with the API changes in 2.9.0
+ *              those are private routines at this point
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_ENC_H__
+#define __XML_ENC_H__
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
+                           xmlBufferPtr in, int len);
+int xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len);
+int xmlCharEncInput(xmlParserInputBufferPtr input, int flush);
+int xmlCharEncOutput(xmlOutputBufferPtr output, int init);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_ENC_H__ */
+
+
index d486dd6..574e1ae 100644 (file)
@@ -24,6 +24,7 @@
 #include "libxml.h"
 
 #include <string.h>
+#include <limits.h>
 
 #ifdef HAVE_CTYPE_H
 #include <ctype.h>
@@ -44,6 +45,9 @@
 #include <libxml/globals.h>
 #include <libxml/xmlerror.h>
 
+#include "buf.h"
+#include "enc.h"
+
 static xmlCharEncodingHandlerPtr xmlUTF16LEHandler = NULL;
 static xmlCharEncodingHandlerPtr xmlUTF16BEHandler = NULL;
 
@@ -1513,6 +1517,8 @@ xmlGetCharEncodingHandler(xmlCharEncoding enc) {
             if (handler != NULL) return(handler);
             handler = xmlFindCharEncodingHandler("EBCDIC-US");
             if (handler != NULL) return(handler);
+            handler = xmlFindCharEncodingHandler("IBM-037");
+            if (handler != NULL) return(handler);
            break;
         case XML_CHAR_ENCODING_UCS4BE:
             handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4");
@@ -1825,7 +1831,7 @@ xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen,
 
 /************************************************************************
  *                                                                     *
- *             ICU based generic conversion functions                  *
+ *             ICU based generic conversion functions          *
  *                                                                     *
  ************************************************************************/
 
@@ -1897,9 +1903,6 @@ xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen,
  *             The real API used by libxml for on-the-fly conversion   *
  *                                                                     *
  ************************************************************************/
-int
-xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
-                       xmlBufferPtr in, int len);
 
 /**
  * xmlCharEncFirstLineInt:
@@ -1946,7 +1949,7 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
             toconv = 180;
     }
     if (toconv * 2 >= written) {
-        xmlBufferGrow(out, toconv);
+        xmlBufferGrow(out, toconv * 2);
        written = out->size - out->use - 1;
     }
 
@@ -2029,6 +2032,252 @@ xmlCharEncFirstLine(xmlCharEncodingHandler *handler, xmlBufferPtr out,
 }
 
 /**
+ * xmlCharEncFirstLineInput:
+ * @input: a parser input buffer
+ * @len:  number of bytes to convert for the first line, or -1
+ *
+ * Front-end for the encoding handler input function, but handle only
+ * the very first line. Point is that this is based on autodetection
+ * of the encoding and once that first line is converted we may find
+ * out that a different decoder is needed to process the input.
+ *
+ * Returns the number of byte written if success, or
+ *     -1 general error
+ *     -2 if the transcoding fails (for *in is not valid utf8 string or
+ *        the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len)
+{
+    int ret = -2;
+    size_t written;
+    size_t toconv;
+    int c_in;
+    int c_out;
+    xmlBufPtr in;
+    xmlBufPtr out;
+
+    if ((input == NULL) || (input->encoder == NULL) ||
+        (input->buffer == NULL) || (input->raw == NULL))
+        return (-1);
+    out = input->buffer;
+    in = input->raw;
+
+    toconv = xmlBufUse(in);
+    if (toconv == 0)
+        return (0);
+    written = xmlBufAvail(out) - 1; /* count '\0' */
+    /*
+     * echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38
+     * 45 chars should be sufficient to reach the end of the encoding
+     * declaration without going too far inside the document content.
+     * on UTF-16 this means 90bytes, on UCS4 this means 180
+     * The actual value depending on guessed encoding is passed as @len
+     * if provided
+     */
+    if (len >= 0) {
+        if (toconv > (unsigned int) len)
+            toconv = len;
+    } else {
+        if (toconv > 180)
+            toconv = 180;
+    }
+    if (toconv * 2 >= written) {
+        xmlBufGrow(out, toconv * 2);
+        written = xmlBufAvail(out) - 1;
+    }
+    if (written > 360)
+        written = 360;
+
+    c_in = toconv;
+    c_out = written;
+    if (input->encoder->input != NULL) {
+        ret = input->encoder->input(xmlBufEnd(out), &c_out,
+                                    xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+    }
+#ifdef LIBXML_ICONV_ENABLED
+    else if (input->encoder->iconv_in != NULL) {
+        ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        if (ret == -1)
+            ret = -3;
+    }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef LIBXML_ICU_ENABLED
+    else if (input->encoder->uconv_in != NULL) {
+        ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        if (ret == -1)
+            ret = -3;
+    }
+#endif /* LIBXML_ICU_ENABLED */
+    switch (ret) {
+        case 0:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                            "converted %d bytes to %d bytes of input\n",
+                            c_in, c_out);
+#endif
+            break;
+        case -1:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                         "converted %d bytes to %d bytes of input, %d left\n",
+                            c_in, c_out, (int)xmlBufUse(in));
+#endif
+            break;
+        case -3:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                        "converted %d bytes to %d bytes of input, %d left\n",
+                            c_in, c_out, (int)xmlBufUse(in));
+#endif
+            break;
+        case -2: {
+            char buf[50];
+            const xmlChar *content = xmlBufContent(in);
+
+           snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
+                    content[0], content[1],
+                    content[2], content[3]);
+           buf[49] = 0;
+           xmlEncodingErr(XML_I18N_CONV_FAILED,
+                   "input conversion failed due to input error, bytes %s\n",
+                          buf);
+        }
+    }
+    /*
+     * Ignore when input buffer is not on a boundary
+     */
+    if (ret == -3) ret = 0;
+    if (ret == -1) ret = 0;
+    return(ret);
+}
+
+/**
+ * xmlCharEncInput:
+ * @input: a parser input buffer
+ * @flush: try to flush all the raw buffer
+ *
+ * Generic front-end for the encoding handler on parser input
+ *
+ * Returns the number of byte written if success, or
+ *     -1 general error
+ *     -2 if the transcoding fails (for *in is not valid utf8 string or
+ *        the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncInput(xmlParserInputBufferPtr input, int flush)
+{
+    int ret = -2;
+    size_t written;
+    size_t toconv;
+    int c_in;
+    int c_out;
+    xmlBufPtr in;
+    xmlBufPtr out;
+
+    if ((input == NULL) || (input->encoder == NULL) ||
+        (input->buffer == NULL) || (input->raw == NULL))
+        return (-1);
+    out = input->buffer;
+    in = input->raw;
+
+    toconv = xmlBufUse(in);
+    if (toconv == 0)
+        return (0);
+    if ((toconv > 64 * 1024) && (flush == 0))
+        toconv = 64 * 1024;
+    written = xmlBufAvail(out);
+    if (written > 0)
+        written--; /* count '\0' */
+    if (toconv * 2 >= written) {
+        xmlBufGrow(out, toconv * 2);
+        written = xmlBufAvail(out);
+        if (written > 0)
+            written--; /* count '\0' */
+    }
+    if ((written > 128 * 1024) && (flush == 0))
+        written = 128 * 1024;
+
+    c_in = toconv;
+    c_out = written;
+    if (input->encoder->input != NULL) {
+        ret = input->encoder->input(xmlBufEnd(out), &c_out,
+                                    xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+    }
+#ifdef LIBXML_ICONV_ENABLED
+    else if (input->encoder->iconv_in != NULL) {
+        ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        if (ret == -1)
+            ret = -3;
+    }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef LIBXML_ICU_ENABLED
+    else if (input->encoder->uconv_in != NULL) {
+        ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        if (ret == -1)
+            ret = -3;
+    }
+#endif /* LIBXML_ICU_ENABLED */
+    switch (ret) {
+        case 0:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                            "converted %d bytes to %d bytes of input\n",
+                            c_in, c_out);
+#endif
+            break;
+        case -1:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                         "converted %d bytes to %d bytes of input, %d left\n",
+                            c_in, c_out, (int)xmlBufUse(in));
+#endif
+            break;
+        case -3:
+#ifdef DEBUG_ENCODING
+            xmlGenericError(xmlGenericErrorContext,
+                        "converted %d bytes to %d bytes of input, %d left\n",
+                            c_in, c_out, (int)xmlBufUse(in));
+#endif
+            break;
+        case -2: {
+            char buf[50];
+            const xmlChar *content = xmlBufContent(in);
+
+           snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
+                    content[0], content[1],
+                    content[2], content[3]);
+           buf[49] = 0;
+           xmlEncodingErr(XML_I18N_CONV_FAILED,
+                   "input conversion failed due to input error, bytes %s\n",
+                          buf);
+        }
+    }
+    /*
+     * Ignore when input buffer is not on a boundary
+     */
+    if (ret == -3)
+        ret = 0;
+    return (c_out? c_out : ret);
+}
+
+/**
  * xmlCharEncInFunc:
  * @handler:   char encoding transformation data structure
  * @out:  an xmlBuffer for the output.
@@ -2135,6 +2384,237 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out,
     return (written? written : ret);
 }
 
+#ifdef LIBXML_OUTPUT_ENABLED
+/**
+ * xmlCharEncOutput:
+ * @output: a parser output buffer
+ * @init: is this an initialization call without data
+ *
+ * Generic front-end for the encoding handler on parser output
+ * a first call with @init == 1 has to be made first to initiate the
+ * output in case of non-stateless encoding needing to initiate their
+ * state or the output (like the BOM in UTF16).
+ * In case of UTF8 sequence conversion errors for the given encoder,
+ * the content will be automatically remapped to a CharRef sequence.
+ *
+ * Returns the number of byte written if success, or
+ *     -1 general error
+ *     -2 if the transcoding fails (for *in is not valid utf8 string or
+ *        the result of transformation can't fit into the encoding we want), or
+ */
+int
+xmlCharEncOutput(xmlOutputBufferPtr output, int init)
+{
+    int ret = -2;
+    size_t written;
+    size_t writtentot = 0;
+    size_t toconv;
+    int c_in;
+    int c_out;
+    xmlBufPtr in;
+    xmlBufPtr out;
+    int charref_len = 0;
+
+    if ((output == NULL) || (output->encoder == NULL) ||
+        (output->buffer == NULL) || (output->conv == NULL))
+        return (-1);
+    out = output->conv;
+    in = output->buffer;
+
+retry:
+
+    written = xmlBufAvail(out);
+    if (written > 0)
+        written--; /* count '\0' */
+
+    /*
+     * First specific handling of the initialization call
+     */
+    if (init) {
+        c_in = 0;
+        c_out = written;
+        if (output->encoder->output != NULL) {
+            ret = output->encoder->output(xmlBufEnd(out), &c_out,
+                                          NULL, &c_in);
+            if (ret > 0) /* Gennady: check return value */
+                xmlBufAddLen(out, c_out);
+        }
+#ifdef LIBXML_ICONV_ENABLED
+        else if (output->encoder->iconv_out != NULL) {
+            ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out),
+                                  &c_out, NULL, &c_in);
+            xmlBufAddLen(out, c_out);
+        }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef LIBXML_ICU_ENABLED
+        else if (output->encoder->uconv_out != NULL) {
+            ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out),
+                                  &c_out, NULL, &c_in);
+            xmlBufAddLen(out, c_out);
+        }
+#endif /* LIBXML_ICU_ENABLED */
+#ifdef DEBUG_ENCODING
+       xmlGenericError(xmlGenericErrorContext,
+               "initialized encoder\n");
+#endif
+        return(0);
+    }
+
+    /*
+     * Conversion itself.
+     */
+    toconv = xmlBufUse(in);
+    if (toconv == 0)
+        return (0);
+    if (toconv > 64 * 1024)
+        toconv = 64 * 1024;
+    if (toconv * 4 >= written) {
+        xmlBufGrow(out, toconv * 4);
+        written = xmlBufAvail(out) - 1;
+    }
+    if (written > 256 * 1024)
+        written = 256 * 1024;
+
+    c_in = toconv;
+    c_out = written;
+    if (output->encoder->output != NULL) {
+        ret = output->encoder->output(xmlBufEnd(out), &c_out,
+                                      xmlBufContent(in), &c_in);
+        if (c_out > 0) {
+            xmlBufShrink(in, c_in);
+            xmlBufAddLen(out, c_out);
+            writtentot += c_out;
+        }
+    }
+#ifdef LIBXML_ICONV_ENABLED
+    else if (output->encoder->iconv_out != NULL) {
+        ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        writtentot += c_out;
+        if (ret == -1) {
+            if (c_out > 0) {
+                /*
+                 * Can be a limitation of iconv
+                 */
+                charref_len = 0;
+                goto retry;
+            }
+            ret = -3;
+        }
+    }
+#endif /* LIBXML_ICONV_ENABLED */
+#ifdef LIBXML_ICU_ENABLED
+    else if (output->encoder->uconv_out != NULL) {
+        ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out),
+                              &c_out, xmlBufContent(in), &c_in);
+        xmlBufShrink(in, c_in);
+        xmlBufAddLen(out, c_out);
+        writtentot += c_out;
+        if (ret == -1) {
+            if (c_out > 0) {
+                /*
+                 * Can be a limitation of uconv
+                 */
+                charref_len = 0;
+                goto retry;
+            }
+            ret = -3;
+        }
+    }
+#endif /* LIBXML_ICU_ENABLED */
+    else {
+        xmlEncodingErr(XML_I18N_NO_OUTPUT,
+                       "xmlCharEncOutFunc: no output function !\n", NULL);
+        return(-1);
+    }
+
+    if (ret >= 0) output += ret;
+
+    /*
+     * Attempt to handle error cases
+     */
+    switch (ret) {
+        case 0:
+#ifdef DEBUG_ENCODING
+           xmlGenericError(xmlGenericErrorContext,
+                   "converted %d bytes to %d bytes of output\n",
+                   c_in, c_out);
+#endif
+           break;
+        case -1:
+#ifdef DEBUG_ENCODING
+           xmlGenericError(xmlGenericErrorContext,
+                   "output conversion failed by lack of space\n");
+#endif
+           break;
+        case -3:
+#ifdef DEBUG_ENCODING
+           xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n",
+                   c_in, c_out, (int) xmlBufUse(in));
+#endif
+           break;
+        case -2: {
+           int len = (int) xmlBufUse(in);
+            xmlChar *content = xmlBufContent(in);
+           int cur;
+
+           cur = xmlGetUTF8Char(content, &len);
+           if ((charref_len != 0) && (c_out < charref_len)) {
+               /*
+                * We attempted to insert a character reference and failed.
+                * Undo what was written and skip the remaining charref.
+                */
+                xmlBufErase(out, c_out);
+               writtentot -= c_out;
+               xmlBufShrink(in, charref_len - c_out);
+               charref_len = 0;
+
+               ret = -1;
+                break;
+           } else if (cur > 0) {
+               xmlChar charref[20];
+
+#ifdef DEBUG_ENCODING
+               xmlGenericError(xmlGenericErrorContext,
+                       "handling output conversion error\n");
+               xmlGenericError(xmlGenericErrorContext,
+                       "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
+                       content[0], content[1],
+                       content[2], content[3]);
+#endif
+               /*
+                * Removes the UTF8 sequence, and replace it by a charref
+                * and continue the transcoding phase, hoping the error
+                * did not mangle the encoder state.
+                */
+               charref_len = snprintf((char *) &charref[0], sizeof(charref),
+                                "&#%d;", cur);
+               xmlBufShrink(in, len);
+               xmlBufAddHead(in, charref, -1);
+
+               goto retry;
+           } else {
+               char buf[50];
+
+               snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
+                        content[0], content[1],
+                        content[2], content[3]);
+               buf[49] = 0;
+               xmlEncodingErr(XML_I18N_CONV_FAILED,
+                   "output conversion failed due to conv error, bytes %s\n",
+                              buf);
+               if (xmlBufGetAllocationScheme(in) != XML_BUFFER_ALLOC_IMMUTABLE)
+                   content[0] = ' ';
+           }
+           break;
+       }
+    }
+    return(ret);
+}
+#endif
+
 /**
  * xmlCharEncOutFunc:
  * @handler:   char enconding transformation data structure
@@ -2198,7 +2678,7 @@ retry:
        else if (handler->uconv_out != NULL) {
            ret = xmlUconvWrapper(handler->uconv_out, 0,
                               &out->content[out->use],
-                                             &written, NULL, &toconv);
+                                             &written, NULL, &toconv);
            out->use += written;
            out->content[out->use] = 0;
        }
@@ -2373,14 +2853,25 @@ int
 xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
     int ret = 0;
     int tofree = 0;
+    int i, handler_in_list = 0;
+
     if (handler == NULL) return(-1);
     if (handler->name == NULL) return(-1);
+    if (handlers != NULL) {
+        for (i = 0;i < nbCharEncodingHandler; i++) {
+            if (handler == handlers[i]) {
+               handler_in_list = 1;
+               break;
+           }
+       }
+    }
 #ifdef LIBXML_ICONV_ENABLED
     /*
      * Iconv handlers can be used only once, free the whole block.
      * and the associated icon resources.
      */
-    if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) {
+    if ((handler_in_list == 0) &&
+        ((handler->iconv_out != NULL) || (handler->iconv_in != NULL))) {
         tofree = 1;
        if (handler->iconv_out != NULL) {
            if (iconv_close(handler->iconv_out))
@@ -2395,7 +2886,8 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
     }
 #endif /* LIBXML_ICONV_ENABLED */
 #ifdef LIBXML_ICU_ENABLED
-    if ((handler->uconv_out != NULL) || (handler->uconv_in != NULL)) {
+    if ((handler_in_list == 0) &&
+        ((handler->uconv_out != NULL) || (handler->uconv_in != NULL))) {
         tofree = 1;
        if (handler->uconv_out != NULL) {
            closeIcuConverter(handler->uconv_out);
@@ -2619,7 +3111,7 @@ UTF8ToISO8859x(unsigned char* out, int *outlen,
             c2 = c2 & 0x3F;
            d = d & 0x0F;
            d = xlattable [48 + c2 + xlattable [48 + c1 +
-                       xlattable [32 + d] * 64] * 64];
+                       xlattable [32 + d] * 64] * 64];
             if (d == 0) {
                 /* not in character set */
                 *outlen = out - outstart;
index 6aef49f..a72afb3 100644 (file)
 #include <libxml/globals.h>
 #include <libxml/dict.h>
 
+#include "save.h"
+
 /*
  * The XML predefined entities.
  */
 
 static xmlEntity xmlEntityLt = {
     NULL, XML_ENTITY_DECL, BAD_CAST "lt",
-    NULL, NULL, NULL, NULL, NULL, NULL, 
+    NULL, NULL, NULL, NULL, NULL, NULL,
     BAD_CAST "<", BAD_CAST "<", 1,
     XML_INTERNAL_PREDEFINED_ENTITY,
     NULL, NULL, NULL, NULL, 0, 1
 };
 static xmlEntity xmlEntityGt = {
     NULL, XML_ENTITY_DECL, BAD_CAST "gt",
-    NULL, NULL, NULL, NULL, NULL, NULL, 
+    NULL, NULL, NULL, NULL, NULL, NULL,
     BAD_CAST ">", BAD_CAST ">", 1,
     XML_INTERNAL_PREDEFINED_ENTITY,
     NULL, NULL, NULL, NULL, 0, 1
 };
 static xmlEntity xmlEntityAmp = {
     NULL, XML_ENTITY_DECL, BAD_CAST "amp",
-    NULL, NULL, NULL, NULL, NULL, NULL, 
+    NULL, NULL, NULL, NULL, NULL, NULL,
     BAD_CAST "&", BAD_CAST "&", 1,
     XML_INTERNAL_PREDEFINED_ENTITY,
     NULL, NULL, NULL, NULL, 0, 1
 };
 static xmlEntity xmlEntityQuot = {
     NULL, XML_ENTITY_DECL, BAD_CAST "quot",
-    NULL, NULL, NULL, NULL, NULL, NULL, 
+    NULL, NULL, NULL, NULL, NULL, NULL,
     BAD_CAST "\"", BAD_CAST "\"", 1,
     XML_INTERNAL_PREDEFINED_ENTITY,
     NULL, NULL, NULL, NULL, 0, 1
 };
 static xmlEntity xmlEntityApos = {
     NULL, XML_ENTITY_DECL, BAD_CAST "apos",
-    NULL, NULL, NULL, NULL, NULL, NULL, 
+    NULL, NULL, NULL, NULL, NULL, NULL,
     BAD_CAST "'", BAD_CAST "'", 1,
     XML_INTERNAL_PREDEFINED_ENTITY,
     NULL, NULL, NULL, NULL, 0, 1
@@ -426,7 +428,7 @@ xmlNewEntity(xmlDocPtr doc, const xmlChar *name, int type,
  *
  * Do an entity lookup in the table.
  * returns the corresponding parameter entity, if found.
- * 
+ *
  * Returns A pointer to the entity structure or NULL if not found.
  */
 static xmlEntityPtr
@@ -441,7 +443,7 @@ xmlGetEntityFromTable(xmlEntitiesTablePtr table, const xmlChar *name) {
  *
  * Do an entity lookup in the internal and external subsets and
  * returns the corresponding parameter entity, if found.
- * 
+ *
  * Returns A pointer to the entity structure or NULL if not found.
  */
 xmlEntityPtr
@@ -472,7 +474,7 @@ xmlGetParameterEntity(xmlDocPtr doc, const xmlChar *name) {
  * Do an entity lookup in the DTD entity hash table and
  * returns the corresponding entity, if found.
  * Note: the first argument is the document node, not the DTD node.
- * 
+ *
  * Returns A pointer to the entity structure or NULL if not found.
  */
 xmlEntityPtr
@@ -496,11 +498,11 @@ xmlGetDtdEntity(xmlDocPtr doc, const xmlChar *name) {
  * Do an entity lookup in the document entity hash table and
  * returns the corresponding entity, otherwise a lookup is done
  * in the predefined entities too.
- * 
+ *
  * Returns A pointer to the entity structure or NULL if not found.
  */
 xmlEntityPtr
-xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) {
+xmlGetDocEntity(const xmlDoc *doc, const xmlChar *name) {
     xmlEntityPtr cur;
     xmlEntitiesTablePtr table;
 
@@ -528,20 +530,20 @@ xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) {
  * Macro used to grow the current buffer.
  */
 #define growBufferReentrant() {                                                \
-    buffer_size *= 2;                                                  \
-    buffer = (xmlChar *)                                               \
-               xmlRealloc(buffer, buffer_size * sizeof(xmlChar));      \
-    if (buffer == NULL) {                                              \
-        xmlEntitiesErrMemory("xmlEncodeEntitiesReentrant: realloc failed");\
-       return(NULL);                                                   \
-    }                                                                  \
+    xmlChar *tmp;                                                       \
+    size_t new_size = buffer_size * 2;                                  \
+    if (new_size < buffer_size) goto mem_error;                         \
+    tmp = (xmlChar *) xmlRealloc(buffer, new_size);                    \
+    if (tmp == NULL) goto mem_error;                                    \
+    buffer = tmp;                                                      \
+    buffer_size = new_size;                                            \
 }
 
-
 /**
- * xmlEncodeEntitiesReentrant:
+ * xmlEncodeEntitiesInternal:
  * @doc:  the document containing the string
  * @input:  A string to convert to XML.
+ * @attr: are we handling an atrbute value
  *
  * Do a global encoding of a string, replacing the predefined entities
  * and non ASCII values with their entities and CharRef counterparts.
@@ -550,12 +552,12 @@ xmlGetDocEntity(xmlDocPtr doc, const xmlChar *name) {
  *
  * Returns A newly allocated string with the substitution done.
  */
-xmlChar *
-xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
+static xmlChar *
+xmlEncodeEntitiesInternal(xmlDocPtr doc, const xmlChar *input, int attr) {
     const xmlChar *cur = input;
     xmlChar *buffer = NULL;
     xmlChar *out = NULL;
-    int buffer_size = 0;
+    size_t buffer_size = 0;
     int html = 0;
 
     if (input == NULL) return(NULL);
@@ -568,14 +570,14 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
     buffer_size = 1000;
     buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
     if (buffer == NULL) {
-        xmlEntitiesErrMemory("xmlEncodeEntitiesReentrant: malloc failed");
+        xmlEntitiesErrMemory("xmlEncodeEntities: malloc failed");
        return(NULL);
     }
     out = buffer;
 
     while (*cur != '\0') {
-        if (out - buffer > buffer_size - 100) {
-           int indx = out - buffer;
+        size_t indx = out - buffer;
+        if (indx + 100 > buffer_size) {
 
            growBufferReentrant();
            out = &buffer[indx];
@@ -585,6 +587,27 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
         * By default one have to encode at least '<', '>', '"' and '&' !
         */
        if (*cur == '<') {
+           const xmlChar *end;
+
+           /*
+            * Special handling of server side include in HTML attributes
+            */
+           if (html && attr &&
+               (cur[1] == '!') && (cur[2] == '-') && (cur[3] == '-') &&
+               ((end = xmlStrstr(cur, BAD_CAST "-->")) != NULL)) {
+               while (cur != end) {
+                   *out++ = *cur++;
+                   indx = out - buffer;
+                   if (indx + 100 > buffer_size) {
+                       growBufferReentrant();
+                       out = &buffer[indx];
+                   }
+               }
+               *out++ = *cur++;
+               *out++ = *cur++;
+               *out++ = *cur++;
+               continue;
+           }
            *out++ = '&';
            *out++ = 'l';
            *out++ = 't';
@@ -595,6 +618,23 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
            *out++ = 't';
            *out++ = ';';
        } else if (*cur == '&') {
+           /*
+            * Special handling of &{...} construct from HTML 4, see
+            * http://www.w3.org/TR/html401/appendix/notes.html#h-B.7.1
+            */
+           if (html && attr && (cur[1] == '{') &&
+               (strchr((const char *) cur, '}'))) {
+               while (*cur != '}') {
+                   *out++ = *cur++;
+                   indx = out - buffer;
+                   if (indx + 100 > buffer_size) {
+                       growBufferReentrant();
+                       out = &buffer[indx];
+                   }
+               }
+               *out++ = *cur++;
+               continue;
+           }
            *out++ = '&';
            *out++ = 'a';
            *out++ = 'm';
@@ -609,7 +649,7 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
        } else if (*cur >= 0x80) {
            if (((doc != NULL) && (doc->encoding != NULL)) || (html)) {
                /*
-                * Bjørn Reese <br@sseusa.com> provided the patch
+                * Bjørn Reese <br@sseusa.com> provided the patch
                xmlChar xc;
                xc = (*cur & 0x3F) << 6;
                if (cur[1] != 0) {
@@ -627,7 +667,7 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
 
                if (*cur < 0xC0) {
                    xmlEntitiesErr(XML_CHECK_NOT_UTF8,
-                           "xmlEncodeEntitiesReentrant : input not UTF-8");
+                           "xmlEncodeEntities: input not UTF-8");
                    if (doc != NULL)
                        doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
                    snprintf(buf, sizeof(buf), "&#%d;", *cur);
@@ -660,7 +700,7 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
                }
                if ((l == 1) || (!IS_CHAR(val))) {
                    xmlEntitiesErr(XML_ERR_INVALID_CHAR,
-                       "xmlEncodeEntitiesReentrant : char out of range\n");
+                       "xmlEncodeEntities: char out of range\n");
                    if (doc != NULL)
                        doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
                    snprintf(buf, sizeof(buf), "&#%d;", *cur);
@@ -692,6 +732,44 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
     }
     *out = 0;
     return(buffer);
+
+mem_error:
+    xmlEntitiesErrMemory("xmlEncodeEntities: realloc failed");
+    xmlFree(buffer);
+    return(NULL);
+}
+
+/**
+ * xmlEncodeAttributeEntities:
+ * @doc:  the document containing the string
+ * @input:  A string to convert to XML.
+ *
+ * Do a global encoding of a string, replacing the predefined entities
+ * and non ASCII values with their entities and CharRef counterparts for
+ * attribute values.
+ *
+ * Returns A newly allocated string with the substitution done.
+ */
+xmlChar *
+xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input) {
+    return xmlEncodeEntitiesInternal(doc, input, 1);
+}
+
+/**
+ * xmlEncodeEntitiesReentrant:
+ * @doc:  the document containing the string
+ * @input:  A string to convert to XML.
+ *
+ * Do a global encoding of a string, replacing the predefined entities
+ * and non ASCII values with their entities and CharRef counterparts.
+ * Contrary to xmlEncodeEntities, this routine is reentrant, and result
+ * must be deallocated.
+ *
+ * Returns A newly allocated string with the substitution done.
+ */
+xmlChar *
+xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
+    return xmlEncodeEntitiesInternal(doc, input, 0);
 }
 
 /**
@@ -705,11 +783,11 @@ xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
  * Returns A newly allocated string with the substitution done.
  */
 xmlChar *
-xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) {
+xmlEncodeSpecialChars(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlChar *input) {
     const xmlChar *cur = input;
     xmlChar *buffer = NULL;
     xmlChar *out = NULL;
-    int buffer_size = 0;
+    size_t buffer_size = 0;
     if (input == NULL) return(NULL);
 
     /*
@@ -724,8 +802,8 @@ xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) {
     out = buffer;
 
     while (*cur != '\0') {
-        if (out - buffer > buffer_size - 10) {
-           int indx = out - buffer;
+        size_t indx = out - buffer;
+        if (indx + 10 > buffer_size) {
 
            growBufferReentrant();
            out = &buffer[indx];
@@ -774,6 +852,11 @@ xmlEncodeSpecialChars(xmlDocPtr doc ATTRIBUTE_UNUSED, const xmlChar *input) {
     }
     *out = 0;
     return(buffer);
+
+mem_error:
+    xmlEntitiesErrMemory("xmlEncodeSpecialChars: realloc failed");
+    xmlFree(buffer);
+    return(NULL);
 }
 
 /**
@@ -820,7 +903,7 @@ xmlFreeEntitiesTable(xmlEntitiesTablePtr table) {
  * @ent:  An entity
  *
  * Build a copy of an entity
- * 
+ *
  * Returns the new xmlEntitiesPtr or NULL in case of error.
  */
 static xmlEntityPtr
@@ -856,7 +939,7 @@ xmlCopyEntity(xmlEntityPtr ent) {
  * @table:  An entity table
  *
  * Build a copy of an entity table.
- * 
+ *
  * Returns the new xmlEntitiesTablePtr or NULL in case of error.
  */
 xmlEntitiesTablePtr
@@ -1005,7 +1088,7 @@ static void
 xmlDumpEntityDeclScan(xmlEntityPtr ent, xmlBufferPtr buf) {
     xmlDumpEntityDecl(buf, ent);
 }
-      
+
 /**
  * xmlDumpEntitiesTable:
  * @buf:  An XML buffer.
diff --git a/error.c b/error.c
index a891faa..cbcf5c9 100644 (file)
--- a/error.c
+++ b/error.c
@@ -33,7 +33,7 @@ void XMLCDECL xmlGenericErrorDefaultFunc      (void *ctx ATTRIBUTE_UNUSED,
                                                                \
     while (size < 64000) {                                     \
        va_start(ap, msg);                                      \
-       chars = vsnprintf(str, size, msg, ap);                  \
+       chars = vsnprintf(str, size, msg, ap);                  \
        va_end(ap);                                             \
        if ((chars > -1) && (chars < size)) {                   \
            if (prev_size == chars) {                           \
@@ -54,9 +54,9 @@ void XMLCDECL xmlGenericErrorDefaultFunc      (void *ctx ATTRIBUTE_UNUSED,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Handling of out of context errors               *
- *                                                                     *
+ *                                                                     *
+ *                     Handling of out of context errors               *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -64,7 +64,7 @@ void XMLCDECL xmlGenericErrorDefaultFunc      (void *ctx ATTRIBUTE_UNUSED,
  * @ctx:  an error context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Default handler for out of context error messages.
  */
 void XMLCDECL
@@ -82,7 +82,7 @@ xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
 /**
  * initGenericErrorDefaultFunc:
  * @handler:  the handler
- * 
+ *
  * Set or reset (if NULL) the default handler for generic errors
  * to the builtin error function.
  */
@@ -137,15 +137,15 @@ xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
 }
 
 /************************************************************************
- *                                                                     *
- *                     Handling of parsing errors                      *
- *                                                                     *
+ *                                                                     *
+ *                     Handling of parsing errors                      *
+ *                                                                     *
  ************************************************************************/
 
 /**
  * xmlParserPrintFileInfo:
  * @input:  an xmlParserInputPtr input
- * 
+ *
  * Displays the associated file and line informations for the current input
  */
 
@@ -165,12 +165,12 @@ xmlParserPrintFileInfo(xmlParserInputPtr input) {
 /**
  * xmlParserPrintFileContext:
  * @input:  an xmlParserInputPtr input
- * 
+ *
  * Displays current context within the input content for error tracking
  */
 
 static void
-xmlParserPrintFileContextInternal(xmlParserInputPtr input , 
+xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
                xmlGenericErrorFunc channel, void *data ) {
     const xmlChar *cur, *base;
     unsigned int n, col;       /* GCC warns if signed, because compared with sizeof() */
@@ -186,8 +186,8 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
     }
     n = 0;
     /* search backwards for beginning-of-line (to max buff size) */
-    while ((n++ < (sizeof(content)-1)) && (cur > base) && 
-          (*(cur) != '\n') && (*(cur) != '\r'))
+    while ((n++ < (sizeof(content)-1)) && (cur > base) &&
+          (*(cur) != '\n') && (*(cur) != '\r'))
         cur--;
     if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
     /* calculate the error position in terms of the current position */
@@ -196,8 +196,8 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
     n = 0;
     ctnt = content;
     /* copy selected text to our buffer */
-    while ((*cur != 0) && (*(cur) != '\n') && 
-          (*(cur) != '\r') && (n < sizeof(content)-1)) {
+    while ((*cur != 0) && (*(cur) != '\n') &&
+          (*(cur) != '\r') && (n < sizeof(content)-1)) {
                *ctnt++ = *cur++;
        n++;
     }
@@ -221,7 +221,7 @@ xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
 /**
  * xmlParserPrintFileContext:
  * @input:  an xmlParserInputPtr input
- * 
+ *
  * Displays current context within the input content for error tracking
  */
 void
@@ -292,7 +292,10 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
     } else {
         if (file != NULL)
             channel(data, "%s:%d: ", file, line);
-        else if ((line != 0) && (domain == XML_FROM_PARSER))
+        else if ((line != 0) &&
+                ((domain == XML_FROM_PARSER) || (domain == XML_FROM_SCHEMASV)||
+                 (domain == XML_FROM_SCHEMASP)||(domain == XML_FROM_DTD) ||
+                 (domain == XML_FROM_RELAXNGP)||(domain == XML_FROM_RELAXNGV)))
             channel(data, "Entity: line %d: ", line);
     }
     if (name != NULL) {
@@ -360,6 +363,15 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
         case XML_FROM_I18N:
             channel(data, "encoding ");
             break;
+        case XML_FROM_SCHEMATRONV:
+            channel(data, "schematron ");
+            break;
+        case XML_FROM_BUFFER:
+            channel(data, "internal buffer ");
+            break;
+        case XML_FROM_URI:
+            channel(data, "URI ");
+            break;
         default:
             break;
     }
@@ -429,7 +441,7 @@ xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
  * @str2: extra string info
  * @str3: extra string info
  * @int1: extra int info
- * @col: column number of the error or 0 if N/A 
+ * @col: column number of the error or 0 if N/A
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
  *
@@ -521,6 +533,8 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
 
        if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
            line = node->line;
+       if ((line == 0) || (line == 65535))
+           line = xmlGetLineNo(node);
     }
 
     /*
@@ -601,8 +615,11 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
        data = ctxt->userData;
     } else if (channel == NULL) {
        channel = xmlGenericError;
-       if (!data)
+       if (ctxt != NULL) {
+           data = ctxt;
+       } else {
            data = xmlGenericErrorContext;
+       }
     }
     if (channel == NULL)
         return;
@@ -654,7 +671,7 @@ __xmlSimpleError(int domain, int code, xmlNodePtr node,
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format an error messages, gives file, line, position and
  * extra parameters.
  */
@@ -697,7 +714,7 @@ xmlParserError(void *ctx, const char *msg, ...)
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format a warning messages, gives file, line, position and
  * extra parameters.
  */
@@ -718,7 +735,7 @@ xmlParserWarning(void *ctx, const char *msg, ...)
        }
        xmlParserPrintFileInfo(input);
     }
-        
+
     xmlGenericError(xmlGenericErrorContext, "warning: ");
     XML_GET_VAR_STR(msg, str);
     xmlGenericError(xmlGenericErrorContext, "%s", str);
@@ -736,9 +753,9 @@ xmlParserWarning(void *ctx, const char *msg, ...)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Handling of validation errors                   *
- *                                                                     *
+ *                                                                     *
+ *                     Handling of validation errors                   *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -746,7 +763,7 @@ xmlParserWarning(void *ctx, const char *msg, ...)
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format an validity error messages, gives file,
  * line, position and extra parameters.
  */
@@ -764,7 +781,7 @@ xmlParserValidityError(void *ctx, const char *msg, ...)
            input = ctxt->input;
            if ((input->filename == NULL) && (ctxt->inputNr > 1))
                input = ctxt->inputTab[ctxt->inputNr - 2];
-               
+
            if (had_info == 0) {
                xmlParserPrintFileInfo(input);
            }
@@ -790,7 +807,7 @@ xmlParserValidityError(void *ctx, const char *msg, ...)
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format a validity warning messages, gives file, line,
  * position and extra parameters.
  */
@@ -809,7 +826,7 @@ xmlParserValidityWarning(void *ctx, const char *msg, ...)
 
        xmlParserPrintFileInfo(input);
     }
-        
+
     xmlGenericError(xmlGenericErrorContext, "validity warning: ");
     XML_GET_VAR_STR(msg, str);
     xmlGenericError(xmlGenericErrorContext, "%s", str);
index 9eb6a76..488ee6e 100644 (file)
@@ -1,10 +1,7 @@
 noinst_PROGRAMS        = gjobread
 
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
-DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS)
+LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD)
 
 gjobread_SOURCES=gjobread.c
-gjobread_LDFLAGS=
-gjobread_DEPENDENCIES= $(DEPS)
-gjobread_LDADD= @RDL_LIBS@ $(LDADDS)
index ad7643f..dea6d65 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -36,12 +80,13 @@ build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = gjobread$(EXEEXT)
 subdir = example
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(top_srcdir)/depcomp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -51,14 +96,28 @@ CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
 am_gjobread_OBJECTS = gjobread.$(OBJEXT)
 gjobread_OBJECTS = $(am_gjobread_OBJECTS)
+gjobread_LDADD = $(LDADD)
 am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+gjobread_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
-gjobread_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(gjobread_LDFLAGS) $(LDFLAGS) -o $@
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -69,24 +128,42 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
 SOURCES = $(gjobread_SOURCES)
 DIST_SOURCES = $(gjobread_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -94,7 +171,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -131,6 +207,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -175,6 +252,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -186,7 +266,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -211,7 +290,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -244,6 +322,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -317,13 +396,10 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
-DEPS = $(top_builddir)/libxml2.la
-LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
+AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir)/include
+AM_CFLAGS = $(THREAD_CFLAGS) $(Z_CFLAGS)
+LDADD = $(RDL_LIBS) $(STATIC_BINARIES) $(top_builddir)/libxml2.la $(THREAD_LIBS) $(Z_LIBS) $(ICONV_LIBS) -lm $(WIN32_EXTRA_LIBADD)
 gjobread_SOURCES = gjobread.c
-gjobread_LDFLAGS = 
-gjobread_DEPENDENCIES = $(DEPS)
-gjobread_LDADD = @RDL_LIBS@ $(LDADDS)
 all: all-am
 
 .SUFFIXES:
@@ -367,9 +443,10 @@ clean-noinstPROGRAMS:
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
-gjobread$(EXEEXT): $(gjobread_OBJECTS) $(gjobread_DEPENDENCIES) 
+
+gjobread$(EXEEXT): $(gjobread_OBJECTS) $(gjobread_DEPENDENCIES) $(EXTRA_gjobread_DEPENDENCIES) 
        @rm -f gjobread$(EXEEXT)
-       $(AM_V_CCLD)$(gjobread_LINK) $(gjobread_OBJECTS) $(gjobread_LDADD) $(LIBS)
+       $(AM_V_CCLD)$(LINK) $(gjobread_OBJECTS) $(gjobread_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -382,26 +459,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -409,26 +483,15 @@ mostlyclean-libtool:
 clean-libtool:
        -rm -rf .libs _libs
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -440,15 +503,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -457,6 +516,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -505,10 +579,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -593,18 +672,19 @@ uninstall-am:
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstPROGRAMS ctags distclean \
-       distclean-compile distclean-generic distclean-libtool \
-       distclean-tags distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags uninstall uninstall-am
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+       ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 69002f0..e351b03 100644 (file)
--- a/globals.c
+++ b/globals.c
@@ -65,9 +65,9 @@ void xmlCleanupGlobals(void)
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     All the user accessible global variables of the library         *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 /*
@@ -246,7 +246,7 @@ static int xmlPedanticParserDefaultValueThrDef = 0;
  * xmlLineNumbersDefaultValue:
  *
  * Global setting, indicate that the parser should store the line number
- * in the content field of elements in the DOM tree. 
+ * in the content field of elements in the DOM tree.
  * Disabled by default since this may not be safe for old classes of
  * applicaton.
  */
@@ -509,7 +509,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs)
 #if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
     initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
 #endif
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
     inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
 #endif
 
@@ -523,7 +523,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs)
     gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId;
     gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber;
     gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
-    gs->xmlDoValidityCheckingDefaultValue = 
+    gs->xmlDoValidityCheckingDefaultValue =
          xmlDoValidityCheckingDefaultValueThrDef;
 #if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY)
     gs->xmlFree = (xmlFreeFunc) xmlMemFree;
@@ -548,7 +548,7 @@ xmlInitializeGlobalState(xmlGlobalStatePtr gs)
     gs->xmlParserVersion = LIBXML_VERSION_STRING;
     gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef;
     gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
-    gs->xmlSubstituteEntitiesDefaultValue = 
+    gs->xmlSubstituteEntitiesDefaultValue =
         xmlSubstituteEntitiesDefaultValueThrDef;
 
     gs->xmlGenericError = xmlGenericErrorThrDef;
@@ -600,7 +600,7 @@ xmlRegisterNodeFunc
 xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
 {
     xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
-    
+
     __xmlRegisterCallbacks = 1;
     xmlRegisterNodeDefaultValue = func;
     return(old);
@@ -610,10 +610,10 @@ xmlRegisterNodeFunc
 xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)
 {
     xmlRegisterNodeFunc old;
-    
+
     xmlMutexLock(xmlThrDefMutex);
     old = xmlRegisterNodeDefaultValueThrDef;
-    
+
     __xmlRegisterCallbacks = 1;
     xmlRegisterNodeDefaultValueThrDef = func;
     xmlMutexUnlock(xmlThrDefMutex);
@@ -633,7 +633,7 @@ xmlDeregisterNodeFunc
 xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
 {
     xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
-    
+
     __xmlRegisterCallbacks = 1;
     xmlDeregisterNodeDefaultValue = func;
     return(old);
@@ -646,7 +646,7 @@ xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)
 
     xmlMutexLock(xmlThrDefMutex);
     old = xmlDeregisterNodeDefaultValueThrDef;
-    
+
     __xmlRegisterCallbacks = 1;
     xmlDeregisterNodeDefaultValueThrDef = func;
     xmlMutexUnlock(xmlThrDefMutex);
@@ -658,7 +658,7 @@ xmlParserInputBufferCreateFilenameFunc
 xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
 {
     xmlParserInputBufferCreateFilenameFunc old;
-    
+
     xmlMutexLock(xmlThrDefMutex);
     old = xmlParserInputBufferCreateFilenameValueThrDef;
     if (old == NULL) {
@@ -675,7 +675,7 @@ xmlOutputBufferCreateFilenameFunc
 xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
 {
     xmlOutputBufferCreateFilenameFunc old;
-    
+
     xmlMutexLock(xmlThrDefMutex);
     old = xmlOutputBufferCreateFilenameValueThrDef;
 #ifdef LIBXML_OUTPUT_ENABLED
@@ -732,7 +732,7 @@ __xmlMalloc(void){
     if (IS_MAIN_THREAD)
         return (&xmlMalloc);
     else
-       return (&xmlGetGlobalState()->xmlMalloc);
+       return (&xmlGetGlobalState()->xmlMalloc);
 }
 
 #undef xmlMallocAtomic
diff --git a/hash.c b/hash.c
index 15e1efe..f9a2017 100644 (file)
--- a/hash.c
+++ b/hash.c
@@ -83,7 +83,7 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
                  const xmlChar *name2, const xmlChar *name3) {
     unsigned long value = 0L;
     char ch;
-    
+
 #ifdef HASH_RANDOMIZATION
     value = table->random_seed;
 #endif
@@ -93,11 +93,13 @@ xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
        }
     }
+    value = value ^ ((value << 5) + (value >> 3));
     if (name2 != NULL) {
        while ((ch = *name2++) != 0) {
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
        }
     }
+    value = value ^ ((value << 5) + (value >> 3));
     if (name3 != NULL) {
        while ((ch = *name3++) != 0) {
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
@@ -113,7 +115,7 @@ xmlHashComputeQKey(xmlHashTablePtr table,
                   const xmlChar *prefix3, const xmlChar *name3) {
     unsigned long value = 0L;
     char ch;
-    
+
 #ifdef HASH_RANDOMIZATION
     value = table->random_seed;
 #endif
@@ -133,6 +135,7 @@ xmlHashComputeQKey(xmlHashTablePtr table,
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
        }
     }
+    value = value ^ ((value << 5) + (value >> 3));
     if (prefix2 != NULL) {
        while ((ch = *prefix2++) != 0) {
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
@@ -144,6 +147,7 @@ xmlHashComputeQKey(xmlHashTablePtr table,
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
        }
     }
+    value = value ^ ((value << 5) + (value >> 3));
     if (prefix3 != NULL) {
        while ((ch = *prefix3++) != 0) {
            value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
@@ -169,10 +173,10 @@ xmlHashComputeQKey(xmlHashTablePtr table,
 xmlHashTablePtr
 xmlHashCreate(int size) {
     xmlHashTablePtr table;
-  
+
     if (size <= 0)
         size = 256;
-  
+
     table = xmlMalloc(sizeof(xmlHashTable));
     if (table) {
         table->dict = NULL;
@@ -180,11 +184,11 @@ xmlHashCreate(int size) {
        table->nbElems = 0;
         table->table = xmlMalloc(size * sizeof(xmlHashEntry));
         if (table->table) {
-           memset(table->table, 0, size * sizeof(xmlHashEntry));
+           memset(table->table, 0, size * sizeof(xmlHashEntry));
 #ifdef HASH_RANDOMIZATION
             table->random_seed = __xmlRandom();
 #endif
-           return(table);
+           return(table);
         }
         xmlFree(table);
     }
@@ -230,7 +234,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) {
 #ifdef DEBUG_GROW
     unsigned long nbElem = 0;
 #endif
-  
+
     if (table == NULL)
        return(-1);
     if (size < 8)
@@ -242,7 +246,7 @@ xmlHashGrow(xmlHashTablePtr table, int size) {
     oldtable = table->table;
     if (oldtable == NULL)
         return(-1);
-  
+
     table->table = xmlMalloc(size * sizeof(xmlHashEntry));
     if (table->table == NULL) {
        table->table = oldtable;
@@ -252,13 +256,13 @@ xmlHashGrow(xmlHashTablePtr table, int size) {
     table->size = size;
 
     /* If the two loops are merged, there would be situations where
-       a new entry needs to allocated and data copied into it from 
+       a new entry needs to allocated and data copied into it from
        the main table. So instead, we run through the array twice, first
        copying all the elements in the main array (where we can't get
        conflicts) and then the rest, so we only free (and don't allocate)
     */
     for (i = 0; i < oldsize; i++) {
-       if (oldtable[i].valid == 0) 
+       if (oldtable[i].valid == 0)
            continue;
        key = xmlHashComputeKey(table, oldtable[i].name, oldtable[i].name2,
                                oldtable[i].name3);
@@ -282,8 +286,8 @@ xmlHashGrow(xmlHashTablePtr table, int size) {
                table->table[key].next = NULL;
                xmlFree(iter);
            } else {
-               iter->next = table->table[key].next;
-               table->table[key].next = iter;
+               iter->next = table->table[key].next;
+               table->table[key].next = iter;
            }
 
 #ifdef DEBUG_GROW
@@ -599,7 +603,7 @@ xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar *name,
     entry->valid = 1;
 
 
-    if (insert != NULL) 
+    if (insert != NULL)
        insert->next = entry;
 
     table->nbElems++;
@@ -748,7 +752,7 @@ xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlChar *name,
  * Returns the a pointer to the userdata
  */
 void *
-xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name, 
+xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name,
               const xmlChar *name2, const xmlChar *name3) {
     unsigned long key;
     xmlHashEntryPtr entry;
@@ -821,14 +825,14 @@ typedef struct {
     void *data;
 } stubData;
 
-static void 
-stubHashScannerFull (void *payload, void *data, const xmlChar *name, 
+static void
+stubHashScannerFull (void *payload, void *data, const xmlChar *name,
                      const xmlChar *name2 ATTRIBUTE_UNUSED,
                     const xmlChar *name3 ATTRIBUTE_UNUSED) {
     stubData *stubdata = (stubData *) data;
     stubdata->hashscanner (payload, stubdata->data, (xmlChar *) name);
-}                                  
+}
+
 /**
  * xmlHashScan:
  * @table: the hash table
@@ -841,7 +845,7 @@ void
 xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) {
     stubData stubdata;
     stubdata.data = data;
-    stubdata.hashscanner = f; 
+    stubdata.hashscanner = f;
     xmlHashScanFull (table, stubHashScannerFull, &stubdata);
 }
 
@@ -866,7 +870,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) {
 
     if (table->table) {
        for(i = 0; i < table->size; i++) {
-           if (table->table[i].valid == 0) 
+           if (table->table[i].valid == 0)
                continue;
            iter = &(table->table[i]);
            while (iter) {
@@ -905,7 +909,7 @@ xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) {
  * the comparison is considered to match.
  */
 void
-xmlHashScan3(xmlHashTablePtr table, const xmlChar *name, 
+xmlHashScan3(xmlHashTablePtr table, const xmlChar *name,
             const xmlChar *name2, const xmlChar *name3,
             xmlHashScanner f, void *data) {
     xmlHashScanFull3 (table, name, name2, name3,
@@ -926,7 +930,7 @@ xmlHashScan3(xmlHashTablePtr table, const xmlChar *name,
  * the comparison is considered to match.
  */
 void
-xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name, 
+xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name,
                 const xmlChar *name2, const xmlChar *name3,
                 xmlHashScannerFull f, void *data) {
     int i;
@@ -980,6 +984,9 @@ xmlHashCopy(xmlHashTablePtr table, xmlHashCopier f) {
        return(NULL);
 
     ret = xmlHashCreate(table->size);
+    if (ret == NULL)
+        return(NULL);
+
     if (table->table) {
        for(i = 0; i < table->size; i++) {
            if (table->table[i].valid == 0)
index 18ab34d..c7aea1b 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,38 +78,70 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = include
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
        distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -99,7 +175,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -136,6 +211,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -180,6 +256,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -191,7 +270,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -216,7 +294,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -249,6 +326,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -365,22 +443,25 @@ clean-libtool:
        -rm -rf .libs _libs
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -395,57 +476,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -461,12 +497,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -478,15 +509,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -495,6 +522,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -531,13 +573,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -572,10 +611,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -653,22 +697,20 @@ ps-am:
 
 uninstall-am:
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-       install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am check check-am clean clean-generic clean-libtool \
-       ctags ctags-recursive distclean distclean-generic \
-       distclean-libtool distclean-tags distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs installdirs-am maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
-       uninstall uninstall-am
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool cscopelist-am ctags \
+       ctags-am distclean distclean-generic distclean-libtool \
+       distclean-tags distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-am uninstall uninstall-am
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 461d4ee..9394fa7 100644 (file)
@@ -47,44 +47,44 @@ XMLPUBFUN int XMLCALL
                                         const unsigned char *in,
                                         int *inlen, int quoteChar);
 
-XMLPUBFUN docbDocPtr XMLCALL             
+XMLPUBFUN docbDocPtr XMLCALL
                     docbSAXParseDoc   (xmlChar *cur,
                                         const char *encoding,
                                         docbSAXHandlerPtr sax,
                                         void *userData);
-XMLPUBFUN docbDocPtr XMLCALL             
+XMLPUBFUN docbDocPtr XMLCALL
                     docbParseDoc      (xmlChar *cur,
                                         const char *encoding);
-XMLPUBFUN docbDocPtr XMLCALL             
+XMLPUBFUN docbDocPtr XMLCALL
                     docbSAXParseFile  (const char *filename,
                                         const char *encoding,
                                         docbSAXHandlerPtr sax,
                                         void *userData);
-XMLPUBFUN docbDocPtr XMLCALL             
+XMLPUBFUN docbDocPtr XMLCALL
                     docbParseFile     (const char *filename,
                                         const char *encoding);
 
 /**
  * Interfaces for the Push mode.
  */
-XMLPUBFUN void XMLCALL                  
+XMLPUBFUN void XMLCALL
                     docbFreeParserCtxt      (docbParserCtxtPtr ctxt);
-XMLPUBFUN docbParserCtxtPtr XMLCALL     
+XMLPUBFUN docbParserCtxtPtr XMLCALL
                     docbCreatePushParserCtxt(docbSAXHandlerPtr sax,
                                               void *user_data,
                                               const char *chunk,
                                               int size,
                                               const char *filename,
                                               xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL                   
+XMLPUBFUN int XMLCALL
                     docbParseChunk          (docbParserCtxtPtr ctxt,
                                               const char *chunk,
                                               int size,
                                               int terminate);
-XMLPUBFUN docbParserCtxtPtr XMLCALL       
+XMLPUBFUN docbParserCtxtPtr XMLCALL
                     docbCreateFileParserCtxt(const char *filename,
                                               const char *encoding);
-XMLPUBFUN int XMLCALL                   
+XMLPUBFUN int XMLCALL
                     docbParseDocument       (docbParserCtxtPtr ctxt);
 
 #ifdef __cplusplus
index 10a3d65..551186c 100644 (file)
@@ -83,87 +83,87 @@ struct _htmlEntityDesc {
 /*
  * There is only few public functions.
  */
-XMLPUBFUN const htmlElemDesc * XMLCALL         
+XMLPUBFUN const htmlElemDesc * XMLCALL
                        htmlTagLookup   (const xmlChar *tag);
-XMLPUBFUN const htmlEntityDesc * XMLCALL       
+XMLPUBFUN const htmlEntityDesc * XMLCALL
                        htmlEntityLookup(const xmlChar *name);
-XMLPUBFUN const htmlEntityDesc * XMLCALL       
+XMLPUBFUN const htmlEntityDesc * XMLCALL
                        htmlEntityValueLookup(unsigned int value);
 
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlIsAutoClosed(htmlDocPtr doc,
                                         htmlNodePtr elem);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlAutoCloseTag(htmlDocPtr doc,
                                         const xmlChar *name,
                                         htmlNodePtr elem);
-XMLPUBFUN const htmlEntityDesc * XMLCALL       
+XMLPUBFUN const htmlEntityDesc * XMLCALL
                        htmlParseEntityRef(htmlParserCtxtPtr ctxt,
                                         const xmlChar **str);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlParseCharRef(htmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        htmlParseElement(htmlParserCtxtPtr ctxt);
 
-XMLPUBFUN htmlParserCtxtPtr XMLCALL    
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
                        htmlNewParserCtxt(void);
 
-XMLPUBFUN htmlParserCtxtPtr XMLCALL    
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
                        htmlCreateMemoryParserCtxt(const char *buffer,
                                                   int size);
 
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlParseDocument(htmlParserCtxtPtr ctxt);
-XMLPUBFUN htmlDocPtr XMLCALL           
+XMLPUBFUN htmlDocPtr XMLCALL
                        htmlSAXParseDoc (xmlChar *cur,
                                         const char *encoding,
                                         htmlSAXHandlerPtr sax,
                                         void *userData);
-XMLPUBFUN htmlDocPtr XMLCALL           
+XMLPUBFUN htmlDocPtr XMLCALL
                        htmlParseDoc    (xmlChar *cur,
                                         const char *encoding);
-XMLPUBFUN htmlDocPtr XMLCALL           
+XMLPUBFUN htmlDocPtr XMLCALL
                        htmlSAXParseFile(const char *filename,
                                         const char *encoding,
                                         htmlSAXHandlerPtr sax,
                                         void *userData);
-XMLPUBFUN htmlDocPtr XMLCALL           
+XMLPUBFUN htmlDocPtr XMLCALL
                        htmlParseFile   (const char *filename,
                                         const char *encoding);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        UTF8ToHtml      (unsigned char *out,
                                         int *outlen,
                                         const unsigned char *in,
                                         int *inlen);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlEncodeEntities(unsigned char *out,
                                         int *outlen,
                                         const unsigned char *in,
                                         int *inlen, int quoteChar);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlIsScriptAttribute(const xmlChar *name);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlHandleOmittedElem(int val);
 
 #ifdef LIBXML_PUSH_ENABLED
 /**
  * Interfaces for the Push mode.
  */
-XMLPUBFUN htmlParserCtxtPtr XMLCALL    
+XMLPUBFUN htmlParserCtxtPtr XMLCALL
                        htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
                                                 void *user_data,
                                                 const char *chunk,
                                                 int size,
                                                 const char *filename,
                                                 xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        htmlParseChunk          (htmlParserCtxtPtr ctxt,
                                                 const char *chunk,
                                                 int size,
                                                 int terminate);
 #endif /* LIBXML_PUSH_ENABLED */
 
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        htmlFreeParserCtxt      (htmlParserCtxtPtr ctxt);
 
 /*
index 6ea8207..c0e1103 100644 (file)
@@ -62,78 +62,78 @@ extern "C" {
 XMLPUBFUN htmlDocPtr XMLCALL
                htmlNewDoc              (const xmlChar *URI,
                                         const xmlChar *ExternalID);
-XMLPUBFUN htmlDocPtr XMLCALL   
+XMLPUBFUN htmlDocPtr XMLCALL
                htmlNewDocNoDtD         (const xmlChar *URI,
                                         const xmlChar *ExternalID);
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                htmlGetMetaEncoding     (htmlDocPtr doc);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlSetMetaEncoding     (htmlDocPtr doc,
                                         const xmlChar *encoding);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL     
+XMLPUBFUN void XMLCALL
                htmlDocDumpMemory       (xmlDocPtr cur,
                                         xmlChar **mem,
                                         int *size);
-XMLPUBFUN void XMLCALL     
+XMLPUBFUN void XMLCALL
                htmlDocDumpMemoryFormat (xmlDocPtr cur,
                                         xmlChar **mem,
                                         int *size,
                                         int format);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlDocDump             (FILE *f,
                                         xmlDocPtr cur);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlSaveFile            (const char *filename,
                                         xmlDocPtr cur);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlNodeDump            (xmlBufferPtr buf,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                htmlNodeDumpFile        (FILE *out,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlNodeDumpFileFormat  (FILE *out,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur,
                                         const char *encoding,
                                         int format);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlSaveFileEnc         (const char *filename,
                                         xmlDocPtr cur,
                                         const char *encoding);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlSaveFileFormat      (const char *filename,
                                         xmlDocPtr cur,
                                         const char *encoding,
                                         int format);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur,
                                         const char *encoding,
                                         int format);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
                                         xmlDocPtr cur,
                                         const char *encoding);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
                                         xmlDocPtr cur,
                                         const char *encoding,
                                         int format);
-XMLPUBFUN void XMLCALL 
-               htmlNodeDumpOutput      (xmlOutputBufferPtr buf, 
+XMLPUBFUN void XMLCALL
+               htmlNodeDumpOutput      (xmlOutputBufferPtr buf,
                                         xmlDocPtr doc,
-                                        xmlNodePtr cur, 
+                                        xmlNodePtr cur,
                                         const char *encoding);
 
 #endif /* LIBXML_OUTPUT_ENABLED */
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                htmlIsBooleanAttr       (const xmlChar *name);
 
 
index a45d8ca..ce84b54 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -35,27 +79,38 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = include/libxml
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
        $(srcdir)/xmlversion.h.in $(xmlinc_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = xmlversion.h
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -77,8 +132,31 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(xmlincdir)"
 HEADERS = $(xmlinc_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -86,7 +164,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -123,6 +200,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -167,6 +245,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -178,7 +259,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -203,7 +283,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -236,6 +315,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -403,8 +483,11 @@ clean-libtool:
        -rm -rf .libs _libs
 install-xmlincHEADERS: $(xmlinc_HEADERS)
        @$(NORMAL_INSTALL)
-       test -z "$(xmlincdir)" || $(MKDIR_P) "$(DESTDIR)$(xmlincdir)"
        @list='$(xmlinc_HEADERS)'; test -n "$(xmlincdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(xmlincdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(xmlincdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -418,30 +501,17 @@ uninstall-xmlincHEADERS:
        @$(NORMAL_UNINSTALL)
        @list='$(xmlinc_HEADERS)'; test -n "$(xmlincdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(xmlincdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(xmlincdir)" && rm -f $$files
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+       dir='$(DESTDIR)$(xmlincdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -453,15 +523,11 @@ TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -470,6 +536,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -521,10 +602,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -604,18 +690,18 @@ uninstall-am: uninstall-xmlincHEADERS
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libtool ctags distclean distclean-generic \
-       distclean-libtool distclean-tags distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip install-xmlincHEADERS \
-       installcheck installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-       uninstall-am uninstall-xmlincHEADERS
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags ctags-am distclean \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       install-xmlincHEADERS installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-xmlincHEADERS
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 0ca161b..20093ce 100644 (file)
@@ -25,53 +25,53 @@ extern "C" {
 #endif
 XMLPUBFUN const xmlChar * XMLCALL
                getPublicId                     (void *ctx);
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                getSystemId                     (void *ctx);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                setDocumentLocator              (void *ctx,
                                                 xmlSAXLocatorPtr loc);
-    
-XMLPUBFUN int XMLCALL          
+
+XMLPUBFUN int XMLCALL
                getLineNumber                   (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                getColumnNumber                 (void *ctx);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                isStandalone                    (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                hasInternalSubset               (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                hasExternalSubset               (void *ctx);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                internalSubset                  (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *ExternalID,
                                                 const xmlChar *SystemID);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                externalSubset                  (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *ExternalID,
                                                 const xmlChar *SystemID);
-XMLPUBFUN xmlEntityPtr XMLCALL 
+XMLPUBFUN xmlEntityPtr XMLCALL
                getEntity                       (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL 
+XMLPUBFUN xmlEntityPtr XMLCALL
                getParameterEntity              (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN xmlParserInputPtr XMLCALL 
+XMLPUBFUN xmlParserInputPtr XMLCALL
                resolveEntity                   (void *ctx,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                entityDecl                      (void *ctx,
                                                 const xmlChar *name,
                                                 int type,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId,
                                                 xmlChar *content);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                attributeDecl                   (void *ctx,
                                                 const xmlChar *elem,
                                                 const xmlChar *fullname,
@@ -79,87 +79,87 @@ XMLPUBFUN void XMLCALL
                                                 int def,
                                                 const xmlChar *defaultValue,
                                                 xmlEnumerationPtr tree);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                elementDecl                     (void *ctx,
                                                 const xmlChar *name,
                                                 int type,
                                                 xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                notationDecl                    (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                unparsedEntityDecl              (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId,
                                                 const xmlChar *notationName);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                startDocument                   (void *ctx);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                endDocument                     (void *ctx);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                attribute                       (void *ctx,
                                                 const xmlChar *fullname,
                                                 const xmlChar *value);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                startElement                    (void *ctx,
                                                 const xmlChar *fullname,
                                                 const xmlChar **atts);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                endElement                      (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                reference                       (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                characters                      (void *ctx,
                                                 const xmlChar *ch,
                                                 int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                ignorableWhitespace             (void *ctx,
                                                 const xmlChar *ch,
                                                 int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                processingInstruction           (void *ctx,
                                                 const xmlChar *target,
                                                 const xmlChar *data);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                globalNamespace                 (void *ctx,
                                                 const xmlChar *href,
                                                 const xmlChar *prefix);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                setNamespace                    (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                getNamespace                    (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                checkNamespace                  (void *ctx,
                                                 xmlChar *nameSpace);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                namespaceDecl                   (void *ctx,
                                                 const xmlChar *href,
                                                 const xmlChar *prefix);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                comment                         (void *ctx,
                                                 const xmlChar *value);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                cdataBlock                      (void *ctx,
                                                 const xmlChar *value,
                                                 int len);
 
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                initxmlDefaultSAXHandler        (xmlSAXHandlerV1 *hdlr,
                                                 int warning);
 #ifdef LIBXML_HTML_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                inithtmlDefaultSAXHandler       (xmlSAXHandlerV1 *hdlr);
 #endif
 #ifdef LIBXML_DOCB_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                initdocbDefaultSAXHandler       (xmlSAXHandlerV1 *hdlr);
 #endif
 #endif /* LIBXML_SAX1_ENABLED */
index 8d2db02..a55212e 100644 (file)
@@ -23,53 +23,53 @@ extern "C" {
 #endif
 XMLPUBFUN const xmlChar * XMLCALL
                xmlSAX2GetPublicId              (void *ctx);
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                xmlSAX2GetSystemId              (void *ctx);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2SetDocumentLocator       (void *ctx,
                                                 xmlSAXLocatorPtr loc);
-    
-XMLPUBFUN int XMLCALL          
+
+XMLPUBFUN int XMLCALL
                xmlSAX2GetLineNumber            (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAX2GetColumnNumber          (void *ctx);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAX2IsStandalone             (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAX2HasInternalSubset        (void *ctx);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAX2HasExternalSubset        (void *ctx);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2InternalSubset           (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *ExternalID,
                                                 const xmlChar *SystemID);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2ExternalSubset           (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *ExternalID,
                                                 const xmlChar *SystemID);
-XMLPUBFUN xmlEntityPtr XMLCALL 
+XMLPUBFUN xmlEntityPtr XMLCALL
                xmlSAX2GetEntity                (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL 
+XMLPUBFUN xmlEntityPtr XMLCALL
                xmlSAX2GetParameterEntity       (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN xmlParserInputPtr XMLCALL 
+XMLPUBFUN xmlParserInputPtr XMLCALL
                xmlSAX2ResolveEntity            (void *ctx,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2EntityDecl               (void *ctx,
                                                 const xmlChar *name,
                                                 int type,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId,
                                                 xmlChar *content);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2AttributeDecl            (void *ctx,
                                                 const xmlChar *elem,
                                                 const xmlChar *fullname,
@@ -77,36 +77,38 @@ XMLPUBFUN void XMLCALL
                                                 int def,
                                                 const xmlChar *defaultValue,
                                                 xmlEnumerationPtr tree);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2ElementDecl              (void *ctx,
                                                 const xmlChar *name,
                                                 int type,
                                                 xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2NotationDecl             (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2UnparsedEntityDecl       (void *ctx,
                                                 const xmlChar *name,
                                                 const xmlChar *publicId,
                                                 const xmlChar *systemId,
                                                 const xmlChar *notationName);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2StartDocument            (void *ctx);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2EndDocument              (void *ctx);
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
-XMLPUBFUN void XMLCALL         
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
+    defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || \
+    defined(LIBXML_LEGACY_ENABLED)
+XMLPUBFUN void XMLCALL
                xmlSAX2StartElement             (void *ctx,
                                                 const xmlChar *fullname,
                                                 const xmlChar **atts);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2EndElement               (void *ctx,
                                                 const xmlChar *name);
-#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED */
+#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED or LIBXML_LEGACY_ENABLED */
 XMLPUBFUN void XMLCALL
                xmlSAX2StartElementNs           (void *ctx,
                                                 const xmlChar *localname,
@@ -122,25 +124,25 @@ XMLPUBFUN void XMLCALL
                                                 const xmlChar *localname,
                                                 const xmlChar *prefix,
                                                 const xmlChar *URI);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2Reference                (void *ctx,
                                                 const xmlChar *name);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2Characters               (void *ctx,
                                                 const xmlChar *ch,
                                                 int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2IgnorableWhitespace      (void *ctx,
                                                 const xmlChar *ch,
                                                 int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2ProcessingInstruction    (void *ctx,
                                                 const xmlChar *target,
                                                 const xmlChar *data);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2Comment                  (void *ctx,
                                                 const xmlChar *value);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2CDataBlock               (void *ctx,
                                                 const xmlChar *value,
                                                 int len);
@@ -153,22 +155,22 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN int XMLCALL
                xmlSAXVersion                   (xmlSAXHandler *hdlr,
                                                 int version);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2InitDefaultSAXHandler    (xmlSAXHandler *hdlr,
                                                 int warning);
 #ifdef LIBXML_HTML_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                htmlDefaultSAXHandlerInit       (void);
 #endif
 #ifdef LIBXML_DOCB_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                docbDefaultSAXHandlerInit       (void);
 #endif
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlDefaultSAXHandlerInit        (void);
 #ifdef __cplusplus
 }
index 3011af7..b8971d9 100644 (file)
@@ -54,7 +54,7 @@ extern "C" {
 
 /*
  * xmlC14NMode:
- * 
+ *
  * Predefined values for C14N modes
  *
  */
index b444137..5a13f51 100644 (file)
@@ -68,111 +68,111 @@ typedef xmlCatalog *xmlCatalogPtr;
  */
 XMLPUBFUN xmlCatalogPtr XMLCALL
                xmlNewCatalog           (int sgml);
-XMLPUBFUN xmlCatalogPtr XMLCALL        
+XMLPUBFUN xmlCatalogPtr XMLCALL
                xmlLoadACatalog         (const char *filename);
-XMLPUBFUN xmlCatalogPtr XMLCALL        
+XMLPUBFUN xmlCatalogPtr XMLCALL
                xmlLoadSGMLSuperCatalog (const char *filename);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlConvertSGMLCatalog   (xmlCatalogPtr catal);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlACatalogAdd          (xmlCatalogPtr catal,
                                         const xmlChar *type,
                                         const xmlChar *orig,
                                         const xmlChar *replace);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlACatalogRemove       (xmlCatalogPtr catal,
                                         const xmlChar *value);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlACatalogResolve      (xmlCatalogPtr catal,
                                         const xmlChar *pubID,
                                         const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlACatalogResolveSystem(xmlCatalogPtr catal,
                                         const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlACatalogResolvePublic(xmlCatalogPtr catal,
                                         const xmlChar *pubID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlACatalogResolveURI   (xmlCatalogPtr catal,
                                         const xmlChar *URI);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlACatalogDump         (xmlCatalogPtr catal,
                                         FILE *out);
 #endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeCatalog          (xmlCatalogPtr catal);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlCatalogIsEmpty       (xmlCatalogPtr catal);
 
 /*
  * Global operations.
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlInitializeCatalog    (void);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlLoadCatalog          (const char *filename);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlLoadCatalogs         (const char *paths);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlCatalogCleanup       (void);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlCatalogDump          (FILE *out);
 #endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogResolve       (const xmlChar *pubID,
                                         const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogResolveSystem (const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogResolvePublic (const xmlChar *pubID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogResolveURI    (const xmlChar *URI);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlCatalogAdd           (const xmlChar *type,
                                         const xmlChar *orig,
                                         const xmlChar *replace);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlCatalogRemove        (const xmlChar *value);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlParseCatalogFile     (const char *filename);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlCatalogConvert       (void);
 
 /*
  * Strictly minimal interfaces for per-document catalogs used
  * by the parser.
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlCatalogFreeLocal     (void *catalogs);
-XMLPUBFUN void * XMLCALL               
+XMLPUBFUN void * XMLCALL
                xmlCatalogAddLocal      (void *catalogs,
                                         const xmlChar *URL);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogLocalResolve  (void *catalogs,
                                         const xmlChar *pubID,
                                         const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlCatalogLocalResolveURI(void *catalogs,
                                         const xmlChar *URI);
 /*
  * Preference settings.
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlCatalogSetDebug      (int level);
-XMLPUBFUN xmlCatalogPrefer XMLCALL 
+XMLPUBFUN xmlCatalogPrefer XMLCALL
                xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlCatalogSetDefaults   (xmlCatalogAllow allow);
-XMLPUBFUN xmlCatalogAllow XMLCALL      
+XMLPUBFUN xmlCatalogAllow XMLCALL
                xmlCatalogGetDefaults   (void);
 
 
 /* DEPRECATED interfaces */
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                xmlCatalogGetSystem     (const xmlChar *sysID);
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                xmlCatalogGetPublic     (const xmlChar *pubID);
 
 #ifdef __cplusplus
index 5a9d20b..5b3be13 100644 (file)
@@ -25,18 +25,18 @@ extern "C" {
 /*
  * The standard Dump routines.
  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpString      (FILE *output,
                                 const xmlChar *str);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpAttr        (FILE *output,
                                 xmlAttrPtr attr,
                                 int depth);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpAttrList    (FILE *output,
                                 xmlAttrPtr attr,
                                 int depth);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpOneNode     (FILE *output,
                                 xmlNodePtr node,
                                 int depth);
@@ -54,16 +54,16 @@ XMLPUBFUN void XMLCALL
 XMLPUBFUN void XMLCALL
        xmlDebugDumpDocument    (FILE *output,
                                 xmlDocPtr doc);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpDTD         (FILE *output,
                                 xmlDtdPtr dtd);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlDebugDumpEntities    (FILE *output,
                                 xmlDocPtr doc);
 
 /****************************************************************
  *                                                             *
- *                     Checking routines                       *
+ *                     Checking routines                       *
  *                                                             *
  ****************************************************************/
 
@@ -73,16 +73,16 @@ XMLPUBFUN int XMLCALL
 
 /****************************************************************
  *                                                             *
- *                     XML shell helpers                       *
+ *                     XML shell helpers                       *
  *                                                             *
  ****************************************************************/
 
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlLsOneNode            (FILE *output, xmlNodePtr node);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlLsCountNode          (xmlNodePtr node);
 
-XMLPUBFUN const char * XMLCALL 
+XMLPUBFUN const char * XMLCALL
        xmlBoolToText           (int boolval);
 
 /****************************************************************
@@ -136,63 +136,63 @@ typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
                             xmlNodePtr node,
                             xmlNodePtr node2);
 
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlShellPrintXPathError (int errorType,
                                 const char *arg);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlShellPrintXPathResult(xmlXPathObjectPtr list);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellList            (xmlShellCtxtPtr ctxt,
                                 char *arg,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellBase            (xmlShellCtxtPtr ctxt,
                                 char *arg,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellDir             (xmlShellCtxtPtr ctxt,
                                 char *arg,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellLoad            (xmlShellCtxtPtr ctxt,
                                 char *filename,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlShellPrintNode       (xmlNodePtr node);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellCat             (xmlShellCtxtPtr ctxt,
                                 char *arg,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellWrite           (xmlShellCtxtPtr ctxt,
                                 char *filename,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellSave            (xmlShellCtxtPtr ctxt,
                                 char *filename,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
 #endif /* LIBXML_OUTPUT_ENABLED */
 #ifdef LIBXML_VALID_ENABLED
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellValidate        (xmlShellCtxtPtr ctxt,
                                 char *dtd,
                                 xmlNodePtr node,
                                 xmlNodePtr node2);
 #endif /* LIBXML_VALID_ENABLED */
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellDu              (xmlShellCtxtPtr ctxt,
                                 char *arg,
                                 xmlNodePtr tree,
                                 xmlNodePtr node2);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlShellPwd             (xmlShellCtxtPtr ctxt,
                                 char *buffer,
                                 xmlNodePtr node,
@@ -201,12 +201,12 @@ XMLPUBFUN int XMLCALL
 /*
  * The Shell interface.
  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlShell                (xmlDocPtr doc,
                                 char *filename,
                                 xmlShellReadlineFunc input,
                                 FILE *output);
-                        
+
 #endif /* LIBXML_XPATH_ENABLED */
 
 #ifdef __cplusplus
index 5994868..7022ec8 100644 (file)
@@ -11,6 +11,7 @@
 #ifndef __XML_DICT_H__
 #define __XML_DICT_H__
 
+#include <limits.h>
 #include <libxml/xmlversion.h>
 #include <libxml/tree.h>
 
@@ -34,6 +35,11 @@ XMLPUBFUN int XMLCALL  xmlInitializeDict(void);
  */
 XMLPUBFUN xmlDictPtr XMLCALL
                        xmlDictCreate   (void);
+XMLPUBFUN size_t XMLCALL
+                       xmlDictSetLimit (xmlDictPtr dict,
+                                         size_t limit);
+XMLPUBFUN size_t XMLCALL
+                       xmlDictGetUsage (xmlDictPtr dict);
 XMLPUBFUN xmlDictPtr XMLCALL
                        xmlDictCreateSub(xmlDictPtr sub);
 XMLPUBFUN int XMLCALL
index 3a3b9b2..7967cc6 100644 (file)
@@ -163,32 +163,32 @@ extern "C" {
 /*
  * Interfaces for encoding handlers.
  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlInitCharEncodingHandlers     (void);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlCleanupCharEncodingHandlers  (void);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlRegisterCharEncodingHandler  (xmlCharEncodingHandlerPtr handler);
 XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
        xmlGetCharEncodingHandler       (xmlCharEncoding enc);
 XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
        xmlFindCharEncodingHandler      (const char *name);
 XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
-       xmlNewCharEncodingHandler       (const char *name, 
-                                        xmlCharEncodingInputFunc input,
-                                        xmlCharEncodingOutputFunc output);
+       xmlNewCharEncodingHandler       (const char *name,
+                                        xmlCharEncodingInputFunc input,
+                                        xmlCharEncodingOutputFunc output);
 
 /*
  * Interfaces for encoding names and aliases.
  */
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlAddEncodingAlias             (const char *name,
                                         const char *alias);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlDelEncodingAlias             (const char *alias);
 XMLPUBFUN const char * XMLCALL
        xmlGetEncodingAlias             (const char *alias);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlCleanupEncodingAliases       (void);
 XMLPUBFUN xmlCharEncoding XMLCALL
        xmlParseCharEncoding            (const char *name);
@@ -202,12 +202,12 @@ XMLPUBFUN xmlCharEncoding XMLCALL
        xmlDetectCharEncoding           (const unsigned char *in,
                                         int len);
 
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlCharEncOutFunc               (xmlCharEncodingHandler *handler,
                                         xmlBufferPtr out,
                                         xmlBufferPtr in);
 
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlCharEncInFunc                (xmlCharEncodingHandler *handler,
                                         xmlBufferPtr out,
                                         xmlBufferPtr in);
@@ -215,20 +215,20 @@ XMLPUBFUN int XMLCALL
        xmlCharEncFirstLine             (xmlCharEncodingHandler *handler,
                                         xmlBufferPtr out,
                                         xmlBufferPtr in);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlCharEncCloseFunc             (xmlCharEncodingHandler *handler);
 
 /*
  * Export a few useful functions
  */
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        UTF8Toisolat1                   (unsigned char *out,
                                         int *outlen,
                                         const unsigned char *in,
                                         int *inlen);
 #endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        isolat1ToUTF8                   (unsigned char *out,
                                         int *outlen,
                                         const unsigned char *in,
index cefb97f..47b4573 100644 (file)
@@ -57,8 +57,9 @@ struct _xmlEntity {
     const xmlChar           *URI;      /* the full URI as computed */
     int                    owner;      /* does the entity own the childrens */
     int                         checked;       /* was the entity content checked */
-                                       /* this is also used to count entites
-                                        * references done from that entity */
+                                       /* this is also used to count entities
+                                        * references done from that entity
+                                        * and if it contains '<' */
 };
 
 /*
@@ -102,7 +103,7 @@ XMLPUBFUN xmlEntityPtr XMLCALL
 XMLPUBFUN xmlEntityPtr XMLCALL
                        xmlGetPredefinedEntity  (const xmlChar *name);
 XMLPUBFUN xmlEntityPtr XMLCALL
-                       xmlGetDocEntity         (xmlDocPtr doc,
+                       xmlGetDocEntity         (const xmlDoc *doc,
                                                 const xmlChar *name);
 XMLPUBFUN xmlEntityPtr XMLCALL
                        xmlGetDtdEntity         (xmlDocPtr doc,
@@ -119,7 +120,7 @@ XMLPUBFUN xmlChar * XMLCALL
                        xmlEncodeEntitiesReentrant(xmlDocPtr doc,
                                                 const xmlChar *input);
 XMLPUBFUN xmlChar * XMLCALL
-                       xmlEncodeSpecialChars   (xmlDocPtr doc,
+                       xmlEncodeSpecialChars   (const xmlDoc *doc,
                                                 const xmlChar *input);
 XMLPUBFUN xmlEntitiesTablePtr XMLCALL
                        xmlCreateEntitiesTable  (void);
index 9d688e0..a9305aa 100644 (file)
@@ -39,7 +39,9 @@ XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
  * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
  *         method was found.
  */
-typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI, xmlCharEncoding enc);
+typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI,
+                                                                          xmlCharEncoding enc);
+
 
 /**
  * xmlOutputBufferCreateFilenameFunc:
@@ -52,7 +54,9 @@ typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const
  * Returns the new xmlOutputBufferPtr in case of success or NULL if no
  *         method was found.
  */
-typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI, xmlCharEncodingHandlerPtr encoder, int compression);
+typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI,
+                                                                xmlCharEncodingHandlerPtr encoder,
+                                                                int compression);
 
 XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
 XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func);
@@ -185,7 +189,8 @@ XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregi
 XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL
        xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func);
 XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL
-       xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func);
+       xmlThrDefParserInputBufferCreateFilenameDefault(
+                               xmlParserInputBufferCreateFilenameFunc func);
 
 /** DOC_DISABLE */
 /*
@@ -297,7 +302,8 @@ XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
 #else
 XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
 #endif
-XMLPUBFUN xmlBufferAllocationScheme XMLCALL xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL
+       xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
 
 XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
 #ifdef LIBXML_THREAD_ENABLED
@@ -479,7 +485,8 @@ XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
 XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
 #endif
 
-XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL __xmlParserInputBufferCreateFilenameValue(void);
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL \
+                               __xmlParserInputBufferCreateFilenameValue(void);
 #ifdef LIBXML_THREAD_ENABLED
 #define xmlParserInputBufferCreateFilenameValue \
 (*(__xmlParserInputBufferCreateFilenameValue()))
index 7fe4be7..dc8ab7e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Summary: Chained hash tables
- * Description: This module implements the hash table support used in 
- *             various places in the library.
+ * Description: This module implements the hash table support used in
+ *             various places in the library.
  *
  * Copy: See Copyright for the status of this software.
  *
@@ -108,40 +108,40 @@ XMLPUBFUN xmlHashTablePtr XMLCALL
 XMLPUBFUN xmlHashTablePtr XMLCALL
                        xmlHashCreateDict(int size,
                                         xmlDictPtr dict);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHashFree     (xmlHashTablePtr table,
                                         xmlHashDeallocator f);
 
 /*
  * Add a new entry to the hash table.
  */
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashAddEntry (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         void *userdata);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashUpdateEntry(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         void *userdata,
                                         xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL              
+XMLPUBFUN int XMLCALL
                        xmlHashAddEntry2(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
                                         void *userdata);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashUpdateEntry2(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
                                         void *userdata,
                                         xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashAddEntry3(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
                                         const xmlChar *name3,
                                         void *userdata);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashUpdateEntry3(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
@@ -152,13 +152,13 @@ XMLPUBFUN int XMLCALL
 /*
  * Remove an entry from the hash table.
  */
-XMLPUBFUN int XMLCALL     
+XMLPUBFUN int XMLCALL
                        xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
                            xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL     
+XMLPUBFUN int XMLCALL
                        xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
                             const xmlChar *name2, xmlHashDeallocator f);
-XMLPUBFUN int  XMLCALL    
+XMLPUBFUN int  XMLCALL
                        xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
                             const xmlChar *name2, const xmlChar *name3,
                             xmlHashDeallocator f);
@@ -166,29 +166,29 @@ XMLPUBFUN int  XMLCALL
 /*
  * Retrieve the userdata.
  */
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashLookup   (xmlHashTablePtr table,
                                         const xmlChar *name);
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashLookup2  (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2);
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashLookup3  (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
                                         const xmlChar *name3);
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashQLookup  (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *prefix);
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashQLookup2 (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *prefix,
                                         const xmlChar *name2,
                                         const xmlChar *prefix2);
-XMLPUBFUN void * XMLCALL                       
+XMLPUBFUN void * XMLCALL
                        xmlHashQLookup3 (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *prefix,
@@ -200,27 +200,27 @@ XMLPUBFUN void * XMLCALL
 /*
  * Helpers.
  */
-XMLPUBFUN xmlHashTablePtr XMLCALL              
+XMLPUBFUN xmlHashTablePtr XMLCALL
                        xmlHashCopy     (xmlHashTablePtr table,
                                         xmlHashCopier f);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlHashSize     (xmlHashTablePtr table);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHashScan     (xmlHashTablePtr table,
                                         xmlHashScanner f,
                                         void *data);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHashScan3    (xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
                                         const xmlChar *name3,
                                         xmlHashScanner f,
                                         void *data);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHashScanFull (xmlHashTablePtr table,
                                         xmlHashScannerFull f,
                                         void *data);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHashScanFull3(xmlHashTablePtr table,
                                         const xmlChar *name,
                                         const xmlChar *name2,
index 1d83482..0504e0c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Summary: lists interfaces
- * Description: this module implement the list support used in 
+ * Description: this module implement the list support used in
  * various place in the library.
  *
  * Copy: See Copyright for the status of this software.
@@ -55,76 +55,76 @@ typedef int (*xmlListWalker) (const void *data, const void *user);
 XMLPUBFUN xmlListPtr XMLCALL
                xmlListCreate           (xmlListDeallocator deallocator,
                                         xmlListDataCompare compare);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListDelete           (xmlListPtr l);
 
 /* Basic Operators */
-XMLPUBFUN void * XMLCALL               
+XMLPUBFUN void * XMLCALL
                xmlListSearch           (xmlListPtr l,
                                         void *data);
-XMLPUBFUN void * XMLCALL               
+XMLPUBFUN void * XMLCALL
                xmlListReverseSearch    (xmlListPtr l,
                                         void *data);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListInsert           (xmlListPtr l,
                                         void *data) ;
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListAppend           (xmlListPtr l,
                                         void *data) ;
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListRemoveFirst      (xmlListPtr l,
                                         void *data);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListRemoveLast       (xmlListPtr l,
                                         void *data);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListRemoveAll        (xmlListPtr l,
                                         void *data);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListClear            (xmlListPtr l);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListEmpty            (xmlListPtr l);
-XMLPUBFUN xmlLinkPtr XMLCALL   
+XMLPUBFUN xmlLinkPtr XMLCALL
                xmlListFront            (xmlListPtr l);
-XMLPUBFUN xmlLinkPtr XMLCALL   
+XMLPUBFUN xmlLinkPtr XMLCALL
                xmlListEnd              (xmlListPtr l);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListSize             (xmlListPtr l);
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListPopFront         (xmlListPtr l);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListPopBack          (xmlListPtr l);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListPushFront        (xmlListPtr l,
                                         void *data);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListPushBack         (xmlListPtr l,
                                         void *data);
 
 /* Advanced Operators */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListReverse          (xmlListPtr l);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListSort             (xmlListPtr l);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListWalk             (xmlListPtr l,
                                         xmlListWalker walker,
                                         const void *user);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListReverseWalk      (xmlListPtr l,
                                         xmlListWalker walker,
                                         const void *user);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlListMerge            (xmlListPtr l1,
                                         xmlListPtr l2);
-XMLPUBFUN xmlListPtr XMLCALL   
+XMLPUBFUN xmlListPtr XMLCALL
                xmlListDup              (const xmlListPtr old);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlListCopy             (xmlListPtr cur,
                                         const xmlListPtr old);
 /* Link operators */
-XMLPUBFUN void * XMLCALL          
+XMLPUBFUN void * XMLCALL
                xmlLinkGetData          (xmlLinkPtr lk);
 
 /* xmlListUnique() */
index 397bbba..abb4bf7 100644 (file)
@@ -31,6 +31,7 @@
  * macro used to provide portability of code to windows sockets
  * the value to be used when the socket is not valid
  */
+#undef  INVALID_SOCKET
 #define INVALID_SOCKET (-1)
 #endif
 
index 1d8ac24..22b8fb4 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Author: Daniel Veillard
  */
+
 #ifndef __NANO_HTTP_H__
 #define __NANO_HTTP_H__
 
@@ -20,22 +20,22 @@ extern "C" {
 #endif
 XMLPUBFUN void XMLCALL
        xmlNanoHTTPInit         (void);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlNanoHTTPCleanup      (void);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlNanoHTTPScanProxy    (const char *URL);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlNanoHTTPFetch        (const char *URL,
                                 const char *filename,
                                 char **contentType);
-XMLPUBFUN void * XMLCALL       
+XMLPUBFUN void * XMLCALL
        xmlNanoHTTPMethod       (const char *URL,
                                 const char *method,
                                 const char *input,
                                 char **contentType,
                                 const char *headers,
                                 int   ilen);
-XMLPUBFUN void * XMLCALL       
+XMLPUBFUN void * XMLCALL
        xmlNanoHTTPMethodRedir  (const char *URL,
                                 const char *method,
                                 const char *input,
@@ -43,16 +43,16 @@ XMLPUBFUN void * XMLCALL
                                 char **redir,
                                 const char *headers,
                                 int   ilen);
-XMLPUBFUN void * XMLCALL       
+XMLPUBFUN void * XMLCALL
        xmlNanoHTTPOpen         (const char *URL,
                                 char **contentType);
-XMLPUBFUN void * XMLCALL       
+XMLPUBFUN void * XMLCALL
        xmlNanoHTTPOpenRedir    (const char *URL,
                                 char **contentType,
                                 char **redir);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlNanoHTTPReturnCode   (void *ctx);
-XMLPUBFUN const char * XMLCALL 
+XMLPUBFUN const char * XMLCALL
        xmlNanoHTTPAuthHeader   (void *ctx);
 XMLPUBFUN const char * XMLCALL
        xmlNanoHTTPRedir        (void *ctx);
@@ -62,16 +62,16 @@ XMLPUBFUN const char * XMLCALL
        xmlNanoHTTPEncoding     (void *ctx);
 XMLPUBFUN const char * XMLCALL
        xmlNanoHTTPMimeType     (void *ctx);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlNanoHTTPRead         (void *ctx,
                                 void *dest,
                                 int len);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlNanoHTTPSave         (void *ctxt,
                                 const char *filename);
 #endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlNanoHTTPClose        (void *ctx);
 #ifdef __cplusplus
 }
index 04edb9d..3f5730d 100644 (file)
@@ -80,7 +80,7 @@ struct _xmlParserInput {
  * xmlParserNodeInfo:
  *
  * The parser can be asked to collect Node informations, i.e. at what
- * place in the file they were detected. 
+ * place in the file they were detected.
  * NOTE: This is off by default and not very well tested.
  */
 typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
@@ -125,9 +125,9 @@ typedef enum {
     XML_PARSER_ENTITY_VALUE,   /* within an entity value in a decl */
     XML_PARSER_ATTRIBUTE_VALUE,        /* within an attribute value */
     XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */
-    XML_PARSER_EPILOG,                 /* the Misc* after the last end tag */
+    XML_PARSER_EPILOG,         /* the Misc* after the last end tag */
     XML_PARSER_IGNORE,         /* within an IGNORED section */
-    XML_PARSER_PUBLIC_LITERAL  /* within a PUBLIC value */
+    XML_PARSER_PUBLIC_LITERAL  /* within a PUBLIC value */
 } xmlParserInputState;
 
 /**
@@ -221,7 +221,7 @@ struct _xmlParserCtxt {
     xmlValidCtxt        vctxt;        /* The validity context */
 
     xmlParserInputState instate;      /* current type of input */
-    int                 token;        /* next char look-ahead */    
+    int                 token;        /* next char look-ahead */
 
     char           *directory;        /* the data directory */
 
@@ -310,6 +310,7 @@ struct _xmlParserCtxt {
     xmlParserNodeInfo *nodeInfoTab;   /* array of nodeInfos */
 
     int                input_id;      /* we need to label inputs */
+    unsigned long      sizeentcopy;   /* volume of entity copy */
 };
 
 /**
@@ -400,8 +401,8 @@ typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx,
 /**
  * entityDeclSAXFunc:
  * @ctx:  the user data (XML parser context)
- * @name:  the entity name 
- * @type:  the entity type 
+ * @name:  the entity name
+ * @type:  the entity type
  * @publicId: The public ID of the entity
  * @systemId: The system ID of the entity
  * @content: the entity value (without processing).
@@ -431,8 +432,8 @@ typedef void (*notationDeclSAXFunc)(void *ctx,
  * attributeDeclSAXFunc:
  * @ctx:  the user data (XML parser context)
  * @elem:  the name of the element
- * @fullname:  the attribute name 
- * @type:  the attribute type 
+ * @fullname:  the attribute name
+ * @type:  the attribute type
  * @def:  the type of default value
  * @defaultValue: the attribute default value
  * @tree:  the tree of enumerated value set
@@ -449,8 +450,8 @@ typedef void (*attributeDeclSAXFunc)(void *ctx,
 /**
  * elementDeclSAXFunc:
  * @ctx:  the user data (XML parser context)
- * @name:  the element name 
- * @type:  the element type 
+ * @name:  the element name
+ * @type:  the element type
  * @content: the element value tree
  *
  * An element definition has been parsed.
@@ -537,7 +538,7 @@ typedef void (*attributeSAXFunc) (void *ctx,
  * @ctx:  the user data (XML parser context)
  * @name:  The entity name
  *
- * Called when an entity reference is detected. 
+ * Called when an entity reference is detected.
  */
 typedef void (*referenceSAXFunc) (void *ctx,
                                const xmlChar *name);
@@ -601,7 +602,7 @@ typedef void (*cdataBlockSAXFunc) (
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format a warning messages, callback.
  */
 typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
@@ -611,7 +612,7 @@ typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format an error messages, callback.
  */
 typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
@@ -621,7 +622,7 @@ typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
  * @ctx:  an XML parser context
  * @msg:  the message to display/transmit
  * @...:  extra parameters for the message display
- * 
+ *
  * Display and format fatal error messages, callback.
  * Note: so far fatalError() SAX callbacks are not used, error()
  *       get all the callbacks for errors.
@@ -697,7 +698,7 @@ typedef void (*startElementNsSAX2Func) (void *ctx,
                                        int nb_attributes,
                                        int nb_defaulted,
                                        const xmlChar **attributes);
+
 /**
  * endElementNsSAX2Func:
  * @ctx:  the user data (XML parser context)
@@ -792,7 +793,7 @@ struct _xmlSAXHandlerV1 {
  * xmlExternalEntityLoader:
  * @URL: The System ID of the resource requested
  * @ID: The Public ID of the resource requested
- * @context: the XML parser context 
+ * @context: the XML parser context
  *
  * External entity loaders types.
  *
@@ -818,18 +819,18 @@ extern "C" {
 /*
  * Init/Cleanup
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlInitParser           (void);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlCleanupParser        (void);
 
 /*
  * Input functions
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParserInputRead      (xmlParserInputPtr in,
                                         int len);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParserInputGrow      (xmlParserInputPtr in,
                                         int len);
 
@@ -837,101 +838,101 @@ XMLPUBFUN int XMLCALL
  * Basic parsing Interfaces
  */
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlParseDoc             (const xmlChar *cur);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlParseFile            (const char *filename);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlParseMemory          (const char *buffer,
                                         int size);
 #endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSubstituteEntitiesDefault(int val);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlKeepBlanksDefault    (int val);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlStopParser           (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlPedanticParserDefault(int val);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlLineNumbersDefault   (int val);
 
 #ifdef LIBXML_SAX1_ENABLED
 /*
- * Recovery mode 
+ * Recovery mode
  */
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlRecoverDoc           (const xmlChar *cur);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlRecoverMemory        (const char *buffer,
                                         int size);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlRecoverFile          (const char *filename);
 #endif /* LIBXML_SAX1_ENABLED */
 
 /*
  * Less common routines and SAX interfaces
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParseDocument        (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParseExtParsedEnt    (xmlParserCtxtPtr ctxt);
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAXUserParseFile     (xmlSAXHandlerPtr sax,
                                         void *user_data,
                                         const char *filename);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSAXUserParseMemory   (xmlSAXHandlerPtr sax,
                                         void *user_data,
                                         const char *buffer,
                                         int size);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseDoc          (xmlSAXHandlerPtr sax,
                                         const xmlChar *cur,
                                         int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseMemory       (xmlSAXHandlerPtr sax,
                                         const char *buffer,
-                                        int size,
+                                        int size,
                                         int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
                                         const char *buffer,
-                                        int size,
+                                        int size,
                                         int recovery,
                                         void *data);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseFile         (xmlSAXHandlerPtr sax,
                                         const char *filename,
                                         int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseFileWithData (xmlSAXHandlerPtr sax,
                                         const char *filename,
                                         int recovery,
                                         void *data);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlSAXParseEntity       (xmlSAXHandlerPtr sax,
                                         const char *filename);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlParseEntity          (const char *filename);
 #endif /* LIBXML_SAX1_ENABLED */
 
 #ifdef LIBXML_VALID_ENABLED
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlSAXParseDTD          (xmlSAXHandlerPtr sax,
                                         const xmlChar *ExternalID,
                                         const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlParseDTD             (const xmlChar *ExternalID,
                                         const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlIOParseDTD           (xmlSAXHandlerPtr sax,
                                         xmlParserInputBufferPtr input,
                                         xmlCharEncoding enc);
 #endif /* LIBXML_VALID_ENABLE */
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
                xmlParseBalancedChunkMemory(xmlDocPtr doc,
                                         xmlSAXHandlerPtr sax,
                                         void *user_data,
@@ -946,7 +947,7 @@ XMLPUBFUN xmlParserErrors XMLCALL
                                         int options,
                                         xmlNodePtr *lst);
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
                      xmlSAXHandlerPtr sax,
                      void *user_data,
@@ -954,7 +955,7 @@ XMLPUBFUN int XMLCALL
                      const xmlChar *string,
                      xmlNodePtr *lst,
                      int recover);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParseExternalEntity  (xmlDocPtr doc,
                                         xmlSAXHandlerPtr sax,
                                         void *user_data,
@@ -963,7 +964,7 @@ XMLPUBFUN int XMLCALL
                                         const xmlChar *ID,
                                         xmlNodePtr *lst);
 #endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx,
                                         const xmlChar *URL,
                                         const xmlChar *ID,
@@ -972,35 +973,35 @@ XMLPUBFUN int XMLCALL
 /*
  * Parser contexts handling.
  */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL     
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                xmlNewParserCtxt        (void);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlInitParserCtxt       (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlClearParserCtxt      (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeParserCtxt       (xmlParserCtxtPtr ctxt);
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt,
                                         const xmlChar* buffer,
                                         const char *filename);
 #endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                xmlCreateDocParserCtxt  (const xmlChar *cur);
 
 #ifdef LIBXML_LEGACY_ENABLED
 /*
  * Reading/setting optional parsing features.
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlGetFeaturesList      (int *len,
                                         const char **result);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlGetFeature           (xmlParserCtxtPtr ctxt,
                                         const char *name,
                                         void *result);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSetFeature           (xmlParserCtxtPtr ctxt,
                                         const char *name,
                                         void *value);
@@ -1010,13 +1011,13 @@ XMLPUBFUN int XMLCALL
 /*
  * Interfaces for the Push mode.
  */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
                                         void *user_data,
                                         const char *chunk,
                                         int size,
                                         const char *filename);
-XMLPUBFUN int XMLCALL           
+XMLPUBFUN int XMLCALL
                xmlParseChunk           (xmlParserCtxtPtr ctxt,
                                         const char *chunk,
                                         int size,
@@ -1027,7 +1028,7 @@ XMLPUBFUN int XMLCALL
  * Special I/O mode.
  */
 
-XMLPUBFUN xmlParserCtxtPtr XMLCALL 
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                xmlCreateIOParserCtxt   (xmlSAXHandlerPtr sax,
                                         void *user_data,
                                         xmlInputReadCallback   ioread,
@@ -1035,7 +1036,7 @@ XMLPUBFUN xmlParserCtxtPtr XMLCALL
                                         void *ioctx,
                                         xmlCharEncoding enc);
 
-XMLPUBFUN xmlParserInputPtr XMLCALL 
+XMLPUBFUN xmlParserInputPtr XMLCALL
                xmlNewIOInputStream     (xmlParserCtxtPtr ctxt,
                                         xmlParserInputBufferPtr input,
                                         xmlCharEncoding enc);
@@ -1046,14 +1047,14 @@ XMLPUBFUN xmlParserInputPtr XMLCALL
 XMLPUBFUN const xmlParserNodeInfo* XMLCALL
                xmlParserFindNodeInfo   (const xmlParserCtxtPtr ctxt,
                                         const xmlNodePtr node);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlInitNodeInfoSeq      (xmlParserNodeInfoSeqPtr seq);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlClearNodeInfoSeq     (xmlParserNodeInfoSeqPtr seq);
-XMLPUBFUN unsigned long XMLCALL 
+XMLPUBFUN unsigned long XMLCALL
                xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
                                          const xmlNodePtr node);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlParserAddNodeInfo    (xmlParserCtxtPtr ctxt,
                                         const xmlParserNodeInfoPtr info);
 
@@ -1061,7 +1062,7 @@ XMLPUBFUN void XMLCALL
  * External entities handling actually implemented in xmlIO.
  */
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetExternalEntityLoader(xmlExternalEntityLoader f);
 XMLPUBFUN xmlExternalEntityLoader XMLCALL
                xmlGetExternalEntityLoader(void);
@@ -1109,7 +1110,8 @@ typedef enum {
     XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */
     XML_PARSE_HUGE      = 1<<19,/* relax any hardcoded limit from the parser */
     XML_PARSE_OLDSAX    = 1<<20,/* parse using SAX2 interface before 2.7.0 */
-    XML_PARSE_IGNORE_ENC= 1<<21 /* ignore internal document encoding hint */
+    XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */
+    XML_PARSE_BIG_LINES = 1<<22 /* Store big lines numbers in text PSVI field */
 } xmlParserOption;
 
 XMLPUBFUN void XMLCALL
index a5e75b5..6065320 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Summary: internals routines exported by the parser.
+ * Summary: internals routines and limits exported by the parser.
  * Description: this module exports a number of internal parsing routines
  *              they are not really all intended for applications but
  *              can prove useful doing low level processing.
@@ -36,10 +36,43 @@ XMLPUBVAR unsigned int xmlParserMaxDepth;
  * Maximum size allowed for a single text node when building a tree.
  * This is not a limitation of the parser but a safety boundary feature,
  * use XML_PARSE_HUGE option to override it.
+ * Introduced in 2.9.0
  */
 #define XML_MAX_TEXT_LENGTH 10000000
 
 /**
+ * XML_MAX_NAME_LENGTH:
+ *
+ * Maximum size allowed for a markup identitier
+ * This is not a limitation of the parser but a safety boundary feature,
+ * use XML_PARSE_HUGE option to override it.
+ * Note that with the use of parsing dictionaries overriding the limit
+ * may result in more runtime memory usage in face of "unfriendly' content
+ * Introduced in 2.9.0
+ */
+#define XML_MAX_NAME_LENGTH 50000
+
+/**
+ * XML_MAX_DICTIONARY_LIMIT:
+ *
+ * Maximum size allowed by the parser for a dictionary by default
+ * This is not a limitation of the parser but a safety boundary feature,
+ * use XML_PARSE_HUGE option to override it.
+ * Introduced in 2.9.0
+ */
+#define XML_MAX_DICTIONARY_LIMIT 10000000
+
+/**
+ * XML_MAX_LOOKUP_LIMIT:
+ *
+ * Maximum size allowed by the parser for ahead lookup
+ * This is an upper boundary enforced by the parser to avoid bad
+ * behaviour on "unfriendly' content
+ * Introduced in 2.9.0
+ */
+#define XML_MAX_LOOKUP_LIMIT 10000000
+
+/**
  * XML_MAX_NAMELEN:
  *
  * Identifiers can be longer, but this will be more costly
@@ -57,7 +90,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth;
 
 /************************************************************************
  *                                                                     *
- * UNICODE version of the macros.                                              *
+ * UNICODE version of the macros.                                      *
  *                                                                     *
  ************************************************************************/
 /**
@@ -153,7 +186,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth;
  *
  * Always false (all combining chars > 0xff)
  */
-#define IS_COMBINING_CH(c) 0 
+#define IS_COMBINING_CH(c) 0
 
 /**
  * IS_EXTENDER:
@@ -194,7 +227,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth;
  * Macro to check the following production in the XML spec:
  *
  *
- * [84] Letter ::= BaseChar | Ideographic 
+ * [84] Letter ::= BaseChar | Ideographic
  */
 #define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
 
@@ -251,7 +284,7 @@ XMLPUBVAR unsigned int xmlParserMaxDepth;
  *
  * Skips the end of line chars.
  */
-#define SKIP_EOL(p)                                                    \
+#define SKIP_EOL(p)                                                    \
     if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; }                 \
     if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
 
@@ -288,25 +321,25 @@ XMLPUBFUN int XMLCALL                   xmlIsLetter     (int c);
 /**
  * Parser context.
  */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL     
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                        xmlCreateFileParserCtxt (const char *filename);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL     
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                        xmlCreateURLParserCtxt  (const char *filename,
                                                 int options);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL     
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                        xmlCreateMemoryParserCtxt(const char *buffer,
                                                 int size);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL     
+XMLPUBFUN xmlParserCtxtPtr XMLCALL
                        xmlCreateEntityParserCtxt(const xmlChar *URL,
                                                 const xmlChar *ID,
                                                 const xmlChar *base);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlSwitchEncoding       (xmlParserCtxtPtr ctxt,
                                                 xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlSwitchToEncoding     (xmlParserCtxtPtr ctxt,
                                         xmlCharEncodingHandlerPtr handler);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlSwitchInputEncoding  (xmlParserCtxtPtr ctxt,
                                                 xmlParserInputPtr input,
                                         xmlCharEncodingHandlerPtr handler);
@@ -324,29 +357,29 @@ XMLPUBFUN void XMLCALL
 /**
  * Input Streams.
  */
-XMLPUBFUN xmlParserInputPtr XMLCALL    
+XMLPUBFUN xmlParserInputPtr XMLCALL
                        xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
                                                 const xmlChar *buffer);
-XMLPUBFUN xmlParserInputPtr XMLCALL    
+XMLPUBFUN xmlParserInputPtr XMLCALL
                        xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
                                                 xmlEntityPtr entity);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlPushInput            (xmlParserCtxtPtr ctxt,
                                                 xmlParserInputPtr input);
-XMLPUBFUN xmlChar XMLCALL                      
+XMLPUBFUN xmlChar XMLCALL
                        xmlPopInput             (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlFreeInputStream      (xmlParserInputPtr input);
-XMLPUBFUN xmlParserInputPtr XMLCALL    
+XMLPUBFUN xmlParserInputPtr XMLCALL
                        xmlNewInputFromFile     (xmlParserCtxtPtr ctxt,
                                                 const char *filename);
-XMLPUBFUN xmlParserInputPtr XMLCALL    
+XMLPUBFUN xmlParserInputPtr XMLCALL
                        xmlNewInputStream       (xmlParserCtxtPtr ctxt);
 
 /**
  * Namespaces.
  */
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlSplitQName           (xmlParserCtxtPtr ctxt,
                                                 const xmlChar *name,
                                                 xmlChar **prefix);
@@ -354,112 +387,112 @@ XMLPUBFUN xmlChar * XMLCALL
 /**
  * Generic production rules.
  */
-XMLPUBFUN const xmlChar * XMLCALL              
+XMLPUBFUN const xmlChar * XMLCALL
                        xmlParseName            (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseNmtoken         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseEntityValue     (xmlParserCtxtPtr ctxt,
                                                 xmlChar **orig);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseAttValue        (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseSystemLiteral   (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParsePubidLiteral    (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseCharData        (xmlParserCtxtPtr ctxt,
                                                 int cdata);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseExternalID      (xmlParserCtxtPtr ctxt,
                                                 xmlChar **publicID,
                                                 int strict);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseComment         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN const xmlChar * XMLCALL              
+XMLPUBFUN const xmlChar * XMLCALL
                        xmlParsePITarget        (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParsePI              (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseNotationDecl    (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseEntityDecl      (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseDefaultDecl     (xmlParserCtxtPtr ctxt,
                                                 xmlChar **value);
-XMLPUBFUN xmlEnumerationPtr XMLCALL    
+XMLPUBFUN xmlEnumerationPtr XMLCALL
                        xmlParseNotationType    (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlEnumerationPtr XMLCALL    
+XMLPUBFUN xmlEnumerationPtr XMLCALL
                        xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseEnumeratedType  (xmlParserCtxtPtr ctxt,
                                                 xmlEnumerationPtr *tree);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseAttributeType   (xmlParserCtxtPtr ctxt,
                                                 xmlEnumerationPtr *tree);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                        xmlParseElementMixedContentDecl
                                                (xmlParserCtxtPtr ctxt,
                                                 int inputchk);
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                        xmlParseElementChildrenContentDecl
                                                (xmlParserCtxtPtr ctxt,
                                                 int inputchk);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
                                                 const xmlChar *name,
                                                 xmlElementContentPtr *result);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseElementDecl     (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseMarkupDecl      (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseCharRef         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlEntityPtr XMLCALL         
+XMLPUBFUN xmlEntityPtr XMLCALL
                        xmlParseEntityRef       (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseReference       (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParsePEReference     (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseDocTypeDecl     (xmlParserCtxtPtr ctxt);
 #ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN const xmlChar * XMLCALL              
+XMLPUBFUN const xmlChar * XMLCALL
                        xmlParseAttribute       (xmlParserCtxtPtr ctxt,
                                                 xmlChar **value);
-XMLPUBFUN const xmlChar * XMLCALL              
+XMLPUBFUN const xmlChar * XMLCALL
                        xmlParseStartTag        (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseEndTag          (xmlParserCtxtPtr ctxt);
 #endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseCDSect          (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseContent         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseElement         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseVersionNum      (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseVersionInfo     (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseEncName         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN const xmlChar * XMLCALL              
+XMLPUBFUN const xmlChar * XMLCALL
                        xmlParseEncodingDecl    (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                        xmlParseSDDecl          (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseXMLDecl         (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseTextDecl        (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseMisc            (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlParseExternalSubset  (xmlParserCtxtPtr ctxt,
                                                 const xmlChar *ExternalID,
-                                                const xmlChar *SystemID); 
+                                                const xmlChar *SystemID);
 /**
  * XML_SUBSTITUTE_NONE:
  *
@@ -483,7 +516,7 @@ XMLPUBFUN void XMLCALL
  *
  * Both general and parameter entities need to be substituted.
  */
-#define XML_SUBSTITUTE_BOTH    3
+#define XML_SUBSTITUTE_BOTH    3
 
 XMLPUBFUN xmlChar * XMLCALL
                xmlStringDecodeEntities         (xmlParserCtxtPtr ctxt,
@@ -563,21 +596,21 @@ XMLPUBFUN htmlParserCtxtPtr XMLCALL       htmlCreateFileParserCtxt(const char *filenam
 typedef        void    (*xmlEntityReferenceFunc)       (xmlEntityPtr ent,
                                                 xmlNodePtr firstNode,
                                                 xmlNodePtr lastNode);
-  
+
 XMLPUBFUN void XMLCALL         xmlSetEntityReferenceFunc       (xmlEntityReferenceFunc func);
 
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlParseQuotedString    (xmlParserCtxtPtr ctxt);
 XMLPUBFUN void XMLCALL
                         xmlParseNamespace       (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlNamespaceParseNSDef  (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlScanName             (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
 XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL            
+XMLPUBFUN xmlChar * XMLCALL
                        xmlNamespaceParseQName  (xmlParserCtxtPtr ctxt,
                                                 xmlChar **prefix);
 /**
@@ -590,7 +623,7 @@ XMLPUBFUN xmlChar * XMLCALL
                                                 xmlChar end,
                                                 xmlChar  end2,
                                                 xmlChar end3);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                        xmlHandleEntity         (xmlParserCtxtPtr ctxt,
                                                 xmlEntityPtr entity);
 
index bdb0a7d..f269c9e 100644 (file)
@@ -32,7 +32,9 @@ typedef xmlRelaxNG *xmlRelaxNGPtr;
  *
  * Signature of an error callback from a Relax-NG validation
  */
-typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
+typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx,
+                                                     const char *msg,
+                                                     ...) LIBXML_ATTR_FORMAT(2,3);
 
 /**
  * xmlRelaxNGValidityWarningFunc:
@@ -42,7 +44,9 @@ typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx, const char *msg
  *
  * Signature of a warning callback from a Relax-NG validation
  */
-typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
+typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx,
+                                                       const char *msg,
+                                                       ...) LIBXML_ATTR_FORMAT(2,3);
 
 /**
  * A schemas validation context
index b68a6e1..4f0ca9a 100644 (file)
@@ -104,8 +104,8 @@ typedef enum {
     XML_SCHEMA_TYPE_IDC_UNIQUE,
     XML_SCHEMA_TYPE_IDC_KEY,
     XML_SCHEMA_TYPE_IDC_KEYREF,
-    XML_SCHEMA_TYPE_PARTICLE = 25, 
-    XML_SCHEMA_TYPE_ATTRIBUTE_USE, 
+    XML_SCHEMA_TYPE_PARTICLE = 25,
+    XML_SCHEMA_TYPE_ATTRIBUTE_USE,
     XML_SCHEMA_FACET_MININCLUSIVE = 1000,
     XML_SCHEMA_FACET_MINEXCLUSIVE,
     XML_SCHEMA_FACET_MAXINCLUSIVE,
index f442826..364eaec 100644 (file)
@@ -69,17 +69,17 @@ typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
 /*
  * Interfaces for parsing.
  */
-XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL 
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
            xmlSchematronNewParserCtxt  (const char *URL);
-XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL 
+XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
            xmlSchematronNewMemParserCtxt(const char *buffer,
                                         int size);
 XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
            xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
            xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt);
 /*****
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
            xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
                                         xmlSchematronValidityErrorFunc err,
                                         xmlSchematronValidityWarningFunc warn,
@@ -92,9 +92,9 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN int XMLCALL
                xmlSchematronIsValid    (xmlSchematronValidCtxtPtr ctxt);
  *****/
-XMLPUBFUN xmlSchematronPtr XMLCALL     
+XMLPUBFUN xmlSchematronPtr XMLCALL
            xmlSchematronParse          (xmlSchematronParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
            xmlSchematronFree           (xmlSchematronPtr schema);
 /*
  * Interfaces for validating
@@ -105,7 +105,7 @@ XMLPUBFUN void XMLCALL
                                          xmlStructuredErrorFunc serror,
                                          void *ctx);
 /******
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
            xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt,
                                         xmlSchematronValidityErrorFunc err,
                                         xmlSchematronValidityWarningFunc warn,
@@ -125,12 +125,12 @@ XMLPUBFUN int XMLCALL
                                         xmlNodePtr elem);
  *******/
 
-XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL    
+XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL
            xmlSchematronNewValidCtxt   (xmlSchematronPtr schema,
-                                        int options);
-XMLPUBFUN void XMLCALL                 
+                                        int options);
+XMLPUBFUN void XMLCALL
            xmlSchematronFreeValidCtxt  (xmlSchematronValidCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
            xmlSchematronValidateDoc    (xmlSchematronValidCtxtPtr ctxt,
                                         xmlDocPtr instance);
 
index 2196f8d..2f90717 100644 (file)
@@ -13,6 +13,7 @@
 #define __XML_TREE_H__
 
 #include <stdio.h>
+#include <limits.h>
 #include <libxml/xmlversion.h>
 #include <libxml/xmlstring.h>
 
@@ -81,7 +82,8 @@ typedef enum {
 /**
  * xmlBuffer:
  *
- * A buffer structure.
+ * A buffer structure, this old construct is limited to 2GB and
+ * is being deprecated, use API with xmlBuf instead
  */
 typedef struct _xmlBuffer xmlBuffer;
 typedef xmlBuffer *xmlBufferPtr;
@@ -94,6 +96,41 @@ struct _xmlBuffer {
 };
 
 /**
+ * xmlBuf:
+ *
+ * A buffer structure, new one, the actual structure internals are not public
+ */
+
+typedef struct _xmlBuf xmlBuf;
+
+/**
+ * xmlBufPtr:
+ *
+ * A pointer to a buffer structure, the actual structure internals are not
+ * public
+ */
+
+typedef xmlBuf *xmlBufPtr;
+
+/*
+ * A few public routines for xmlBuf. As those are expected to be used
+ * mostly internally the bulk of the routines are internal in buf.h
+ */
+XMLPUBFUN xmlChar* XMLCALL       xmlBufContent (const xmlBuf* buf);
+XMLPUBFUN xmlChar* XMLCALL       xmlBufEnd      (xmlBufPtr buf);
+XMLPUBFUN size_t XMLCALL         xmlBufUse      (const xmlBufPtr buf);
+XMLPUBFUN size_t XMLCALL         xmlBufShrink  (xmlBufPtr buf, size_t len);
+
+/*
+ * LIBXML2_NEW_BUFFER:
+ *
+ * Macro used to express that the API use the new buffers for
+ * xmlParserInputBuffer and xmlOutputBuffer. The change was
+ * introduced in 2.9.0.
+ */
+#define LIBXML2_NEW_BUFFER
+
+/**
  * XML_XML_NAMESPACE:
  *
  * This is the namespace for the special xml: prefix predefined in the
@@ -480,7 +517,7 @@ struct _xmlNode {
 /**
  * XML_GET_LINE:
  *
- * Macro to extract the line number of an element node. 
+ * Macro to extract the line number of an element node.
  */
 #define XML_GET_LINE(n)                                                \
     (xmlGetLineNo(n))
@@ -523,7 +560,7 @@ struct _xmlDoc {
 
     /* End of common part */
     int             compression;/* level of zlib compression */
-    int             standalone; /* standalone document (no external refs) 
+    int             standalone; /* standalone document (no external refs)
                                     1 if standalone="yes"
                                     0 if standalone="no"
                                    -1 if there is no XML declaration
@@ -554,9 +591,9 @@ typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr;
 /**
  * xmlDOMWrapAcquireNsFunction:
  * @ctxt:  a DOM wrapper context
- * @node:  the context node (element or attribute) 
+ * @node:  the context node (element or attribute)
  * @nsName:  the requested namespace name
- * @nsPrefix:  the requested namespace prefix 
+ * @nsPrefix:  the requested namespace prefix
  *
  * A function called to acquire namespaces (xmlNs) from the wrapper.
  *
@@ -603,7 +640,7 @@ struct _xmlDOMWrapCtxt {
 /**
  * xmlRootNode:
  *
- * Macro for compatibility naming layer with libxml1. Maps 
+ * Macro for compatibility naming layer with libxml1. Maps
  * to "children".
  */
 #ifndef xmlRootNode
@@ -617,438 +654,450 @@ struct _xmlDOMWrapCtxt {
 /*
  * Some helper functions
  */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \
+    defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || \
+    defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || \
+    defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || \
+    defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 XMLPUBFUN int XMLCALL
                xmlValidateNCName       (const xmlChar *value,
                                         int space);
 #endif
 
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateQName        (const xmlChar *value,
                                         int space);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateName         (const xmlChar *value,
                                         int space);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNMToken      (const xmlChar *value,
                                         int space);
 #endif
 
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlBuildQName           (const xmlChar *ncname,
                                         const xmlChar *prefix,
                                         xmlChar *memory,
                                         int len);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlSplitQName2          (const xmlChar *name,
                                         xmlChar **prefix);
-XMLPUBFUN const xmlChar * XMLCALL      
+XMLPUBFUN const xmlChar * XMLCALL
                xmlSplitQName3          (const xmlChar *name,
                                         int *len);
 
 /*
- * Handling Buffers.
+ * Handling Buffers, the old ones see @xmlBuf for the new ones.
  */
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
-XMLPUBFUN xmlBufferAllocationScheme XMLCALL     
+XMLPUBFUN xmlBufferAllocationScheme XMLCALL
                xmlGetBufferAllocationScheme(void);
 
-XMLPUBFUN xmlBufferPtr XMLCALL 
+XMLPUBFUN xmlBufferPtr XMLCALL
                xmlBufferCreate         (void);
-XMLPUBFUN xmlBufferPtr XMLCALL 
+XMLPUBFUN xmlBufferPtr XMLCALL
                xmlBufferCreateSize     (size_t size);
-XMLPUBFUN xmlBufferPtr XMLCALL 
+XMLPUBFUN xmlBufferPtr XMLCALL
                xmlBufferCreateStatic   (void *mem,
                                         size_t size);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferResize         (xmlBufferPtr buf,
                                         unsigned int size);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlBufferFree           (xmlBufferPtr buf);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferDump           (FILE *file,
                                         xmlBufferPtr buf);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferAdd            (xmlBufferPtr buf,
                                         const xmlChar *str,
                                         int len);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferAddHead        (xmlBufferPtr buf,
                                         const xmlChar *str,
                                         int len);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferCat            (xmlBufferPtr buf,
                                         const xmlChar *str);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
                xmlBufferCCat           (xmlBufferPtr buf,
                                         const char *str);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferShrink         (xmlBufferPtr buf,
                                         unsigned int len);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlBufferGrow           (xmlBufferPtr buf,
                                         unsigned int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlBufferEmpty          (xmlBufferPtr buf);
-XMLPUBFUN const xmlChar* XMLCALL       
-               xmlBufferContent        (const xmlBufferPtr buf);
+XMLPUBFUN const xmlChar* XMLCALL
+               xmlBufferContent        (const xmlBuffer *buf);
 XMLPUBFUN xmlChar* XMLCALL
-               xmlBufferDetach         (const xmlBufferPtr buf);
-XMLPUBFUN void XMLCALL         
+               xmlBufferDetach         (xmlBufferPtr buf);
+XMLPUBFUN void XMLCALL
                xmlBufferSetAllocationScheme(xmlBufferPtr buf,
                                         xmlBufferAllocationScheme scheme);
-XMLPUBFUN int XMLCALL          
-               xmlBufferLength         (const xmlBufferPtr buf);
+XMLPUBFUN int XMLCALL
+               xmlBufferLength         (const xmlBuffer *buf);
 
 /*
  * Creating/freeing new structures.
  */
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlCreateIntSubset      (xmlDocPtr doc,
                                         const xmlChar *name,
                                         const xmlChar *ExternalID,
                                         const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlNewDtd               (xmlDocPtr doc,
                                         const xmlChar *name,
                                         const xmlChar *ExternalID,
                                         const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL    
-               xmlGetIntSubset         (xmlDocPtr doc);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN xmlDtdPtr XMLCALL
+               xmlGetIntSubset         (const xmlDoc *doc);
+XMLPUBFUN void XMLCALL
                xmlFreeDtd              (xmlDtdPtr cur);
 #ifdef LIBXML_LEGACY_ENABLED
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlNewGlobalNs          (xmlDocPtr doc,
                                         const xmlChar *href,
                                         const xmlChar *prefix);
 #endif /* LIBXML_LEGACY_ENABLED */
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlNewNs                (xmlNodePtr node,
                                         const xmlChar *href,
                                         const xmlChar *prefix);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeNs               (xmlNsPtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeNsList           (xmlNsPtr cur);
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlNewDoc               (const xmlChar *version);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeDoc              (xmlDocPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlNewDocProp           (xmlDocPtr doc,
                                         const xmlChar *name,
                                         const xmlChar *value);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
     defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlNewProp              (xmlNodePtr node,
                                         const xmlChar *name,
                                         const xmlChar *value);
 #endif
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlNewNsProp            (xmlNodePtr node,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *value);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlNewNsPropEatName     (xmlNodePtr node,
                                         xmlNsPtr ns,
                                         xmlChar *name,
                                         const xmlChar *value);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreePropList         (xmlAttrPtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeProp             (xmlAttrPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlCopyProp             (xmlNodePtr target,
                                         xmlAttrPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlCopyPropList         (xmlNodePtr target,
                                         xmlAttrPtr cur);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlDtdPtr XMLCALL    
+XMLPUBFUN xmlDtdPtr XMLCALL
                xmlCopyDtd              (xmlDtdPtr dtd);
 #endif /* LIBXML_TREE_ENABLED */
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlDocPtr XMLCALL    
+XMLPUBFUN xmlDocPtr XMLCALL
                xmlCopyDoc              (xmlDocPtr doc,
                                         int recursive);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
 /*
  * Creating new nodes.
  */
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocNode           (xmlDocPtr doc,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocNodeEatName    (xmlDocPtr doc,
                                         xmlNsPtr ns,
                                         xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewNode              (xmlNsPtr ns,
                                         const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewNodeEatName       (xmlNsPtr ns,
                                         xmlChar *name);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewChild             (xmlNodePtr parent,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *content);
 #endif
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlNewDocText           (xmlDocPtr doc,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlNewDocText           (const xmlDoc *doc,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewText              (const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocPI             (xmlDocPtr doc,
                                         const xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewPI                (const xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocTextLen        (xmlDocPtr doc,
                                         const xmlChar *content,
                                         int len);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewTextLen           (const xmlChar *content,
                                         int len);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocComment        (xmlDocPtr doc,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewComment           (const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewCDataBlock        (xmlDocPtr doc,
                                         const xmlChar *content,
                                         int len);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewCharRef           (xmlDocPtr doc,
                                         const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlNewReference         (xmlDocPtr doc,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlNewReference         (const xmlDoc *doc,
                                         const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlCopyNode             (const xmlNodePtr node,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlCopyNode             (xmlNodePtr node,
                                         int recursive);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlDocCopyNode          (const xmlNodePtr node,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlDocCopyNode          (xmlNodePtr node,
                                         xmlDocPtr doc,
                                         int recursive);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlDocCopyNodeList      (xmlDocPtr doc,
-                                        const xmlNodePtr node);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlCopyNodeList         (const xmlNodePtr node);
+                                        xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlCopyNodeList         (xmlNodePtr node);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewTextChild         (xmlNodePtr parent,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocRawNode        (xmlDocPtr doc,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlNewDocFragment       (xmlDocPtr doc);
 #endif /* LIBXML_TREE_ENABLED */
 
 /*
  * Navigating.
  */
-XMLPUBFUN long XMLCALL         
-               xmlGetLineNo            (xmlNodePtr node);
+XMLPUBFUN long XMLCALL
+               xmlGetLineNo            (const xmlNode *node);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlGetNodePath          (xmlNodePtr node);
+XMLPUBFUN xmlChar * XMLCALL
+               xmlGetNodePath          (const xmlNode *node);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlDocGetRootElement    (xmlDocPtr doc);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlGetLastChild         (xmlNodePtr parent);
-XMLPUBFUN int XMLCALL          
-               xmlNodeIsText           (xmlNodePtr node);
-XMLPUBFUN int XMLCALL          
-               xmlIsBlankNode          (xmlNodePtr node);
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlDocGetRootElement    (const xmlDoc *doc);
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlGetLastChild         (const xmlNode *parent);
+XMLPUBFUN int XMLCALL
+               xmlNodeIsText           (const xmlNode *node);
+XMLPUBFUN int XMLCALL
+               xmlIsBlankNode          (const xmlNode *node);
 
 /*
  * Changing the structure.
  */
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlDocSetRootElement    (xmlDocPtr doc,
                                         xmlNodePtr root);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetName          (xmlNodePtr cur,
                                         const xmlChar *name);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlAddChild             (xmlNodePtr parent,
                                         xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlAddChildList         (xmlNodePtr parent,
                                         xmlNodePtr cur);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlReplaceNode          (xmlNodePtr old,
                                         xmlNodePtr cur);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
-    defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL   
+    defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlAddPrevSibling       (xmlNodePtr cur,
                                         xmlNodePtr elem);
 #endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlAddSibling           (xmlNodePtr cur,
                                         xmlNodePtr elem);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlAddNextSibling       (xmlNodePtr cur,
                                         xmlNodePtr elem);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlUnlinkNode           (xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL   
+XMLPUBFUN xmlNodePtr XMLCALL
                xmlTextMerge            (xmlNodePtr first,
                                         xmlNodePtr second);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlTextConcat           (xmlNodePtr node,
                                         const xmlChar *content,
                                         int len);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeNodeList         (xmlNodePtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeNode             (xmlNodePtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetTreeDoc           (xmlNodePtr tree,
                                         xmlDocPtr doc);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetListDoc           (xmlNodePtr list,
                                         xmlDocPtr doc);
 /*
  * Namespaces.
  */
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlSearchNs             (xmlDocPtr doc,
                                         xmlNodePtr node,
                                         const xmlChar *nameSpace);
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlSearchNsByHref       (xmlDocPtr doc,
                                         xmlNodePtr node,
                                         const xmlChar *href);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlNsPtr * XMLCALL   
-               xmlGetNsList            (xmlDocPtr doc,
-                                        xmlNodePtr node);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \
+    defined(LIBXML_SCHEMAS_ENABLED)
+XMLPUBFUN xmlNsPtr * XMLCALL
+               xmlGetNsList            (const xmlDoc *doc,
+                                        const xmlNode *node);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */
 
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetNs                (xmlNodePtr node,
                                         xmlNsPtr ns);
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlCopyNamespace        (xmlNsPtr cur);
-XMLPUBFUN xmlNsPtr XMLCALL     
+XMLPUBFUN xmlNsPtr XMLCALL
                xmlCopyNamespaceList    (xmlNsPtr cur);
 
 /*
  * Changing the content.
  */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
-XMLPUBFUN xmlAttrPtr XMLCALL   
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \
+    defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlSetProp              (xmlNodePtr node,
                                         const xmlChar *name,
                                         const xmlChar *value);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlSetNsProp            (xmlNodePtr node,
                                         xmlNsPtr ns,
                                         const xmlChar *name,
                                         const xmlChar *value);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlGetNoNsProp          (xmlNodePtr node,
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \
+         defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+XMLPUBFUN xmlChar * XMLCALL
+               xmlGetNoNsProp          (const xmlNode *node,
                                         const xmlChar *name);
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlGetProp              (xmlNodePtr node,
+XMLPUBFUN xmlChar * XMLCALL
+               xmlGetProp              (const xmlNode *node,
                                         const xmlChar *name);
-XMLPUBFUN xmlAttrPtr XMLCALL   
-               xmlHasProp              (xmlNodePtr node,
+XMLPUBFUN xmlAttrPtr XMLCALL
+               xmlHasProp              (const xmlNode *node,
                                         const xmlChar *name);
-XMLPUBFUN xmlAttrPtr XMLCALL   
-               xmlHasNsProp            (xmlNodePtr node,
+XMLPUBFUN xmlAttrPtr XMLCALL
+               xmlHasNsProp            (const xmlNode *node,
                                         const xmlChar *name,
                                         const xmlChar *nameSpace);
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlGetNsProp            (xmlNodePtr node,
+XMLPUBFUN xmlChar * XMLCALL
+               xmlGetNsProp            (const xmlNode *node,
                                         const xmlChar *name,
                                         const xmlChar *nameSpace);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlStringGetNodeList    (xmlDocPtr doc,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlStringGetNodeList    (const xmlDoc *doc,
                                         const xmlChar *value);
-XMLPUBFUN xmlNodePtr XMLCALL   
-               xmlStringLenGetNodeList (xmlDocPtr doc,
+XMLPUBFUN xmlNodePtr XMLCALL
+               xmlStringLenGetNodeList (const xmlDoc *doc,
                                         const xmlChar *value,
                                         int len);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlNodeListGetString    (xmlDocPtr doc,
-                                        xmlNodePtr list,
+                                        const xmlNode *list,
                                         int inLine);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlNodeListGetRawString (xmlDocPtr doc,
-                                        xmlNodePtr list,
+XMLPUBFUN xmlChar * XMLCALL
+               xmlNodeListGetRawString (const xmlDoc *doc,
+                                        const xmlNode *list,
                                         int inLine);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetContent       (xmlNodePtr cur,
                                         const xmlChar *content);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetContentLen    (xmlNodePtr cur,
                                         const xmlChar *content,
                                         int len);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeAddContent       (xmlNodePtr cur,
                                         const xmlChar *content);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeAddContentLen    (xmlNodePtr cur,
                                         const xmlChar *content,
                                         int len);
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlNodeGetContent       (xmlNodePtr cur);
+XMLPUBFUN xmlChar * XMLCALL
+               xmlNodeGetContent       (const xmlNode *cur);
+
 XMLPUBFUN int XMLCALL
                xmlNodeBufGetContent    (xmlBufferPtr buffer,
-                                        xmlNodePtr cur);
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlNodeGetLang          (xmlNodePtr cur);
-XMLPUBFUN int XMLCALL          
-               xmlNodeGetSpacePreserve (xmlNodePtr cur);
+                                        const xmlNode *cur);
+XMLPUBFUN int XMLCALL
+               xmlBufGetNodeContent    (xmlBufPtr buf,
+                                        const xmlNode *cur);
+
+XMLPUBFUN xmlChar * XMLCALL
+               xmlNodeGetLang          (const xmlNode *cur);
+XMLPUBFUN int XMLCALL
+               xmlNodeGetSpacePreserve (const xmlNode *cur);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetLang          (xmlNodePtr cur,
                                         const xmlChar *lang);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetSpacePreserve (xmlNodePtr cur,
                                         int val);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlNodeGetBase          (xmlDocPtr doc,
-                                        xmlNodePtr cur);
+XMLPUBFUN xmlChar * XMLCALL
+               xmlNodeGetBase          (const xmlDoc *doc,
+                                        const xmlNode *cur);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeSetBase          (xmlNodePtr cur,
                                         const xmlChar *uri);
 #endif
@@ -1056,14 +1105,14 @@ XMLPUBFUN void XMLCALL
 /*
  * Removing content.
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlRemoveProp           (xmlAttrPtr cur);
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlUnsetNsProp          (xmlNodePtr node,
                                         xmlNsPtr ns,
                                         const xmlChar *name);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlUnsetProp            (xmlNodePtr node,
                                         const xmlChar *name);
 #endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
@@ -1071,13 +1120,13 @@ XMLPUBFUN int XMLCALL
 /*
  * Internal, don't use.
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlBufferWriteCHAR      (xmlBufferPtr buf,
                                         const xmlChar *string);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlBufferWriteChar      (xmlBufferPtr buf,
                                         const char *string);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlBufferWriteQuotedString(xmlBufferPtr buf,
                                         const xmlChar *string);
 
@@ -1092,7 +1141,7 @@ XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf,
 /*
  * Namespace handling.
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlReconciliateNs       (xmlDocPtr doc,
                                         xmlNodePtr tree);
 #endif
@@ -1101,61 +1150,67 @@ XMLPUBFUN int XMLCALL
 /*
  * Saving.
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlDocDumpFormatMemory  (xmlDocPtr cur,
                                         xmlChar **mem,
                                         int *size,
                                         int format);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlDocDumpMemory        (xmlDocPtr cur,
                                         xmlChar **mem,
                                         int *size);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlDocDumpMemoryEnc     (xmlDocPtr out_doc,
                                         xmlChar **doc_txt_ptr,
                                         int * doc_txt_len,
                                         const char *txt_encoding);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
                                         xmlChar **doc_txt_ptr,
                                         int * doc_txt_len,
                                         const char *txt_encoding,
                                         int format);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlDocFormatDump        (FILE *f,
                                         xmlDocPtr cur,
                                         int format);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
                xmlDocDump              (FILE *f,
                                         xmlDocPtr cur);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlElemDump             (FILE *f,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSaveFile             (const char *filename,
                                         xmlDocPtr cur);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSaveFormatFile       (const char *filename,
                                         xmlDocPtr cur,
                                         int format);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN size_t XMLCALL
+               xmlBufNodeDump          (xmlBufPtr buf,
+                                        xmlDocPtr doc,
+                                        xmlNodePtr cur,
+                                        int level,
+                                        int format);
+XMLPUBFUN int XMLCALL
                xmlNodeDump             (xmlBufferPtr buf,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur,
                                         int level,
                                         int format);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSaveFileTo           (xmlOutputBufferPtr buf,
                                         xmlDocPtr cur,
                                         const char *encoding);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlSaveFormatFileTo     (xmlOutputBufferPtr buf,
                                         xmlDocPtr cur,
                                         const char *encoding,
                                         int format);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlNodeDumpOutput       (xmlOutputBufferPtr buf,
                                         xmlDocPtr doc,
                                         xmlNodePtr cur,
@@ -1163,13 +1218,13 @@ XMLPUBFUN void XMLCALL
                                         int format,
                                         const char *encoding);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSaveFormatFileEnc    (const char *filename,
                                         xmlDocPtr cur,
                                         const char *encoding,
                                         int format);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSaveFileEnc          (const char *filename,
                                         xmlDocPtr cur,
                                         const char *encoding);
@@ -1178,21 +1233,21 @@ XMLPUBFUN int XMLCALL
 /*
  * XHTML
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlIsXHTML              (const xmlChar *systemID,
                                         const xmlChar *publicID);
 
 /*
  * Compression.
  */
-XMLPUBFUN int XMLCALL          
-               xmlGetDocCompressMode   (xmlDocPtr doc);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN int XMLCALL
+               xmlGetDocCompressMode   (const xmlDoc *doc);
+XMLPUBFUN void XMLCALL
                xmlSetDocCompressMode   (xmlDocPtr doc,
                                         int mode);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlGetCompressMode      (void);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSetCompressMode      (int mode);
 
 /*
@@ -1210,7 +1265,7 @@ XMLPUBFUN int XMLCALL
            xmlDOMWrapAdoptNode         (xmlDOMWrapCtxtPtr ctxt,
                                         xmlDocPtr sourceDoc,
                                         xmlNodePtr node,
-                                        xmlDocPtr destDoc,                 
+                                        xmlDocPtr destDoc,
                                         xmlNodePtr destParent,
                                         int options);
 XMLPUBFUN int XMLCALL
index a2307f1..2bc7b38 100644 (file)
@@ -150,55 +150,55 @@ typedef struct _xmlHashTable xmlRefTable;
 typedef xmlRefTable *xmlRefTablePtr;
 
 /* Notation */
-XMLPUBFUN xmlNotationPtr XMLCALL           
+XMLPUBFUN xmlNotationPtr XMLCALL
                xmlAddNotationDecl      (xmlValidCtxtPtr ctxt,
                                         xmlDtdPtr dtd,
                                         const xmlChar *name,
                                         const xmlChar *PublicID,
                                         const xmlChar *SystemID);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlNotationTablePtr XMLCALL 
+XMLPUBFUN xmlNotationTablePtr XMLCALL
                xmlCopyNotationTable    (xmlNotationTablePtr table);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL             
+XMLPUBFUN void XMLCALL
                xmlFreeNotationTable    (xmlNotationTablePtr table);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL             
+XMLPUBFUN void XMLCALL
                xmlDumpNotationDecl     (xmlBufferPtr buf,
                                         xmlNotationPtr nota);
-XMLPUBFUN void XMLCALL             
+XMLPUBFUN void XMLCALL
                xmlDumpNotationTable    (xmlBufferPtr buf,
                                         xmlNotationTablePtr table);
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 /* Element Content */
 /* the non Doc version are being deprecated */
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                xmlNewElementContent    (const xmlChar *name,
                                         xmlElementContentType type);
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                xmlCopyElementContent   (xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlFreeElementContent   (xmlElementContentPtr cur);
 /* the new versions with doc argument */
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                xmlNewDocElementContent (xmlDocPtr doc,
                                         const xmlChar *name,
                                         xmlElementContentType type);
-XMLPUBFUN xmlElementContentPtr XMLCALL 
+XMLPUBFUN xmlElementContentPtr XMLCALL
                xmlCopyDocElementContent(xmlDocPtr doc,
                                         xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlFreeDocElementContent(xmlDocPtr doc,
                                         xmlElementContentPtr cur);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlSnprintfElementContent(char *buf,
                                         int size,
                                         xmlElementContentPtr content,
                                         int englob);
 #ifdef LIBXML_OUTPUT_ENABLED
 /* DEPRECATED */
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlSprintfElementContent(char *buf,
                                         xmlElementContentPtr content,
                                         int englob);
@@ -206,39 +206,39 @@ XMLPUBFUN void XMLCALL
 /* DEPRECATED */
 
 /* Element */
-XMLPUBFUN xmlElementPtr XMLCALL           
+XMLPUBFUN xmlElementPtr XMLCALL
                xmlAddElementDecl       (xmlValidCtxtPtr ctxt,
                                         xmlDtdPtr dtd,
                                         const xmlChar *name,
                                         xmlElementTypeVal type,
                                         xmlElementContentPtr content);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlElementTablePtr XMLCALL 
+XMLPUBFUN xmlElementTablePtr XMLCALL
                xmlCopyElementTable     (xmlElementTablePtr table);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlFreeElementTable     (xmlElementTablePtr table);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlDumpElementTable     (xmlBufferPtr buf,
                                         xmlElementTablePtr table);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlDumpElementDecl      (xmlBufferPtr buf,
                                         xmlElementPtr elem);
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 /* Enumeration */
-XMLPUBFUN xmlEnumerationPtr XMLCALL 
+XMLPUBFUN xmlEnumerationPtr XMLCALL
                xmlCreateEnumeration    (const xmlChar *name);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlFreeEnumeration      (xmlEnumerationPtr cur);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlEnumerationPtr XMLCALL  
+XMLPUBFUN xmlEnumerationPtr XMLCALL
                xmlCopyEnumeration      (xmlEnumerationPtr cur);
 #endif /* LIBXML_TREE_ENABLED */
 
 /* Attribute */
-XMLPUBFUN xmlAttributePtr XMLCALL          
+XMLPUBFUN xmlAttributePtr XMLCALL
                xmlAddAttributeDecl     (xmlValidCtxtPtr ctxt,
                                         xmlDtdPtr dtd,
                                         const xmlChar *elem,
@@ -249,55 +249,55 @@ XMLPUBFUN xmlAttributePtr XMLCALL
                                         const xmlChar *defaultValue,
                                         xmlEnumerationPtr tree);
 #ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlAttributeTablePtr XMLCALL 
+XMLPUBFUN xmlAttributeTablePtr XMLCALL
                xmlCopyAttributeTable  (xmlAttributeTablePtr table);
 #endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlFreeAttributeTable  (xmlAttributeTablePtr table);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlDumpAttributeTable  (xmlBufferPtr buf,
                                        xmlAttributeTablePtr table);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlDumpAttributeDecl   (xmlBufferPtr buf,
                                        xmlAttributePtr attr);
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 /* IDs */
-XMLPUBFUN xmlIDPtr XMLCALL     
+XMLPUBFUN xmlIDPtr XMLCALL
                xmlAddID               (xmlValidCtxtPtr ctxt,
                                        xmlDocPtr doc,
                                        const xmlChar *value,
                                        xmlAttrPtr attr);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeIDTable         (xmlIDTablePtr table);
-XMLPUBFUN xmlAttrPtr XMLCALL   
+XMLPUBFUN xmlAttrPtr XMLCALL
                xmlGetID               (xmlDocPtr doc,
                                        const xmlChar *ID);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlIsID                (xmlDocPtr doc,
                                        xmlNodePtr elem,
                                        xmlAttrPtr attr);
-XMLPUBFUN int XMLCALL          
-               xmlRemoveID            (xmlDocPtr doc, 
+XMLPUBFUN int XMLCALL
+               xmlRemoveID            (xmlDocPtr doc,
                                        xmlAttrPtr attr);
 
 /* IDREFs */
-XMLPUBFUN xmlRefPtr XMLCALL    
+XMLPUBFUN xmlRefPtr XMLCALL
                xmlAddRef              (xmlValidCtxtPtr ctxt,
                                        xmlDocPtr doc,
                                        const xmlChar *value,
                                        xmlAttrPtr attr);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlFreeRefTable        (xmlRefTablePtr table);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlIsRef               (xmlDocPtr doc,
                                        xmlNodePtr elem,
                                        xmlAttrPtr attr);
-XMLPUBFUN int XMLCALL          
-               xmlRemoveRef           (xmlDocPtr doc, 
+XMLPUBFUN int XMLCALL
+               xmlRemoveRef           (xmlDocPtr doc,
                                        xmlAttrPtr attr);
-XMLPUBFUN xmlListPtr XMLCALL   
+XMLPUBFUN xmlListPtr XMLCALL
                xmlGetRefs             (xmlDocPtr doc,
                                        const xmlChar *ID);
 
@@ -306,146 +306,146 @@ XMLPUBFUN xmlListPtr XMLCALL
  */
 #ifdef LIBXML_VALID_ENABLED
 /* Allocate/Release Validation Contexts */
-XMLPUBFUN xmlValidCtxtPtr XMLCALL          
+XMLPUBFUN xmlValidCtxtPtr XMLCALL
                xmlNewValidCtxt(void);
-XMLPUBFUN void XMLCALL             
+XMLPUBFUN void XMLCALL
                xmlFreeValidCtxt(xmlValidCtxtPtr);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateRoot         (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateElementDecl  (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlElementPtr elem);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlValidNormalizeAttributeValue(xmlDocPtr doc,
                                         xmlNodePtr elem,
                                         const xmlChar *name,
                                         const xmlChar *value);
-XMLPUBFUN xmlChar * XMLCALL    
+XMLPUBFUN xmlChar * XMLCALL
                xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem,
                                         const xmlChar *name,
                                         const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlAttributePtr attr);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateAttributeValue(xmlAttributeType type,
                                         const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNotationPtr nota);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateDtd          (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlDtdPtr dtd);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateDtdFinal     (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateDocument     (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateElement      (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateOneElement   (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
                xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr     elem,
                                         xmlAttrPtr attr,
                                         const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem,
                                         const xmlChar *prefix,
                                         xmlNsPtr ns,
                                         const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc);
 #endif /* LIBXML_VALID_ENABLED */
 
 #if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNotationUse  (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         const xmlChar *notationName);
 #endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlIsMixedElement       (xmlDocPtr doc,
                                         const xmlChar *name);
-XMLPUBFUN xmlAttributePtr XMLCALL      
+XMLPUBFUN xmlAttributePtr XMLCALL
                xmlGetDtdAttrDesc       (xmlDtdPtr dtd,
                                         const xmlChar *elem,
                                         const xmlChar *name);
-XMLPUBFUN xmlAttributePtr XMLCALL      
+XMLPUBFUN xmlAttributePtr XMLCALL
                xmlGetDtdQAttrDesc      (xmlDtdPtr dtd,
                                         const xmlChar *elem,
                                         const xmlChar *name,
                                         const xmlChar *prefix);
-XMLPUBFUN xmlNotationPtr XMLCALL       
+XMLPUBFUN xmlNotationPtr XMLCALL
                xmlGetDtdNotationDesc   (xmlDtdPtr dtd,
                                         const xmlChar *name);
-XMLPUBFUN xmlElementPtr XMLCALL        
+XMLPUBFUN xmlElementPtr XMLCALL
                xmlGetDtdQElementDesc   (xmlDtdPtr dtd,
                                         const xmlChar *name,
                                         const xmlChar *prefix);
-XMLPUBFUN xmlElementPtr XMLCALL        
+XMLPUBFUN xmlElementPtr XMLCALL
                xmlGetDtdElementDesc    (xmlDtdPtr dtd,
                                         const xmlChar *name);
 
 #ifdef LIBXML_VALID_ENABLED
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidGetPotentialChildren(xmlElementContent *ctree,
                                         const xmlChar **names,
                                         int *len,
                                         int max);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidGetValidElements(xmlNode *prev,
                                         xmlNode *next,
                                         const xmlChar **names,
                                         int max);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNameValue    (const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNamesValue   (const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNmtokenValue (const xmlChar *value);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidateNmtokensValue(const xmlChar *value);
 
 #ifdef LIBXML_REGEXP_ENABLED
 /*
  * Validation based on the regexp support
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
                                         xmlElementPtr elem);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidatePushElement  (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem,
                                         const xmlChar *qname);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidatePushCData    (xmlValidCtxtPtr ctxt,
                                         const xmlChar *data,
                                         int len);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlValidatePopElement   (xmlValidCtxtPtr ctxt,
                                         xmlDocPtr doc,
                                         xmlNodePtr elem,
index 083c7ed..a209a99 100644 (file)
@@ -57,7 +57,7 @@ typedef enum {
  * xlinkNodeDetectFunc:
  * @ctx:  user data pointer
  * @node:  the node to check
- * 
+ *
  * This is the prototype for the link detection routine.
  * It calls the default link detection callbacks upon link detection.
  */
@@ -157,26 +157,26 @@ struct _xlinkHandler {
 
 /*
  * The default detection routine, can be overridden, they call the default
- * detection callbacks. 
+ * detection callbacks.
  */
 
-XMLPUBFUN xlinkNodeDetectFunc XMLCALL  
+XMLPUBFUN xlinkNodeDetectFunc XMLCALL
                xlinkGetDefaultDetect   (void);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                xlinkSetDefaultDetect   (xlinkNodeDetectFunc func);
 
 /*
  * Routines to set/get the default handlers.
  */
-XMLPUBFUN xlinkHandlerPtr XMLCALL      
+XMLPUBFUN xlinkHandlerPtr XMLCALL
                xlinkGetDefaultHandler  (void);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xlinkSetDefaultHandler  (xlinkHandlerPtr handler);
 
 /*
  * Link detection module itself.
  */
-XMLPUBFUN xlinkType XMLCALL     
+XMLPUBFUN xlinkType XMLCALL
                xlinkIsLink             (xmlDocPtr doc,
                                         xmlNodePtr node);
 
index eea9ed6..3e41744 100644 (file)
@@ -26,7 +26,7 @@ extern "C" {
  * xmlInputMatchCallback:
  * @filename: the filename or URI
  *
- * Callback used in the I/O Input API to detect if the current handler 
+ * Callback used in the I/O Input API to detect if the current handler
  * can provide input fonctionnalities for this resource.
  *
  * Returns 1 if yes and 0 if another Input module should be used
@@ -72,7 +72,7 @@ typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
  * xmlOutputMatchCallback:
  * @filename: the filename or URI
  *
- * Callback used in the I/O Output API to detect if the current handler 
+ * Callback used in the I/O Output API to detect if the current handler
  * can provide output fonctionnalities for this resource.
  *
  * Returns 1 if yes and 0 if another Output module should be used
@@ -126,11 +126,11 @@ struct _xmlParserInputBuffer {
     void*                  context;
     xmlInputReadCallback   readcallback;
     xmlInputCloseCallback  closecallback;
-    
+
     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
-    
-    xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 */
-    xmlBufferPtr raw;       /* if encoder != NULL buffer for raw input */
+
+    xmlBufPtr buffer;    /* Local buffer encoded in UTF-8 */
+    xmlBufPtr raw;       /* if encoder != NULL buffer for raw input */
     int        compressed;         /* -1=unknown, 0=not compressed, 1=compressed */
     int error;
     unsigned long rawconsumed;/* amount consumed from raw */
@@ -142,11 +142,11 @@ struct _xmlOutputBuffer {
     void*                   context;
     xmlOutputWriteCallback  writecallback;
     xmlOutputCloseCallback  closecallback;
-    
+
     xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
-    
-    xmlBufferPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
-    xmlBufferPtr conv;      /* if encoder != NULL buffer for output */
+
+    xmlBufPtr buffer;    /* Local buffer encoded in UTF-8 or ISOLatin */
+    xmlBufPtr conv;      /* if encoder != NULL buffer for output */
     int written;            /* total number of byte written */
     int error;
 };
@@ -155,13 +155,13 @@ struct _xmlOutputBuffer {
 /*
  * Interfaces for input
  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlCleanupInputCallbacks                (void);
 
 XMLPUBFUN int XMLCALL
        xmlPopInputCallbacks                    (void);
 
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlRegisterDefaultInputCallbacks        (void);
 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
        xmlAllocParserInputBuffer               (xmlCharEncoding enc);
@@ -186,22 +186,22 @@ XMLPUBFUN xmlParserInputBufferPtr XMLCALL
                                                 xmlInputCloseCallback  ioclose,
                                                 void *ioctx,
                                                 xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlParserInputBufferRead                (xmlParserInputBufferPtr in,
                                                 int len);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlParserInputBufferGrow                (xmlParserInputBufferPtr in,
                                                 int len);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlParserInputBufferPush                (xmlParserInputBufferPtr in,
                                                 int len,
                                                 const char *buf);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlFreeParserInputBuffer                (xmlParserInputBufferPtr in);
-XMLPUBFUN char * XMLCALL       
+XMLPUBFUN char * XMLCALL
        xmlParserGetDirectory                   (const char *filename);
 
-XMLPUBFUN int XMLCALL     
+XMLPUBFUN int XMLCALL
        xmlRegisterInputCallbacks               (xmlInputMatchCallback matchFunc,
                                                 xmlInputOpenCallback openFunc,
                                                 xmlInputReadCallback readFunc,
@@ -209,15 +209,15 @@ XMLPUBFUN int XMLCALL
 
 xmlParserInputBufferPtr
        __xmlParserInputBufferCreateFilename(const char *URI,
-                                                                               xmlCharEncoding enc);
+                                               xmlCharEncoding enc);
 
 #ifdef LIBXML_OUTPUT_ENABLED
 /*
  * Interfaces for output
  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlCleanupOutputCallbacks               (void);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlRegisterDefaultOutputCallbacks(void);
 XMLPUBFUN xmlOutputBufferPtr XMLCALL
        xmlAllocOutputBuffer            (xmlCharEncodingHandlerPtr encoder);
@@ -245,24 +245,30 @@ XMLPUBFUN xmlOutputBufferPtr XMLCALL
                                         void *ioctx,
                                         xmlCharEncodingHandlerPtr encoder);
 
-XMLPUBFUN int XMLCALL  
+/* Couple of APIs to get the output without digging into the buffers */
+XMLPUBFUN const xmlChar * XMLCALL
+        xmlOutputBufferGetContent       (xmlOutputBufferPtr out);
+XMLPUBFUN size_t XMLCALL
+        xmlOutputBufferGetSize          (xmlOutputBufferPtr out);
+
+XMLPUBFUN int XMLCALL
        xmlOutputBufferWrite            (xmlOutputBufferPtr out,
                                         int len,
                                         const char *buf);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlOutputBufferWriteString      (xmlOutputBufferPtr out,
                                         const char *str);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlOutputBufferWriteEscape      (xmlOutputBufferPtr out,
                                         const xmlChar *str,
                                         xmlCharEncodingOutputFunc escaping);
 
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlOutputBufferFlush            (xmlOutputBufferPtr out);
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlOutputBufferClose            (xmlOutputBufferPtr out);
 
-XMLPUBFUN int XMLCALL     
+XMLPUBFUN int XMLCALL
        xmlRegisterOutputCallbacks      (xmlOutputMatchCallback matchFunc,
                                         xmlOutputOpenCallback openFunc,
                                         xmlOutputWriteCallback writeFunc,
@@ -275,10 +281,10 @@ xmlOutputBufferPtr
 
 #ifdef LIBXML_HTTP_ENABLED
 /*  This function only exists if HTTP support built into the library  */
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlRegisterHTTPPostCallbacks    (void );
 #endif /* LIBXML_HTTP_ENABLED */
-       
+
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 XMLPUBFUN xmlParserInputPtr XMLCALL
@@ -288,69 +294,69 @@ XMLPUBFUN xmlParserInputPtr XMLCALL
 /*
  * A predefined entity loader disabling network accesses
  */
-XMLPUBFUN xmlParserInputPtr XMLCALL 
+XMLPUBFUN xmlParserInputPtr XMLCALL
        xmlNoNetExternalEntityLoader    (const char *URL,
                                         const char *ID,
                                         xmlParserCtxtPtr ctxt);
 
-/* 
- * xmlNormalizeWindowsPath is obsolete, don't use it. 
+/*
+ * xmlNormalizeWindowsPath is obsolete, don't use it.
  * Check xmlCanonicPath in uri.h for a better alternative.
  */
-XMLPUBFUN xmlChar * XMLCALL 
+XMLPUBFUN xmlChar * XMLCALL
        xmlNormalizeWindowsPath         (const xmlChar *path);
 
-XMLPUBFUN int XMLCALL  
+XMLPUBFUN int XMLCALL
        xmlCheckFilename                (const char *path);
 /**
- * Default 'file://' protocol callbacks 
+ * Default 'file://' protocol callbacks
  */
-XMLPUBFUN int XMLCALL  
-       xmlFileMatch                    (const char *filename);
-XMLPUBFUN void * XMLCALL       
-       xmlFileOpen                     (const char *filename);
-XMLPUBFUN int XMLCALL  
-       xmlFileRead                     (void * context, 
-                                        char * buffer, 
+XMLPUBFUN int XMLCALL
+       xmlFileMatch                    (const char *filename);
+XMLPUBFUN void * XMLCALL
+       xmlFileOpen                     (const char *filename);
+XMLPUBFUN int XMLCALL
+       xmlFileRead                     (void * context,
+                                        char * buffer,
                                         int len);
-XMLPUBFUN int XMLCALL  
-       xmlFileClose                    (void * context);
+XMLPUBFUN int XMLCALL
+       xmlFileClose                    (void * context);
 
 /**
- * Default 'http://' protocol callbacks 
+ * Default 'http://' protocol callbacks
  */
 #ifdef LIBXML_HTTP_ENABLED
-XMLPUBFUN int XMLCALL  
-       xmlIOHTTPMatch                  (const char *filename);
-XMLPUBFUN void * XMLCALL       
-       xmlIOHTTPOpen                   (const char *filename);
+XMLPUBFUN int XMLCALL
+       xmlIOHTTPMatch                  (const char *filename);
+XMLPUBFUN void * XMLCALL
+       xmlIOHTTPOpen                   (const char *filename);
 #ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void * XMLCALL       
+XMLPUBFUN void * XMLCALL
        xmlIOHTTPOpenW                  (const char * post_uri,
                                         int   compression );
 #endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN int XMLCALL  
-       xmlIOHTTPRead                   (void * context, 
-                                        char * buffer, 
+XMLPUBFUN int XMLCALL
+       xmlIOHTTPRead                   (void * context,
+                                        char * buffer,
                                         int len);
-XMLPUBFUN int XMLCALL  
-       xmlIOHTTPClose                  (void * context);
+XMLPUBFUN int XMLCALL
+       xmlIOHTTPClose                  (void * context);
 #endif /* LIBXML_HTTP_ENABLED */
 
 /**
- * Default 'ftp://' protocol callbacks 
+ * Default 'ftp://' protocol callbacks
  */
-#ifdef LIBXML_FTP_ENABLED 
-XMLPUBFUN int XMLCALL  
-       xmlIOFTPMatch                   (const char *filename);
-XMLPUBFUN void * XMLCALL       
-       xmlIOFTPOpen                    (const char *filename);
-XMLPUBFUN int XMLCALL  
-       xmlIOFTPRead                    (void * context, 
-                                        char * buffer, 
+#ifdef LIBXML_FTP_ENABLED
+XMLPUBFUN int XMLCALL
+       xmlIOFTPMatch                   (const char *filename);
+XMLPUBFUN void * XMLCALL
+       xmlIOFTPOpen                    (const char *filename);
+XMLPUBFUN int XMLCALL
+       xmlIOFTPRead                    (void * context,
+                                        char * buffer,
                                         int len);
-XMLPUBFUN int XMLCALL  
-       xmlIOFTPClose                   (void * context);
+XMLPUBFUN int XMLCALL
+       xmlIOFTPClose                   (void * context);
 #endif /* LIBXML_FTP_ENABLED */
 
 #ifdef __cplusplus
index f98b55e..bf1b131 100644 (file)
@@ -40,25 +40,25 @@ typedef xmlAutomataState *xmlAutomataStatePtr;
 /*
  * Building API
  */
-XMLPUBFUN xmlAutomataPtr XMLCALL               
+XMLPUBFUN xmlAutomataPtr XMLCALL
                    xmlNewAutomata              (void);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                    xmlFreeAutomata             (xmlAutomataPtr am);
 
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataGetInitState     (xmlAutomataPtr am);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                    xmlAutomataSetFinalState    (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr state);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewState         (xmlAutomataPtr am);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewTransition    (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
                                                 const xmlChar *token,
                                                 void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewTransition2   (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
@@ -73,7 +73,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL
                                                 const xmlChar *token2,
                                                 void *data);
 
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewCountTrans    (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
@@ -81,7 +81,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL
                                                 int min,
                                                 int max,
                                                 void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewCountTrans2   (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
@@ -90,7 +90,7 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL
                                                 int min,
                                                 int max,
                                                 void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewOnceTrans     (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
@@ -99,46 +99,46 @@ XMLPUBFUN xmlAutomataStatePtr XMLCALL
                                                 int max,
                                                 void *data);
 XMLPUBFUN xmlAutomataStatePtr XMLCALL
-                   xmlAutomataNewOnceTrans2    (xmlAutomataPtr am, 
+                   xmlAutomataNewOnceTrans2    (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
-                                                xmlAutomataStatePtr to, 
+                                                xmlAutomataStatePtr to,
                                                 const xmlChar *token,
                                                 const xmlChar *token2,
-                                                int min, 
-                                                int max, 
+                                                int min,
+                                                int max,
                                                 void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewAllTrans      (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
                                                 int lax);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewEpsilon       (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewCountedTrans  (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
                                                 int counter);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL  
+XMLPUBFUN xmlAutomataStatePtr XMLCALL
                    xmlAutomataNewCounterTrans  (xmlAutomataPtr am,
                                                 xmlAutomataStatePtr from,
                                                 xmlAutomataStatePtr to,
                                                 int counter);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                    xmlAutomataNewCounter       (xmlAutomataPtr am,
                                                 int min,
                                                 int max);
 
-XMLPUBFUN xmlRegexpPtr XMLCALL         
+XMLPUBFUN xmlRegexpPtr XMLCALL
                    xmlAutomataCompile          (xmlAutomataPtr am);
-XMLPUBFUN int XMLCALL                  
+XMLPUBFUN int XMLCALL
                    xmlAutomataIsDeterminist    (xmlAutomataPtr am);
 
 #ifdef __cplusplus
 }
-#endif 
+#endif
 
 #endif /* LIBXML_AUTOMATA_ENABLED */
 #endif /* LIBXML_REGEXP_ENABLED */
index e924211..43e68ca 100644 (file)
@@ -62,7 +62,9 @@ typedef enum {
     XML_FROM_WRITER,   /* The xmlwriter module */
     XML_FROM_MODULE,   /* The dynamically loaded module module*/
     XML_FROM_I18N,     /* The module handling character conversion */
-    XML_FROM_SCHEMATRONV       /* The Schematron validator module */
+    XML_FROM_SCHEMATRONV,/* The Schematron validator module */
+    XML_FROM_BUFFER,    /* The buffers module */
+    XML_FROM_URI        /* The URI module */
 } xmlErrorDomain;
 
 /**
@@ -84,7 +86,7 @@ struct _xmlError {
     char       *str2;  /* extra string information */
     char       *str3;  /* extra string information */
     int                int1;   /* extra number information */
-    int                int2;   /* column number of the error or 0 if N/A (todo: rename this field when we would break ABI) */
+    int                int2;   /* error column # or 0 if N/A (todo: rename field when we would brk ABI) */
     void       *ctxt;   /* the parser context if available */
     void       *node;   /* the node in the tree */
 };
@@ -205,6 +207,8 @@ typedef enum {
     XML_WAR_ENTITY_REDEFINED, /* 107 */
     XML_ERR_UNKNOWN_VERSION, /* 108 */
     XML_ERR_VERSION_MISMATCH, /* 109 */
+    XML_ERR_NAME_TOO_LONG, /* 110 */
+    XML_ERR_USER_STOP, /* 111 */
     XML_NS_ERR_XML_NAMESPACE = 200,
     XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
     XML_NS_ERR_QNAME, /* 202 */
@@ -825,11 +829,8 @@ typedef enum {
     XML_I18N_NO_HANDLER, /* 6001 */
     XML_I18N_EXCESS_HANDLER, /* 6002 */
     XML_I18N_CONV_FAILED, /* 6003 */
-    XML_I18N_NO_OUTPUT /* 6004 */
-#if 0
-    XML_CHECK_, /* 5033 */
-    XML_CHECK_X /* 503 */
-#endif
+    XML_I18N_NO_OUTPUT, /* 6004 */
+    XML_BUF_OVERFLOW = 7000
 } xmlParserErrors;
 
 /**
index c6516b4..2c79f81 100644 (file)
@@ -43,7 +43,7 @@
 /**
  * XMLCDECL:
  *
- * Macro which declares the calling convention for exported functions that 
+ * Macro which declares the calling convention for exported functions that
  * use '...'.
  */
 #define XMLCDECL
index 8f4a560..9667820 100644 (file)
@@ -50,7 +50,7 @@ XMLPUBFUN int XMLCALL xmlModuleFree           (xmlModulePtr module);
 
 #ifdef __cplusplus
 }
-#endif 
+#endif
 
 #endif /* LIBXML_MODULES_ENABLED */
 
index f24e9bb..2c99e3a 100644 (file)
@@ -130,16 +130,16 @@ XMLPUBFUN int XMLCALL
 
 #ifdef LIBXML_WRITER_ENABLED
 XMLPUBFUN xmlChar * XMLCALL
-                       xmlTextReaderReadInnerXml       (xmlTextReaderPtr reader);
+                       xmlTextReaderReadInnerXml(xmlTextReaderPtr reader);
 
 XMLPUBFUN xmlChar * XMLCALL
-                       xmlTextReaderReadOuterXml       (xmlTextReaderPtr reader);
+                       xmlTextReaderReadOuterXml(xmlTextReaderPtr reader);
 #endif
 
 XMLPUBFUN xmlChar * XMLCALL
-                       xmlTextReaderReadString         (xmlTextReaderPtr reader);
+                       xmlTextReaderReadString (xmlTextReaderPtr reader);
 XMLPUBFUN int XMLCALL
-                       xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader);
+                       xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader);
 
 /*
  * Attributes of the node
@@ -397,27 +397,26 @@ typedef void *  xmlTextReaderLocatorPtr;
  *
  * Signature of an error callback from a reader parser
  */
-typedef void   (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
-                                                const char *msg,
-                                                xmlParserSeverities severity,
-                                                xmlTextReaderLocatorPtr locator);
+typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
+                                              const char *msg,
+                                              xmlParserSeverities severity,
+                                              xmlTextReaderLocatorPtr locator);
 XMLPUBFUN int XMLCALL
-                   xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
-/*int             xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
+           xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
 XMLPUBFUN xmlChar * XMLCALL
-                   xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
+           xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
 XMLPUBFUN void XMLCALL
-                   xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
-                                                xmlTextReaderErrorFunc f,
-                                                void *arg);
+           xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
+                                        xmlTextReaderErrorFunc f,
+                                        void *arg);
 XMLPUBFUN void XMLCALL
-                   xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
-                                                          xmlStructuredErrorFunc f,
-                                                          void *arg);
+           xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
+                                                  xmlStructuredErrorFunc f,
+                                                  void *arg);
 XMLPUBFUN void XMLCALL
-                   xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
-                                                xmlTextReaderErrorFunc *f,
-                                                void **arg);
+           xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
+                                        xmlTextReaderErrorFunc *f,
+                                        void **arg);
 
 #endif /* LIBXML_READER_ENABLED */
 
index 752bc3a..97930c7 100644 (file)
@@ -92,7 +92,8 @@ typedef xmlSchema *xmlSchemaPtr;
  *
  * Signature of an error callback from an XSD validation
  */
-typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
+typedef void (XMLCDECL *xmlSchemaValidityErrorFunc)
+                 (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
 
 /**
  * xmlSchemaValidityWarningFunc:
@@ -102,7 +103,8 @@ typedef void (XMLCDECL *xmlSchemaValidityErrorFunc) (void *ctx, const char *msg,
  *
  * Signature of a warning callback from an XSD validation
  */
-typedef void (XMLCDECL *xmlSchemaValidityWarningFunc) (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
+typedef void (XMLCDECL *xmlSchemaValidityWarningFunc)
+                 (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
 
 /**
  * A schemas validation context
@@ -113,6 +115,22 @@ typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
 typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
 typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
 
+/**
+ * xmlSchemaValidityLocatorFunc:
+ * @ctx: user provided context
+ * @file: returned file information
+ * @line: returned line information
+ *
+ * A schemas validation locator, a callback called by the validator.
+ * This is used when file or node informations are not available
+ * to find out what file and line number are affected
+ *
+ * Returns: 0 in case of success and -1 in case of error
+ */
+
+typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx,
+                           const char **file, unsigned long *line);
+
 /*
  * Interfaces for parsing.
  */
@@ -171,6 +189,9 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN int XMLCALL
            xmlSchemaSetValidOptions    (xmlSchemaValidCtxtPtr ctxt,
                                         int options);
+XMLPUBFUN void XMLCALL
+            xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt,
+                                        const char *filename);
 XMLPUBFUN int XMLCALL
            xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt);
 
@@ -210,6 +231,13 @@ XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL
                                         void **user_data);
 XMLPUBFUN int XMLCALL
             xmlSchemaSAXUnplug         (xmlSchemaSAXPlugPtr plug);
+
+
+XMLPUBFUN void XMLCALL
+            xmlSchemaValidateSetLocator        (xmlSchemaValidCtxtPtr vctxt,
+                                        xmlSchemaValidityLocatorFunc f,
+                                        void *ctxt);
+
 #ifdef __cplusplus
 }
 #endif
index 9a3a7a1..35d48d4 100644 (file)
@@ -30,23 +30,23 @@ typedef enum {
     XML_SCHEMA_WHITESPACE_COLLAPSE = 3
 } xmlSchemaWhitespaceValueType;
 
-XMLPUBFUN void XMLCALL         
-               xmlSchemaInitTypes              (void);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
+               xmlSchemaInitTypes              (void);
+XMLPUBFUN void XMLCALL
                xmlSchemaCleanupTypes           (void);
-XMLPUBFUN xmlSchemaTypePtr XMLCALL 
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
                xmlSchemaGetPredefinedType      (const xmlChar *name,
                                                 const xmlChar *ns);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr *val);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSchemaValPredefTypeNode      (xmlSchemaTypePtr type,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr *val,
                                                 xmlNodePtr node);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSchemaValidateFacet          (xmlSchemaTypePtr base,
                                                 xmlSchemaFacetPtr facet,
                                                 const xmlChar *value,
@@ -54,25 +54,25 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN int XMLCALL
                xmlSchemaValidateFacetWhtsp     (xmlSchemaFacetPtr facet,
                                                 xmlSchemaWhitespaceValueType fws,
-                                                xmlSchemaValType valType,                                               
+                                                xmlSchemaValType valType,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr val,
                                                 xmlSchemaWhitespaceValueType ws);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSchemaFreeValue              (xmlSchemaValPtr val);
-XMLPUBFUN xmlSchemaFacetPtr XMLCALL 
+XMLPUBFUN xmlSchemaFacetPtr XMLCALL
                xmlSchemaNewFacet               (void);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSchemaCheckFacet             (xmlSchemaFacetPtr facet,
                                                 xmlSchemaTypePtr typeDecl,
                                                 xmlSchemaParserCtxtPtr ctxt,
                                                 const xmlChar *name);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlSchemaFreeFacet              (xmlSchemaFacetPtr facet);
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlSchemaCompareValues          (xmlSchemaValPtr x,
                                                 xmlSchemaValPtr y);
-XMLPUBFUN xmlSchemaTypePtr XMLCALL             
+XMLPUBFUN xmlSchemaTypePtr XMLCALL
     xmlSchemaGetBuiltInListSimpleTypeItemType  (xmlSchemaTypePtr type);
 XMLPUBFUN int XMLCALL
     xmlSchemaValidateListSimpleTypeFacet       (xmlSchemaFacetPtr facet,
@@ -82,7 +82,7 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN xmlSchemaTypePtr XMLCALL
                xmlSchemaGetBuiltInType         (xmlSchemaValType type);
 XMLPUBFUN int XMLCALL
-               xmlSchemaIsBuiltInTypeFacet     (xmlSchemaTypePtr type, 
+               xmlSchemaIsBuiltInTypeFacet     (xmlSchemaTypePtr type,
                                                 int facetType);
 XMLPUBFUN xmlChar * XMLCALL
                xmlSchemaCollapseString         (const xmlChar *value);
@@ -91,7 +91,7 @@ XMLPUBFUN xmlChar * XMLCALL
 XMLPUBFUN unsigned long  XMLCALL
                xmlSchemaGetFacetValueAsULong   (xmlSchemaFacetPtr facet);
 XMLPUBFUN int XMLCALL
-               xmlSchemaValidateLengthFacet    (xmlSchemaTypePtr type, 
+               xmlSchemaValidateLengthFacet    (xmlSchemaTypePtr type,
                                                 xmlSchemaFacetPtr facet,
                                                 const xmlChar *value,
                                                 xmlSchemaValPtr val,
@@ -100,19 +100,19 @@ XMLPUBFUN int XMLCALL
                xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
                                                  xmlSchemaValType valType,
                                                  const xmlChar *value,
-                                                 xmlSchemaValPtr val,                                            
+                                                 xmlSchemaValPtr val,
                                                  unsigned long *length,
                                                  xmlSchemaWhitespaceValueType ws);
 XMLPUBFUN int XMLCALL
-               xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, 
+               xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type,
                                                 const xmlChar *value,
-                                                xmlSchemaValPtr *val, 
+                                                xmlSchemaValPtr *val,
                                                 xmlNodePtr node);
 XMLPUBFUN int XMLCALL
                xmlSchemaGetCanonValue          (xmlSchemaValPtr val,
                                                 const xmlChar **retValue);
 XMLPUBFUN int XMLCALL
-               xmlSchemaGetCanonValueWhtsp     (xmlSchemaValPtr val,                                            
+               xmlSchemaGetCanonValueWhtsp     (xmlSchemaValPtr val,
                                                 const xmlChar **retValue,
                                                 xmlSchemaWhitespaceValueType ws);
 XMLPUBFUN int XMLCALL
index 0bc6888..2036236 100644 (file)
@@ -113,16 +113,16 @@ XMLPUBFUN int XMLCALL
 XMLPUBFUN int XMLCALL
         xmlUTF8Strsize                   (const xmlChar *utf,
                                          int len);
-XMLPUBFUN xmlChar * XMLCALL 
+XMLPUBFUN xmlChar * XMLCALL
         xmlUTF8Strndup                   (const xmlChar *utf,
                                          int len);
-XMLPUBFUN const xmlChar * XMLCALL 
+XMLPUBFUN const xmlChar * XMLCALL
         xmlUTF8Strpos                    (const xmlChar *utf,
                                          int pos);
 XMLPUBFUN int XMLCALL
         xmlUTF8Strloc                    (const xmlChar *utf,
                                          const xmlChar *utfchar);
-XMLPUBFUN xmlChar * XMLCALL 
+XMLPUBFUN xmlChar * XMLCALL
         xmlUTF8Strsub                    (const xmlChar *utf,
                                          int start,
                                          int len);
index 863c422..ffd42ea 100644 (file)
@@ -29,28 +29,28 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  *
  * the version string like "1.2.3"
  */
-#define LIBXML_DOTTED_VERSION "2.8.0"
+#define LIBXML_DOTTED_VERSION "2.9.2"
 
 /**
  * LIBXML_VERSION:
  *
  * the version number: 1.2.3 value is 10203
  */
-#define LIBXML_VERSION 20800
+#define LIBXML_VERSION 20902
 
 /**
  * LIBXML_VERSION_STRING:
  *
  * the version number string, 1.2.3 value is "10203"
  */
-#define LIBXML_VERSION_STRING "20800"
+#define LIBXML_VERSION_STRING "20902"
 
 /**
  * LIBXML_VERSION_EXTRA:
  *
  * extra version information, used to show a CVS compilation
  */
-#define LIBXML_VERSION_EXTRA "-GITv2.8.0-rc2-1-g22030ef"
+#define LIBXML_VERSION_EXTRA "-GITv2.9.2-rc2-10-gbe2a7ed"
 
 /**
  * LIBXML_TEST_VERSION:
@@ -58,7 +58,7 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  * Macro to check that the libxml version in use is compatible with
  * the version the software has been compiled against
  */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20800);
+#define LIBXML_TEST_VERSION xmlCheckVersion(20902);
 
 #ifndef VMS
 #if 0
@@ -98,6 +98,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
 #endif
 
 /**
+ * LIBXML_THREAD_ALLOC_ENABLED:
+ *
+ * Whether the allocation hooks are per-thread
+ */
+#if 0
+#define LIBXML_THREAD_ALLOC_ENABLED
+#endif
+
+/**
  * LIBXML_TREE_ENABLED:
  *
  * Whether the DOM like tree manipulation API support is configured in
@@ -412,7 +421,11 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  */
 
 #ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__((unused))
+# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
+#  define ATTRIBUTE_UNUSED __attribute__((unused))
+# else
+#  define ATTRIBUTE_UNUSED
+# endif
 #endif
 
 /**
index ddd4633..00a836f 100644 (file)
@@ -98,6 +98,15 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
 #endif
 
 /**
+ * LIBXML_THREAD_ALLOC_ENABLED:
+ *
+ * Whether the allocation hooks are per-thread
+ */
+#if @WITH_THREAD_ALLOC@
+#define LIBXML_THREAD_ALLOC_ENABLED
+#endif
+
+/**
  * LIBXML_TREE_ENABLED:
  *
  * Whether the DOM like tree manipulation API support is configured in
@@ -412,7 +421,11 @@ XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
  */
 
 #ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED __attribute__((unused))
+# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
+#  define ATTRIBUTE_UNUSED __attribute__((unused))
+# else
+#  define ATTRIBUTE_UNUSED
+# endif
 #endif
 
 /**
index 91e683c..dd5add3 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Summary: text writing API for XML
  * Description: text writing API for XML
@@ -471,6 +470,10 @@ extern "C" {
         xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
                                      const xmlChar * str);
 
+    XMLPUBFUN int XMLCALL
+        xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar);
+
+
 /*
  * misc
  */
index ddd9dd8..d96776c 100644 (file)
@@ -33,7 +33,7 @@
 extern "C" {
 #endif
 #endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
-       
+
 #ifdef LIBXML_XPATH_ENABLED
 
 typedef struct _xmlXPathContext xmlXPathContext;
@@ -69,7 +69,8 @@ typedef enum {
     XPATH_ENCODING_ERROR,
     XPATH_INVALID_CHAR_ERROR,
     XPATH_INVALID_CTXT,
-    XPATH_STACK_ERROR
+    XPATH_STACK_ERROR,
+    XPATH_FORBID_VARIABLE_ERROR
 } xmlXPathError;
 
 /*
@@ -272,11 +273,11 @@ typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
  *
  * Expression evaluation occurs with respect to a context.
  * he context consists of:
- *    - a node (the context node) 
- *    - a node list (the context node list) 
- *    - a set of variable bindings 
- *    - a function library 
- *    - the set of namespace declarations in scope for the expression 
+ *    - a node (the context node)
+ *    - a node list (the context node list)
+ *    - a set of variable bindings
+ *    - a function library
+ *    - the set of namespace declarations in scope for the expression
  * Following the switch to hash tables, this need to be trimmed up at
  * the next binary incompatible release.
  * The node may be modified when the context is passed to libxml2
@@ -420,7 +421,7 @@ XMLPUBVAR double xmlXPathNINF;
  *         @index is out of range (0 to length-1)
  */
 #define xmlXPathNodeSetItem(ns, index)                         \
-               ((((ns) != NULL) &&                             \
+               ((((ns) != NULL) &&                             \
                  ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
                 (ns)->nodeTab[(index)]                         \
                 : NULL)
@@ -436,64 +437,64 @@ XMLPUBVAR double xmlXPathNINF;
     (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
 
 
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                    xmlXPathFreeObject          (xmlXPathObjectPtr obj);
-XMLPUBFUN xmlNodeSetPtr XMLCALL           
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                    xmlXPathNodeSetCreate       (xmlNodePtr val);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                    xmlXPathFreeNodeSetList     (xmlXPathObjectPtr obj);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                    xmlXPathFreeNodeSet         (xmlNodeSetPtr obj);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathObjectCopy          (xmlXPathObjectPtr val);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                    xmlXPathCmpNodes            (xmlNodePtr node1,
                                                 xmlNodePtr node2);
 /**
  * Conversion functions to basic types.
  */
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                    xmlXPathCastNumberToBoolean (double val);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                    xmlXPathCastStringToBoolean (const xmlChar * val);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                    xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                    xmlXPathCastToBoolean       (xmlXPathObjectPtr val);
 
-XMLPUBFUN double XMLCALL                  
+XMLPUBFUN double XMLCALL
                    xmlXPathCastBooleanToNumber (int val);
-XMLPUBFUN double XMLCALL                  
+XMLPUBFUN double XMLCALL
                    xmlXPathCastStringToNumber  (const xmlChar * val);
-XMLPUBFUN double XMLCALL                  
+XMLPUBFUN double XMLCALL
                    xmlXPathCastNodeToNumber    (xmlNodePtr node);
-XMLPUBFUN double XMLCALL                  
+XMLPUBFUN double XMLCALL
                    xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
-XMLPUBFUN double XMLCALL                  
+XMLPUBFUN double XMLCALL
                    xmlXPathCastToNumber        (xmlXPathObjectPtr val);
 
-XMLPUBFUN xmlChar * XMLCALL       
+XMLPUBFUN xmlChar * XMLCALL
                    xmlXPathCastBooleanToString (int val);
-XMLPUBFUN xmlChar * XMLCALL       
+XMLPUBFUN xmlChar * XMLCALL
                    xmlXPathCastNumberToString  (double val);
-XMLPUBFUN xmlChar * XMLCALL       
+XMLPUBFUN xmlChar * XMLCALL
                    xmlXPathCastNodeToString    (xmlNodePtr node);
-XMLPUBFUN xmlChar * XMLCALL       
+XMLPUBFUN xmlChar * XMLCALL
                    xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
-XMLPUBFUN xmlChar * XMLCALL       
+XMLPUBFUN xmlChar * XMLCALL
                    xmlXPathCastToString        (xmlXPathObjectPtr val);
 
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathConvertBoolean      (xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathConvertNumber       (xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathConvertString       (xmlXPathObjectPtr val);
 
 /**
  * Context handling.
  */
-XMLPUBFUN xmlXPathContextPtr XMLCALL 
+XMLPUBFUN xmlXPathContextPtr XMLCALL
                    xmlXPathNewContext          (xmlDocPtr doc);
 XMLPUBFUN void XMLCALL
                    xmlXPathFreeContext         (xmlXPathContextPtr ctxt);
@@ -505,36 +506,43 @@ XMLPUBFUN int XMLCALL
 /**
  * Evaluation functions.
  */
-XMLPUBFUN long XMLCALL               
+XMLPUBFUN long XMLCALL
                    xmlXPathOrderDocElems       (xmlDocPtr doc);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN int XMLCALL
+                   xmlXPathSetContextNode      (xmlNodePtr node,
+                                                xmlXPathContextPtr ctx);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
+                   xmlXPathNodeEval            (xmlNodePtr node,
+                                                const xmlChar *str,
+                                                xmlXPathContextPtr ctx);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathEval                (const xmlChar *str,
                                                 xmlXPathContextPtr ctx);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathEvalExpression      (const xmlChar *str,
                                                 xmlXPathContextPtr ctxt);
-XMLPUBFUN int XMLCALL                
+XMLPUBFUN int XMLCALL
                    xmlXPathEvalPredicate       (xmlXPathContextPtr ctxt,
                                                 xmlXPathObjectPtr res);
 /**
  * Separate compilation/evaluation entry points.
  */
-XMLPUBFUN xmlXPathCompExprPtr XMLCALL 
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
                    xmlXPathCompile             (const xmlChar *str);
-XMLPUBFUN xmlXPathCompExprPtr XMLCALL 
+XMLPUBFUN xmlXPathCompExprPtr XMLCALL
                    xmlXPathCtxtCompile         (xmlXPathContextPtr ctxt,
-                                                const xmlChar *str);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL   
+                                                const xmlChar *str);
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPathCompiledEval        (xmlXPathCompExprPtr comp,
                                                 xmlXPathContextPtr ctx);
-XMLPUBFUN int XMLCALL   
+XMLPUBFUN int XMLCALL
                    xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
                                                 xmlXPathContextPtr ctxt);
-XMLPUBFUN void XMLCALL                
+XMLPUBFUN void XMLCALL
                    xmlXPathFreeCompExpr        (xmlXPathCompExprPtr comp);
 #endif /* LIBXML_XPATH_ENABLED */
 #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                    xmlXPathInit                (void);
 XMLPUBFUN int XMLCALL
                xmlXPathIsNaN   (double val);
index dcd5243..70c9db9 100644 (file)
@@ -100,16 +100,16 @@ extern "C" {
  */
 #define xmlXPathGetContextNode(ctxt)   ((ctxt)->context->node)
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlXPathPopBoolean      (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN double XMLCALL               
-               xmlXPathPopNumber       (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL    
-               xmlXPathPopString       (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
-               xmlXPathPopNodeSet      (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void * XMLCALL               
-               xmlXPathPopExternal     (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN double XMLCALL
+               xmlXPathPopNumber       (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlChar * XMLCALL
+               xmlXPathPopString       (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+               xmlXPathPopNodeSet      (xmlXPathParserContextPtr ctxt);
+XMLPUBFUN void * XMLCALL
+               xmlXPathPopExternal     (xmlXPathParserContextPtr ctxt);
 
 /**
  * xmlXPathReturnBoolean:
@@ -296,7 +296,9 @@ XMLPUBFUN void * XMLCALL
 #define CHECK_ARITY(x)                                                 \
     if (ctxt == NULL) return;                                          \
     if (nargs != (x))                                                  \
-        XP_ERROR(XPATH_INVALID_ARITY);
+        XP_ERROR(XPATH_INVALID_ARITY);                                 \
+    if (ctxt->valueNr < ctxt->valueFrame + (x))                                \
+        XP_ERROR(XPATH_STACK_ERROR);
 
 /**
  * CAST_TO_STRING:
@@ -329,7 +331,7 @@ XMLPUBFUN void * XMLCALL
  * Variable Lookup forwarding.
  */
 
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
        xmlXPathRegisterVariableLookup  (xmlXPathContextPtr ctxt,
                                         xmlXPathVariableLookupFunc f,
                                         void *data);
@@ -338,7 +340,7 @@ XMLPUBFUN void XMLCALL
  * Function Lookup forwarding.
  */
 
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
            xmlXPathRegisterFuncLookup  (xmlXPathContextPtr ctxt,
                                         xmlXPathFuncLookupFunc f,
                                         void *funcCtxt);
@@ -346,7 +348,7 @@ XMLPUBFUN void XMLCALL
 /*
  * Error reporting.
  */
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlXPatherror   (xmlXPathParserContextPtr ctxt,
                                 const char *file,
                                 int line,
@@ -357,11 +359,11 @@ XMLPUBFUN void XMLCALL
                                 int error);
 
 #ifdef LIBXML_DEBUG_ENABLED
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                xmlXPathDebugDumpObject (FILE *output,
                                         xmlXPathObjectPtr cur,
                                         int depth);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
            xmlXPathDebugDumpCompExpr(FILE *output,
                                         xmlXPathCompExprPtr comp,
                                         int depth);
@@ -369,48 +371,48 @@ XMLPUBFUN void XMLCALL
 /**
  * NodeSet handling.
  */
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlXPathNodeSetContains         (xmlNodeSetPtr cur,
                                                 xmlNodePtr val);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathDifference              (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathIntersection            (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
 
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathDistinctSorted          (xmlNodeSetPtr nodes);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathDistinct                (xmlNodeSetPtr nodes);
 
-XMLPUBFUN int XMLCALL          
+XMLPUBFUN int XMLCALL
                xmlXPathHasSameNodes            (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
 
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathNodeLeadingSorted       (xmlNodeSetPtr nodes,
                                                 xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathLeadingSorted           (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathNodeLeading             (xmlNodeSetPtr nodes,
                                                 xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathLeading                 (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
 
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathNodeTrailingSorted      (xmlNodeSetPtr nodes,
                                                 xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathTrailingSorted          (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathNodeTrailing            (xmlNodeSetPtr nodes,
                                                 xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL        
+XMLPUBFUN xmlNodeSetPtr XMLCALL
                xmlXPathTrailing                (xmlNodeSetPtr nodes1,
                                                 xmlNodeSetPtr nodes2);
 
@@ -419,51 +421,51 @@ XMLPUBFUN xmlNodeSetPtr XMLCALL
  * Extending a context.
  */
 
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlXPathRegisterNs              (xmlXPathContextPtr ctxt,
                                                 const xmlChar *prefix,
                                                 const xmlChar *ns_uri);
-XMLPUBFUN const xmlChar * XMLCALL         
+XMLPUBFUN const xmlChar * XMLCALL
                xmlXPathNsLookup                (xmlXPathContextPtr ctxt,
                                                 const xmlChar *prefix);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlXPathRegisteredNsCleanup     (xmlXPathContextPtr ctxt);
 
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlXPathRegisterFunc            (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 xmlXPathFunction f);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlXPathRegisterFuncNS          (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 const xmlChar *ns_uri,
                                                 xmlXPathFunction f);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlXPathRegisterVariable        (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 xmlXPathObjectPtr value);
-XMLPUBFUN int XMLCALL             
+XMLPUBFUN int XMLCALL
                xmlXPathRegisterVariableNS      (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 const xmlChar *ns_uri,
                                                 xmlXPathObjectPtr value);
-XMLPUBFUN xmlXPathFunction XMLCALL   
+XMLPUBFUN xmlXPathFunction XMLCALL
                xmlXPathFunctionLookup          (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name);
-XMLPUBFUN xmlXPathFunction XMLCALL   
+XMLPUBFUN xmlXPathFunction XMLCALL
                xmlXPathFunctionLookupNS        (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 const xmlChar *ns_uri);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlXPathRegisteredFuncsCleanup  (xmlXPathContextPtr ctxt);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathVariableLookup          (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL  
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathVariableLookupNS        (xmlXPathContextPtr ctxt,
                                                 const xmlChar *name,
                                                 const xmlChar *ns_uri);
-XMLPUBFUN void XMLCALL            
+XMLPUBFUN void XMLCALL
                xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
 
 /**
@@ -471,79 +473,79 @@ XMLPUBFUN void XMLCALL
  */
 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
                  xmlXPathNewParserContext      (const xmlChar *str,
-                                                xmlXPathContextPtr ctxt);
-XMLPUBFUN void XMLCALL           
+                                                xmlXPathContextPtr ctxt);
+XMLPUBFUN void XMLCALL
                xmlXPathFreeParserContext       (xmlXPathParserContextPtr ctxt);
 
 /* TODO: remap to xmlXPathValuePop and Push. */
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                valuePop                        (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN int XMLCALL            
+XMLPUBFUN int XMLCALL
                valuePush                       (xmlXPathParserContextPtr ctxt,
-                                                xmlXPathObjectPtr value);
+                                                xmlXPathObjectPtr value);
 
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewString               (const xmlChar *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewCString              (const char *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathWrapString              (xmlChar *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathWrapCString             (char * val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewFloat                (double val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewBoolean              (int val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewNodeSet              (xmlNodePtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewValueTree            (xmlNodePtr val);
-XMLPUBFUN void XMLCALL           
+XMLPUBFUN int XMLCALL
                xmlXPathNodeSetAdd              (xmlNodeSetPtr cur,
                                                 xmlNodePtr val);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN int XMLCALL
                xmlXPathNodeSetAddUnique        (xmlNodeSetPtr cur,
                                                 xmlNodePtr val);
-XMLPUBFUN void XMLCALL           
-               xmlXPathNodeSetAddNs            (xmlNodeSetPtr cur, 
-                                                xmlNodePtr node, 
+XMLPUBFUN int XMLCALL
+               xmlXPathNodeSetAddNs            (xmlNodeSetPtr cur,
+                                                xmlNodePtr node,
                                                 xmlNsPtr ns);
-XMLPUBFUN void XMLCALL              
+XMLPUBFUN void XMLCALL
                xmlXPathNodeSetSort             (xmlNodeSetPtr set);
 
-XMLPUBFUN void XMLCALL           
+XMLPUBFUN void XMLCALL
                xmlXPathRoot                    (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL           
+XMLPUBFUN void XMLCALL
                xmlXPathEvalExpr                (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL      
+XMLPUBFUN xmlChar * XMLCALL
                xmlXPathParseName               (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL      
+XMLPUBFUN xmlChar * XMLCALL
                xmlXPathParseNCName             (xmlXPathParserContextPtr ctxt);
 
 /*
  * Existing functions.
  */
-XMLPUBFUN double XMLCALL 
+XMLPUBFUN double XMLCALL
                xmlXPathStringEvalNumber        (const xmlChar *str);
-XMLPUBFUN int XMLCALL 
-               xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, 
+XMLPUBFUN int XMLCALL
+               xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
                                                 xmlXPathObjectPtr res);
-XMLPUBFUN void XMLCALL 
+XMLPUBFUN void XMLCALL
                xmlXPathRegisterAllFunctions    (xmlXPathContextPtr ctxt);
-XMLPUBFUN xmlNodeSetPtr XMLCALL 
-               xmlXPathNodeSetMerge            (xmlNodeSetPtr val1, 
+XMLPUBFUN xmlNodeSetPtr XMLCALL
+               xmlXPathNodeSetMerge            (xmlNodeSetPtr val1,
                                                 xmlNodeSetPtr val2);
-XMLPUBFUN void XMLCALL 
-               xmlXPathNodeSetDel              (xmlNodeSetPtr cur, 
+XMLPUBFUN void XMLCALL
+               xmlXPathNodeSetDel              (xmlNodeSetPtr cur,
                                                 xmlNodePtr val);
-XMLPUBFUN void XMLCALL 
-               xmlXPathNodeSetRemove           (xmlNodeSetPtr cur, 
+XMLPUBFUN void XMLCALL
+               xmlXPathNodeSetRemove           (xmlNodeSetPtr cur,
                                                 int val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathNewNodeSetList          (xmlNodeSetPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathWrapNodeSet             (xmlNodeSetPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL 
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                xmlXPathWrapExternal            (void *val);
 
 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
@@ -621,7 +623,7 @@ XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, in
  * Really internal functions
  */
 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
+
 #ifdef __cplusplus
 }
 #endif
index dde1dfb..b99112b 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Added support for the element() scheme described in:
  * W3C Proposed Recommendation 13 November 2002
- * http://www.w3.org/TR/2002/PR-xptr-element-20021113/  
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
  *
  * Copy: See Copyright for the status of this software.
  *
@@ -43,68 +43,68 @@ struct _xmlLocationSet {
  * Handling of location sets.
  */
 
-XMLPUBFUN xmlLocationSetPtr XMLCALL                    
+XMLPUBFUN xmlLocationSetPtr XMLCALL
                    xmlXPtrLocationSetCreate    (xmlXPathObjectPtr val);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                    xmlXPtrFreeLocationSet      (xmlLocationSetPtr obj);
-XMLPUBFUN xmlLocationSetPtr XMLCALL    
+XMLPUBFUN xmlLocationSetPtr XMLCALL
                    xmlXPtrLocationSetMerge     (xmlLocationSetPtr val1,
                                                 xmlLocationSetPtr val2);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRange             (xmlNodePtr start,
                                                 int startindex,
                                                 xmlNodePtr end,
                                                 int endindex);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRangePoints       (xmlXPathObjectPtr start,
                                                 xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRangeNodePoint    (xmlNodePtr start,
                                                 xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRangePointNode    (xmlXPathObjectPtr start,
                                                 xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL                    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRangeNodes        (xmlNodePtr start,
                                                 xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewLocationSetNodes  (xmlNodePtr start,
                                                 xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewRangeNodeObject   (xmlNodePtr start,
                                                 xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrNewCollapsedRange    (xmlNodePtr start);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                    xmlXPtrLocationSetAdd       (xmlLocationSetPtr cur,
                                                 xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrWrapLocationSet      (xmlLocationSetPtr val);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                    xmlXPtrLocationSetDel       (xmlLocationSetPtr cur,
                                                 xmlXPathObjectPtr val);
-XMLPUBFUN void XMLCALL                 
+XMLPUBFUN void XMLCALL
                    xmlXPtrLocationSetRemove    (xmlLocationSetPtr cur,
                                                 int val);
 
 /*
  * Functions.
  */
-XMLPUBFUN xmlXPathContextPtr XMLCALL   
+XMLPUBFUN xmlXPathContextPtr XMLCALL
                    xmlXPtrNewContext           (xmlDocPtr doc,
                                                 xmlNodePtr here,
                                                 xmlNodePtr origin);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL    
+XMLPUBFUN xmlXPathObjectPtr XMLCALL
                    xmlXPtrEval                 (const xmlChar *str,
                                                 xmlXPathContextPtr ctx);
-XMLPUBFUN void XMLCALL                                     
+XMLPUBFUN void XMLCALL
                    xmlXPtrRangeToFunction      (xmlXPathParserContextPtr ctxt,
-                                                        int nargs);
-XMLPUBFUN xmlNodePtr XMLCALL           
+                                                int nargs);
+XMLPUBFUN xmlNodePtr XMLCALL
                    xmlXPtrBuildNodeList        (xmlXPathObjectPtr obj);
-XMLPUBFUN void XMLCALL         
+XMLPUBFUN void XMLCALL
                    xmlXPtrEvalRangePredicate   (xmlXPathParserContextPtr ctxt);
 #ifdef __cplusplus
 }
index 3fc9be5..40cf7df 100644 (file)
@@ -5,6 +5,8 @@
 #define HAVE_STDARG_H
 #define HAVE_MALLOC_H
 #define HAVE_ERRNO_H
+#define SEND_ARG2_CAST
+#define GETHOSTBYNAME_ARG_CAST
 
 #if defined(_WIN32_WCE)
 #undef HAVE_ERRNO_H
@@ -95,7 +97,9 @@ static int isnan (double d) {
 
 #if defined(_MSC_VER)
 #define mkdir(p,m) _mkdir(p)
+#if _MSC_VER < 1900
 #define snprintf _snprintf
+#endif
 #if _MSC_VER < 1500
 #define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
 #endif
index c762a64..e6a1a99 100644 (file)
@@ -41,7 +41,7 @@
 #define EWOULDBLOCK             WSAEWOULDBLOCK
 #define ESHUTDOWN               WSAESHUTDOWN
 
-#ifndef _MSC_VER
+#if (!defined(_MSC_VER) || (_MSC_VER < 1600))
 #define EINPROGRESS             WSAEINPROGRESS
 #define EALREADY                WSAEALREADY
 #define ENOTSOCK                WSAENOTSOCK
index 6781b98..377bb86 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-11-20.07; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2009-04-28.21; # UTC
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+       # Protect names problematic for 'test' and other utilities.
+       case $dst_arg in
+         -* | [=\(\)!]) dst_arg=./$dst_arg;;
+       esac
        shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -194,13 +202,17 @@ if test $# -eq 0; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -347,7 +354,7 @@ do
              if test -z "$dir_arg" || {
                   # Check for POSIX incompatibilities with -m.
                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                  # other-writeable bit of parent directory when it shouldn't.
+                  # other-writable bit of parent directory when it shouldn't.
                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
                   case $ls_ld_tmpdir in
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
        /*) prefix='/';;
-       -*) prefix='./';;
+       [-=\(\)!]*) prefix='./';;
        *)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-       test -z "$d" && continue
+       test X"$d" = X && continue
 
        prefix=$prefix$d
        if test -d "$prefix"; then
index e75178a..86362bf 100644 (file)
--- a/legacy.c
+++ b/legacy.c
@@ -393,7 +393,7 @@ xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value)
  * @end:  an end marker xmlChar, 0 if none
  * @end2:  an end marker xmlChar, 0 if none
  * @end3:  an end marker xmlChar, 0 if none
- * 
+ *
  * This function is deprecated, we now always process entities content
  * through xmlStringDecodeEntities
  *
@@ -456,7 +456,7 @@ xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
 /**
  * xmlNamespaceParseQName:
  * @ctxt:  an XML parser context
- * @prefix:  a xmlChar ** 
+ * @prefix:  a xmlChar **
  *
  * TODO: this seems not in use anymore, the namespace handling is done on
  *       top of the SAX interfaces, i.e. not on raw input.
@@ -603,7 +603,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
 /**
  * xmlParserHandleReference:
  * @ctxt:  the parser context
- * 
+ *
  * TODO: Remove, now deprecated ... the test is done directly in the
  *       content parsing
  * routines.
@@ -615,7 +615,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
  * [ WFC: Entity Declared ]
  * the Name given in the entity reference must match that in an entity
  * declaration, except that well-formed documents need not declare any
- * of the following entities: amp, lt, gt, apos, quot. 
+ * of the following entities: amp, lt, gt, apos, quot.
  *
  * [ WFC: Parsed Entity ]
  * An entity reference must not contain the name of an unparsed entity
@@ -624,7 +624,7 @@ xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
  *                  '&#x' [0-9a-fA-F]+ ';'
  *
  * A PEReference may have been detected in the current input stream
- * the handling is done accordingly to 
+ * the handling is done accordingly to
  *      http://www.w3.org/TR/REC-xml#entproc
  */
 void
@@ -693,7 +693,7 @@ xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED,
 /**
  * xmlUpgradeOldNs:
  * @doc:  a document pointer
- * 
+ *
  * Upgrade old style Namespaces (PI) and move them to the root of the document.
  * DEPRECATED
  */
@@ -719,7 +719,7 @@ xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED)
  *
  * People must migrate their code to xmlEncodeEntitiesReentrant !
  * This routine will issue a warning when encountered.
- * 
+ *
  * Returns NULL
  */
 const xmlChar *
@@ -740,7 +740,7 @@ xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED,
 
 /************************************************************************
  *                                                                     *
- *             Old set of SAXv1 functions                              *
+ *             Old set of SAXv1 functions                              *
  *                                                                     *
  ************************************************************************/
 static int deprecated_v1_msg = 0;
@@ -961,8 +961,8 @@ getParameterEntity(void *ctx, const xmlChar * name)
 /**
  * entityDecl:
  * @ctx: the user data (XML parser context)
- * @name:  the entity name 
- * @type:  the entity type 
+ * @name:  the entity name
+ * @type:  the entity type
  * @publicId: The public ID of the entity
  * @systemId: The system ID of the entity
  * @content: the entity value (without processing).
@@ -983,8 +983,8 @@ entityDecl(void *ctx, const xmlChar * name, int type,
  * attributeDecl:
  * @ctx: the user data (XML parser context)
  * @elem:  the name of the element
- * @fullname:  the attribute name 
- * @type:  the attribute type 
+ * @fullname:  the attribute name
+ * @type:  the attribute type
  * @def:  the type of default value
  * @defaultValue: the attribute default value
  * @tree:  the tree of enumerated value set
@@ -1005,8 +1005,8 @@ attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname,
 /**
  * elementDecl:
  * @ctx: the user data (XML parser context)
- * @name:  the element name 
- * @type:  the element type 
+ * @name:  the element name
+ * @type:  the element type
  * @content: the element value tree
  *
  * An element definition has been parsed
@@ -1151,7 +1151,7 @@ void
 endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
 {
     DEPRECATED("endElement")
-        xmlSAX2EndElement(ctx, name);
+    xmlSAX2EndElement(ctx, name);
 }
 
 /**
@@ -1159,7 +1159,7 @@ endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
  * @ctx: the user data (XML parser context)
  * @name:  The entity name
  *
- * called when an entity reference is detected. 
+ * called when an entity reference is detected.
  * DEPRECATED: use xmlSAX2Reference()
  */
 void
index 0a4c833..60b886b 100644 (file)
@@ -8,5 +8,5 @@ Name: libXML
 Version: @VERSION@
 Description: libXML library version2.
 Requires:
-Libs: -L${libdir} -lxml2 @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@
+Libs: -L${libdir} -lxml2 @ICU_LIBS@ @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ @ICONV_LIBS@ @M_LIBS@ @LIBS@
 Cflags: -I${includedir} @XML_INCLUDEDIR@ @XML_CFLAGS@
index 31a1b8c..2653a7c 100644 (file)
@@ -9,5 +9,5 @@ Version: @VERSION@
 Description: libXML library version2.
 Requires:
 Libs: -L${libdir} -lxml2
-Libs.private: @THREAD_LIBS@ @Z_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@
+Libs.private: @ICU_LIBS@ @THREAD_LIBS@ @Z_LIBS@ @LZMA_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@
 Cflags: @XML_INCLUDEDIR@ @XML_CFLAGS@
index 88d3eee..b3e9fef 100644 (file)
--- a/libxml.3
+++ b/libxml.3
@@ -5,7 +5,7 @@ libxml \- library used to parse XML files
 The
 .I  libxml
 library is used to parse XML files. 
-Its internal document repesentation is as close as possible to the 
+Its internal document representation is as close as possible to the 
 .I DOM 
 (Document Object Model) interface,
 an API for accessing XML or HTML structured documents.
index fa3aea4..2da9044 100644 (file)
--- a/libxml.h
+++ b/libxml.h
 #include <win32config.h>
 #include <libxml/xmlversion.h>
 #else
+/*
+ * Currently supported platforms use either autoconf or
+ * copy to config.h own "preset" configuration file.
+ * As result ifdef HAVE_CONFIG_H is omited here.
+ */
 #include "config.h"
 #include <libxml/xmlversion.h>
 #endif
@@ -79,6 +84,8 @@ void __xmlGlobalInitMutexLock(void);
 void __xmlGlobalInitMutexUnlock(void);
 void __xmlGlobalInitMutexDestroy(void);
 
+int __xmlInitializeDict(void);
+
 #if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME)
 /*
  * internal thread safe random function
@@ -86,6 +93,8 @@ void __xmlGlobalInitMutexDestroy(void);
 int __xmlRandom(void);
 #endif
 
+int xmlNop(void);
+
 #ifdef IN_LIBXML
 #ifdef __GNUC__
 #ifdef PIC
index 03eb24e..242a4fe 100644 (file)
@@ -1,22 +1,22 @@
 Summary: Library providing XML and HTML support
 Name: libxml2
 Version: @VERSION@
-Release: 1
+Release: 1%{?dist}%{?extra_release}
 License: MIT
 Group: Development/Libraries
 Source: ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
 BuildRequires: python python-devel zlib-devel pkgconfig xz-devel
 URL: http://xmlsoft.org/
 
 %description
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DtDs, either
 at parse time or later once the document has been modified. The output
 can be a simple SAX stream or and in-memory DOM like representations.
 In this case one can use the built-in XPath and XPointer implementation
-to select subnodes or ranges. A flexible Input/Output mechanism is
+to select sub nodes or ranges. A flexible Input/Output mechanism is
 available, with existing HTTP and FTP modules and combined to an
 URI library.
 
@@ -30,28 +30,36 @@ Requires: pkgconfig
 
 %description devel
 Libraries, include files, etc you can use to develop XML applications.
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DtDs, either
 at parse time or later once the document has been modified. The output
 can be a simple SAX stream or and in-memory DOM like representations.
 In this case one can use the built-in XPath and XPointer implementation
-to select subnodes or ranges. A flexible Input/Output mechanism is
+to select sub nodes or ranges. A flexible Input/Output mechanism is
 available, with existing HTTP and FTP modules and combined to an
 URI library.
 
+%package static
+Summary: Static library for libxml2
+Group: Development/Libraries
+Requires: libxml2 = %{version}-%{release}
+
+%description static
+Static library for libxml2 provided for specific uses or shaving a few
+microseconds when parsing, do not link to them for generic purpose packages.
+
 %package python
 Summary: Python bindings for the libxml2 library
 Group: Development/Libraries
 Requires: libxml2 = %{version}-%{release}
-Requires: python
 
 %description python
 The libxml2-python package contains a module that permits applications
 written in the Python programming language to use the interface
 supplied by the libxml2 library to manipulate XML files.
 
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DTDs, either
 at parse time or later once the document has been modified.
@@ -62,29 +70,34 @@ at parse time or later once the document has been modified.
 %build
 %configure
 make %{_smp_mflags}
-gzip -9 ChangeLog
 
 %install
 rm -fr %{buildroot}
 
-%makeinstall
-(cd doc/examples ; make clean ; rm -rf .deps Makefile)
-gzip -9 doc/libxml2-api.xml
+make install DESTDIR=%{buildroot}
+
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
+rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-%{version}/*
+rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-python-%{version}/*
+(cd doc/examples ; make clean ; rm -rf .deps Makefile)
+gzip -9 -c doc/libxml2-api.xml > doc/libxml2-api.xml.gz
+
+%check
+make runtests
 
 %clean
 rm -fr %{buildroot}
 
-%post
-/sbin/ldconfig
+%post -p /sbin/ldconfig
 
-%postun
-/sbin/ldconfig
+%postun -p /sbin/ldconfig
 
 %files
 %defattr(-, root, root)
 
-%doc AUTHORS ChangeLog.gz NEWS README Copyright TODO
+%doc AUTHORS NEWS README Copyright TODO
 %doc %{_mandir}/man1/xmllint.1*
 %doc %{_mandir}/man1/xmlcatalog.1*
 %doc %{_mandir}/man3/libxml.3*
@@ -97,7 +110,7 @@ rm -fr %{buildroot}
 %defattr(-, root, root)
 
 %doc %{_mandir}/man1/xml2-config.1*
-%doc AUTHORS ChangeLog.gz NEWS README Copyright
+%doc AUTHORS NEWS README Copyright
 %doc doc/*.html doc/html doc/*.gif doc/*.png
 %doc doc/tutorial doc/libxml2-api.xml.gz
 %doc doc/examples
@@ -108,16 +121,21 @@ rm -fr %{buildroot}
 %doc %{_datadir}/gtk-doc/html/libxml2/*.css
 
 %{_libdir}/lib*.so
-%{_libdir}/*a
 %{_libdir}/*.sh
 %{_includedir}/*
 %{_bindir}/xml2-config
 %{_datadir}/aclocal/libxml.m4
 %{_libdir}/pkgconfig/libxml-2.0.pc
+%{_libdir}/cmake/libxml2/libxml2-config.cmake
+
+%files static
+%defattr(-, root, root)
+
+%{_libdir}/*a
+
 %files python
 %defattr(-, root, root)
 
-%doc AUTHORS ChangeLog.gz NEWS README Copyright
 %{_libdir}/python*/site-packages/libxml2.py*
 %{_libdir}/python*/site-packages/drv_libxml2.py*
 %{_libdir}/python*/site-packages/libxml2mod*
diff --git a/libxml2-config.cmake.in b/libxml2-config.cmake.in
new file mode 100644 (file)
index 0000000..ac29329
--- /dev/null
@@ -0,0 +1,50 @@
+# libxml2-config.cmake
+# --------------------
+#
+# Libxml2 cmake module.
+# THis module sets the following variables:
+#
+# ::
+#
+#   LIBXML2_INCLUDE_DIRS      - Directory where libxml2 headers are located.
+#   LIBXML2_LIBRARIES         - xml2 libraries to link against.
+#   LIBXML2_VERSION_MAJOR     - The major version of libxml2.
+#   LIBXML2_VERSION_MINOR     - The minor version of libxml2.
+#   LIBXML2_VERSION_PATCH     - The patch version of libxml2.
+#   LIBXML2_VERSION_STRING    - version number as a string (ex: "2.3.4")
+#   LIBXML2_MODULES           - whether libxml2 as dso support
+
+get_filename_component(_libxml2_rootdir ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE)
+
+set(LIBXML2_VERSION_MAJOR  @LIBXML_MAJOR_VERSION@)
+set(LIBXML2_VERSION_MINOR  @LIBXML_MINOR_VERSION@)
+set(LIBXML2_VERSION_MICRO  @LIBXML_MICRO_VERSION@)
+set(LIBXML2_VERSION_STRING "@VERSION@")
+set(LIBXML2_INSTALL_PREFIX ${_libxml2_rootdir})
+set(LIBXML2_INCLUDE_DIRS   ${_libxml2_rootdir}/include)
+set(LIBXML2_LIBRARY_DIR    ${_libxml2_rootdir}/lib)
+set(LIBXML2_LIBRARIES      -L${LIBXML2_LIBRARY_DIR} -lxml2)
+
+if(@WITH_THREADS@)
+  find_package(Threads REQUIRED)
+  list(APPEND LIBXML2_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+endif()
+
+if(@WITH_LZMA@)
+  find_package(LibLZMA REQUIRED)
+  list(APPEND LIBXML2_LIBRARIES    ${LIBLZMA_LIBRARIES})
+  list(APPEND LIBXML2_INCLUDE_DIRS ${LIBLZMA_INCLUDE_DIRS})
+endif()
+
+if(@WITH_ZLIB@)
+  find_package(ZLIB REQUIRED)
+  list(APPEND LIBXML2_LIBRARIES    ${ZLIB_LIBRARIES})
+  list(APPEND LIBXML2_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS})
+endif()
+
+list(APPEND LIBXML2_LIBRARIES @ICU_LIBS@ @ICONV_LIBS@ @M_LIBS@ @WIN32_EXTRA_LIBADD@ @LIBS@)
+
+# whether libxml2 has dso support
+set(LIBXML2_MODULES @WITH_MODULES@)
+
+mark_as_advanced( LIBXML2_INCLUDE_DIRS LIBXML2_LIBRARIES )
index 0e4cdaf..130cda7 100644 (file)
@@ -1,22 +1,22 @@
 Summary: Library providing XML and HTML support
 Name: libxml2
-Version: 2.8.0
-Release: 1
+Version: 2.9.2
+Release: 1%{?dist}%{?extra_release}
 License: MIT
 Group: Development/Libraries
 Source: ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
 BuildRequires: python python-devel zlib-devel pkgconfig xz-devel
 URL: http://xmlsoft.org/
 
 %description
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DtDs, either
 at parse time or later once the document has been modified. The output
 can be a simple SAX stream or and in-memory DOM like representations.
 In this case one can use the built-in XPath and XPointer implementation
-to select subnodes or ranges. A flexible Input/Output mechanism is
+to select sub nodes or ranges. A flexible Input/Output mechanism is
 available, with existing HTTP and FTP modules and combined to an
 URI library.
 
@@ -30,28 +30,36 @@ Requires: pkgconfig
 
 %description devel
 Libraries, include files, etc you can use to develop XML applications.
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DtDs, either
 at parse time or later once the document has been modified. The output
 can be a simple SAX stream or and in-memory DOM like representations.
 In this case one can use the built-in XPath and XPointer implementation
-to select subnodes or ranges. A flexible Input/Output mechanism is
+to select sub nodes or ranges. A flexible Input/Output mechanism is
 available, with existing HTTP and FTP modules and combined to an
 URI library.
 
+%package static
+Summary: Static library for libxml2
+Group: Development/Libraries
+Requires: libxml2 = %{version}-%{release}
+
+%description static
+Static library for libxml2 provided for specific uses or shaving a few
+microseconds when parsing, do not link to them for generic purpose packages.
+
 %package python
 Summary: Python bindings for the libxml2 library
 Group: Development/Libraries
 Requires: libxml2 = %{version}-%{release}
-Requires: python
 
 %description python
 The libxml2-python package contains a module that permits applications
 written in the Python programming language to use the interface
 supplied by the libxml2 library to manipulate XML files.
 
-This library allows to manipulate XML files. It includes support 
+This library allows to manipulate XML files. It includes support
 to read, modify and write XML and HTML files. There is DTDs support
 this includes parsing and validation even with complex DTDs, either
 at parse time or later once the document has been modified.
@@ -62,29 +70,34 @@ at parse time or later once the document has been modified.
 %build
 %configure
 make %{_smp_mflags}
-gzip -9 ChangeLog
 
 %install
 rm -fr %{buildroot}
 
-%makeinstall
-(cd doc/examples ; make clean ; rm -rf .deps Makefile)
-gzip -9 doc/libxml2-api.xml
+make install DESTDIR=%{buildroot}
+
 rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
+rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-%{version}/*
+rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libxml2-python-%{version}/*
+(cd doc/examples ; make clean ; rm -rf .deps Makefile)
+gzip -9 -c doc/libxml2-api.xml > doc/libxml2-api.xml.gz
+
+%check
+make runtests
 
 %clean
 rm -fr %{buildroot}
 
-%post
-/sbin/ldconfig
+%post -p /sbin/ldconfig
 
-%postun
-/sbin/ldconfig
+%postun -p /sbin/ldconfig
 
 %files
 %defattr(-, root, root)
 
-%doc AUTHORS ChangeLog.gz NEWS README Copyright TODO
+%doc AUTHORS NEWS README Copyright TODO
 %doc %{_mandir}/man1/xmllint.1*
 %doc %{_mandir}/man1/xmlcatalog.1*
 %doc %{_mandir}/man3/libxml.3*
@@ -97,7 +110,7 @@ rm -fr %{buildroot}
 %defattr(-, root, root)
 
 %doc %{_mandir}/man1/xml2-config.1*
-%doc AUTHORS ChangeLog.gz NEWS README Copyright
+%doc AUTHORS NEWS README Copyright
 %doc doc/*.html doc/html doc/*.gif doc/*.png
 %doc doc/tutorial doc/libxml2-api.xml.gz
 %doc doc/examples
@@ -108,16 +121,21 @@ rm -fr %{buildroot}
 %doc %{_datadir}/gtk-doc/html/libxml2/*.css
 
 %{_libdir}/lib*.so
-%{_libdir}/*a
 %{_libdir}/*.sh
 %{_includedir}/*
 %{_bindir}/xml2-config
 %{_datadir}/aclocal/libxml.m4
 %{_libdir}/pkgconfig/libxml-2.0.pc
+%{_libdir}/cmake/libxml2/libxml2-config.cmake
+
+%files static
+%defattr(-, root, root)
+
+%{_libdir}/*a
+
 %files python
 %defattr(-, root, root)
 
-%doc AUTHORS ChangeLog.gz NEWS README Copyright
 %{_libdir}/python*/site-packages/libxml2.py*
 %{_libdir}/python*/site-packages/drv_libxml2.py*
 %{_libdir}/python*/site-packages/libxml2mod*
@@ -128,6 +146,6 @@ rm -fr %{buildroot}
 %doc doc/python.html
 
 %changelog
-* Wed May 23 2012 Daniel Veillard <veillard@redhat.com>
-- upstream release 2.8.0 see http://xmlsoft.org/news.html
+* Thu Oct 16 2014 Daniel Veillard <veillard@redhat.com>
+- upstream release 2.9.2 see http://xmlsoft.org/news.html
 
index 93eff53..370dcf1 100644 (file)
@@ -2244,3 +2244,38 @@ LIBXML2_2.8.0 {
   xmlInitializeDict;
 } LIBXML2_2.7.4;
 
+LIBXML2_2.9.0 {
+    global:
+
+# tree
+  xmlBufContent;
+  xmlBufEnd;
+  xmlBufGetNodeContent;
+  xmlBufNodeDump;
+  xmlBufShrink;
+  xmlBufUse;
+
+# dict
+  xmlDictGetUsage;
+  xmlDictSetLimit;
+
+# xmlschemas
+  xmlSchemaValidateSetFilename;
+  xmlSchemaValidateSetLocator;
+
+# xmlIO
+  xmlOutputBufferGetContent;
+  xmlOutputBufferGetSize;
+
+# xmlwriter
+  xmlTextWriterSetQuoteChar;
+} LIBXML2_2.8.0;
+
+LIBXML2_2.9.1 {
+    global:
+
+# xpath
+  xmlXPathNodeEval;
+  xmlXPathSetContextNode;
+} LIBXML2_2.9.0;
+
diff --git a/list.c b/list.c
index 5c01c83..d33d928 100644 (file)
--- a/list.c
+++ b/list.c
@@ -94,15 +94,15 @@ xmlLinkCompare(const void *data0, const void *data1)
  *
  * Returns the link containing the data or NULL
  */
-static xmlLinkPtr 
-xmlListLowerSearch(xmlListPtr l, void *data) 
+static xmlLinkPtr
+xmlListLowerSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
 
     if (l == NULL)
         return(NULL);
     for(lk = l->sentinel->next;lk != l->sentinel && l->linkCompare(lk->data, data) <0 ;lk = lk->next);
-    return lk;    
+    return lk;
 }
 
 /**
@@ -114,15 +114,15 @@ xmlListLowerSearch(xmlListPtr l, void *data)
  *
  * Returns the link containing the data or NULL
  */
-static xmlLinkPtr 
-xmlListHigherSearch(xmlListPtr l, void *data) 
+static xmlLinkPtr
+xmlListHigherSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
 
     if (l == NULL)
         return(NULL);
     for(lk = l->sentinel->prev;lk != l->sentinel && l->linkCompare(lk->data, data) >0 ;lk = lk->prev);
-    return lk;    
+    return lk;
 }
 
 /**
@@ -134,8 +134,8 @@ xmlListHigherSearch(xmlListPtr l, void *data)
  *
  * Returns the link containing the data or NULL
  */
-static xmlLinkPtr 
-xmlListLinkSearch(xmlListPtr l, void *data) 
+static xmlLinkPtr
+xmlListLinkSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
     if (l == NULL)
@@ -159,8 +159,8 @@ xmlListLinkSearch(xmlListPtr l, void *data)
  *
  * Returns the link containing the data or NULL
  */
-static xmlLinkPtr 
-xmlListLinkReverseSearch(xmlListPtr l, void *data) 
+static xmlLinkPtr
+xmlListLinkReverseSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
     if (l == NULL)
@@ -189,16 +189,16 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
 {
     xmlListPtr l;
     if (NULL == (l = (xmlListPtr )xmlMalloc( sizeof(xmlList)))) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for list");
         return (NULL);
     }
     /* Initialize the list to NULL */
     memset(l, 0, sizeof(xmlList));
-    
+
     /* Add the sentinel */
     if (NULL ==(l->sentinel = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for sentinel");
        xmlFree(l);
         return (NULL);
@@ -206,7 +206,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
     l->sentinel->next = l->sentinel;
     l->sentinel->prev = l->sentinel;
     l->sentinel->data = NULL;
-    
+
     /* If there is a link deallocator, use it */
     if (deallocator != NULL)
         l->linkDeallocator = deallocator;
@@ -217,7 +217,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
         l->linkCompare = xmlLinkCompare;
     return l;
 }
-    
+
 /**
  * xmlListSearch:
  * @l:  a list
@@ -228,7 +228,7 @@ xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
  * Returns the value associated to @data or NULL in case of error
  */
 void *
-xmlListSearch(xmlListPtr l, void *data) 
+xmlListSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
     if (l == NULL)
@@ -249,7 +249,7 @@ xmlListSearch(xmlListPtr l, void *data)
  * Returns the value associated to @data or NULL in case of error
  */
 void *
-xmlListReverseSearch(xmlListPtr l, void *data) 
+xmlListReverseSearch(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
     if (l == NULL)
@@ -270,7 +270,7 @@ xmlListReverseSearch(xmlListPtr l, void *data)
  * Returns 0 in case of success, 1 in case of failure
  */
 int
-xmlListInsert(xmlListPtr l, void *data) 
+xmlListInsert(xmlListPtr l, void *data)
 {
     xmlLinkPtr lkPlace, lkNew;
 
@@ -280,7 +280,7 @@ xmlListInsert(xmlListPtr l, void *data)
     /* Add the new link */
     lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
     if (lkNew == NULL) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for new link");
         return (1);
     }
@@ -302,7 +302,7 @@ xmlListInsert(xmlListPtr l, void *data)
  *
  * Returns 0 in case of success, 1 in case of failure
  */
-int xmlListAppend(xmlListPtr l, void *data) 
+int xmlListAppend(xmlListPtr l, void *data)
 {
     xmlLinkPtr lkPlace, lkNew;
 
@@ -312,7 +312,7 @@ int xmlListAppend(xmlListPtr l, void *data)
     /* Add the new link */
     lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
     if (lkNew == NULL) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for new link");
         return (1);
     }
@@ -353,7 +353,7 @@ int
 xmlListRemoveFirst(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
-    
+
     if (l == NULL)
         return(0);
     /*Find the first instance of this data */
@@ -378,7 +378,7 @@ int
 xmlListRemoveLast(xmlListPtr l, void *data)
 {
     xmlLinkPtr lk;
-    
+
     if (l == NULL)
         return(0);
     /*Find the last instance of this data */
@@ -403,7 +403,7 @@ int
 xmlListRemoveAll(xmlListPtr l, void *data)
 {
     int count=0;
-    
+
     if (l == NULL)
         return(0);
 
@@ -422,7 +422,7 @@ void
 xmlListClear(xmlListPtr l)
 {
     xmlLinkPtr  lk;
-    
+
     if (l == NULL)
         return;
     lk = l->sentinel->next;
@@ -458,14 +458,14 @@ xmlListEmpty(xmlListPtr l)
  *
  * Returns the first element in the list, or NULL
  */
-xmlLinkPtr 
+xmlLinkPtr
 xmlListFront(xmlListPtr l)
 {
     if (l == NULL)
         return(NULL);
     return (l->sentinel->next);
 }
-    
+
 /**
  * xmlListEnd:
  * @l:  a list
@@ -474,14 +474,14 @@ xmlListFront(xmlListPtr l)
  *
  * Returns the last element in the list, or NULL
  */
-xmlLinkPtr 
+xmlLinkPtr
 xmlListEnd(xmlListPtr l)
 {
     if (l == NULL)
         return(NULL);
     return (l->sentinel->prev);
 }
-    
+
 /**
  * xmlListSize:
  * @l:  a list
@@ -539,7 +539,7 @@ xmlListPopBack(xmlListPtr l)
  * Returns 1 if successful, 0 otherwise
  */
 int
-xmlListPushFront(xmlListPtr l, void *data) 
+xmlListPushFront(xmlListPtr l, void *data)
 {
     xmlLinkPtr lkPlace, lkNew;
 
@@ -549,7 +549,7 @@ xmlListPushFront(xmlListPtr l, void *data)
     /* Add the new link */
     lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
     if (lkNew == NULL) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for new link");
         return (0);
     }
@@ -571,7 +571,7 @@ xmlListPushFront(xmlListPtr l, void *data)
  * Returns 1 if successful, 0 otherwise
  */
 int
-xmlListPushBack(xmlListPtr l, void *data) 
+xmlListPushBack(xmlListPtr l, void *data)
 {
     xmlLinkPtr lkPlace, lkNew;
 
@@ -580,7 +580,7 @@ xmlListPushBack(xmlListPtr l, void *data)
     lkPlace = l->sentinel->prev;
     /* Add the new link */
     if (NULL ==(lkNew = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                        "Cannot initialize memory for new link");
         return (0);
     }
@@ -643,7 +643,7 @@ void
 xmlListSort(xmlListPtr l)
 {
     xmlListPtr lTemp;
-    
+
     if (l == NULL)
         return;
     if(xmlListEmpty(l))
@@ -725,10 +725,10 @@ xmlListMerge(xmlListPtr l1, xmlListPtr l2)
  * @old:  the list
  *
  * Duplicate the list
- * 
+ *
  * Returns a new copy of the list or NULL in case of error
  */
-xmlListPtr 
+xmlListPtr
 xmlListDup(const xmlListPtr old)
 {
     xmlListPtr cur;
@@ -754,7 +754,7 @@ xmlListDup(const xmlListPtr old)
  * @old:  the old list
  *
  * Move all the element from the old list in the new list
- * 
+ *
  * Returns 0 in case of success 1 in case of error
  */
 int
@@ -771,7 +771,7 @@ xmlListCopy(xmlListPtr cur, const xmlListPtr old)
             return (1);
         }
     }
-    return (0);    
+    return (0);
 }
 /* xmlListUnique() */
 /* xmlListSwap */
old mode 100755 (executable)
new mode 100644 (file)
index aa5624c..63ae69d
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,9 @@
 
-# libtool (GNU libtool) 2.4
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -41,6 +41,7 @@
 #       --quiet, --silent    don't print informational messages
 #       --no-quiet, --no-silent
 #                            print informational messages (default)
+#       --no-warn            don't display warning messages
 #       --tag=TAG            use configuration variables from tag TAG
 #   -v, --verbose            print more informational messages than default
 #       --no-verbose         don't print the extra informational messages
@@ -69,7 +70,7 @@
 #         compiler:            $LTCC
 #         compiler flags:              $LTCFLAGS
 #         linker:              $LD (gnu? $with_gnu_ld)
-#         $progname:   (GNU libtool) 2.4
+#         $progname:   (GNU libtool) 2.4.2
 #         automake:    $automake_version
 #         autoconf:    $autoconf_version
 #
@@ -79,9 +80,9 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.4
+VERSION=2.4.2
 TIMESTAMP=""
-package_revision=1.3293
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -136,15 +137,10 @@ progpath="$0"
 
 : ${CP="cp -f"}
 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -387,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -771,8 +767,8 @@ func_help ()
        s*\$LTCFLAGS*'"$LTCFLAGS"'*
        s*\$LD*'"$LD"'*
        s/\$with_gnu_ld/'"$with_gnu_ld"'/
-       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
        p
        d
      }
@@ -1052,6 +1048,7 @@ opt_finish=false
 opt_help=false
 opt_help_all=false
 opt_silent=:
+opt_warning=:
 opt_verbose=:
 opt_silent=false
 opt_verbose=false
@@ -1120,6 +1117,10 @@ esac
                        opt_silent=false
 func_append preserve_args " $opt"
                        ;;
+      --no-warning|--no-warn)
+                       opt_warning=false
+func_append preserve_args " $opt"
+                       ;;
       --no-verbose)
                        opt_verbose=false
 func_append preserve_args " $opt"
@@ -2059,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -3201,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-       func_show_eval "$old_striplib $oldlib" 'exit $?'
+       func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -3470,7 +3473,7 @@ static const void *lt_preloaded_setup() {
          # linked before any other PIC object.  But we must not use
          # pic_flag when linking with -static.  The problem exists in
          # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+         *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
            pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
@@ -3982,14 +3985,17 @@ func_exec_program_core ()
 # launches target application with the remaining arguments.
 func_exec_program ()
 {
-  for lt_wr_arg
-  do
-    case \$lt_wr_arg in
-    --lt-*) ;;
-    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
-    esac
-    shift
-  done
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
   func_exec_program_core \${1+\"\$@\"}
 }
 
@@ -5057,9 +5063,15 @@ void lt_dump_script (FILE* f)
 {
 EOF
            func_emit_wrapper yes |
-              $SED -e 's/\([\\"]\)/\\\1/g' \
-                  -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-
+             $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
             cat <<"EOF"
 }
 EOF
@@ -5643,7 +5655,8 @@ func_mode_link ()
        continue
        ;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
        func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
@@ -6147,7 +6160,8 @@ func_mode_link ()
        lib=
        found=no
        case $deplib in
-       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
          if test "$linkmode,$pass" = "prog,link"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
@@ -6831,7 +6845,7 @@ func_mode_link ()
                 test "$hardcode_direct_absolute" = no; then
                add="$dir/$linklib"
              elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$dir"
+               add_dir="-L$absdir"
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
@@ -7316,6 +7330,7 @@ func_mode_link ()
          # which has an extra 1 added just for fun
          #
          case $version_type in
+         # correct linux to gnu/linux during the next big refactor
          darwin|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
@@ -7432,7 +7447,7 @@ func_mode_link ()
          versuffix="$major.$revision"
          ;;
 
-       linux)
+       linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
          versuffix="$major.$age.$revision"
@@ -8020,6 +8035,11 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+       # Remove ${wl} instances when linking with ld.
+       # FIXME: should test the right _cmds variable.
+       case $archive_cmds in
+         *\$LD\ *) wl= ;;
+        esac
        if test "$hardcode_into_libs" = yes; then
          # Hardcode the library paths
          hardcode_libdirs=
@@ -8050,7 +8070,7 @@ EOF
            elif test -n "$runpath_var"; then
              case "$perm_rpath " in
              *" $libdir "*) ;;
-             *) func_apped perm_rpath " $libdir" ;;
+             *) func_append perm_rpath " $libdir" ;;
              esac
            fi
          done
@@ -8058,11 +8078,7 @@ EOF
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
            libdir="$hardcode_libdirs"
-           if test -n "$hardcode_libdir_flag_spec_ld"; then
-             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-           else
-             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-           fi
+           eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
            # We should set the runpath_var.
@@ -9152,6 +9168,8 @@ EOF
            esac
          done
        fi
+       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+       tool_oldlib=$func_to_tool_file_result
        eval cmds=\"$old_archive_cmds\"
 
        func_len " $cmds"
@@ -9261,7 +9279,8 @@ EOF
              *.la)
                func_basename "$deplib"
                name="$func_basename_result"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               func_resolve_sysroot "$deplib"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
                test -z "$libdir" && \
                  func_fatal_error "\`$deplib' is not a valid libtool archive"
                func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
index 88de383..f12cfdf 100644 (file)
@@ -1,8 +1,8 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,8 +11,8 @@
 
 m4_define([_LT_COPYING], [dnl
 #   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-#                 Inc.
+#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+#                 Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 #   This file is part of GNU Libtool.
@@ -146,6 +146,8 @@ AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
 
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
 _LT_DECL([], [host_alias], [0], [The host system])dnl
 _LT_DECL([], [host], [0])dnl
 _LT_DECL([], [host_os], [0])dnl
@@ -637,7 +639,7 @@ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
 m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
 configured by $[0], generated by m4_PACKAGE_STRING.
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2011 Free Software Foundation, Inc.
 This config.lt script is free software; the Free Software Foundation
 gives unlimited permision to copy, distribute and modify it."
 
@@ -801,6 +803,7 @@ AC_DEFUN([LT_LANG],
 m4_case([$1],
   [C],                 [_LT_LANG(C)],
   [C++],               [_LT_LANG(CXX)],
+  [Go],                        [_LT_LANG(GO)],
   [Java],              [_LT_LANG(GCJ)],
   [Fortran 77],                [_LT_LANG(F77)],
   [Fortran],           [_LT_LANG(FC)],
@@ -822,6 +825,31 @@ m4_defun([_LT_LANG],
 ])# _LT_LANG
 
 
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
 # _LT_LANG_DEFAULT_CONFIG
 # -----------------------
 m4_defun([_LT_LANG_DEFAULT_CONFIG],
@@ -852,6 +880,10 @@ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
        m4_ifdef([LT_PROG_GCJ],
        [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
 
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
 AC_PROVIDE_IFELSE([LT_PROG_RC],
   [LT_LANG(RC)],
   [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
@@ -954,7 +986,13 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
        $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
          -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
         _lt_result=$?
-       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+       # If there is a non-empty error log, and "single_module"
+       # appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       # Otherwise, if the output was created with a 0 exit code from
+       # the compiler, it worked.
+       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -962,6 +1000,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
        rm -rf libconftest.dylib*
        rm -f conftest.*
       fi])
+
     AC_CACHE_CHECK([for -exported_symbols_list linker flag],
       [lt_cv_ld_exported_symbols_list],
       [lt_cv_ld_exported_symbols_list=no
@@ -973,6 +1012,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
        [lt_cv_ld_exported_symbols_list=no])
        LDFLAGS="$save_LDFLAGS"
     ])
+
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
       [lt_cv_ld_force_load=no
       cat > conftest.c << _LT_EOF
@@ -990,7 +1030,9 @@ _LT_EOF
       echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
       $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
       _lt_result=$?
-      if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+      if test -s conftest.err && $GREP force_load conftest.err; then
+       cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1035,8 +1077,8 @@ _LT_EOF
 ])
 
 
-# _LT_DARWIN_LINKER_FEATURES
-# --------------------------
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
 # Checks for linker and compiler features on darwin
 m4_defun([_LT_DARWIN_LINKER_FEATURES],
 [
@@ -1047,6 +1089,8 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
   if test "$lt_cv_ld_force_load" = "yes"; then
     _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
@@ -1268,7 +1312,7 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
@@ -1282,7 +1326,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_i386"
            ;;
-         ppc64-*linux*|powerpc64-*linux*)
+         powerpc64le-*linux*)
+           LD="${LD-ld} -m elf32lppclinux"
+           ;;
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -1301,7 +1348,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         ppc*-*linux*|powerpc*-*linux*)
+         powerpcle-*linux*)
+           LD="${LD-ld} -m elf64lppc"
+           ;;
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -1330,14 +1380,27 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
     CFLAGS="$SAVE_CFLAGS"
   fi
   ;;
-sparc*-*solaris*)
+*-*solaris*)
   # Find out which ABI we are using.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      yes*)
+        case $host in
+        i?86-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD="${LD-ld}_sol2"
+        fi
+        ;;
       *)
        if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
          LD="${LD-ld} -64"
@@ -1414,13 +1477,13 @@ old_postuninstall_cmds=
 if test -n "$RANLIB"; then
   case $host_os in
   openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
     ;;
   esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
 fi
 
 case $host_os in
@@ -1600,6 +1663,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=196608
     ;;
 
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
   osf*)
     # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
     # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
@@ -1639,7 +1707,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
       # If test is not a shell built-in, we'll probably end up computing a
       # maximum length that is only half of the actual maximum length, but
       # we can't tell.
-      while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+      while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
              test $i != 17 # 1/2 MB should be enough
       do
@@ -2185,7 +2253,7 @@ need_version=unknown
 
 case $host_os in
 aix3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
   shlibpath_var=LIBPATH
 
@@ -2194,7 +2262,7 @@ aix3*)
   ;;
 
 aix[[4-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
@@ -2259,7 +2327,7 @@ beos*)
   ;;
 
 bsdi[[45]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
@@ -2398,7 +2466,7 @@ m4_if([$1], [],[
   ;;
 
 dgux*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
@@ -2406,10 +2474,6 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
 freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
@@ -2417,7 +2481,7 @@ freebsd* | dragonfly*)
     objformat=`/usr/bin/objformat`
   else
     case $host_os in
-    freebsd[[123]]*) objformat=aout ;;
+    freebsd[[23]].*) objformat=aout ;;
     *) objformat=elf ;;
     esac
   fi
@@ -2435,7 +2499,7 @@ freebsd* | dragonfly*)
   esac
   shlibpath_var=LD_LIBRARY_PATH
   case $host_os in
-  freebsd2*)
+  freebsd2.*)
     shlibpath_overrides_runpath=yes
     ;;
   freebsd3.[[01]]* | freebsdelf3.[[01]]*)
@@ -2455,17 +2519,18 @@ freebsd* | dragonfly*)
   ;;
 
 gnu*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
   hardcode_into_libs=yes
   ;;
 
 haiku*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
@@ -2526,7 +2591,7 @@ hpux9* | hpux10* | hpux11*)
   ;;
 
 interix[[3-9]]*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
@@ -2542,7 +2607,7 @@ irix5* | irix6* | nonstopux*)
     nonstopux*) version_type=nonstopux ;;
     *)
        if test "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
+               version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
        fi ;;
@@ -2579,9 +2644,9 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2648,7 +2713,7 @@ netbsd*)
   ;;
 
 newsos6)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   shlibpath_var=LD_LIBRARY_PATH
   shlibpath_overrides_runpath=yes
@@ -2717,7 +2782,7 @@ rdos*)
   ;;
 
 solaris*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2742,7 +2807,7 @@ sunos4*)
   ;;
 
 sysv4 | sysv4.3*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -2766,7 +2831,7 @@ sysv4 | sysv4.3*)
 
 sysv4*MP*)
   if test -d /usr/nec ;then
-    version_type=linux
+    version_type=linux # correct to gnu/linux during the next big refactor
     library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
     soname_spec='$libname${shared_ext}.$major'
     shlibpath_var=LD_LIBRARY_PATH
@@ -2797,7 +2862,7 @@ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 
 tpf*)
   # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
@@ -2807,7 +2872,7 @@ tpf*)
   ;;
 
 uts4*)
-  version_type=linux
+  version_type=linux # correct to gnu/linux during the next big refactor
   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
   soname_spec='${libname}${release}${shared_ext}$major'
   shlibpath_var=LD_LIBRARY_PATH
@@ -3229,7 +3294,7 @@ irix5* | irix6* | nonstopux*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-# This must be Linux ELF.
+# This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
@@ -3649,6 +3714,7 @@ for ac_symprfx in "" "_"; do
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
 "     \$ 0!~/External *\|/{next};"\
 "     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
@@ -4233,7 +4299,9 @@ m4_if([$1], [CXX], [
     case $cc_basename in
     nvcc*) # Cuda Compiler Driver 2.2
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
-      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
       ;;
     esac
   else
@@ -4325,18 +4393,33 @@ m4_if([$1], [CXX], [
        ;;
       *)
        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ F* | *Sun*Fortran*)
+       *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
          # Sun Fortran 8.3 passes all unrecognized flags to the linker
          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
          _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
          ;;
+       *Sun\ F* | *Sun*Fortran*)
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+         ;;
        *Sun\ C*)
          # Sun C 5.9
          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
          _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
          ;;
+        *Intel*\ [[CF]]*Compiler*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+         ;;
+       *Portland\ Group*)
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         ;;
        esac
        ;;
       esac
@@ -4496,7 +4579,9 @@ m4_if([$1], [CXX], [
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
-    cl*) ;;
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
     *)
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
@@ -4521,7 +4606,6 @@ m4_if([$1], [CXX], [
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_direct_absolute, $1)=no
   _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
   _LT_TAGVAR(hardcode_libdir_separator, $1)=
   _LT_TAGVAR(hardcode_minus_L, $1)=no
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -4772,8 +4856,7 @@ _LT_EOF
        xlf* | bgf* | bgxlf* | mpixlf*)
          # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
          _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
          _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          if test "x$supports_anon_versioning" = xyes; then
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
@@ -5068,6 +5151,7 @@ _LT_EOF
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
        _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
        # Don't use ranlib
        _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
@@ -5114,10 +5198,6 @@ _LT_EOF
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
 
-    freebsd1*)
-      _LT_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
     # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
     # support.  Future versions do this automatically, but an explicit c++rt0.o
     # does not break anything, and helps significantly (at the cost of a little
@@ -5130,7 +5210,7 @@ _LT_EOF
       ;;
 
     # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
+    freebsd2.*)
       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
       _LT_TAGVAR(hardcode_direct, $1)=yes
       _LT_TAGVAR(hardcode_minus_L, $1)=yes
@@ -5169,7 +5249,6 @@ _LT_EOF
       fi
       if test "$with_gnu_ld" = no; then
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
        _LT_TAGVAR(hardcode_direct, $1)=yes
        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
@@ -5611,9 +5690,6 @@ _LT_TAGDECL([], [no_undefined_flag], [1],
 _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
     [Flag to hardcode $libdir into a binary during linking.
     This must work even if $libdir does not exist])
-_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
-    [[If ld is used when linking, flag to hardcode $libdir into a binary
-    during linking.  This must work even if $libdir does not exist]])
 _LT_TAGDECL([], [hardcode_libdir_separator], [1],
     [Whether we need a single "-rpath" flag with a separated argument])
 _LT_TAGDECL([], [hardcode_direct], [0],
@@ -5771,7 +5847,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
@@ -6141,7 +6216,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         esac
         ;;
 
-      freebsd[[12]]*)
+      freebsd2.*)
         # C++ shared libraries reported to be fairly broken before
        # switch to ELF
         _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6902,12 +6977,18 @@ public class foo {
   }
 };
 _LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
 ])
 
 _lt_libdeps_save_CFLAGS=$CFLAGS
 case "$CC $CFLAGS " in #(
 *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
 *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
 esac
 
 dnl Parse the compiler output and extract the necessary
@@ -7104,7 +7185,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7237,7 +7317,6 @@ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
 _LT_TAGVAR(hardcode_direct, $1)=no
 _LT_TAGVAR(hardcode_direct_absolute, $1)=no
 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 _LT_TAGVAR(hardcode_libdir_separator, $1)=
 _LT_TAGVAR(hardcode_minus_L, $1)=no
 _LT_TAGVAR(hardcode_automatic, $1)=no
@@ -7424,6 +7503,77 @@ CFLAGS=$lt_save_CFLAGS
 ])# _LT_LANG_GCJ_CONFIG
 
 
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
 # _LT_LANG_RC_CONFIG([TAG])
 # -------------------------
 # Ensure that the configuration variables for the Windows resource compiler
@@ -7493,6 +7643,13 @@ dnl aclocal-1.4 backwards compatibility:
 dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
 
 
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
 # LT_PROG_RC
 # ----------
 AC_DEFUN([LT_PROG_RC],
index 17cfd51..5d9acd8 100644 (file)
@@ -326,9 +326,24 @@ dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 # MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 m4_define([_LT_WITH_PIC],
 [AC_ARG_WITH([pic],
-    [AS_HELP_STRING([--with-pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
        [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for lt_pkg in $withval; do
+       IFS="$lt_save_ifs"
+       if test "X$lt_pkg" = "X$lt_p"; then
+         pic_mode=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
     [pic_mode=default])
 
 test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
index 9c7b5d4..07a8602 100644 (file)
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3293 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4])
-m4_define([LT_PACKAGE_REVISION], [1.3293])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4'
-macro_revision='1.3293'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/missing b/missing
index 28055d2..cdea514 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,11 +1,10 @@
 #! /bin/sh
-# Common stub for a few missing GNU programs while installing.
+# Common wrapper for a few potentially missing GNU programs.
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2012-06-26.16; # UTC
 
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -26,69 +25,40 @@ scriptversion=2009-04-28.21; # UTC
 # the same distribution terms that you use for the rest of that program.
 
 if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
+  echo 1>&2 "Try '$0 --help' for more information"
   exit 1
 fi
 
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
+case $1 in
 
-msg="missing on your system"
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -h|--h|--he|--hel|--help)
     echo "\
 $0 [OPTION]... PROGRAM [ARGUMENT]...
 
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 Options:
   -h, --help      display this help and exit
   -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
 
 Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
 
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
 
 Send bug reports to <bug-automake@gnu.org>."
     exit $?
@@ -100,272 +70,141 @@ Send bug reports to <bug-automake@gnu.org>."
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
     exit 1
     ;;
 
 esac
 
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar*)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-          sed 's/\.am$/.in/' |
-          while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo "#! /bin/sh"
-       echo "# Created by GNU Automake missing as a replacement of"
-       echo "#  $ $@"
-       echo "exit 0"
-       chmod +x $file
-       exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-       case $LASTARG in
-       *.y)
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.c
-           fi
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.h
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f y.tab.h; then
-       echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-       echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG="\${$#}"
-       case $LASTARG in
-       *.l)
-           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" lex.yy.c
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f lex.yy.c; then
-       echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-        you modified a dependency of a manual page.  You may need the
-        \`Help2man' package in order for those modifications to take
-        effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo ".ab help2man is required to generate this page"
-       exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-       /^@setfilename/{
-         s/.* \([^ ]*\) *$/\1/
-         p
-         q
-       }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar*)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-       case $firstarg in
-       *o*)
-           firstarg=`echo "$firstarg" | sed s/o//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-       case $firstarg in
-       *h*)
-           firstarg=`echo "$firstarg" | sed s/h//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
 
-exit 0
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'automa4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
index 9b32d66..2135ab9 100644 (file)
--- a/nanoftp.c
+++ b/nanoftp.c
@@ -41,7 +41,7 @@
 #include <netdb.h>
 #endif
 #ifdef HAVE_FCNTL_H
-#include <fcntl.h> 
+#include <fcntl.h>
 #endif
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -188,7 +188,7 @@ void
 xmlNanoFTPInit(void) {
     const char *env;
 #ifdef _WINSOCKAPI_
-    WSADATA wsaData;    
+    WSADATA wsaData;
 #endif
 
     if (initialized)
@@ -305,15 +305,15 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) {
     /*
      * Clear any existing data from the context
      */
-    if (ctxt->protocol != NULL) { 
+    if (ctxt->protocol != NULL) {
         xmlFree(ctxt->protocol);
        ctxt->protocol = NULL;
     }
-    if (ctxt->hostname != NULL) { 
+    if (ctxt->hostname != NULL) {
         xmlFree(ctxt->hostname);
        ctxt->hostname = NULL;
     }
-    if (ctxt->path != NULL) { 
+    if (ctxt->path != NULL) {
         xmlFree(ctxt->path);
        ctxt->path = NULL;
     }
@@ -327,7 +327,7 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) {
        xmlFreeURI(uri);
        return;
     }
-    
+
     ctxt->protocol = xmlMemStrdup(uri->scheme);
     ctxt->hostname = xmlMemStrdup(uri->server);
     if (uri->path != NULL)
@@ -358,7 +358,7 @@ xmlNanoFTPScanURL(void *ctx, const char *URL) {
  * @URL:  The URL used to update the context
  *
  * Update an FTP context by parsing the URL and finding
- * new path it indicates. If there is an error in the 
+ * new path it indicates. If there is an error in the
  * protocol, hostname, port or other information, the
  * error is raised. It indicates a new connection has to
  * be established.
@@ -403,7 +403,7 @@ xmlNanoFTPUpdateURL(void *ctx, const char *URL) {
        ctxt->path = NULL;
     }
 
-    if (uri->path == NULL) 
+    if (uri->path == NULL)
         ctxt->path = xmlMemStrdup("/");
     else
        ctxt->path = xmlMemStrdup(uri->path);
@@ -427,7 +427,7 @@ void
 xmlNanoFTPScanProxy(const char *URL) {
     xmlURIPtr uri;
 
-    if (proxy != NULL) { 
+    if (proxy != NULL) {
         xmlFree(proxy);
        proxy = NULL;
     }
@@ -451,7 +451,7 @@ xmlNanoFTPScanProxy(const char *URL) {
            xmlFreeURI(uri);
        return;
     }
-    
+
     proxy = xmlMemStrdup(uri->server);
     if (uri->port != 0)
        proxyPort = uri->port;
@@ -523,7 +523,7 @@ xmlNanoFTPFreeCtxt(void * ctx) {
  * xmlNanoFTPParseResponse:
  * @buf:  the buffer containing the response
  * @len:  the buffer length
- * 
+ *
  * Parsing of the server answer, we just extract the code.
  *
  * returns 0 for errors
@@ -535,22 +535,22 @@ xmlNanoFTPParseResponse(char *buf, int len) {
     int val = 0;
 
     if (len < 3) return(-1);
-    if ((*buf >= '0') && (*buf <= '9')) 
+    if ((*buf >= '0') && (*buf <= '9'))
         val = val * 10 + (*buf - '0');
     else
         return(0);
     buf++;
-    if ((*buf >= '0') && (*buf <= '9')) 
+    if ((*buf >= '0') && (*buf <= '9'))
         val = val * 10 + (*buf - '0');
     else
         return(0);
     buf++;
-    if ((*buf >= '0') && (*buf <= '9')) 
+    if ((*buf >= '0') && (*buf <= '9'))
         val = val * 10 + (*buf - '0');
     else
         return(0);
     buf++;
-    if (*buf == '-') 
+    if (*buf == '-')
         return(-val);
     return(val);
 }
@@ -749,7 +749,7 @@ xmlNanoFTPCheckResponse(void *ctx) {
        case -1:
            __xmlIOErr(XML_FROM_FTP, 0, "select");
            return(-1);
-                       
+
     }
 
     return(xmlNanoFTPReadResponse(ctx));
@@ -775,7 +775,7 @@ xmlNanoFTPSendUser(void *ctx) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        return(res);
@@ -803,7 +803,7 @@ xmlNanoFTPSendPasswd(void *ctx) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        return(res);
@@ -834,7 +834,7 @@ xmlNanoFTPQuit(void *ctx) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf); /* Just to be consistent, even though we know it can't have a % in it */
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        return(res);
@@ -908,6 +908,8 @@ xmlNanoFTPConnect(void *ctx) {
            return (-1);
        }
        if (tmp->ai_addrlen > sizeof(ctxt->ftpAddr)) {
+           if (result)
+               freeaddrinfo (result);
            __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname address mismatch");
            return (-1);
        }
@@ -928,9 +930,9 @@ xmlNanoFTPConnect(void *ctx) {
 #endif
     {
        if (proxy)
-           hp = gethostbyname (proxy);
+           hp = gethostbyname (GETHOSTBYNAME_ARG_CAST proxy);
        else
-           hp = gethostbyname (ctxt->hostname);
+           hp = gethostbyname (GETHOSTBYNAME_ARG_CAST ctxt->hostname);
        if (hp == NULL) {
            __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname failed");
            return (-1);
@@ -1028,7 +1030,7 @@ xmlNanoFTPConnect(void *ctx) {
 #ifdef DEBUG_FTP
            xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-           res = send(ctxt->controlFd, buf, len, 0);
+           res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
            if (res < 0) {
                __xmlIOErr(XML_FROM_FTP, 0, "send failed");
                closesocket(ctxt->controlFd);
@@ -1050,7 +1052,7 @@ xmlNanoFTPConnect(void *ctx) {
 #ifdef DEBUG_FTP
                    xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-                   res = send(ctxt->controlFd, buf, len, 0);
+                   res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
                    if (res < 0) {
                        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
                        closesocket(ctxt->controlFd);
@@ -1091,7 +1093,7 @@ xmlNanoFTPConnect(void *ctx) {
 #ifdef DEBUG_FTP
                xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-               res = send(ctxt->controlFd, buf, len, 0);
+               res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
                if (res < 0) {
                    __xmlIOErr(XML_FROM_FTP, 0, "send failed");
                    closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
@@ -1103,7 +1105,7 @@ xmlNanoFTPConnect(void *ctx) {
                    /* we assume it worked :-\ 1 is error for SITE command */
                    proxyType = 1;
                    break;
-               }    
+               }
                if (proxyType == 1) {
                    closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
                    ctxt->controlFd = INVALID_SOCKET;
@@ -1122,7 +1124,7 @@ xmlNanoFTPConnect(void *ctx) {
 #ifdef DEBUG_FTP
                xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-               res = send(ctxt->controlFd, buf, len, 0);
+               res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
                if (res < 0) {
                    __xmlIOErr(XML_FROM_FTP, 0, "send failed");
                    closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
@@ -1134,7 +1136,7 @@ xmlNanoFTPConnect(void *ctx) {
                    /* we assume it worked :-\ */
                    proxyType = 2;
                    return(0);
-               }    
+               }
                if (ctxt->passwd == NULL)
                    snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
                else
@@ -1144,7 +1146,7 @@ xmlNanoFTPConnect(void *ctx) {
 #ifdef DEBUG_FTP
                xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-               res = send(ctxt->controlFd, buf, len, 0);
+               res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
                if (res < 0) {
                    __xmlIOErr(XML_FROM_FTP, 0, "send failed");
                    closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
@@ -1239,12 +1241,18 @@ xmlNanoFTPConnectTo(const char *server, int port) {
     int res;
 
     xmlNanoFTPInit();
-    if (server == NULL) 
+    if (server == NULL)
        return(NULL);
     if (port <= 0)
        return(NULL);
     ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(NULL);
+    if (ctxt == NULL)
+        return(NULL);
     ctxt->hostname = xmlMemStrdup(server);
+    if (ctxt->hostname == NULL) {
+       xmlNanoFTPFreeCtxt(ctxt);
+       return(NULL);
+    }
     if (port != 0)
        ctxt->port = port;
     res = xmlNanoFTPConnect(ctxt);
@@ -1288,7 +1296,7 @@ xmlNanoFTPCwd(void *ctx, const char *directory) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        return(res);
@@ -1321,8 +1329,8 @@ xmlNanoFTPDele(void *ctx, const char *file) {
     int len;
     int res;
 
-    if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET) || (file == NULL)) return(-1);
-    if (file == NULL) return (0);
+    if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET) ||
+        (file == NULL)) return(-1);
 
     /*
      * Expected response code for DELE:
@@ -1332,14 +1340,14 @@ xmlNanoFTPDele(void *ctx, const char *file) {
      *       450, 550
      *       500, 501, 502, 421, 530
      */
-        
+
     snprintf(buf, sizeof(buf), "DELE %s\r\n", file);
     buf[sizeof(buf) - 1] = 0;
     len = strlen(buf);
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        return(res);
@@ -1411,7 +1419,7 @@ xmlNanoFTPGetConnection(void *ctx) {
 #ifdef DEBUG_FTP
        xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-       res = send(ctxt->controlFd, buf, len, 0);
+       res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
        if (res < 0) {
            __xmlIOErr(XML_FROM_FTP, 0, "send failed");
            closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
@@ -1430,7 +1438,7 @@ xmlNanoFTPGetConnection(void *ctx) {
                ctxt->passive = 0;
            }
        }
-       cur = &ctxt->controlBuf[ctxt->controlBufAnswer]; 
+       cur = &ctxt->controlBuf[ctxt->controlBufAnswer];
        while (((*cur < '0') || (*cur > '9')) && *cur != '\0') cur++;
 #ifdef SUPPORT_IP6
        if ((ctxt->ftpAddr).ss_family == AF_INET6) {
@@ -1512,7 +1520,7 @@ xmlNanoFTPGetConnection(void *ctx) {
        xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
 
-       res = send(ctxt->controlFd, buf, len, 0);
+       res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
        if (res < 0) {
            __xmlIOErr(XML_FROM_FTP, 0, "send failed");
            closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
@@ -1525,7 +1533,7 @@ xmlNanoFTPGetConnection(void *ctx) {
         }
     }
     return(ctxt->dataFd);
-    
+
 }
 
 /**
@@ -1583,7 +1591,7 @@ xmlNanoFTPCloseConnection(void *ctx) {
  * @callback:  the user callback
  * @userData:  the user callback data
  *
- * Parse at most one entry from the listing. 
+ * Parse at most one entry from the listing.
  *
  * Returns -1 incase of error, the length of data parsed otherwise
  */
@@ -1620,7 +1628,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData)
        if (*cur == 0) return(0);
        i = 0;
        while (*cur != ' ') {
-           if (i < 10) 
+           if (i < 10)
                attrib[i++] = *cur;
            cur++;
            if (*cur == 0) return(0);
@@ -1634,7 +1642,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData)
        if (*cur == 0) return(0);
        i = 0;
        while (*cur != ' ') {
-           if (i < 10) 
+           if (i < 10)
                owner[i++] = *cur;
            cur++;
            if (*cur == 0) return(0);
@@ -1644,7 +1652,7 @@ xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData)
        if (*cur == 0) return(0);
        i = 0;
        while (*cur != ' ') {
-           if (i < 10) 
+           if (i < 10)
                group[i++] = *cur;
            cur++;
            if (*cur == 0) return(0);
@@ -1749,7 +1757,7 @@ xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
@@ -1844,7 +1852,7 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
@@ -1864,7 +1872,7 @@ xmlNanoFTPGetSocket(void *ctx, const char *filename) {
 #ifdef DEBUG_FTP
     xmlGenericError(xmlGenericErrorContext, "%s", buf);
 #endif
-    res = send(ctxt->controlFd, buf, len, 0);
+    res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
     if (res < 0) {
        __xmlIOErr(XML_FROM_FTP, 0, "send failed");
        closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
@@ -1986,7 +1994,7 @@ xmlNanoFTPRead(void *ctx, void *dest, int len) {
  *
  * Start to fetch the given ftp:// resource
  *
- * Returns an FTP context, or NULL 
+ * Returns an FTP context, or NULL
  */
 
 void*
@@ -2043,9 +2051,9 @@ xmlNanoFTPClose(void *ctx) {
 
 #ifdef STANDALONE
 /************************************************************************
- *                                                                     *
- *                     Basic test in Standalone mode                   *
- *                                                                     *
+ *                                                                     *
+ *                     Basic test in Standalone mode                   *
+ *                                                                     *
  ************************************************************************/
 static
 void ftpList(void *userData, const char *filename, const char* attrib,
@@ -2060,7 +2068,7 @@ void ftpData(void *userData, const char *data, int len) {
     if (len <= 0) {
        fclose((FILE*)userData);
        return;
-    }  
+    }
     fwrite(data, len, 1, (FILE*)userData);
 }
 
@@ -2092,7 +2100,7 @@ int main(int argc, char **argv) {
        if (xmlNanoFTPGet(ctxt, ftpData, (void *) output, tstfile) < 0)
            xmlGenericError(xmlGenericErrorContext,
                    "Failed to get file\n");
-       
+
     }
     xmlNanoFTPClose(ctxt);
     xmlMemoryDump();
index 2437fed..e109ad7 100644 (file)
@@ -10,7 +10,7 @@
  *
  * daniel@veillard.com
  */
+
 #define NEED_SOCKETS
 #define IN_LIBXML
 #include "libxml.h"
@@ -46,7 +46,7 @@
 #include <resolv.h>
 #endif
 #ifdef HAVE_FCNTL_H
-#include <fcntl.h> 
+#include <fcntl.h>
 #endif
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -213,7 +213,7 @@ void
 xmlNanoHTTPInit(void) {
     const char *env;
 #ifdef _WINSOCKAPI_
-    WSADATA wsaData;    
+    WSADATA wsaData;
 #endif
 
     if (initialized)
@@ -276,22 +276,24 @@ xmlNanoHTTPCleanup(void) {
 static void
 xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) {
     xmlURIPtr uri;
+    int len;
+
     /*
      * Clear any existing data from the context
      */
-    if (ctxt->protocol != NULL) { 
+    if (ctxt->protocol != NULL) {
         xmlFree(ctxt->protocol);
        ctxt->protocol = NULL;
     }
-    if (ctxt->hostname != NULL) { 
+    if (ctxt->hostname != NULL) {
         xmlFree(ctxt->hostname);
        ctxt->hostname = NULL;
     }
-    if (ctxt->path != NULL) { 
+    if (ctxt->path != NULL) {
         xmlFree(ctxt->path);
        ctxt->path = NULL;
     }
-    if (ctxt->query != NULL) { 
+    if (ctxt->query != NULL) {
         xmlFree(ctxt->query);
        ctxt->query = NULL;
     }
@@ -305,9 +307,17 @@ xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) {
        xmlFreeURI(uri);
        return;
     }
-    
+
     ctxt->protocol = xmlMemStrdup(uri->scheme);
-    ctxt->hostname = xmlMemStrdup(uri->server);
+    /* special case of IPv6 addresses, the [] need to be removed */
+    if ((uri->server != NULL) && (*uri->server == '[')) {
+        len = strlen(uri->server);
+       if ((len > 2) && (uri->server[len - 1] == ']')) {
+           ctxt->hostname = (char *) xmlCharStrndup(uri->server + 1, len -2);
+       } else
+           ctxt->hostname = xmlMemStrdup(uri->server);
+    } else
+       ctxt->hostname = xmlMemStrdup(uri->server);
     if (uri->path != NULL)
        ctxt->path = xmlMemStrdup(uri->path);
     else
@@ -334,7 +344,7 @@ void
 xmlNanoHTTPScanProxy(const char *URL) {
     xmlURIPtr uri;
 
-    if (proxy != NULL) { 
+    if (proxy != NULL) {
         xmlFree(proxy);
        proxy = NULL;
     }
@@ -358,7 +368,7 @@ xmlNanoHTTPScanProxy(const char *URL) {
            xmlFreeURI(uri);
        return;
     }
-    
+
     proxy = xmlMemStrdup(uri->server);
     if (uri->port != 0)
        proxyPort = uri->port;
@@ -451,7 +461,7 @@ xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt, const char *xmt_ptr, int outlen)
 
     if ((ctxt->state & XML_NANO_HTTP_WRITE) && (xmt_ptr != NULL)) {
         while (total_sent < outlen) {
-            int nsent = send(ctxt->fd, xmt_ptr + total_sent,
+            int nsent = send(ctxt->fd, SEND_ARG2_CAST (xmt_ptr + total_sent),
                              outlen - total_sent, 0);
 
             if (nsent > 0)
@@ -644,7 +654,7 @@ xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) {
     char buf[4096];
     char *bp = buf;
     int        rc;
-    
+
     while (bp - buf < 4095) {
        if (ctxt->inrptr == ctxt->inptr) {
            if ( (rc = xmlNanoHTTPRecv(ctxt)) == 0) {
@@ -781,9 +791,9 @@ xmlNanoHTTPScanAnswer(xmlNanoHTTPCtxtPtr ctxt, const char *line) {
            xmlFree(ctxt->location);
        if (*cur == '/') {
            xmlChar *tmp_http = xmlStrdup(BAD_CAST "http://");
-           xmlChar *tmp_loc = 
+           xmlChar *tmp_loc =
                xmlStrcat(tmp_http, (const xmlChar *) ctxt->hostname);
-           ctxt->location = 
+           ctxt->location =
                (char *) xmlStrcat (tmp_loc, (const xmlChar *) cur);
        } else {
            ctxt->location = xmlMemStrdup(cur);
@@ -993,6 +1003,7 @@ xmlNanoHTTPConnectAttempt(struct sockaddr *addr)
             0) {
             /* Solaris error code */
             __xmlIOErr(XML_FROM_HTTP, 0, "getsockopt failed\n");
+            closesocket(s);
             return INVALID_SOCKET;
         }
 #endif
@@ -1111,7 +1122,7 @@ xmlNanoHTTPConnectHost(const char *host, int port)
 #endif
 #if !defined(HAVE_GETADDRINFO) || !defined(_WIN32)
     {
-       h = gethostbyname (host);
+       h = gethostbyname (GETHOSTBYNAME_ARG_CAST host);
        if (h == NULL) {
 
 /*
@@ -1267,7 +1278,7 @@ xmlNanoHTTPRead(void *ctx, void *dest, int len) {
 #ifdef HAVE_ZLIB_H
     if (ctxt->usesGzip == 1) {
         if (ctxt->strm == NULL) return(0);
+
         ctxt->strm->next_out = dest;
         ctxt->strm->avail_out = len;
        ctxt->strm->avail_in = ctxt->inptr - ctxt->inrptr;
@@ -1346,23 +1357,23 @@ xmlNanoHTTPMethodRedir(const char *URL, const char *method, const char *input,
 #ifdef DEBUG_HTTP
     int xmt_bytes;
 #endif
-    
+
     if (URL == NULL) return(NULL);
     if (method == NULL) method = "GET";
     xmlNanoHTTPInit();
 
 retry:
-    if (redirURL == NULL)
+    if (redirURL == NULL) {
        ctxt = xmlNanoHTTPNewCtxt(URL);
-    else {
+       if (ctxt == NULL)
+           return(NULL);
+    } else {
        ctxt = xmlNanoHTTPNewCtxt(redirURL);
+       if (ctxt == NULL)
+           return(NULL);
        ctxt->location = xmlMemStrdup(redirURL);
     }
 
-    if ( ctxt == NULL ) {
-       return ( NULL );
-    }
-
     if ((ctxt->protocol == NULL) || (strcmp(ctxt->protocol, "http"))) {
        __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Not a valid HTTP URI");
         xmlNanoHTTPFreeCtxt(ctxt);
@@ -1427,13 +1438,13 @@ retry:
 
     if (proxy) {
        if (ctxt->port != 80) {
-           p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s", 
+           p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s",
                        method, ctxt->hostname,
-                       ctxt->port, ctxt->path );
+                       ctxt->port, ctxt->path );
        }
-       else 
+       else
            p += snprintf( p, blen - (p - bp), "%s http://%s%s", method,
-                       ctxt->hostname, ctxt->path);
+                       ctxt->hostname, ctxt->path);
     }
     else
        p += snprintf( p, blen - (p - bp), "%s %s", method, ctxt->path);
@@ -1442,7 +1453,7 @@ retry:
        p += snprintf( p, blen - (p - bp), "?%s", ctxt->query);
 
     if (ctxt->port == 80) {
-        p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n", 
+        p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n",
                    ctxt->hostname);
     } else {
         p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s:%d\r\n",
@@ -1453,7 +1464,7 @@ retry:
     p += snprintf(p, blen - (p - bp), "Accept-Encoding: gzip\r\n");
 #endif
 
-    if (contentType != NULL && *contentType) 
+    if (contentType != NULL && *contentType)
        p += snprintf(p, blen - (p - bp), "Content-Type: %s\r\n", *contentType);
 
     if (headers != NULL)
@@ -1492,7 +1503,7 @@ retry:
 
        if ( xmt_bytes != ilen )
            xmlGenericError( xmlGenericErrorContext,
-                       "xmlNanoHTTPMethodRedir:  Only %d of %d %s %s\n",
+                       "xmlNanoHTTPMethodRedir:  Only %d of %d %s %s\n",
                        xmt_bytes, ilen,
                        "bytes of HTTP content sent to host",
                        ctxt->hostname );
@@ -1620,7 +1631,7 @@ xmlNanoHTTPFetch(const char *URL, const char *filename, char **contentType) {
     ctxt = xmlNanoHTTPOpen(URL, contentType);
     if (ctxt == NULL) return(-1);
 
-    if (!strcmp(filename, "-")) 
+    if (!strcmp(filename, "-"))
         fd = 0;
     else {
         fd = open(filename, O_CREAT | O_WRONLY, 00644);
@@ -1666,7 +1677,7 @@ xmlNanoHTTPSave(void *ctxt, const char *filename) {
 
     if ((ctxt == NULL) || (filename == NULL)) return(-1);
 
-    if (!strcmp(filename, "-")) 
+    if (!strcmp(filename, "-"))
         fd = 0;
     else {
         fd = open(filename, O_CREAT | O_WRONLY, 0666);
@@ -1795,7 +1806,7 @@ xmlNanoHTTPMimeType( void * ctx ) {
  * Check if all the content was read
  *
  * Returns 0 if all the content was read and available, returns
- * -1 if received content length was less than specified or an error 
+ * -1 if received content length was less than specified or an error
  * occurred.
  */
 static int
@@ -1849,7 +1860,7 @@ int main(int argc, char **argv) {
     char *contentType = NULL;
 
     if (argv[1] != NULL) {
-       if (argv[2] != NULL) 
+       if (argv[2] != NULL)
            xmlNanoHTTPFetch(argv[1], argv[2], &contentType);
         else
            xmlNanoHTTPFetch(argv[1], "-", &contentType);
diff --git a/os400/README400 b/os400/README400
new file mode 100644 (file)
index 0000000..6c16de9
--- /dev/null
@@ -0,0 +1,214 @@
+
+Implementation notes:
+
+  This is a true OS/400 implementation, not a PASE implementation (for PASE,
+use an AIX implementation).
+
+  The biggest problem with OS/400 is EBCDIC. The current libxml2 implementation
+uses UTF-8 internally. To ease encoding conversion between the calling
+applications and libxml2, supplementary "convert and latch" functions are
+provided (See below). To bind the EBCDIC OS/400 system calls and libxml2,
+an ASCII run-time environment (QADRT) has been used and wrapper functions have
+been designed.
+
+Other problems are:
+- Source code line length: to be stored in DB2 members, source files may not
+  have lines longer than 100 characters. Some header and documentation files
+  have been modified accordingly.
+- va_list dereferencing: the OS/400 implementation of va_list type is an array
+  but the compiler forbids explicit array dereferencing. Source files have
+  been updated accordingly.
+- Depending on the compilation/execution environment, it is possible that
+  stdin/stdout/stderr are not associated with a file descriptor; as a side
+  effect, open() may return a file descriptor value 0, 1 or 2 that is NOT
+  a C standard file. Thus using such a number may be inaccurate.
+- iconv_open() arguments: OS/400 uses non-standard encoding names and does not
+  support standard names. For this reason, a name wrapper has been designed.
+- dlopen() (support for xmodule): the function and its corollaries are not
+  provided by the OS/400 library. However a local implementation is provided.
+
+
+Compiling on OS/400:
+
+_ As a prerequisite, QADRT development environment must be installed.
+_ Install the libxml2 source directory in IFS.
+_ Enter shell (QSH)
+_ Change current directory to the libxml2 installation directory
+_ Change current directory to ./os400
+_ Edit file iniscript.sh. You may want to change tunable configuration
+  parameters, like debug info generation, optimisation level, listing option,
+  target library, zlib availability, etc.
+_ Copy any file in the current directory to makelog (i.e.:
+  cp initscript.sh makelog): this is intended to create the makelog file with
+  an ASCII CCSID!
+_ Enter the command "sh make.sh >makelog 2>&1'
+_ Examine the makelog file to check for compilation errors.
+
+  Leaving file initscript.sh unchanged, this will produce the following
+OS/400 objects:
+_ Library LIBXML2. All other objects will be stored in this library.
+_ Modules for all libxml2 units, with full debug info and no code optimization.
+_ Binding directory LIBXML2_A, to be used at calling program link time for
+  statically binding the modules (specify BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)
+  when creating a program using LIBXML2_A).
+_ Service program LIBXML2. To be used at calling program run-time
+  when this program has dynamically bound libxml2 at link time.
+_ Binding directory LIBXML2. To be used to dynamically bind libxml2 when
+  linking a calling program.
+_ Source file LIBXML. It contains all the header members needed to compile a
+  C/C++ module using libxml2.
+_ Standard and additional C/C++ libxml2 header members (possibly renamed) in
+  file LIBXML.
+_ IFS directory /libxml2 with subdirectory include/libxml containing all
+  C/C++ header files for IFS-based compilation.
+_ Source file LIBXMLRPG. It contains all the include members needed to compile a
+  ILE/RPG module/program using libxml2 (ILE/RPG binding).
+_ ILE/RPG binding include members (possibly renamed) in file LIBXMLRPG.
+_ IFS subdirectory /libxml2/include/libxmlrpg containing all ILE/RPG include
+  files for IFS-based compilation.
+
+
+Renamed header files in DB2 members:
+  DB2 member names are limited to 10 characters, thus the following C/C++
+header members are renamed as:
+  parserInternals.h     -->     PARSERINTE
+  schemasInternals.h    -->     SCHEMASINT
+  xmlautomata.h         -->     XMLAUTOMAT
+  xmlschemastype.h      -->     SCHMTYPES
+  xpathInternals.h      -->     XPATHINTER
+IFS header files are NOT renamed.
+ILE/RPG headers are processed likewise.
+
+
+Special programming consideration:
+
+QADRT being used, the following points must be considered:
+_ If static binding is used, service program QADRTTS must be linked too.
+_ The EBCDIC CCSID used by QADRT is 37 by default, NOT THE JOB'S CCSID. If
+  another EBCDIC CCSID is required, it must be set via a locale through a call
+  to setlocale_a (QADRT's setlocale() ASCII wrapper) with category LC_ALL or
+  LC_CTYPE, or by setting environment variable QADRT_ENV_LOCALE to the locale
+  object path before executing the program.
+_ Always use *IFSIO or *IFS64IO to compile calling programs.
+
+
+
+Supplementary (non libxml2 standard) support procedures for OS/400.
+
+  As cited above, there are some procedures to ease encoding conversion of
+libxml2 function arguments and results: the mechanism is based on
+dictionaries. The functions convert a string, latch the result in a dictionary
+to ensure its persistence and return its address. It is the caller's
+responsibility to clean the dictionary when it becomes too big or disappears.
+
+The procedures are:
+
+#include <libxml/transcode.h>
+
+const char *  xmlTranscodeResult(const xmlChar * s,
+                                 const char * encoding,
+                                 xmlDictPtr * dict,
+                                 void (*freeproc)(const void *));
+
+const xmlChar * xmlTranscodeString(const char * s,
+                                   const char * encoding,
+                                   xmlDictPtr * dict);
+
+const xmlChar * xmlTranscodeWString(const char * s,
+                                    const char * encoding,
+                                    xmlDictPtr * dict);
+
+const xmlChar * xmlTranscodeWString(const char * s,
+                                    const char * encoding,
+                                    xmlDictPtr * dict);
+
+where:
+s               is the string to translate.
+encoding        is the alternate character encoding. If null, the current job's
+                encoding (CCSID) is used.
+dict            is the address of the latching directory. If NULL, the procedure
+                functions as a simple non-latching encoding converter and
+                its result value should be freed by the caller.
+freeproc        is a procedure to release the original string, or NULL.
+
+xmlTranscodeResult()  converts from UTF-8 to the given alternate encoding.
+xmlTranscodeString()  converts from the given 8-bit encoding to UTF-8 (note that
+                      UTF-8 itself is considered as a 8-bit encoding).
+xmlTranscodeWString() converts from the given 16-bit encoding to UTF-8.
+xmlTranscodeHString() converts from the given 32-bit encoding to UTF-8.
+
+
+To shorten statements using these functions, shorthands are defined:
+
+xmlTR for xmlTranscodeResult
+xmlTS for xmlTranscodeString
+xmlTW for xmlTranscodeWString
+xmlTH for xmlTranscodeHstring
+
+These shorthands may be disabled by defining XML_NO_SHORT_NAMES before
+libxml/transcode.h inclusion.
+
+A directory pointer must be preset to NULL before the first call using it to
+one of the above procedure.
+
+To release a latching directory, use function
+
+void          xmlZapDict(xmlDictPtr * dict);
+
+
+Example:
+
+#include <libxml/transcode.h>
+#include <libxml/tree.h>
+
+xmlDocPtr mySimpleXMLDoc(char * element, char * text)
+{
+        xmlDocPtr doc;
+        xmlNodePtr node;
+        xmlDictPtr dict = NULL;
+
+        /* element and text are encoded in the current job's encoding. */
+
+        doc = xmlNewDoc();
+        xmlNewTextChild((xmlNodePtr) doc, NULL, xmlTS(element, NULL,
+                               &dict), xmlTS(text, NULL, &dict));
+        xmlZapDict(&dict);
+        return doc;
+}
+
+
+Additionally, a formatter into latched/dynamic storage is provided:
+
+const char *    xmlVasprintf(xmlDictPtr * dict,
+                             const char * encoding,
+                             const xmlChar * fmt,
+                             va_list args);
+
+
+
+ILE/RPG binding:
+
+  All standard types and procedures are provided. Since ILE/RPG does not
+support macros, they have not been ported, with the exceptions of the more
+useful ones and the global/threaded variables access macros. These variables
+can be read with function get_xxx(void), where xxxx is the name of the
+variable; they may be set by calling function set_xxxx(value), where value is
+of the same type as the variable.
+
+  The C va_list is not implemented as such in ILE/RPG. Functions implementing
+va_list and associated methods are provided:
+
+      /include "libxmlrpg/xmlstdarg"
+
+     d xmlVaStart      pr
+     d  list                               like(xmlVaList)
+     d  lastargaddr                    *   value
+     d  lastargsize                  10u 0 value
+
+     d xmlVaArg        pr
+     d  list                               like(xmlVaList)
+     d  dest                           *   value
+     d  argsize                      10i 0 value
+
+     d xmlVaEnd        pr
+     d  list                               like(xmlVaList)
diff --git a/os400/dlfcn/dlfcn.c b/os400/dlfcn/dlfcn.c
new file mode 100644 (file)
index 0000000..1488e12
--- /dev/null
@@ -0,0 +1,1213 @@
+/**
+***     dlopen(), dlclose() dlsym(), dlerror() emulation for OS/400.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <dirent.h>
+#include <pthread.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <except.h>             /* AS400 exceptions. */
+#include <miptrnam.h>           /* MI pointers support. */
+#include <qusec.h>              /* Error structures. */
+#include <qp0lstdi.h>           /* Path to QSYS object name. */
+#include <qp0z1170.h>           /* For Qp0zInitEnv(). */
+#include <qleawi.h>             /* For QleActBndPgmLong() definitions. */
+#include <qsy.h>                /* Qualified name structure. */
+#include <qmhrtvm.h>            /* Retrieve message from message file. */
+
+#include <mih/rinzstat.h>
+#include <mih/matactex.h>
+
+#include "libxml/hash.h"
+#include "dlfcn.h"
+
+
+/**
+***     Maximum internal path length.
+**/
+
+#define MAXPATHLEN              5120
+
+
+/**
+***     Maximum error string length.
+**/
+
+#define MAX_ERR_STR             511
+
+
+/**
+***     Field address macro.
+**/
+
+#define offset_by(t, b, o)      ((t *) ((char *) (b) + (unsigned int) (o)))
+
+
+/**
+***     Global flags.
+**/
+
+#define INITED          000001          /* Package has been initialized. */
+#define THREADS         000002          /* Multithreaded job. */
+#define MULTIBUF        000004          /* One error buffer per thread. */
+
+
+/**
+***     DLL handle private structure.
+**/
+
+typedef struct {
+        Qle_ABP_Info_Long_t     actinfo;        /* Activation information. */
+        _SYSPTR                 pointer;        /* Pointer to DLL object. */
+        unsigned int            actcount;       /* Activation count. */
+}               dlinfo;
+
+
+/**
+***     Per-thread structure.
+**/
+
+typedef struct {
+        unsigned int    lockcount;              /* Mutex lock count. */
+        unsigned int    iserror;                /* Flag error present. */
+        char            str[MAX_ERR_STR + 1];   /* Error string buffer. */
+}               dlts_t;
+
+
+static pthread_mutex_t  dlmutex = PTHREAD_MUTEX_INITIALIZER;
+static xmlHashTablePtr  dldir = (xmlHashTablePtr) NULL; /* DLL directory. */
+static unsigned int     dlflags = 0;                    /* Package flags. */
+static pthread_key_t    dlkey;
+static dlts_t           static_buf;             /* Static error buffer. */
+
+
+
+static void
+dlthreadterm(void * mem)
+
+{
+        free(mem);
+        pthread_setspecific(dlkey, NULL);
+}
+
+
+static void
+dlterm(void)
+
+{
+        void * p;
+
+        if (dlflags & MULTIBUF) {
+                p = pthread_getspecific(dlkey);
+
+                if (p)
+                        dlthreadterm(p);
+                }
+
+        if (dlflags & THREADS)
+                pthread_mutex_lock(&dlmutex);
+
+        if (dldir) {
+                xmlHashFree(dldir, (xmlHashDeallocator) NULL);
+                dldir = NULL;
+                }
+
+        if (dlflags & MULTIBUF)
+                pthread_key_delete(dlkey);
+
+        dlflags |= ~(INITED | MULTIBUF);
+        pthread_mutex_unlock(&dlmutex);
+        pthread_mutex_destroy(&dlmutex);
+}
+
+
+static void
+dlinit(void)
+
+{
+        int locked;
+
+        /**
+        ***     Initialize the package.
+        ***     Should be call once per process.
+        **/
+
+        locked = !pthread_mutex_lock(&dlmutex);
+
+        if (!(dlflags & INITED)) {
+                dlflags &= ~THREADS;
+
+                if (locked)
+                        dlflags |= THREADS;
+
+                Qp0zInitEnv();
+                dldir = xmlHashCreate(16);
+                dlflags &= ~MULTIBUF;
+
+                if (dlflags & THREADS)
+                        if (!pthread_key_create(&dlkey, dlthreadterm))
+                                dlflags |= MULTIBUF;
+
+                atexit(dlterm);
+                dlflags |= INITED;
+                }
+
+        if (locked)
+                pthread_mutex_unlock(&dlmutex);
+}
+
+
+static void
+dlthreadinit(void)
+
+{
+        dlts_t * p;
+
+        if (!(dlflags & INITED))
+                dlinit();
+
+        if (dlflags & MULTIBUF) {
+                p = pthread_getspecific(dlkey);
+
+                if (!p) {
+                        p = (dlts_t *) malloc(sizeof *p);
+
+                        if (p) {
+                                p->lockcount = 0;
+                                p->iserror = 0;
+
+                                if (pthread_setspecific(dlkey, p))
+                                        free(p);
+                                }
+                        }
+                }
+}
+
+
+static void
+dllock(void)
+
+{
+        dlts_t * p;
+
+        if (!(dlflags & THREADS))
+                return;
+
+        if (dlflags & MULTIBUF) {
+                p = pthread_getspecific(dlkey);
+
+                if (p && p->lockcount) {
+                        p->lockcount++;
+                        return;
+                        }
+                }
+        else
+                p = (dlts_t *) NULL;
+
+        if (pthread_mutex_lock(&dlmutex))
+                return;
+
+        if (p)
+                p->lockcount++;
+}
+
+
+static void
+dlunlock(void)
+
+{
+        dlts_t * p;
+
+        if (!(dlflags & THREADS))
+                return;
+
+        if (dlflags & MULTIBUF) {
+                p = pthread_getspecific(dlkey);
+
+                if (p && p->lockcount > 1) {
+                        p->lockcount--;
+                        return;
+                        }
+                }
+        else
+                p = (dlts_t *) NULL;
+
+        if (pthread_mutex_unlock(&dlmutex))
+                return;
+
+        if (p)
+                p->lockcount--;
+}
+
+
+const char *
+dlerror(void)
+
+{
+        dlts_t * p;
+
+        dlthreadinit();
+
+        if (!(dlflags & MULTIBUF))
+                p = &static_buf;
+        else if (!(p = (dlts_t *) pthread_getspecific(dlkey)))
+                p = &static_buf;
+
+        if (!p->iserror)
+                return (const char *) NULL;
+
+        p->iserror = 0;
+        return p->str;
+}
+
+
+static void
+dlseterror_from_errno(unsigned int err_no)
+
+{
+        dlts_t * p;
+
+        if (!(dlflags & MULTIBUF))
+                p = &static_buf;
+        else if (!(p = (dlts_t *) pthread_getspecific(dlkey)))
+                p = &static_buf;
+
+        strcpy(p->str, strerror(err_no));
+        p->iserror = 1;
+}
+
+
+static void
+dlseterror_from_exception(volatile _INTRPT_Hndlr_Parms_T * excp)
+
+{
+        int i;
+        Qmh_Rtvm_RTVM0300_t * imp;
+        char * cp;
+        _INTRPT_Hndlr_Parms_T * p;
+        dlts_t * q;
+        char rtvmbuf[30000];
+        Qus_EC_t errinfo;
+
+        p = (_INTRPT_Hndlr_Parms_T *) excp;
+        errinfo.Bytes_Provided = 0;             /* Exception on error. */
+        QMHRTVM(rtvmbuf, sizeof rtvmbuf, "RTVM0300", p->Msg_Id,
+            "QCPFMSG   QSYS      ", p->Ex_Data, p->Msg_Data_Len,
+            "*YES      ", "*NO       ", &errinfo);
+        imp = offset_by(Qmh_Rtvm_RTVM0300_t, rtvmbuf, 0);
+
+        if (!(dlflags & MULTIBUF))
+                q = &static_buf;
+        else if (!(q = (dlts_t *) pthread_getspecific(dlkey)))
+                q = &static_buf;
+
+        if (i = imp->Length_Message_Returned)
+                cp = offset_by(char, imp, imp->Offset_Message_Returned);
+        else if (i = imp->Length_Help_Returned)
+                cp = offset_by(char, imp, imp->Offset_Help_Returned);
+        else {
+                q->iserror = 0;
+                return;
+                }
+
+        q->iserror = 1;
+
+        if (i > sizeof q->str - 1)
+                i = sizeof q->str - 1;
+
+        memcpy(q->str, cp, i);
+        q->str[i] = '\0';
+}
+
+
+static int
+dlparentpath(const char * path, size_t len)
+
+{
+        if (len <= 1)
+                return len;
+
+        while (path[--len] != '/')
+                ;
+
+        return len? len: 1;
+}
+
+
+static int
+dlmakepath(char * path, size_t pathlen, const char * tail, size_t taillen)
+
+{
+        int i;
+
+        if (taillen && tail[0] == '/')
+                pathlen = 0;
+
+        for (;;) {
+                while (taillen && *tail == '/') {
+                        tail++;
+                        taillen--;
+                        }
+
+                if (!taillen)
+                        break;
+
+                for (i = 0; i < taillen; i++)
+                        if (tail[i] == '/')
+                                break;
+
+                if (*tail == '.')
+                        switch (i) {
+
+                        case 2:
+                                if (tail[1] != '.')
+                                        break;
+                                        
+                                pathlen = dlparentpath(path, pathlen);
+
+                        case 1:
+                                tail += i;
+                                taillen -= i;
+                                continue;
+                                }
+
+                if (pathlen + i + 1 >= MAXPATHLEN) {
+                        errno = ENAMETOOLONG;
+                        return -1;
+                        }
+
+                path[pathlen++] = '/';
+                memcpy(path + pathlen, tail, i);
+                pathlen += i;
+                }
+
+        if (!pathlen)
+                path[pathlen++] = '/';
+
+        path[pathlen] = '\0';
+        return pathlen;
+}
+
+
+static int
+dlresolveLink(const char * path, char * buf, size_t bufsiz)
+
+{
+        int n;
+        int l1;
+        int l2;
+        struct stat sbuf;
+        char buf1[MAXPATHLEN + 1];
+        char buf2[MAXPATHLEN + 1];
+
+        /**
+        ***     Resolve symbolic link to IFS object name.
+        **/
+
+        if (!buf) {
+                errno = EFAULT;
+                return -1;
+                }
+
+        if (!path || !*path || !bufsiz) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        if (*path != '/') {
+                if (!getcwd(buf1, sizeof buf1))
+                        return -1;
+
+                l1 = strlen(buf1);
+                }
+        else
+                l1 = 0;
+
+        l1 = dlmakepath(buf1, l1, path, strlen(path));
+        n = 0;
+
+        for (;;) {
+                if (l1 < 0)
+                        return -1;
+
+                if (n++ >= 256) {
+                        errno = ELOOP;
+                        return -1;
+                        }
+
+                if (lstat(buf1, &sbuf)) {
+                        if (errno == ENOENT)
+                                break;
+
+                        return -1;
+                        }
+
+                if (!S_ISLNK(sbuf.st_mode))
+                        break;
+
+                if (sbuf.st_size > MAXPATHLEN) {
+                        errno = ENAMETOOLONG;
+                        return -1;
+                        }
+
+                l2 = readlink(buf1, buf2, MAXPATHLEN + 1);
+
+                if (l2 < 0)
+                        return -1;
+
+                if (buf2[0] != '/')
+                        l1 = dlparentpath(buf1, l1);
+
+                l1 = dlmakepath(buf1, l1, buf2, l2);
+                }
+
+        if (l1 >= bufsiz) {
+                errno = ENAMETOOLONG;
+                return -1;
+                }
+
+        memcpy(buf, buf1, l1 + 1);
+        return l1;
+}
+
+
+static int
+dlGetObjectName(Qp0l_QSYS_Info_t * qsysinfo, const char * dir,
+                        int dirlen, const char * link)
+
+{
+        int n;
+        char * namebuf;
+        Qlg_Path_Name_T * qptp;
+        char pathbuf[sizeof(Qlg_Path_Name_T) + _QP0L_DIR_NAME_LG + 4];
+        Qus_EC_t errinfo;
+        struct stat sbuf;
+
+        /**
+        ***     Get QSYS object library/name/member and type corresponding to
+        ***             the symbolic `link' in directory `dir'.
+        **/
+
+        if (!qsysinfo) {
+                errno = EFAULT;
+                return -1;
+                }
+
+        if (!dir && !link) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        qptp = (Qlg_Path_Name_T *) pathbuf;
+        namebuf = pathbuf + sizeof(Qlg_Path_Name_T);
+        n = 0;
+
+        /**
+        ***     Build full path.
+        **/
+
+        if (dir) {
+                if (dirlen < 0 || dirlen > _QP0L_DIR_NAME_LG + 4)
+                        dirlen = _QP0L_DIR_NAME_LG + 4;
+
+                while (*dir && n < dirlen)
+                        namebuf[n++] = *dir++;
+                }
+
+        if (n && namebuf[n - 1] == '/')
+                n--;
+
+        if (link) {
+                if (*link && *link != '/' && n < _QP0L_DIR_NAME_LG + 4)
+                        namebuf[n++] = '/';
+
+                while (*link && n < _QP0L_DIR_NAME_LG + 4)
+                        namebuf[n++] = *link++;
+                }
+
+        if (!n || n > _QP0L_DIR_NAME_LG) {
+                errno = ENAMETOOLONG;
+                return -1;
+                }
+
+        namebuf[n] = '\0';
+        n = dlresolveLink(namebuf, namebuf, _QP0L_DIR_NAME_LG + 1);
+
+        if (n == -1)
+                return -1;
+
+        if (stat(namebuf, &sbuf))
+                return -1;
+
+        memset((char *) qptp, 0, sizeof *qptp);
+        qptp->Path_Length = n;
+        qptp->Path_Name_Delimiter[0] = '/';
+        errinfo.Bytes_Provided = sizeof errinfo;
+        Qp0lCvtPathToQSYSObjName(qptp, qsysinfo, "QSYS0100", sizeof *qsysinfo,
+            0, &errinfo);
+        return errinfo.Bytes_Available? -1: 0;
+}
+
+
+static const char *
+getcomponent(char * dst, const char * src)
+
+{
+        int i;
+
+        /**
+        ***     Get a path component of at most 10 characters and
+        ***             map it to upper case.
+        ***     Return the address of the next delimiter in source.
+        **/
+
+        for (i = 0;; src++) {
+                if (!*src || *src == ' ' || *src == '/') {
+                        *dst = '\0';
+                        return src;
+                        }
+
+                if (i < 10) {
+                        *dst++ = toupper(*src);
+                        i++;
+                        }
+                }
+}
+
+
+static int
+dlpath2QSYS(Qp0l_QSYS_Info_t * qsysinfo, const char * path, const char * dftlib)
+
+{
+        unsigned int flags;
+        char * cp;
+
+        /**
+        ***     Convert the given path to a QSYS object name.
+        ***     Syntax rules for paths are:
+        ***
+        ***     '/'+ [ <library> [  '/'+ <file> [ '/'+ <member> ] ] '/'* ]
+        ***     <library> '/'+ <file> [ '/'+ <member> ] '/'*
+        ***     <file> '/'*
+        ***
+        ***     If default library is not given, *LIBL is assumed.
+        ***     Components may no contain spaces. They are translated to
+        ***             uppercase. Only the first 10 characters are significant.
+        ***     There is no check for the validity of the given components and
+        ***             for the object existence.
+        ***     Component types are not in the path, but generated internally.
+        ***     CCSID is not processed.
+        ***
+        ***     Return 0 upon success, else -1.
+        **/
+
+        if (!qsysinfo || !path) {
+                errno = EFAULT;
+                return -1;
+                }
+
+        /**
+        ***     Strip leading spaces.
+        **/
+
+        while (*path == ' ')
+                path++;
+
+        /**
+        ***     Check for null path.
+        **/
+
+        if (!*path) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        /**
+        ***     Preset the result structure.
+        **/
+
+        memset((char *) qsysinfo, 0, sizeof *qsysinfo);
+
+        /**
+        ***     Determine the format.
+        **/
+
+        if (*path == '/') {
+                /**
+                ***     Library component present.
+                **/
+
+                while (*++path == '/')
+                        ;
+
+                if (!*path || *path == ' ')
+                        strcpy(qsysinfo->Lib_Name, "QSYS");
+                else
+                        path = getcomponent(qsysinfo->Lib_Name, path);
+
+                /**
+                ***     Check for file component and get it.
+                **/
+
+                if (*path == '/') {
+                        while (*++path == '/')
+                                ;
+
+                        if (*path && *path != ' ')
+                                path = getcomponent(qsysinfo->Obj_Name, path);
+                        }
+                }
+        else {
+                /**
+                ***     The mandatory component is the <file>.
+                **/
+
+                path = getcomponent(qsysinfo->Obj_Name, path);
+
+                while (*path == '/')
+                        path++;
+
+                /**
+                ***     If there is a second component, move the first to
+                ***             the library name and parse the file name.
+                **/
+
+                if (*path && *path != ' ') {
+                        strcpy(qsysinfo->Lib_Name, qsysinfo->Obj_Name);
+                        memset(qsysinfo->Obj_Name, 0,
+                            sizeof qsysinfo->Obj_Name);
+                        path = getcomponent(qsysinfo->Obj_Name, path);
+                        }
+                else
+                        strcpy(qsysinfo->Lib_Name, dftlib? dftlib: "*LIBL");
+                }
+
+        /**
+        ***     Check and set-up member.
+        **/
+
+        while (*path == '/')
+                path++;
+
+        if (*path && *path != ' ') {
+                path = getcomponent(qsysinfo->Mbr_Name, path);
+                strcpy(qsysinfo->Mbr_Type, "*MBR");
+
+                while (*path == '/')
+                        path++;
+                }
+
+        strcpy(qsysinfo->Lib_Type, "*LIB");
+
+        if (qsysinfo->Obj_Name[0])
+                strcpy(qsysinfo->Obj_Type, "*FILE");
+
+        qsysinfo->Bytes_Returned = sizeof *qsysinfo;
+        qsysinfo->Bytes_Available = sizeof *qsysinfo;
+
+        /**
+        ***     Strip trailing spaces.
+        **/
+
+        while (*path == ' ')
+                path++;
+
+        if (*path) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        return 0;
+}
+
+
+static int
+dl_ifs_link(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname)
+
+{
+        /**
+        ***     If `pathname' is a link found in IFS, set `qsysinfo' to its
+        ***             DB2 name.
+        ***     Return 0 if OK, else -1.
+        **/
+
+        return dlGetObjectName(qsysinfo, (const char *) NULL, 0, pathname);
+}
+
+
+static int
+dl_path_link(Qp0l_QSYS_Info_t * qsysinfo, const char * pathvar,
+        const char * filename, int (* testproc)(const Qp0l_QSYS_Info_t *))
+
+{
+        const char * p;
+        const char * q;
+        unsigned int i;
+        const char * path;
+
+        /**
+        ***     If `filename' is not a path and is a link found in one of the
+        ***             colon-separated paths in environment variable `pathvar',
+        ***             set `qsysinfo' to its DB2 name.
+        ***     Return 0 if OK, else -1.
+        **/
+
+        i = _QP0L_DIR_NAME_LG;
+
+        for (p = filename; *p; p++)
+                if (*p == '/' || !--i)
+                        return -1;              /* Too long or a path. */
+
+        /**
+        ***     Make sure we have the LD_LIBRARY_PATH environment
+        ***             variable value.
+        **/
+
+        path = getenv(pathvar);
+
+        if (!path)
+                return -1;                      /* No path list. */
+
+        /**
+        ***     Try in each path listed.
+        **/
+
+        q = path;
+
+        if (!*q)
+                return -1;                      /* No path list. */
+
+        for (;;) {
+                for (p = q; *p && *p != ':'; p++)
+                        ;
+
+                if (p > q)                      /* Ignore null path. */
+                        if (!dlGetObjectName(qsysinfo, q, p - q, filename))
+                                if (!testproc || (*testproc)(qsysinfo))
+                                        return 0;       /* Found: return. */
+
+                if (!*p)
+                        break;
+
+                q = p + 1;
+                }
+
+        errno = ENOENT;
+        return -1;
+}
+
+
+static int
+dl_DB2_path(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname)
+
+{
+        if (dlpath2QSYS(qsysinfo, pathname, (const char *) NULL))
+                return -1;
+
+        if (qsysinfo->Mbr_Type[0])
+                return -1;      /* Service program may not have members. */
+
+        if (!qsysinfo->Obj_Type[0])
+                return -1;      /* Object must be specified. */
+
+        strcpy(qsysinfo->Obj_Type, "*SRVPGM");  /* Set our object type. */
+        return 0;
+}
+
+
+static int
+dl_DB2_name(char * dst, const char * name)
+
+{
+        int i;
+
+        for (i = 0; i < 10; i++) {
+                switch (*name) {
+
+                default:
+                        if (!islower(*name))
+                                break;
+
+                case '\0':
+                case '/':
+                case ' ':
+                        return -1;
+                        }
+
+                *dst++ = *name++;
+                }
+
+        if (!i)
+                return -1;
+
+        *dst = '\0';
+        return 0;
+}
+
+
+static int
+dl_qualified_object(Qp0l_QSYS_Info_t * qsysinfo, const char * pathname)
+
+{
+        memset((char *) qsysinfo, 0, sizeof *qsysinfo);
+
+        if (dl_DB2_name(qsysinfo->Obj_Name, pathname) ||
+            dl_DB2_name(qsysinfo->Lib_Name, pathname + 10))
+                return -1;
+
+        strcpy(qsysinfo->Lib_Type, "*LIB");
+        strcpy(qsysinfo->Obj_Type, "*SRVPGM");
+        return 0;
+}
+
+
+static int
+dl_lib_object(Qp0l_QSYS_Info_t * qsysinfo,
+                                const char * libname, const char * pathname)
+
+{
+        int i;
+        char * cp;
+
+        strcpy(qsysinfo->Lib_Name, libname);
+        strcpy(qsysinfo->Lib_Type, "*LIB");
+        strcpy(qsysinfo->Obj_Type, "*SRVPGM");
+        cp = qsysinfo->Obj_Name;
+
+        while (*pathname == ' ')
+                pathname++;
+
+        for (i = 0;; pathname++) {
+                switch (*pathname) {
+
+                case '\0':
+                case ' ':
+                        break;
+
+                case '/':
+                        return -1;
+
+                default:
+                        if (i < 10)
+                                *cp++ = toupper(*pathname);
+
+                        i++;
+                        continue;
+                        }
+
+                break;
+                }
+
+        while (*pathname == ' ')
+                pathname++;
+
+        if (!i || *pathname)
+                return -1;
+
+        *cp = '\0';
+        return 0;
+}
+
+
+static int
+dl_is_srvpgm(const Qp0l_QSYS_Info_t * qsysinfo)
+
+{
+        struct stat sbuf;
+        char namebuf[100];
+
+        if (!qsysinfo->Lib_Name[0] || strcmp(qsysinfo->Lib_Type, "*LIB") ||
+            !qsysinfo->Obj_Name[0] || strcmp(qsysinfo->Obj_Type, "*SRVPGM") ||
+            qsysinfo->Mbr_Name[0] || qsysinfo->Mbr_Type[0])
+                return 0;
+
+        /**
+        ***     Build the IFS path name for the DB2 object.
+        **/
+
+        sprintf(namebuf, "%s/%s.LIB/%s.SRVPGM",
+            strcmp(qsysinfo->Lib_Name, "QSYS")? "/QSYS.LIB": "",
+            qsysinfo->Lib_Name, qsysinfo->Obj_Name);
+
+        return stat(namebuf, &sbuf) == 0;
+}
+
+
+static int
+dlreinit(dlinfo * dlip)
+
+{
+        RINZ_TEMPL_T t;
+        RINZ_TEMPL_T * p;
+        volatile _INTRPT_Hndlr_Parms_T excbuf;
+
+        if (dlip->actinfo.Flags & QLE_ABP_WAS_ACTIVE)
+                return 0;
+
+        /**
+        ***     Attempt to reinitialize the service program that was loaded.
+        ***     The service program must be created to allow re-initialization:
+        ***             ALWRINZ(*YES) for this to work. The default is
+        ***             ALWRINZ(*NO).
+        **/
+
+#pragma exception_handler(err, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG)
+        p = &t;
+        t.rinz_pgm = dlip->pointer;
+        t.rinz_agpmk = dlip->actinfo.Act_Grp_Mark;
+        _RINZSTAT(p);
+#pragma disable_handler
+
+        return 0;
+
+err:
+        if (!memcmp((char *) excbuf.Msg_Id, "MCH4421", 7))
+                return 0;       /* Program cannot be reinitialized. */
+
+        dlseterror_from_exception(&excbuf);
+        return -1;
+}
+
+
+void *
+dlsym(void * handle, const char * symbol)
+
+{
+        dlinfo * dlip;
+        void * p;
+        int export_type;
+        Qus_EC_t errinfo;
+        volatile _INTRPT_Hndlr_Parms_T excbuf;
+        static int zero = 0;
+
+        dlthreadinit();
+
+        if (!handle || !symbol) {
+                dlseterror_from_errno(EFAULT);
+                return (void *) NULL;
+                }
+
+        dlip = (dlinfo *) handle;
+
+#pragma exception_handler(error, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG)
+        errinfo.Bytes_Provided = 0;
+        QleGetExpLong(&dlip->actinfo.Act_Mark, &zero, &zero,
+            (char *) symbol, &p, &export_type, &errinfo);
+        return p;
+#pragma disable_handler
+
+error:
+        dlseterror_from_exception(&excbuf);
+        return (void *) NULL;
+}
+
+
+int
+dlclose(void * handle)
+
+{
+        dlinfo * dlip;
+        void (* _fini)(void);
+
+        dlthreadinit();
+
+        if (!handle) {
+                dlseterror_from_errno(EFAULT);
+                return -1;
+                }
+
+        dlip = (dlinfo *) handle;
+
+        if (dlip->actcount) {
+                if (--(dlip->actcount))
+                        return 0;
+
+                if (_fini = dlsym(handle, "_fini"))
+                        (*_fini)();
+                }
+
+        return dlreinit(dlip);
+}
+
+
+static void *
+dlopenqsys(const Qp0l_QSYS_Info_t * dllinfo)
+
+{
+        dlinfo * dlip;
+        dlinfo * dlip2;
+        void (* _init)(void);
+        unsigned int i;
+        _SYSPTR pgmptr;
+        unsigned long long actmark;
+        Qus_EC_t errinfo;
+        char actmarkstr[2 * sizeof actmark + 1];
+        static int actinfo_size = sizeof dlip->actinfo;
+        volatile _INTRPT_Hndlr_Parms_T excbuf;
+
+        /**
+        ***     Capture any type of error and if any occurs,
+        ***             return not found.
+        **/
+
+#pragma exception_handler(error1, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG)
+        pgmptr = rslvsp(WLI_SRVPGM, (char *) dllinfo->Obj_Name,
+            (char *) dllinfo->Lib_Name ,_AUTH_NONE);
+
+        if (!pgmptr) {
+                errno = ENOENT;
+                return (void *) NULL;
+                }
+
+        /**
+        ***     Create a new DLL info block.
+        **/
+
+        dlip = (dlinfo *) malloc(sizeof *dlip);
+
+        if (!dlip)
+                return (void *) NULL;           /* Cannot create block. */
+#pragma disable_handler
+
+        dllock();
+
+#pragma exception_handler(error2, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG)
+        memset((char *) dlip, 0, sizeof *dlip);
+        dlip->pointer = pgmptr;
+
+        /**
+        ***     Activate the DLL.
+        **/
+
+        errinfo.Bytes_Provided = 0;
+        QleActBndPgmLong(&pgmptr, &actmark,
+            &dlip->actinfo, &actinfo_size, &errinfo);
+        dlip->actinfo.Act_Mark = actmark;
+
+        /**
+        ***     Dummy string encoding activation mark to use as hash table key.
+        **/
+
+        for (i = 0; actmark; actmark >>= 6)
+                actmarkstr[i++] = 0x40 + (actmark & 0x3F);
+
+        actmarkstr[i] = '\0';
+
+        /**
+        ***     Check if already activated.
+        **/
+
+        dlip2 = (dlinfo *) xmlHashLookup(dldir, actmarkstr);
+
+        if (dlip2) {
+                free((char *) dlip);
+                dlip = dlip2;
+                }
+        else if (xmlHashAddEntry(dldir, (const xmlChar *) actmarkstr, dlip)) {
+                dlreinit(dlip);
+                free((char *) dlip);
+                dlunlock();
+                return (void *) NULL;
+                }
+#pragma disable_handler
+
+#pragma exception_handler(error2, excbuf, 0, _C2_MH_ESCAPE, _CTLA_HANDLE_NO_MSG)
+
+        /**
+        ***     Bump activation counter.
+        **/
+
+        if (!(dlip->actcount++) && (_init = dlsym(dlip, "_init")))
+                (*_init)();
+
+        dlunlock();
+
+        /**
+        ***     Return the handle.
+        **/
+
+        return (void *) dlip;
+#pragma disable_handler
+
+error2:
+        free((char *) dlip);
+        dlunlock();
+
+error1:
+        dlseterror_from_exception(&excbuf);
+        return (void *) NULL;
+}
+
+
+void *
+dlopen(const char * filename, int flag)
+
+{
+        void * dlhandle;
+        int sverrno;
+        Qp0l_QSYS_Info_t dllinfo;
+
+        sverrno = errno;
+        errno = 0;
+
+        dlthreadinit();
+
+        if (!filename) {
+                dlseterror_from_errno(EFAULT);
+                errno = sverrno;
+                return NULL;
+                }
+
+        /**
+        ***     Try to locate the object in the following order:
+        ***     _       `filename' is an IFS path.
+        ***     _       `filename' is not a path and resides in one of
+        ***                     LD_LIBRARY_PATH colon-separated paths.
+        ***     _       `filename' is not a path and resides in one of
+        ***                     PATH colon-separated paths.
+        ***     _       `filename' is a DB2 path (as /library/object).
+        ***     _       `filename' is a qualified object name.
+        ***     _       `filename' is an object in *CURLIB.
+        ***     _       `filename' is an object in *LIBL.
+        **/
+
+        if (!dl_ifs_link(&dllinfo, filename) && dl_is_srvpgm(&dllinfo))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_path_link(&dllinfo,
+            "LD_LIBRARY_PATH", filename, dl_is_srvpgm))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_path_link(&dllinfo, "PATH", filename, dl_is_srvpgm))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_DB2_path(&dllinfo, filename) && dl_is_srvpgm(&dllinfo))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_qualified_object(&dllinfo, filename) &&
+            dl_is_srvpgm(&dllinfo))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_lib_object(&dllinfo, "*CURLIB", filename) &&
+            dl_is_srvpgm(&dllinfo))
+                dlhandle = dlopenqsys(&dllinfo);
+        else if (!dl_lib_object(&dllinfo, "*LIBL", filename) &&
+            dl_is_srvpgm(&dllinfo))
+                dlhandle = dlopenqsys(&dllinfo);
+        else
+                dlhandle = NULL;
+
+        if (!dlhandle && errno)
+                dlseterror_from_errno(errno);
+
+        errno = sverrno;
+        return dlhandle;
+}
diff --git a/os400/dlfcn/dlfcn.h b/os400/dlfcn/dlfcn.h
new file mode 100644 (file)
index 0000000..0cf691e
--- /dev/null
@@ -0,0 +1,32 @@
+/**
+***     dlopen(), dlclose() dlsym(), dlerror() emulation for OS/400.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#ifndef _DLFCN_H_
+#define _DLFCN_H_
+
+
+/**
+***     Flags for dlopen().
+***     Ignored for OS400.
+**/
+
+#define RTLD_LAZY               000
+#define RTLD_NOW                001
+#define RTLD_GLOBAL             010
+
+
+/**
+***     Prototypes.
+**/
+
+extern void *           dlopen(const char * filename, int flag);
+extern void *           dlsym(void * handle, const char * symbol);
+extern const char *     dlerror(void);
+extern int              dlclose(void * handle);
+
+#endif
diff --git a/os400/iconv/README.iconv b/os400/iconv/README.iconv
new file mode 100644 (file)
index 0000000..4950d59
--- /dev/null
@@ -0,0 +1,47 @@
+IBM OS/400 implements iconv in an odd way:
+- Type iconv_t is a structure: therefore objects of this type cannot be
+  compared to (iconv_t) -1.
+- Supported character sets names are all of the form IBMCCSIDccsid..., where
+  ccsid is a decimal 5-digit integer identifying an IBM coded character set.
+  In addition, character set names have to be given in EBCDIC.
+  Standard character set names like "UTF-8" are NOT recognized.
+- The prototype of iconv_open() does not declare parameters as const, although
+  they are not altered.
+
+ Since libiconv does not support EBCDIC, use of this package here as a
+replacement is not a solution.
+
+ For these reasons, the code in this directory implements a wrapper to the
+OS/400 iconv implementation. The wrapper performs the following transformations:
+- Type iconv_t is an pointer. Although OS/400 pointers are odd, comparing
+  with (iconv_t) -1 is OK.
+- All IANA character set names are recognized in a coding- and case-insensitive
+  way, providing an equivalent CCSID exists. see
+  http://www.iana.org/assignments/character-sets/character-sets.xhtml
+- All CCSIDs from the association file can be expressed as IBMCCSIDxxxxx where
+  xxxxx is the 5 digit CCSID; no null terminator is required. Alternate codes
+  are of the form ibm-xxx (null-terminated), where xxx is the integer CCSID with
+  leading zeroes stripped.
+- If a IANA BIBenum is defined for a CCSID, the name iana-xxx can be used,
+  where xxx is the integer MIBenum without leading zeroes.
+- In addition, some aliases are also taken from the association file. Examples
+  are: ASCII, EBCDIC, UTF8.
+- Prototype of iconv_open() has const parameters.
+- Character code names can be given in any code.
+
+Character set names to CCSID conversion.
+- http://www.iana.org/assignments/character-sets/character-sets.xhtml provides
+  all IANA registered character set names and aliases associated with a
+  MIBenum, that is a unique character set identifier.
+- A hand-maintained file ccsid_mibenum.xml associates IBM CCSIDs to
+  IANA MBenums.
+- An OS/400 C program (in subdirectory bldcsndfa) generates a deterministic
+  finite automaton from the files mentioned above into a C file for all
+  possible character set name and associating each of them with its
+  corresponding CCSID. This program can only be run on OS/400 since it uses
+  the native iconv support for EBCDIC.
+- Since these operations are tedious and the table generation needs bootstraping
+  with libxml2, the generated automaton is stored within sources and need not
+  be rebuilt at each compilation. However, source is provided here to allow
+  new table generation with conversion tables that were not available at the
+  time of original generation.
diff --git a/os400/iconv/bldcsndfa/bldcsndfa.c b/os400/iconv/bldcsndfa/bldcsndfa.c
new file mode 100644 (file)
index 0000000..48afd54
--- /dev/null
@@ -0,0 +1,1953 @@
+/**
+***     Build a deterministic finite automaton to associate CCSIDs with
+***             character set names.
+***
+***     Compile on OS/400 with options SYSIFCOPT(*IFSIO).
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <ctype.h>
+
+#include <iconv.h>
+
+
+#ifdef OLDXML
+#include "xml.h"
+#else
+#include <libxml/hash.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#endif
+
+
+#ifdef __OS400__
+#define iconv_open_error(cd)            ((cd).return_value == -1)
+#define set_iconv_open_error(cd)        ((cd).return_value = -1)
+#else
+#define iconv_open_error(cd)            ((cd) == (iconv_t) -1)
+#define set_iconv_open_error(cd)        ((cd) = (iconv_t) -1)
+#endif
+
+
+#define C_SOURCE_CCSID          500
+#define C_UTF8_CCSID            1208
+
+
+#define UTF8_SPACE      0x20
+#define UTF8_HT         0x09
+#define UTF8_0          0x30
+#define UTF8_9          0x39
+#define UTF8_A          0x41
+#define UTF8_Z          0x5A
+#define UTF8_a          0x61
+#define UTF8_z          0x7A
+
+
+#define GRANULE         128             /* Memory allocation granule. */
+
+#define EPSILON         0x100           /* Token for empty transition. */
+
+
+#ifndef OFFSETOF
+#define OFFSETOF(t, f)  ((unsigned int) ((char *) &((t *) 0)->f - (char *) 0))
+#endif
+
+#ifndef OFFSETBY
+#define OFFSETBY(t, p, o)       ((t *) ((char *) (p) + (unsigned int) (o)))
+#endif
+
+
+typedef struct t_transition     t_transition;   /* NFA/DFA transition. */
+typedef struct t_state          t_state;        /* NFA/DFA state node. */
+typedef struct t_symlist        t_symlist;      /* Symbol (i.e.: name) list. */
+typedef struct t_chset          t_chset;        /* Character set. */
+typedef struct t_stategroup     t_stategroup;   /* Optimization group. */
+typedef unsigned char           utf8char;       /* UTF-8 character byte. */
+typedef unsigned char           byte;           /* Untyped data byte. */
+
+
+typedef struct {                        /* Set of pointers. */
+        unsigned int    p_size;         /* Current allocated size. */
+        unsigned int    p_card;         /* Current element count. */
+        void *          p_set[1];       /* Element array. */
+}               t_powerset;
+
+
+struct t_transition {
+        t_transition *  t_forwprev;     /* Head of forward transition list. */
+        t_transition *  t_forwnext;     /* Tail of forward transition list. */
+        t_transition *  t_backprev;     /* Head of backward transition list. */
+        t_transition *  t_backnext;     /* Tail of backward transition list. */
+        t_state *       t_from;         /* Incoming state. */
+        t_state *       t_to;           /* Destination state. */
+        unsigned short  t_token;        /* Transition token. */
+        unsigned int    t_index;        /* Transition array index. */
+};
+
+
+struct t_state {
+        t_state *       s_next;         /* Next state (for DFA construction). */
+        t_state *       s_stack;        /* Unprocessed DFA states stack. */
+        t_transition *  s_forward;      /* Forward transitions. */
+        t_transition *  s_backward;     /* Backward transitions. */
+        t_chset *       s_final;        /* Recognized character set. */
+        t_powerset *    s_nfastates;    /* Corresponding NFA states. */
+        unsigned int    s_index;        /* State index. */
+};
+
+
+struct t_symlist {
+        t_symlist *     l_next;         /* Next name in list. */
+        utf8char        l_symbol[1];    /* Name bytes. */
+};
+
+
+struct t_chset {
+        t_chset *       c_next;         /* Next character set. */
+        t_symlist *     c_names;        /* Character set name list. */
+        iconv_t         c_fromUTF8;     /* Conversion from UTF-8. */
+        unsigned int    c_ccsid;        /* IBM character set code. */
+        unsigned int    c_mibenum;      /* IANA character code. */
+};
+
+
+struct t_stategroup {
+        t_stategroup *  g_next;         /* Next group. */
+        t_state *       g_member;       /* Group member (s_stack) list. */
+        unsigned int    g_id;           /* Group ident. */
+};
+
+
+
+t_chset *       chset_list;             /* Character set list. */
+t_state *       initial_state;          /* Initial NFA state. */
+iconv_t         job2utf8;               /* Job CCSID to UTF-8 conversion. */
+iconv_t         utf82job;               /* UTF-8 to job CCSID conversion. */
+t_state *       dfa_states;             /* List of DFA states. */
+unsigned int    groupid;                /* Group ident counter. */
+
+
+/**
+***     UTF-8 strings.
+**/
+
+#pragma convert(819)
+
+static const utf8char   utf8_MIBenum[] = "MIBenum";
+static const utf8char   utf8_mibenum[] = "mibenum";
+static const utf8char   utf8_ibm_[] = "ibm-";
+static const utf8char   utf8_IBMCCSID[] = "IBMCCSID";
+static const utf8char   utf8_iana_[] = "iana-";
+static const utf8char   utf8_Name[] = "Name";
+static const utf8char   utf8_Pref_MIME_Name[] = "Preferred MIME Name";
+static const utf8char   utf8_Aliases[] = "Aliases";
+static const utf8char   utf8_html[] = "html";
+static const utf8char   utf8_htmluri[] = "http://www.w3.org/1999/xhtml";
+static const utf8char   utf8_A[] = "A";
+static const utf8char   utf8_C[] = "C";
+static const utf8char   utf8_M[] = "M";
+static const utf8char   utf8_N[] = "N";
+static const utf8char   utf8_P[] = "P";
+static const utf8char   utf8_T[] = "T";
+static const utf8char   utf8_ccsid[] = "ccsid";
+static const utf8char   utf8_EBCDIC[] = "EBCDIC";
+static const utf8char   utf8_ASCII[] = "ASCII";
+static const utf8char   utf8_assocnodes[] = "/ccsid_mibenum/assoc[@ccsid]";
+static const utf8char   utf8_aliastext[] =
+                                "/ccsid_mibenum/assoc[@ccsid=$C]/alias/text()";
+#ifdef OLDXML
+static const utf8char   utf8_tablerows[] =
+                        "//table[@id='table-character-sets-1']/*/tr";
+static const utf8char   utf8_headerpos[] =
+                "count(th[text()=$T]/preceding-sibling::th)+1";
+static const utf8char   utf8_getmibenum[] = "number(td[$M])";
+static const utf8char   utf8_getprefname[] = "string(td[$P])";
+static const utf8char   utf8_getname[] = "string(td[$N])";
+static const utf8char   utf8_getaliases[] = "td[$A]/text()";
+#else
+static const utf8char   utf8_tablerows[] =
+                        "//html:table[@id='table-character-sets-1']/*/html:tr";
+static const utf8char   utf8_headerpos[] =
+                "count(html:th[text()=$T]/preceding-sibling::html:th)+1";
+static const utf8char   utf8_getmibenum[] = "number(html:td[$M])";
+static const utf8char   utf8_getprefname[] = "string(html:td[$P])";
+static const utf8char   utf8_getname[] = "string(html:td[$N])";
+static const utf8char   utf8_getaliases[] = "html:td[$A]/text()";
+#endif
+
+#pragma convert(0)
+
+
+/**
+***     UTF-8 character length table.
+***
+***     Index is first character byte, value is the character byte count.
+**/
+
+static signed char      utf8_chlen[] = {
+/* 00-07 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 08-0F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 10-17 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 18-1F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 20-27 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 28-2F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 30-37 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 38-3F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 40-47 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 48-4F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 50-57 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 58-5F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 60-67 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 68-6F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 70-77 */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 78-7F */     1,      1,      1,      1,      1,      1,      1,      1,
+/* 80-87 */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* 88-8F */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* 90-97 */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* 98-9F */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* A0-A7 */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* A8-AF */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* B0-B7 */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* B8-BF */     -1,     -1,     -1,     -1,     -1,     -1,     -1,     -1,
+/* C0-C7 */     2,      2,      2,      2,      2,      2,      2,      2,
+/* C8-CF */     2,      2,      2,      2,      2,      2,      2,      2,
+/* D0-D7 */     2,      2,      2,      2,      2,      2,      2,      2,
+/* D8-DF */     2,      2,      2,      2,      2,      2,      2,      2,
+/* E0-E7 */     3,      3,      3,      3,      3,      3,      3,      3,
+/* E8-EF */     3,      3,      3,      3,      3,      3,      3,      3,
+/* F0-F7 */     4,      4,      4,      4,      4,      4,      4,      4,
+/* F8-FF */     5,      5,      5,      5,      6,      6,      -1,     -1
+};
+
+
+
+void
+chknull(void * p)
+
+{
+        if (p)
+                return;
+
+        fprintf(stderr, "Not enough memory\n");
+        exit(1);
+}
+
+
+void
+makecode(char * buf, unsigned int ccsid)
+
+{
+        ccsid &= 0xFFFF;
+        memset(buf, 0, 32);
+        sprintf(buf, "IBMCCSID%05u0000000", ccsid);
+}
+
+
+iconv_t
+iconv_open_ccsid(unsigned int ccsidout,
+                                unsigned int ccsidin, unsigned int nullflag)
+
+{
+        char fromcode[33];
+        char tocode[33];
+
+        makecode(fromcode, ccsidin);
+        makecode(tocode, ccsidout);
+        memset(tocode + 13, 0, sizeof tocode - 13);
+
+        if (nullflag)
+                fromcode[18] = '1';
+
+        return iconv_open(tocode, fromcode);
+}
+
+
+unsigned int
+getnum(char * * cpp)
+
+{
+        unsigned int n;
+        char * cp;
+
+        cp = *cpp;
+        n = 0;
+
+        while (isdigit(*cp))
+                n = 10 * n + *cp++ - '0';
+
+        *cpp = cp;
+        return n;
+}
+
+
+const utf8char *
+hashBinaryKey(const byte * bytes, unsigned int len)
+
+{
+        const byte * bp;
+        utf8char * key;
+        utf8char * cp;
+        unsigned int n;
+        unsigned int n4;
+        unsigned int i;
+
+        /**
+        ***     Encode binary data in character form to be used as hash
+        ***             table key.
+        **/
+
+        n = (4 * len + 2) / 3;
+        key = (utf8char *) malloc(n + 1);
+        chknull(key);
+        bp = bytes;
+        cp = key;
+
+        for (n4 = n >> 2; n4; n4--) {
+                i = (bp[0] << 16) | (bp[1] << 8) | bp[2];
+                *cp++ = 0x21 + ((i >> 18) & 0x3F);
+                *cp++ = 0x21 + ((i >> 12) & 0x3F);
+                *cp++ = 0x21 + ((i >> 6) & 0x3F);
+                *cp++ = 0x21 + (i & 0x3F);
+                bp += 3;
+                }
+
+        switch (n & 0x3) {
+
+        case 2:
+                *cp++ = 0x21 + ((*bp >> 2) & 0x3F);
+                *cp++ = 0x21 + ((*bp << 4) & 0x3F);
+                break;
+
+        case 3:
+                i = (bp[0] << 8) | bp[1];
+                *cp++ = 0x21 + ((i >> 10) & 0x3F);
+                *cp++ = 0x21 + ((i >> 4) & 0x3F);
+                *cp++ = 0x21 + ((i << 2) & 0x3F);
+                break;
+                }
+
+        *cp = '\0';
+        return key;
+}
+
+
+void *
+hash_get(xmlHashTablePtr h, const void * binkey, unsigned int len)
+
+{
+        const utf8char * key;
+        void * result;
+
+        key = hashBinaryKey((const byte *) binkey, len);
+        result = xmlHashLookup(h, key);
+        free((char *) key);
+        return result;
+}
+
+
+int
+hash_add(xmlHashTablePtr h, const void * binkey, unsigned int len, void * data)
+
+{
+        const utf8char * key;
+        int result;
+
+        key = hashBinaryKey((const byte *) binkey, len);
+        result = xmlHashAddEntry(h, key, data);
+        free((char *) key);
+        return result;
+}
+
+
+xmlDocPtr
+loadXMLFile(const char * filename)
+
+{
+        struct stat sbuf;
+        byte * databuf;
+        int fd;
+        int i;
+        xmlDocPtr doc;
+
+        if (stat(filename, &sbuf))
+                return (xmlDocPtr) NULL;
+
+        databuf = malloc(sbuf.st_size + 4);
+
+        if (!databuf)
+                return (xmlDocPtr) NULL;
+
+        fd = open(filename, O_RDONLY
+#ifdef O_BINARY
+                                         | O_BINARY
+#endif
+                                                        );
+
+        if (fd < 0) {
+                free((char *) databuf);
+                return (xmlDocPtr) NULL;
+                }
+
+        i = read(fd, (char *) databuf, sbuf.st_size);
+        close(fd);
+
+        if (i != sbuf.st_size) {
+                free((char *) databuf);
+                return (xmlDocPtr) NULL;
+                }
+
+        databuf[i] = databuf[i + 1] = databuf[i + 2] = databuf[i + 3] = 0;
+        doc = xmlParseMemory((xmlChar *) databuf, i);
+        free((char *) databuf);
+        return doc;
+}
+
+
+int
+match(char * * cpp, char * s)
+
+{
+        char * cp;
+        int c1;
+        int c2;
+
+        cp = *cpp;
+
+        for (cp = *cpp; c2 = *s++; cp++) {
+                c1 = *cp;
+
+                if (c1 != c2) {
+                        if (isupper(c1))
+                                c1 = tolower(c1);
+
+                        if (isupper(c2))
+                                c2 = tolower(c2);
+                        }
+
+                if (c1 != c2)
+                        return 0;
+                }
+
+        c1 = *cp;
+
+        while (c1 == ' ' || c1 == '\t')
+                c1 = *++cp;
+
+        *cpp = cp;
+        return 1;
+}
+
+
+t_state *
+newstate(void)
+
+{
+        t_state * s;
+
+        s = (t_state *) malloc(sizeof *s);
+        chknull(s);
+        memset((char *) s, 0, sizeof *s);
+        return s;
+}
+
+
+void
+unlink_transition(t_transition * t)
+
+{
+        if (t->t_backnext)
+                t->t_backnext->t_backprev = t->t_backprev;
+
+        if (t->t_backprev)
+                t->t_backprev->t_backnext = t->t_backnext;
+        else if (t->t_to)
+                t->t_to->s_backward = t->t_backnext;
+
+        if (t->t_forwnext)
+                t->t_forwnext->t_forwprev = t->t_forwprev;
+
+        if (t->t_forwprev)
+                t->t_forwprev->t_forwnext = t->t_forwnext;
+        else if (t->t_from)
+                t->t_from->s_forward = t->t_forwnext;
+
+        t->t_backprev = (t_transition *) NULL;
+        t->t_backnext = (t_transition *) NULL;
+        t->t_forwprev = (t_transition *) NULL;
+        t->t_forwnext = (t_transition *) NULL;
+        t->t_from = (t_state *) NULL;
+        t->t_to = (t_state *) NULL;
+}
+
+
+void
+link_transition(t_transition * t, t_state * from, t_state * to)
+
+{
+        if (!from)
+                from = t->t_from;
+
+        if (!to)
+                to = t->t_to;
+
+        unlink_transition(t);
+
+        if ((t->t_from = from)) {
+                if ((t->t_forwnext = from->s_forward))
+                        t->t_forwnext->t_forwprev = t;
+
+                from->s_forward = t;
+                }
+
+        if ((t->t_to = to)) {
+                if ((t->t_backnext = to->s_backward))
+                        t->t_backnext->t_backprev = t;
+
+                to->s_backward = t;
+                }
+}
+
+
+t_transition *
+newtransition(unsigned int token, t_state * from, t_state * to)
+
+{
+        t_transition * t;
+
+        t = (t_transition *) malloc(sizeof *t);
+        chknull(t);
+        memset((char *) t, 0, sizeof *t);
+        t->t_token = token;
+        link_transition(t, from, to);
+        return t;
+}
+
+
+t_transition *
+uniquetransition(unsigned int token, t_state * from, t_state * to)
+
+{
+        t_transition * t;
+
+        for (t = from->s_forward; t; t = t->t_forwnext)
+                if (t->t_token == token && (t->t_to == to || !to))
+                        return t;
+
+        return to? newtransition(token, from, to): (t_transition *) NULL;
+}
+
+
+int
+set_position(t_powerset * s, void * e)
+
+{
+        unsigned int l;
+        unsigned int h;
+        unsigned int m;
+        int i;
+
+        l = 0;
+        h = s->p_card;
+
+        while (l < h) {
+                m = (l + h) >> 1;
+
+                /**
+                ***     If both pointers belong to different allocation arenas,
+                ***             native comparison may find them neither
+                ***             equal, nor greater, nor smaller.
+                ***     We thus compare using memcmp() to get an orthogonal
+                ***             result.
+                **/
+
+                i = memcmp(&e, s->p_set + m, sizeof e);
+
+                if (i < 0)
+                        h = m;
+                else if (!i)
+                        return m;
+                else
+                        l = m + 1;
+                }
+
+        return l;
+}
+
+
+t_powerset *
+set_include(t_powerset * s, void * e)
+
+{
+        unsigned int pos;
+        unsigned int n;
+
+        if (!s) {
+                s = (t_powerset *) malloc(sizeof *s +
+                    GRANULE * sizeof s->p_set);
+                chknull(s);
+                s->p_size = GRANULE;
+                s->p_set[GRANULE] = (t_state *) NULL;
+                s->p_set[0] = e;
+                s->p_card = 1;
+                return s;
+                }
+
+        pos = set_position(s, e);
+
+        if (pos < s->p_card && s->p_set[pos] == e)
+                return s;
+
+        if (s->p_card >= s->p_size) {
+                s->p_size += GRANULE;
+                s = (t_powerset *) realloc(s,
+                    sizeof *s + s->p_size * sizeof s->p_set);
+                chknull(s);
+                s->p_set[s->p_size] = (t_state *) NULL;
+                }
+
+        n = s->p_card - pos;
+
+        if (n)
+                memmove((char *) (s->p_set + pos + 1),
+                    (char *) (s->p_set + pos), n * sizeof s->p_set[0]);
+
+        s->p_set[pos] = e;
+        s->p_card++;
+        return s;
+}
+
+
+t_state *
+nfatransition(t_state * to, byte token)
+
+{
+        t_state * from;
+
+        from = newstate();
+        newtransition(token, from, to);
+        return from;
+}
+
+
+static t_state *        nfadevelop(t_state * from, t_state * final, iconv_t icc,
+                                const utf8char * name, unsigned int len);
+
+
+void
+nfaslice(t_state * * from, t_state * * to, iconv_t icc,
+                const utf8char * chr, unsigned int chlen,
+                const utf8char * name, unsigned int len, t_state * final)
+
+{
+        char * srcp;
+        char * dstp;
+        size_t srcc;
+        size_t dstc;
+        unsigned int cnt;
+        t_state * f;
+        t_state * t;
+        t_transition * tp;
+        byte bytebuf[8];
+
+        srcp = (char *) chr;
+        srcc = chlen;
+        dstp = (char *) bytebuf;
+        dstc = sizeof bytebuf;
+        iconv(icc, &srcp, &srcc, &dstp, &dstc);
+        dstp = (char *) bytebuf;
+        cnt = sizeof bytebuf - dstc;
+        t = *to;
+        f = *from;
+
+        /**
+        ***     Check for end of string.
+        **/
+
+        if (!len)
+                if (t && t != final)
+                        uniquetransition(EPSILON, t, final);
+                else
+                        t = final;
+
+        if (f)
+                while (cnt) {
+                        tp = uniquetransition(*dstp, f, (t_state *) NULL);
+
+                        if (!tp)
+                                break;
+
+                        f = tp->t_to;
+                        dstp++;
+                        cnt--;
+                        }
+
+        if (!cnt) {
+                if (!t)
+                        t = nfadevelop(f, final, icc, name, len);
+
+                *to = t;
+                return;
+                }
+
+        if (!t) {
+                t = nfadevelop((t_state *) NULL, final, icc, name, len);
+                *to = t;
+                }
+
+        if (!f)
+                *from = f = newstate();
+
+        while (cnt > 1)
+                t = nfatransition(t, dstp[--cnt]);
+
+        newtransition(*dstp, f, t);
+}
+
+
+t_state *
+nfadevelop(t_state * from, t_state * final, iconv_t icc,
+                                        const utf8char * name, unsigned int len)
+
+{
+        int chlen;
+        int i;
+        t_state * to;
+        int uccnt;
+        int lccnt;
+        utf8char chr;
+
+        chlen = utf8_chlen[*name];
+
+        for (i = 1; i < chlen; i++)
+                if ((name[i] & 0xC0) != 0x80)
+                        break;
+
+        if (i != chlen) {
+                fprintf(stderr,
+                    "Invalid UTF8 character in character set name\n");
+                return (t_state *) NULL;
+                }
+
+        to = (t_state *) NULL;
+        nfaslice(&from, &to,
+            icc, name, chlen, name + chlen, len - chlen, final);
+
+        if (*name >= UTF8_a && *name <= UTF8_z)
+                chr = *name - UTF8_a + UTF8_A;
+        else if (*name >= UTF8_A && *name <= UTF8_Z)
+                chr = *name - UTF8_A + UTF8_a;
+        else
+                return from;
+
+        nfaslice(&from, &to, icc, &chr, 1, name + chlen, len - chlen, final);
+        return from;
+}
+
+
+
+void
+nfaenter(const utf8char * name, int len, t_chset * charset)
+
+{
+        t_chset * s;
+        t_state * final;
+        t_state * sp;
+        t_symlist * lp;
+
+        /**
+        ***     Enter case-insensitive `name' in NFA in all known
+        ***             character codes.
+        ***     Redundant shift state changes as well as shift state
+        ***             differences between uppercase and lowercase are
+        ***             not handled.
+        **/
+
+        if (len < 0)
+                len = strlen(name) + 1;
+
+        for (lp = charset->c_names; lp; lp = lp->l_next)
+                if (!memcmp(name, lp->l_symbol, len))
+                        return;         /* Already entered. */
+
+        lp = (t_symlist *) malloc(sizeof *lp + len);
+        chknull(lp);
+        memcpy(lp->l_symbol, name, len);
+        lp->l_symbol[len] = '\0';
+        lp->l_next = charset->c_names;
+        charset->c_names = lp;
+        final = newstate();
+        final->s_final = charset;
+
+        for (s = chset_list; s; s = s->c_next)
+                if (!iconv_open_error(s->c_fromUTF8))
+                        sp = nfadevelop(initial_state, final,
+                            s->c_fromUTF8, name, len);
+}
+
+
+unsigned int
+utf8_utostr(utf8char * s, unsigned int v)
+
+{
+        unsigned int d;
+        unsigned int i;
+
+        d = v / 10;
+        v -= d * 10;
+        i = d? utf8_utostr(s, d): 0;
+        s[i++] = v + UTF8_0;
+        s[i] = '\0';
+        return i;
+}
+
+
+unsigned int
+utf8_utostrpad(utf8char * s, unsigned int v, int digits)
+
+{
+        unsigned int i = utf8_utostr(s, v);
+        utf8char pad = UTF8_SPACE;
+
+        if (digits < 0) {
+                pad = UTF8_0;
+                digits = -digits;
+                }
+
+        if (i >= digits)
+                return i;
+
+        memmove(s + digits - i, s, i + 1);
+        memset(s, pad, digits - i);
+        return digits;
+}
+
+
+unsigned int
+utf8_strtou(const utf8char * s)
+
+{
+        unsigned int v;
+
+        while (*s == UTF8_SPACE || *s == UTF8_HT)
+                s++;
+
+        for (v = 0; *s >= UTF8_0 && *s <= UTF8_9;)
+                v = 10 * v + *s++ - UTF8_0;
+
+        return v;
+}
+
+
+unsigned int
+getNumAttr(xmlNodePtr node, const xmlChar * name)
+
+{
+        const xmlChar * s;
+        unsigned int val;
+
+        s = xmlGetProp(node, name);
+
+        if (!s)
+                return 0;
+
+        val = utf8_strtou(s);
+        xmlFree((xmlChar *) s);
+        return val;
+}
+
+
+void
+read_assocs(const char * filename)
+
+{
+        xmlDocPtr doc;
+        xmlXPathContextPtr ctxt;
+        xmlXPathObjectPtr obj;
+        xmlNodePtr node;
+        t_chset * sp;
+        int i;
+        unsigned int ccsid;
+        unsigned int mibenum;
+        utf8char symbuf[32];
+
+        doc = loadXMLFile(filename);
+
+        if (!doc) {
+                fprintf(stderr, "Cannot load file %s\n", filename);
+                exit(1);
+                }
+
+        ctxt = xmlXPathNewContext(doc);
+        obj = xmlXPathEval(utf8_assocnodes, ctxt);
+
+        if (!obj || obj->type != XPATH_NODESET || !obj->nodesetval ||
+            !obj->nodesetval->nodeTab || !obj->nodesetval->nodeNr) {
+                fprintf(stderr, "No association found in %s\n", filename);
+                exit(1);
+                }
+
+        for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+                node = obj->nodesetval->nodeTab[i];
+                ccsid = getNumAttr(node, utf8_ccsid);
+                mibenum = getNumAttr(node, utf8_mibenum);
+
+                /**
+                ***     Check for duplicate.
+                **/
+
+                for (sp = chset_list; sp; sp = sp->c_next)
+                        if (ccsid && ccsid == sp->c_ccsid ||
+                            mibenum && mibenum == sp->c_mibenum) {
+                                fprintf(stderr, "Duplicate character set: ");
+                                fprintf(stderr, "CCSID = %u/%u, ",
+                                    ccsid, sp->c_ccsid);
+                                fprintf(stderr, "MIBenum = %u/%u\n",
+                                    mibenum, sp->c_mibenum);
+                                break;
+                                }
+
+                if (sp)
+                        continue;
+
+                /**
+                ***     Allocate the new character set.
+                **/
+
+                sp = (t_chset *) malloc(sizeof *sp);
+                chknull(sp);
+                memset(sp, 0, sizeof *sp);
+
+                if (!ccsid)     /* Do not attempt with current job CCSID. */
+                        set_iconv_open_error(sp->c_fromUTF8);
+                else {
+                        sp->c_fromUTF8 =
+                            iconv_open_ccsid(ccsid, C_UTF8_CCSID, 0);
+
+                        if (iconv_open_error(sp->c_fromUTF8) == -1)
+                                fprintf(stderr,
+                                    "Cannot convert into CCSID %u: ignored\n",
+                                    ccsid);
+                        }
+
+                sp->c_ccsid = ccsid;
+                sp->c_mibenum = mibenum;
+                sp->c_next = chset_list;
+                chset_list = sp;
+                }
+
+        xmlXPathFreeObject(obj);
+
+        /**
+        ***     Enter aliases.
+        **/
+
+        for (sp = chset_list; sp; sp = sp->c_next) {
+                strcpy(symbuf, utf8_ibm_);
+                utf8_utostr(symbuf + 4, sp->c_ccsid);
+                nfaenter(symbuf, -1, sp);
+                strcpy(symbuf, utf8_IBMCCSID);
+                utf8_utostrpad(symbuf + 8, sp->c_ccsid, -5);
+                nfaenter(symbuf, 13, sp);       /* Not null-terminated. */
+
+                if (sp->c_mibenum) {
+                        strcpy(symbuf, utf8_iana_);
+                        utf8_utostr(symbuf + 5, sp->c_mibenum);
+                        nfaenter(symbuf, -1, sp);
+                        }
+
+                xmlXPathRegisterVariable(ctxt, utf8_C,
+                    xmlXPathNewFloat((double) sp->c_ccsid));
+                obj = xmlXPathEval(utf8_aliastext, ctxt);
+
+                if (!obj || obj->type != XPATH_NODESET) {
+                        fprintf(stderr, "getAlias failed in %s\n", filename);
+                        exit(1);
+                        }
+
+                if (obj->nodesetval &&
+                    obj->nodesetval->nodeTab && obj->nodesetval->nodeNr) {
+                        for (i = 0; i < obj->nodesetval->nodeNr; i++) {
+                                node = obj->nodesetval->nodeTab[i];
+                                nfaenter(node->content, -1, sp);
+                                }
+                        }
+
+                xmlXPathFreeObject(obj);
+                }
+
+        xmlXPathFreeContext(ctxt);
+        xmlFreeDoc(doc);
+}
+
+
+unsigned int
+columnPosition(xmlXPathContextPtr ctxt, const xmlChar * header)
+
+{
+        xmlXPathObjectPtr obj;
+        unsigned int res = 0;
+
+        xmlXPathRegisterVariable(ctxt, utf8_T, xmlXPathNewString(header));
+        obj = xmlXPathEval(utf8_headerpos, ctxt);
+
+        if (obj) {
+                if (obj->type == XPATH_NUMBER)
+                        res = (unsigned int) obj->floatval;
+
+                xmlXPathFreeObject(obj);
+                }
+
+        return res;
+}
+
+
+void
+read_iana(const char * filename)
+
+{
+        xmlDocPtr doc;
+        xmlXPathContextPtr ctxt;
+        xmlXPathObjectPtr obj1;
+        xmlXPathObjectPtr obj2;
+        xmlNodePtr node;
+        int prefnamecol;
+        int namecol;
+        int mibenumcol;
+        int aliascol;
+        int mibenum;
+        t_chset * sp;
+        int n;
+        int i;
+
+        doc = loadXMLFile(filename);
+
+        if (!doc) {
+                fprintf(stderr, "Cannot load file %s\n", filename);
+                exit(1);
+                }
+
+        ctxt = xmlXPathNewContext(doc);
+
+#ifndef OLDXML
+        xmlXPathRegisterNs(ctxt, utf8_html, utf8_htmluri);
+#endif
+
+        obj1 = xmlXPathEval(utf8_tablerows, ctxt);
+
+        if (!obj1 || obj1->type != XPATH_NODESET || !obj1->nodesetval ||
+            !obj1->nodesetval->nodeTab || obj1->nodesetval->nodeNr <= 1) {
+                fprintf(stderr, "No data in %s\n", filename);
+                exit(1);
+                }
+
+        /**
+        ***     Identify columns.
+        **/
+
+        xmlXPathSetContextNode(obj1->nodesetval->nodeTab[0], ctxt);
+        prefnamecol = columnPosition(ctxt, utf8_Pref_MIME_Name);
+        namecol = columnPosition(ctxt, utf8_Name);
+        mibenumcol = columnPosition(ctxt, utf8_MIBenum);
+        aliascol = columnPosition(ctxt, utf8_Aliases);
+
+        if (!prefnamecol || !namecol || !mibenumcol || !aliascol) {
+                fprintf(stderr, "Key column(s) missing in %s\n", filename);
+                exit(1);
+                }
+
+        xmlXPathRegisterVariable(ctxt, utf8_P,
+            xmlXPathNewFloat((double) prefnamecol));
+        xmlXPathRegisterVariable(ctxt, utf8_N,
+            xmlXPathNewFloat((double) namecol));
+        xmlXPathRegisterVariable(ctxt, utf8_M,
+            xmlXPathNewFloat((double) mibenumcol));
+        xmlXPathRegisterVariable(ctxt, utf8_A,
+            xmlXPathNewFloat((double) aliascol));
+
+        /**
+        ***     Process each row.
+        **/
+
+        for (n = 1; n < obj1->nodesetval->nodeNr; n++) {
+                xmlXPathSetContextNode(obj1->nodesetval->nodeTab[n], ctxt);
+
+                /**
+                ***     Get the MIBenum from current row.
+                */
+
+                obj2 = xmlXPathEval(utf8_getmibenum, ctxt);
+
+                if (!obj2 || obj2->type != XPATH_NUMBER) {
+                        fprintf(stderr, "get MIBenum failed at row %u\n", n);
+                        exit(1);
+                        }
+
+                if (xmlXPathIsNaN(obj2->floatval) ||
+                    obj2->floatval < 1.0 || obj2->floatval > 65535.0 ||
+                    ((unsigned int) obj2->floatval) != obj2->floatval) {
+                        fprintf(stderr, "invalid MIBenum at row %u\n", n);
+                        xmlXPathFreeObject(obj2);
+                        continue;
+                        }
+
+                mibenum = obj2->floatval;
+                xmlXPathFreeObject(obj2);
+
+                /**
+                ***     Search the associations for a corresponding CCSID.
+                **/
+
+                for (sp = chset_list; sp; sp = sp->c_next)
+                        if (sp->c_mibenum == mibenum)
+                                break;
+
+                if (!sp)
+                        continue;       /* No CCSID for this MIBenum. */
+
+                /**
+                ***     Process preferred MIME name.
+                **/
+
+                obj2 = xmlXPathEval(utf8_getprefname, ctxt);
+
+                if (!obj2 || obj2->type != XPATH_STRING) {
+                        fprintf(stderr,
+                            "get Preferred_MIME_Name failed at row %u\n", n);
+                        exit(1);
+                        }
+
+                if (obj2->stringval && obj2->stringval[0])
+                        nfaenter(obj2->stringval, -1, sp);
+
+                xmlXPathFreeObject(obj2);
+
+                /**
+                ***     Process name.
+                **/
+
+                obj2 = xmlXPathEval(utf8_getname, ctxt);
+
+                if (!obj2 || obj2->type != XPATH_STRING) {
+                        fprintf(stderr, "get name failed at row %u\n", n);
+                        exit(1);
+                        }
+
+                if (obj2->stringval && obj2->stringval[0])
+                        nfaenter(obj2->stringval, -1, sp);
+
+                xmlXPathFreeObject(obj2);
+
+                /**
+                ***     Process aliases.
+                **/
+
+                obj2 = xmlXPathEval(utf8_getaliases, ctxt);
+
+                if (!obj2 || obj2->type != XPATH_NODESET) {
+                        fprintf(stderr, "get aliases failed at row %u\n", n);
+                        exit(1);
+                        }
+
+                if (obj2->nodesetval && obj2->nodesetval->nodeTab)
+                        for (i = 0; i < obj2->nodesetval->nodeNr; i++) {
+                                node = obj2->nodesetval->nodeTab[i];
+
+                                if (node && node->content && node->content[0])
+                                        nfaenter(node->content, -1, sp);
+                                }
+
+                xmlXPathFreeObject(obj2);
+                }
+
+        xmlXPathFreeObject(obj1);
+        xmlXPathFreeContext(ctxt);
+        xmlFreeDoc(doc);
+}
+
+
+t_powerset *    closureset(t_powerset * dst, t_powerset * src);
+
+
+t_powerset *
+closure(t_powerset * dst, t_state * src)
+
+{
+        t_transition * t;
+        unsigned int oldcard;
+
+        if (src->s_nfastates) {
+                /**
+                ***     Is a DFA state: return closure of set of equivalent
+                ***             NFA states.
+                **/
+
+                return closureset(dst, src->s_nfastates);
+                }
+
+        /**
+        ***     Compute closure of NFA state.
+        **/
+
+        dst = set_include(dst, src);
+
+        for (t = src->s_forward; t; t = t->t_forwnext)
+                if (t->t_token == EPSILON) {
+                        oldcard = dst->p_card;
+                        dst = set_include(dst, t->t_to);
+
+                        if (oldcard != dst->p_card)
+                                dst = closure(dst, t->t_to);
+                        }
+
+        return dst;
+}
+
+
+t_powerset *
+closureset(t_powerset * dst, t_powerset * src)
+
+{
+        unsigned int i;
+
+        for (i = 0; i < src->p_card; i++)
+                dst = closure(dst, (t_state *) src->p_set[i]);
+
+        return dst;
+}
+
+
+t_state *
+get_dfa_state(t_state * * stack,
+                        t_powerset * nfastates, xmlHashTablePtr sethash)
+
+{
+        t_state * s;
+
+        if (s = hash_get(sethash, nfastates->p_set,
+            nfastates->p_card * sizeof nfastates->p_set[0])) {
+                /**
+                ***     DFA state already present.
+                ***     Release the NFA state set and return
+                ***             the address of the old DFA state.
+                **/
+
+                free((char *) nfastates);
+                return s;
+                }
+
+        /**
+        ***     Build the new state.
+        **/
+
+        s = newstate();
+        s->s_nfastates = nfastates;
+        s->s_next = dfa_states;
+        dfa_states = s;
+        s->s_stack = *stack;
+        *stack = s;
+
+        /**
+        ***     Enter it in hash.
+        **/
+
+        if (hash_add(sethash, nfastates->p_set,
+            nfastates->p_card * sizeof nfastates->p_set[0], s))
+                chknull(NULL);          /* Memory allocation error. */
+
+        return s;
+}
+
+
+int
+transcmp(const void * p1, const void * p2)
+
+{
+        t_transition * t1;
+        t_transition * t2;
+
+        t1 = *(t_transition * *) p1;
+        t2 = *(t_transition * *) p2;
+        return ((int) t1->t_token) - ((int) t2->t_token);
+}
+
+
+void
+builddfa(void)
+
+{
+        t_powerset * transset;
+        t_powerset * stateset;
+        t_state * s;
+        t_state * s2;
+        unsigned int n;
+        unsigned int i;
+        unsigned int token;
+        t_transition * t;
+        t_state * stack;
+        xmlHashTablePtr sethash;
+        unsigned int nst;
+
+        transset = set_include(NULL, NULL);
+        chknull(transset);
+        stateset = set_include(NULL, NULL);
+        chknull(stateset);
+        sethash = xmlHashCreate(1);
+        chknull(sethash);
+        dfa_states = (t_state *) NULL;
+        stack = (t_state *) NULL;
+        nst = 0;
+
+        /**
+        ***     Build the DFA initial state.
+        **/
+
+        get_dfa_state(&stack, closure(NULL, initial_state), sethash);
+
+        /**
+        ***     Build the other DFA states by looking at each
+        ***             possible transition from stacked DFA states.
+        **/
+
+        do {
+                if (!(++nst % 100))
+                        fprintf(stderr, "%u DFA states\n", nst);
+
+                s = stack;
+                stack = s->s_stack;
+                s->s_stack = (t_state *) NULL;
+
+                /**
+                ***     Build a set of all non-epsilon transitions from this
+                ***             state.
+                **/
+
+                transset->p_card = 0;
+
+                for (n = 0; n < s->s_nfastates->p_card; n++) {
+                        s2 = s->s_nfastates->p_set[n];
+
+                        for (t = s2->s_forward; t; t = t->t_forwnext)
+                                if (t->t_token != EPSILON) {
+                                        transset = set_include(transset, t);
+                                        chknull(transset);
+                                        }
+                        }
+
+                /**
+                ***     Sort transitions by token.
+                **/
+
+                qsort(transset->p_set, transset->p_card,
+                    sizeof transset->p_set[0], transcmp);
+
+                /**
+                ***     Process all transitions, grouping them by token.
+                **/
+
+                stateset->p_card = 0;
+                token = EPSILON;
+
+                for (i = 0; i < transset->p_card; i++) {
+                        t = transset->p_set[i];
+
+                        if (token != t->t_token) {
+                                if (stateset->p_card) {
+                                        /**
+                                        ***     Get the equivalent DFA state
+                                        ***             and create transition.
+                                        **/
+
+                                        newtransition(token, s,
+                                            get_dfa_state(&stack,
+                                            closureset(NULL, stateset),
+                                            sethash));
+                                        stateset->p_card = 0;
+                                        }
+
+                                token = t->t_token;
+                                }
+
+                        stateset = set_include(stateset, t->t_to);
+                        }
+
+                if (stateset->p_card)
+                        newtransition(token, s, get_dfa_state(&stack,
+                            closureset(NULL, stateset), sethash));
+        } while (stack);
+
+        free((char *) transset);
+        free((char *) stateset);
+        xmlHashFree(sethash, NULL);
+
+        /**
+        ***     Reverse the state list to get the initial state first,
+        ***             check for ambiguous prefixes, determine final states,
+        ***             destroy NFA state sets.
+        **/
+
+        while (s = dfa_states) {
+                dfa_states = s->s_next;
+                s->s_next = stack;
+                stack = s;
+                stateset = s->s_nfastates;
+                s->s_nfastates = (t_powerset *) NULL;
+
+                for (n = 0; n < stateset->p_card; n++) {
+                        s2 = (t_state *) stateset->p_set[n];
+
+                        if (s2->s_final) {
+                                if (s->s_final && s->s_final != s2->s_final)
+                                        fprintf(stderr,
+                                            "Ambiguous name for CCSIDs %u/%u\n",
+                                            s->s_final->c_ccsid,
+                                            s2->s_final->c_ccsid);
+
+                                s->s_final = s2->s_final;
+                                }
+                        }
+
+                free((char *) stateset);
+                }
+
+        dfa_states = stack;
+}
+
+
+void
+deletenfa(void)
+
+{
+        t_transition * t;
+        t_state * s;
+        t_state * u;
+        t_state * stack;
+
+        stack = initial_state;
+        stack->s_stack = (t_state *) NULL;
+
+        while ((s = stack)) {
+                stack = s->s_stack;
+
+                while ((t = s->s_forward)) {
+                        u = t->t_to;
+                        unlink_transition(t);
+                        free((char *) t);
+
+                        if (!u->s_backward) {
+                                u->s_stack = stack;
+                                stack = u;
+                                }
+                        }
+
+                free((char *) s);
+                }
+}
+
+
+t_stategroup *
+newgroup(void)
+
+{
+        t_stategroup * g;
+
+        g = (t_stategroup *) malloc(sizeof *g);
+        chknull(g);
+        memset((char *) g, 0, sizeof *g);
+        g->g_id = groupid++;
+        return g;
+}
+
+
+void
+optimizedfa(void)
+
+{
+        unsigned int i;
+        xmlHashTablePtr h;
+        t_state * s1;
+        t_state * s2;
+        t_state * finstates;
+        t_state * * sp;
+        t_stategroup * g1;
+        t_stategroup * g2;
+        t_stategroup * ghead;
+        t_transition * t1;
+        t_transition * t2;
+        unsigned int done;
+        unsigned int startgroup;
+        unsigned int gtrans[1 << (8 * sizeof(unsigned char))];
+
+        /**
+        ***     Reduce DFA state count.
+        **/
+
+        groupid = 0;
+        ghead = (t_stategroup *) NULL;
+
+        /**
+        ***     First split: non-final and each distinct final states.
+        **/
+
+        h = xmlHashCreate(4);
+        chknull(h);
+
+        for (s1 = dfa_states; s1; s1 = s1->s_next) {
+                if (!(g1 = hash_get(h, &s1->s_final, sizeof s1->s_final))) {
+                        g1 = newgroup();
+                        g1->g_next = ghead;
+                        ghead = g1;
+
+                        if (hash_add(h, &s1->s_final, sizeof s1->s_final, g1))
+                                chknull(NULL);  /* Memory allocation error. */
+                        }
+
+                s1->s_index = g1->g_id;
+                s1->s_stack = g1->g_member;
+                g1->g_member = s1;
+                }
+
+        xmlHashFree(h, NULL);
+
+        /**
+        ***     Subsequent splits: states that have the same forward
+        ***             transition tokens to states in the same group.
+        **/
+
+        do {
+                done = 1;
+
+                for (g2 = ghead; g2; g2 = g2->g_next) {
+                        s1 = g2->g_member;
+
+                        if (!s1->s_stack)
+                                continue;
+
+                        h = xmlHashCreate(1);
+                        chknull(h);
+
+                        /**
+                        ***     Build the group transition map.
+                        **/
+
+                        memset((char *) gtrans, ~0, sizeof gtrans);
+
+                        for (t1 = s1->s_forward; t1; t1 = t1->t_forwnext)
+                                gtrans[t1->t_token] = t1->t_to->s_index;
+
+                        if (hash_add(h, gtrans, sizeof gtrans, g2))
+                                chknull(NULL);
+
+                        /**
+                        ***     Process other states in group.
+                        **/
+
+                        sp = &s1->s_stack;
+                        s1 = *sp;
+
+                        do {
+                                *sp = s1->s_stack;
+
+                                /**
+                                ***     Build the transition map.
+                                **/
+
+                                memset((char *) gtrans, ~0, sizeof gtrans);
+
+                                for (t1 = s1->s_forward;
+                                    t1; t1 = t1->t_forwnext)
+                                        gtrans[t1->t_token] = t1->t_to->s_index;
+
+                                g1 = hash_get(h, gtrans, sizeof gtrans);
+
+                                if (g1 == g2) {
+                                        *sp = s1;
+                                        sp = &s1->s_stack;
+                                        }
+                                else {
+                                        if (!g1) {
+                                                g1 = newgroup();
+                                                g1->g_next = ghead;
+                                                ghead = g1;
+
+                                                if (hash_add(h, gtrans,
+                                                    sizeof gtrans, g1))
+                                                        chknull(NULL);
+                                                }
+
+                                        s1->s_index = g1->g_id;
+                                        s1->s_stack = g1->g_member;
+                                        g1->g_member = s1;
+                                        done = 0;
+                                        }
+                        } while (s1 = *sp);
+
+                        xmlHashFree(h, NULL);
+                        }
+        } while (!done);
+
+        /**
+        ***     Establish group leaders and remap transitions.
+        **/
+
+        startgroup = dfa_states->s_index;
+
+        for (g1 = ghead; g1; g1 = g1->g_next)
+                for (s1 = g1->g_member->s_stack; s1; s1 = s1->s_stack)
+                        for (t1 = s1->s_backward; t1; t1 = t2) {
+                                t2 = t1->t_backnext;
+                                link_transition(t1, NULL, g1->g_member);
+                                }
+
+        /**
+        ***     Remove redundant states and transitions.
+        **/
+
+        for (g1 = ghead; g1; g1 = g1->g_next) {
+                g1->g_member->s_next = (t_state *) NULL;
+
+                while ((s1 = g1->g_member->s_stack)) {
+                        g1->g_member->s_stack = s1->s_stack;
+
+                        for (t1 = s1->s_forward; t1; t1 = t2) {
+                                t2 = t1->t_forwnext;
+                                unlink_transition(t1);
+                                free((char *) t1);
+                                }
+
+                        free((char *) s1);
+                        }
+                }
+
+        /**
+        ***     Remove group support and relink DFA states.
+        **/
+
+        dfa_states = (t_state *) NULL;
+        s2 = (t_state *) NULL;
+        finstates = (t_state *) NULL;
+
+        while (g1 = ghead) {
+                ghead = g1->g_next;
+                s1 = g1->g_member;
+
+                if (g1->g_id == startgroup)
+                        dfa_states = s1;        /* Keep start state first. */
+                else if (s1->s_final) {         /* Then final states. */
+                        s1->s_next = finstates;
+                        finstates = s1;
+                        }
+                else {                  /* Finish with non-final states. */
+                        s1->s_next = s2;
+                        s2 = s1;
+                        }
+
+                free((char *) g1);
+                }
+
+        for (dfa_states->s_next = finstates; finstates->s_next;)
+                finstates = finstates->s_next;
+
+        finstates->s_next = s2;
+}
+
+
+const char *
+inttype(unsigned long max)
+
+{
+        int i;
+
+        for (i = 0; max; i++)
+                max >>= 1;
+
+        if (i > 8 * sizeof(unsigned int))
+                return "unsigned long";
+
+        if (i > 8 * sizeof(unsigned short))
+                return "unsigned int";
+
+        if (i > 8 * sizeof(unsigned char))
+                return "unsigned short";
+
+        return "unsigned char";
+}
+
+
+listids(FILE * fp)
+
+{
+        unsigned int pos;
+        t_chset * cp;
+        t_symlist * lp;
+        char * srcp;
+        char * dstp;
+        size_t srcc;
+        size_t dstc;
+        char buf[80];
+
+        fprintf(fp, "/**\n***     CCSID   For arg   Recognized name.\n");
+        pos = 0;
+
+        for (cp = chset_list; cp; cp = cp->c_next) {
+                if (pos) {
+                        fprintf(fp, "\n");
+                        pos = 0;
+                        }
+
+                if (!cp->c_names)
+                        continue;
+
+                pos = fprintf(fp, "***     %5u      %c     ", cp->c_ccsid,
+                    iconv_open_error(cp->c_fromUTF8)? ' ': 'X');
+
+                for (lp = cp->c_names; lp; lp = lp->l_next) {
+                        srcp = (char *) lp->l_symbol;
+                        srcc = strlen(srcp);
+                        dstp = buf;
+                        dstc = sizeof buf;
+                        iconv(utf82job, &srcp, &srcc, &dstp, &dstc);
+                        srcc = dstp - buf;
+
+                        if (pos + srcc > 79) {
+                                fprintf(fp, "\n***%22c", ' ');
+                                pos = 25;
+                                }
+
+                        pos += fprintf(fp, " %.*s", srcc, buf);
+                        }
+                }
+
+        if (pos)
+                fprintf(fp, "\n");
+
+        fprintf(fp, "**/\n\n");
+}
+
+
+void
+generate(FILE * fp)
+
+{
+        unsigned int nstates;
+        unsigned int ntrans;
+        unsigned int maxfinal;
+        t_state * s;
+        t_transition * t;
+        unsigned int i;
+        unsigned int pos;
+        char * ns;
+
+        /**
+        ***     Assign indexes to states and transitions.
+        **/
+
+        nstates = 0;
+        ntrans = 0;
+        maxfinal = 0;
+
+        for (s = dfa_states; s; s = s->s_next) {
+                s->s_index = nstates++;
+
+                if (s->s_final)
+                        maxfinal = nstates;
+
+                for (t = s->s_forward; t; t = t->t_forwnext)
+                        t->t_index = ntrans++;
+                }
+
+        fprintf(fp,
+            "/**\n***     %u states, %u finals, %u transitions.\n**/\n\n",
+            nstates, maxfinal, ntrans);
+        fprintf(stderr, "%u states, %u finals, %u transitions.\n",
+            nstates, maxfinal, ntrans);
+
+        /**
+        ***     Generate types.
+        **/
+
+        fprintf(fp, "typedef unsigned short          t_ccsid;\n");
+        fprintf(fp, "typedef %-23s t_staterange;\n", inttype(nstates));
+        fprintf(fp, "typedef %-23s t_transrange;\n\n", inttype(ntrans));
+
+        /**
+        ***     Generate first transition index for each state.
+        **/
+
+        fprintf(fp, "static t_transrange     trans_array[] = {\n");
+        pos = 0;
+        ntrans = 0;
+
+        for (s = dfa_states; s; s = s->s_next) {
+                pos += fprintf(fp, " %u,", ntrans);
+
+                if (pos > 72) {
+                        fprintf(fp, "\n");
+                        pos = 0;
+                        }
+
+                for (t = s->s_forward; t; t = t->t_forwnext)
+                        ntrans++;
+                }
+
+        fprintf(fp, " %u\n};\n\n", ntrans);
+
+        /**
+        ***     Generate final state info.
+        **/
+
+        fprintf(fp, "static t_ccsid          final_array[] = {\n");
+        pos = 0;
+        ns ="";
+        i = 0;
+
+        for (s = dfa_states; s && i++ < maxfinal; s = s->s_next) {
+                pos += fprintf(fp, "%s", ns);
+                ns = ",";
+
+                if (pos > 72) {
+                        fprintf(fp, "\n");
+                        pos = 0;
+                        }
+
+                pos += fprintf(fp, " %u",
+                    s->s_final? s->s_final->c_ccsid + 1: 0);
+                }
+
+        fprintf(fp, "\n};\n\n");
+
+        /**
+        ***     Generate goto table.
+        **/
+
+        fprintf(fp, "static t_staterange     goto_array[] = {\n");
+        pos = 0;
+
+        for (s = dfa_states; s; s = s->s_next)
+                for (t = s->s_forward; t; t = t->t_forwnext) {
+                        pos += fprintf(fp, " %u,", t->t_to->s_index);
+
+                        if (pos > 72) {
+                                fprintf(fp, "\n");
+                                pos = 0;
+                                }
+                        }
+
+        fprintf(fp, " %u\n};\n\n", nstates);
+
+        /**
+        ***     Generate transition label table.
+        **/
+
+        fprintf(fp, "static unsigned char    label_array[] = {\n");
+        pos = 0;
+        ns ="";
+
+        for (s = dfa_states; s; s = s->s_next)
+                for (t = s->s_forward; t; t = t->t_forwnext) {
+                        pos += fprintf(fp, "%s", ns);
+                        ns = ",";
+
+                        if (pos > 72) {
+                                fprintf(fp, "\n");
+                                pos = 0;
+                                }
+
+                        pos += fprintf(fp, " 0x%02X", t->t_token);
+                        }
+
+        fprintf(fp, "\n};\n", nstates);
+}
+
+
+main(argc, argv)
+int argc;
+char * * argv;
+
+{
+        FILE * fp;
+        t_chset * csp;
+        char symbuf[20];
+
+        chset_list = (t_chset *) NULL;
+        initial_state = newstate();
+        job2utf8 = iconv_open_ccsid(C_UTF8_CCSID, C_SOURCE_CCSID, 0);
+        utf82job = iconv_open_ccsid(C_SOURCE_CCSID, C_UTF8_CCSID, 0);
+
+        if (argc != 4) {
+                fprintf(stderr, "Usage: %s <ccsid-mibenum file> ", *argv);
+                fprintf(stderr, "<iana-character-set file> <output file>\n");
+                exit(1);
+                }
+
+        /**
+        ***     Read CCSID/MIBenum associations. Define special names.
+        **/
+
+        read_assocs(argv[1]);
+
+        /**
+        ***     Read character set names and establish the case-independent
+        ***             name DFA in all possible CCSIDs.
+        **/
+
+        read_iana(argv[2]);
+
+        /**
+        ***     Build DFA from NFA.
+        **/
+
+        builddfa();
+
+        /**
+        ***     Delete NFA.
+        **/
+
+        deletenfa();
+
+        /**
+        ***     Minimize the DFA state count.
+        **/
+
+        optimizedfa();
+
+        /**
+        ***     Generate the table.
+        **/
+
+        fp = fopen(argv[3], "w+");
+
+        if (!fp) {
+                perror(argv[3]);
+                exit(1);
+                }
+
+        fprintf(fp, "/**\n");
+        fprintf(fp, "***     Character set names table.\n");
+        fprintf(fp, "***     Generated by program BLDCSNDFA from");
+        fprintf(fp, " IANA character set assignment file\n");
+        fprintf(fp, "***          and CCSID/MIBenum equivalence file.\n");
+        fprintf(fp, "***     *** Do not edit by hand ***\n");
+        fprintf(fp, "**/\n\n");
+        listids(fp);
+        generate(fp);
+
+        if (ferror(fp)) {
+                perror(argv[3]);
+                fclose(fp);
+                exit(1);
+                }
+
+        fclose(fp);
+        iconv_close(job2utf8);
+        iconv_close(utf82job);
+        exit(0);
+}
diff --git a/os400/iconv/bldcsndfa/ccsid_mibenum.dtd b/os400/iconv/bldcsndfa/ccsid_mibenum.dtd
new file mode 100644 (file)
index 0000000..0c834ec
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+---     DTD for CCSID/MIBEnum association documents.
+---
+---     See Copyright for the status of this software.
+---
+---     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+-->
+<!ELEMENT ccsid_mibenum (assoc)*>
+<!ELEMENT assoc (alias)*>
+<!ATTLIST assoc
+        ccsid CDATA #IMPLIED
+        mibenum CDATA #IMPLIED
+>
+<!ELEMENT alias (#PCDATA)>
diff --git a/os400/iconv/bldcsndfa/ccsid_mibenum.xml b/os400/iconv/bldcsndfa/ccsid_mibenum.xml
new file mode 100644 (file)
index 0000000..8af38b4
--- /dev/null
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ccsid_mibenum SYSTEM "ccsid_mibenum.dtd">
+<!--
+---     CCSID/MIBEnum associations.
+---
+---     See Copyright for the status of this software.
+---
+---     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+-->
+<ccsid_mibenum>
+        <assoc ccsid="0"><!-- Curent job's CCSID. --></assoc>
+        <assoc ccsid="37" mibenum="2028"><!-- EBCDIC-US -->
+                <alias>EBCDIC</alias>
+        </assoc>
+        <assoc ccsid="256"><!-- Netherlands ? --></assoc>
+        <assoc ccsid="273" mibenum="2030"><!-- EBCDIC-DE --></assoc>
+        <assoc ccsid="277" mibenum="2033"><!-- EBCDIC-DK/NO --></assoc>
+        <assoc ccsid="278" mibenum="2034"><!-- EBCDIC-FI/SE --></assoc>
+        <assoc ccsid="280" mibenum="2035"><!-- EBCDIC-IT --></assoc>
+        <assoc ccsid="284" mibenum="2037"><!-- EBCDIC-ES --></assoc>
+        <assoc ccsid="285" mibenum="2038"><!-- EBCDIC-GB --></assoc>
+        <assoc ccsid="290" mibenum="2039"><!-- EBCDIC-JP-Kana --></assoc>
+        <assoc ccsid="297" mibenum="2040"><!-- EBCDIC-FR --></assoc>
+        <assoc ccsid="300"><!-- Japan English ? --></assoc>
+        <assoc ccsid="301"><!-- PC DATA Japanese --></assoc>
+        <assoc ccsid="367" mibenum="3"><!-- ANSI X3.4 ASCII -->
+                <alias>ASCII</alias>
+        </assoc>
+        <assoc ccsid="420" mibenum="2041"><!-- EBCDIC-Arab --></assoc>
+        <assoc ccsid="423" mibenum="2042"><!-- EBCDIC-GR --></assoc>
+        <assoc ccsid="424" mibenum="2043"><!-- EBCDIC-Hebrew --></assoc>
+        <assoc ccsid="437" mibenum="2011"><!-- 8-bit PC ASCII --></assoc>
+        <assoc ccsid="500" mibenum="2044"><!-- EBCDIC-BE/CH international latin 1 --></assoc>
+        <assoc ccsid="720"><!-- MSDOS Arabic ? --></assoc>
+        <assoc ccsid="737"><!-- MSDOS Greek PC DATA ? --></assoc>
+        <assoc ccsid="775" mibenum="2087"><!-- MSDOS Baltic PC DATA --></assoc>
+        <assoc ccsid="813" mibenum="10"><!-- ISO-8859-7 --></assoc>
+        <assoc ccsid="819" mibenum="4"><!-- ISO-8859-1 --></assoc>
+        <assoc ccsid="833"><!-- Korea (extended range) --></assoc>
+        <assoc ccsid="835"><!-- Korea host double byte --></assoc>
+        <assoc ccsid="836"><!-- Simplified chinese (extended range) --></assoc>
+        <assoc ccsid="837"><!-- Simplified chinese --></assoc>
+        <assoc ccsid="838" mibenum="2016"><!-- IBM-Thai --></assoc>
+        <assoc ccsid="850" mibenum="2009"><!-- PC DATA international latin 1 --></assoc>
+        <assoc ccsid="851" mibenum="2045"><!-- PC DATA greek --></assoc>
+        <assoc ccsid="852" mibenum="2010"><!-- PC DATA latin-2 multilingual --></assoc>
+        <assoc ccsid="855" mibenum="2046"><!-- PC DATA ROECE cyrillic --></assoc>
+        <assoc ccsid="857" mibenum="2047"><!-- PC DATA Turkey latin-5 --></assoc>
+        <assoc ccsid="858" mibenum="2089"><!-- PC-Multilingual-850+Euro --></assoc>
+        <assoc ccsid="860" mibenum="2048"><!-- PC DATA Portugal --></assoc>
+        <assoc ccsid="861" mibenum="2049"><!-- PC DATA Iceland --></assoc>
+        <assoc ccsid="862" mibenum="2013"><!-- PC DATA Hebrew --></assoc>
+        <assoc ccsid="863" mibenum="2050"><!-- PC DATA Canada --></assoc>
+        <assoc ccsid="864" mibenum="2051"><!-- PC DATA Arabic --></assoc>
+        <assoc ccsid="865" mibenum="2052"><!-- PC DATA DK/NO --></assoc>
+        <assoc ccsid="866" mibenum="2086"><!-- PC DATA cyrillic 2 --></assoc>
+        <assoc ccsid="868" mibenum="2053"><!-- PC DATA Urdu --></assoc>
+        <assoc ccsid="869" mibenum="2054"><!-- PC DATA greek (2?) --></assoc>
+        <assoc ccsid="870" mibenum="2055"><!-- EBCDIC-Latin2-Multilingual --></assoc>
+        <assoc ccsid="871" mibenum="2056"><!-- EBCDIC-IS --></assoc>
+        <assoc ccsid="874" mibenum="2259"><!-- TIS-620 -->
+                <alias>EUC-TH></alias>
+                <alias>eucTH</alias>
+                <alias>csEUCTH</alias>
+        </assoc>
+        <assoc ccsid="875"><!-- Greece --></assoc>
+        <assoc ccsid="878" mibenum="2084"><!-- KOI8-R --></assoc>
+        <assoc ccsid="880" mibenum="2057"><!-- EBCDIC-Cyrillic --></assoc>
+        <assoc ccsid="891" mibenum="2058"><!-- PC DATA corean (non-extended) --></assoc>
+        <assoc ccsid="896"><!-- Japan 7-bit Katakana --></assoc>
+        <assoc ccsid="897" mibenum="15"><!-- JIS_X0201 --></assoc>
+        <assoc ccsid="903" mibenum="2059"><!-- PC DATA simplified chinese (non-extended) --></assoc>
+        <assoc ccsid="904" mibenum="2060"><!-- PC DATA traditional chinese --></assoc>
+        <assoc ccsid="905" mibenum="2061"><!-- EBCDIC-TR latin 3 --></assoc>
+        <assoc ccsid="912" mibenum="5"><!-- ISO-8859-2 --></assoc>
+        <assoc ccsid="913" mibenum="6"><!-- ISO-8859-3 --></assoc>
+        <assoc ccsid="914" mibenum="7"><!-- ISO-8859-4 --></assoc>
+        <assoc ccsid="915" mibenum="8"><!-- ISO-8859-5 --></assoc>
+        <assoc ccsid="916" mibenum="11"><!-- ISO-8859-8 --></assoc>
+        <assoc ccsid="918" mibenum="2062"><!-- IBM918 --></assoc>
+        <assoc ccsid="920" mibenum="12"><!-- ISO-8859-9 --></assoc>
+        <assoc ccsid="921" mibenum="109"><!-- ISO-8859-13 --></assoc>
+        <assoc ccsid="922"><!-- Estonia, 8-bit --></assoc>
+        <assoc ccsid="923" mibenum="111"><!-- ISO-8859-15 --></assoc>
+        <assoc ccsid="924" mibenum="2090"><!-- EBCDIC-Latin9+Euro --></assoc>
+        <assoc ccsid="926"><!-- Korean PC DATA DBCS, UDC 1880 --></assoc>
+        <assoc ccsid="927"><!-- Traditional chinese PC DATA DBCS, UDC 6204 --></assoc>
+        <assoc ccsid="928"><!-- Simplified chinese PC DATA DBCS, UDC 1880 --></assoc>
+        <assoc ccsid="930"><!-- Japan Katakana (extended range) 4370 UDC (User Defined Characters) --></assoc>
+        <assoc ccsid="932"><!-- Japan PC DATA Mixed --></assoc>
+        <assoc ccsid="933"><!-- Korea (extended range), 1880 UDC --></assoc>
+        <assoc ccsid="934"><!-- Korean PC DATA --></assoc>
+        <assoc ccsid="935"><!-- Simplified Chinese (extended range) --></assoc>
+        <assoc ccsid="936"><!-- Simplified Chinese (non-extended) --></assoc>
+        <assoc ccsid="937"><!-- Traditional Chinese (extended range) --></assoc>
+        <assoc ccsid="938"><!-- Traditional Chinese (non-extended) --></assoc>
+        <assoc ccsid="939"><!-- Japan English (extended range) 4370 UDC --></assoc>
+        <assoc ccsid="942"><!-- Japanese PC DATA Mixed --></assoc>
+        <assoc ccsid="943" mibenum="17"><!-- Shift_JIS --></assoc>
+        <assoc ccsid="944"><!-- Korean PC DATA Mixed --></assoc>
+        <assoc ccsid="946"><!-- Simplified Chinese PC DATA Mixed --></assoc>
+        <assoc ccsid="947"><!-- Traditional Chinese PC DATA Mixed 6204 UDC (User Defined Characters) --></assoc>
+        <assoc ccsid="949"><!-- Republic of Korea National Standard Graphic Character Set (KS). PC DATA mixed-byte including 1800 UDC --></assoc>
+        <assoc ccsid="950"><!-- Traditional Chinese PC DATA Mixed for Big5 --></assoc>
+        <assoc ccsid="951"><!-- Republic of Korea National Standard Graphic Character Set (KS). PC DATA double-byte including 1800 UDC --></assoc>
+        <assoc ccsid="956"><!-- JIS X201 Roman for CP 00895; JIS X208-1983 for CP 00952 --></assoc>
+        <assoc ccsid="957"><!-- JIS X201 Roman for CP 00895; JIS X208-1978 for CP 00955 --></assoc>
+        <assoc ccsid="958"><!-- ASCII for CP 00367; JIS X208-1983 for CP 00952 --></assoc>
+        <assoc ccsid="959"><!-- ASCII for CP 00367; JIS X208-1978 for CP 00955 --></assoc>
+        <assoc ccsid="964"><!-- G0 - ASCII for CP 00367; G1-CNS 11643 plane 1 for CP 960 --></assoc>
+        <assoc ccsid="965"><!-- ASCII for CP 00367; CNS 11643 plane 1 for CP 960 --></assoc>
+        <assoc ccsid="970" mibenum="38"><!-- EUC-KR --></assoc>
+        <assoc ccsid="1008"><!-- Arabic 8-bit ISO/ASCII --></assoc>
+        <assoc ccsid="1009"><!-- IRV --></assoc>
+        <assoc ccsid="1010"><!-- France --></assoc>
+        <assoc ccsid="1011"><!-- Germany --></assoc>
+        <assoc ccsid="1012"><!-- Italy --></assoc>
+        <assoc ccsid="1013"><!-- United Kingdom --></assoc>
+        <assoc ccsid="1014"><!-- Spain --></assoc>
+        <assoc ccsid="1015"><!-- Portugal --></assoc>
+        <assoc ccsid="1016"><!-- Norway --></assoc>
+        <assoc ccsid="1017"><!-- Denmark --></assoc>
+        <assoc ccsid="1018"><!-- Finland and Sweden --></assoc>
+        <assoc ccsid="1019"><!-- Belgium and Netherlands --></assoc>
+        <assoc ccsid="1025"><!-- Cyrillic Multilingual --></assoc>
+        <assoc ccsid="1026" mibenum="2063"><!-- Turkey latin 5 CECP --></assoc>
+        <assoc ccsid="1027"><!-- Japan english (extended range) --></assoc>
+        <assoc ccsid="1040"><!-- Korean Latin PC DATA extended --></assoc>
+        <assoc ccsid="1041"><!-- Japanese PC DATA extended --></assoc>
+        <assoc ccsid="1042"><!-- Simplified Chinese PC DATA extended --></assoc>
+        <assoc ccsid="1043"><!-- Traditional Chinese PC DATA extended --></assoc>
+        <assoc ccsid="1046"><!-- PC DATA - Arabic Extended --></assoc>
+        <assoc ccsid="1047" mibenum="2102"><!-- Latin open sys EBCDIC --></assoc>
+        <assoc ccsid="1051" mibenum="2004"><!-- hp-roman8 --></assoc>
+        <assoc ccsid="1088"><!-- Korean PC DATA single-byte --></assoc>
+        <assoc ccsid="1089" mibenum="9"><!-- ISO 8859-6: Arabic --></assoc>
+        <assoc ccsid="1097"><!-- Farsi --></assoc>
+        <assoc ccsid="1098"><!-- Farsi (IBM-PC) --></assoc>
+        <assoc ccsid="1112"><!-- Baltic, Multilingual --></assoc>
+        <assoc ccsid="1114"><!-- Traditional Chinese, Taiwan Industry Graphic Character Set (Big5) --></assoc>
+        <assoc ccsid="1115"><!-- Simplified Chinese, People&#x27;s Republic of China National. Standard (GB), personal computer SBCS --></assoc>
+        <assoc ccsid="1122"><!-- Estonia --></assoc>
+        <assoc ccsid="1123"/>
+        <assoc ccsid="1129"><!-- ISO-8 Vietnamese --></assoc>
+        <assoc ccsid="1130"><!-- EBCDIC Vietnamese --></assoc>
+        <assoc ccsid="1132"><!-- EBCDIC Lao --></assoc>
+        <assoc ccsid="1133"><!-- ISO-8 Lao --></assoc>
+        <assoc ccsid="1137"/>
+        <assoc ccsid="1140" mibenum="2091"><!-- EBCDIC-US-37+Euro --></assoc>
+        <assoc ccsid="1141" mibenum="2092"><!-- EBCDIC-DE-273+Euro --></assoc>
+        <assoc ccsid="1142" mibenum="2093"><!-- EBCDIC-DK/NO-277+Euro --></assoc>
+        <assoc ccsid="1143" mibenum="2094"><!-- EBCDIC-FI/SE-278+Euro --></assoc>
+        <assoc ccsid="1144" mibenum="2095"><!-- EBCDIC-IT-280+Euro --></assoc>
+        <assoc ccsid="1145" mibenum="2096"><!-- EBCDIC-ES-284+Euro --></assoc>
+        <assoc ccsid="1146" mibenum="2097"><!-- EBCDIC-GB-285+Euro --></assoc>
+        <assoc ccsid="1147" mibenum="2098"><!-- EBCDIC-FR-297+Euro --></assoc>
+        <assoc ccsid="1148" mibenum="2099"><!-- EBCDIC-INT-500+Euro --></assoc>
+        <assoc ccsid="1149" mibenum="2100"><!-- EBCDIC-IS-871+Euro --></assoc>
+        <assoc ccsid="1153"/>
+        <assoc ccsid="1154"/>
+        <assoc ccsid="1155"/>
+        <assoc ccsid="1156"/>
+        <assoc ccsid="1157"/>
+        <assoc ccsid="1158"/>
+        <assoc ccsid="1160"/>
+        <assoc ccsid="1164"/>
+        <assoc ccsid="1201" mibenum="1013"><!-- UTF-16BE -->
+                <alias>UTF16-BE</alias>
+                <alias>UTF16BE</alias>
+                <alias>UTF-16-BE</alias>
+        </assoc>
+        <assoc ccsid="1203" mibenum="1014"><!-- UTF-16LE -->
+                <alias>UTF16-LE</alias>
+                <alias>UTF16LE</alias>
+                <alias>UTF-16-LE</alias>
+        </assoc>
+        <assoc ccsid="1208" mibenum="106"><!-- UTF-8 -->
+                <alias>UTF8</alias>
+        </assoc>
+        <assoc ccsid="1233" mibenum="1018"><!-- UTF-32BE -->
+                <alias>UTF32-BE</alias>
+                <alias>UTF32BE</alias>
+                <alias>UTF-32-BE</alias>
+        </assoc>
+        <assoc ccsid="1235" mibenum="1019"><!-- UTF-32LE -->
+                <alias>UTF32-LE</alias>
+                <alias>UTF32LE</alias>
+                <alias>UTF-32-LE</alias>
+        </assoc>
+        <assoc ccsid="1250" mibenum="2002"><!-- Windows Latin 2 --></assoc>
+        <assoc ccsid="1251"><!-- Windows Cyrillic --></assoc>
+        <assoc ccsid="1252" mibenum="2001"><!-- Windows Latin 1 --></assoc>
+        <assoc ccsid="1253"><!-- Windows Greek --></assoc>
+        <assoc ccsid="1254"><!-- Windows Turkish --></assoc>
+        <assoc ccsid="1255"><!-- Windows Hebrew --></assoc>
+        <assoc ccsid="1256"><!-- Windows Arabic --></assoc>
+        <assoc ccsid="1257"><!-- Windows Baltic Rim --></assoc>
+        <assoc ccsid="1258"><!-- Windows Vietnamese --></assoc>
+        <assoc ccsid="1275"><!-- Apple, Latin-1 --></assoc>
+        <assoc ccsid="1276" mibenum="2005"><!-- Adobe-Standard-Encoding --></assoc>
+        <assoc ccsid="1280"><!-- Apple, Greek --></assoc>
+        <assoc ccsid="1281"><!-- Apple, Turkey --></assoc>
+        <assoc ccsid="1282"><!-- Apple, Central European (Latin-2) --></assoc>
+        <assoc ccsid="1283"><!-- Apple, Cyrillic --></assoc>
+        <assoc ccsid="1363" mibenum="36"><!-- KS_C_5601-1987 -->
+                <alias>korean</alias>
+        </assoc>
+        <assoc ccsid="1364"/>
+        <assoc ccsid="1373"><!-- Windows-950 --></assoc>
+        <assoc ccsid="1375" mibenum="2101"><!-- Big5-HKSCS --></assoc>
+        <assoc ccsid="1380"><!-- Simplified Chinese DBCS PC --></assoc>
+        <assoc ccsid="1381"><!-- Simplified Chinese PC DATA Mixed --></assoc>
+        <assoc ccsid="1383" mibenum="2025"><!-- GB2312 -->
+                <alias>EUC-CN</alias>
+        </assoc>
+        <assoc ccsid="1386" mibenum="113"><!-- GBK --></assoc>
+        <assoc ccsid="1388"><!-- Simplified Chinese DBCS-Host DATA GBK mixed --></assoc>
+        <assoc ccsid="1392"><!-- S-ch PC Dara mixed GB18030 --></assoc>
+        <assoc ccsid="1399" />
+        <assoc ccsid="4396"><!-- Japanese Host DB including 1880 --></assoc>
+        <assoc ccsid="4948"><!-- Latin 2 PC DATA Multilingual --></assoc>
+        <assoc ccsid="4951"><!-- Cyrillic PC DATA Multilingual --></assoc>
+        <assoc ccsid="4952"><!-- Hebrew PC DATA --></assoc>
+        <assoc ccsid="4953"><!-- Turkey PC DATA Latin 5 --></assoc>
+        <assoc ccsid="4960"><!-- Arabic PC DATA --></assoc>
+        <assoc ccsid="4965"><!-- Greek PC DATA --></assoc>
+        <assoc ccsid="4971"/>
+        <assoc ccsid="5026"><!-- Japan Katakana (extended range) 1880 UDC --></assoc>
+        <assoc ccsid="5035"><!-- Japan English (extended range) 1880 UDC --></assoc>
+        <assoc ccsid="5050"><!-- G0 - JIS X201 Roman for CP 895; G1 JIS X208-1990 for CP 952 --></assoc>
+        <assoc ccsid="5052"><!-- JIS X201 Roman for CP 895; JIS X208-1983 for CP 952 --></assoc>
+        <assoc ccsid="5053"><!-- JIS X201 Roman for CP 895; JIS X208-1978 for CP 955 --></assoc>
+        <assoc ccsid="5054"><!-- ASCII for CP 367; JIS X208-1983 for CP 952 --></assoc>
+        <assoc ccsid="5055"><!-- ASCII for CP 367; JIS X208-1978 for CP 955 --></assoc>
+        <assoc ccsid="5354" mibenum="2258"><!-- windows-1258 --></assoc>
+        <assoc ccsid="5346" mibenum="2250"><!-- windows-1250 --></assoc>
+        <assoc ccsid="5347" mibenum="2251"><!-- windows-1251 --></assoc>
+        <assoc ccsid="5348" mibenum="2252"><!-- windows-1252 --></assoc>
+        <assoc ccsid="5349" mibenum="2253"><!-- windows-1253 --></assoc>
+        <assoc ccsid="5350" mibenum="2254"><!-- windows-1254 --></assoc>
+        <assoc ccsid="5123"/>
+        <assoc ccsid="5478" mibenum="57"><!-- GB_2312-80 -->
+                <alias>chinese</alias>
+        </assoc>
+        <assoc ccsid="8612"><!-- Arabic (base shapes only) --></assoc>
+        <assoc ccsid="9030"><!-- Thai Host Extended SBCS --></assoc>
+        <assoc ccsid="9056"><!-- PC DATA: Arabic PC Storage/Interchange --></assoc>
+        <assoc ccsid="9066"><!-- Thai PC DATA Extended SBCS --></assoc>
+        <assoc ccsid="9447" mibenum="2255"><!-- windows-1255 --></assoc>
+        <assoc ccsid="9448" mibenum="2256"><!-- windows-1256 --></assoc>
+        <assoc ccsid="9449" mibenum="2257"><!-- windows-1257 --></assoc>
+        <assoc ccsid="12708"/>
+        <assoc ccsid="13121"/>
+        <assoc ccsid="13124"/>
+        <assoc ccsid="13488" mibenum="1000"><!-- ISO-10646-UCS-2 -->
+                <alias>UCS-2</alias>
+                <alias>UCS2</alias>
+        </assoc>
+        <assoc ccsid="17354"><!-- G0 - ASCII for CP 00367; G1 -KSC X5601-1989 (including 188 UDCs) for --></assoc>
+        <assoc ccsid="25546"><!-- Korean 2022-KR TCP ASCII --></assoc>
+        <assoc ccsid="28709"><!-- Traditional Chinese (extended range) --></assoc>
+        <assoc ccsid="33722" mibenum="18"><!-- EUC-JP --></assoc>
+        <assoc ccsid="57345"><!-- All Japanese 2022 characters --></assoc>
+        <assoc ccsid="61952"><!-- AS/400 specific UCS level 2. --></assoc>
+        <assoc ccsid="62211"/>
+        <assoc ccsid="62224"/>
+        <assoc ccsid="62235"/>
+        <assoc ccsid="62245"/>
+        <assoc mibenum="27"><!-- ISO-10646-UTF-1 --></assoc>
+</ccsid_mibenum>
diff --git a/os400/iconv/bldcsndfa/character-sets.xhtml b/os400/iconv/bldcsndfa/character-sets.xhtml
new file mode 100644 (file)
index 0000000..e1d5a3b
--- /dev/null
@@ -0,0 +1,3077 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:iana="http://www.iana.org/assignments">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=ASCII" />
+    <link rel="stylesheet" href="../_support/iana-registry.css" type="text/css" />
+    <script type="text/javascript" src="../_support/jquery.js"></script>
+    <script type="text/javascript" src="../_support/sort.js"></script>
+    <title>Character Sets</title>
+  </head>
+  <body>
+    <h1>Character Sets</h1>
+    <dl>
+      <dt>Last Updated</dt>
+      <dd>2013-01-23</dd>
+      <dt>Registration Procedure(s)</dt>
+      <dd>
+        <pre>Expert Review</pre>
+      </dd>
+      <dt>Expert(s)</dt>
+      <dd>
+        <pre>Primary Expert Ned Freed and Secondary Expert Martin D&#252;rst</pre>
+      </dd>
+      <dt>Reference</dt>
+      <dd>[<a href="http://www.iana.org/go/rfc2978">RFC2978</a>]</dd>
+      <dt>Note</dt>
+      <dd>
+        <pre>These are the official names for character sets that may be used in
+the Internet and may be referred to in Internet documentation.  These
+names are expressed in ANSI_X3.4-1968 which is commonly called
+US-ASCII or simply ASCII.  The character set most commonly use in the
+Internet and used especially in protocol standards is US-ASCII, this
+is strongly encouraged.  The use of the name US-ASCII is also
+encouraged.
+
+The character set names may be up to 40 characters taken from the
+printable characters of US-ASCII.  However, no distinction is made
+between use of upper and lower case letters.
+
+The MIBenum value is a unique value for use in MIBs to identify coded
+character sets.
+
+The value space for MIBenum values has been divided into three
+regions. The first region (3-999) consists of coded character sets
+that have been standardized by some standard setting organization.
+This region is intended for standards that do not have subset
+implementations. The second region (1000-1999) is for the Unicode and
+ISO/IEC 10646 coded character sets together with a specification of a
+(set of) sub-repertoires that may occur.  The third region (&gt;1999) is
+intended for vendor specific coded character sets.
+
+        Assigned MIB enum Numbers
+        -------------------------
+        0-2             Reserved
+        3-999           Set By Standards Organizations
+        1000-1999       Unicode / 10646
+        2000-2999       Vendor
+
+The aliases that start with "cs" have been added for use with the
+IANA-CHARSET-MIB as originally defined in [<a href="http://www.iana.org/go/rfc3808">RFC3808</a>], and as currently
+maintained by IANA at [<a href="http://www.iana.org/assignments/ianacharset-mib">IANA registry <i>ianacharset-mib</i></a>].
+Note that the ianacharset-mib needs to be kept in sync with this
+registry.  These aliases that start with "cs" contain the standard
+numbers along with suggestive names in order to facilitate applications
+that want to display the names in user interfaces.  The "cs" stands
+for character set and is provided for applications that need a lower
+case first letter but want to use mixed case thereafter that cannot
+contain any special characters, such as underbar ("_") and dash ("-").
+
+If the character set is from an ISO standard, its cs alias is the ISO
+standard number or name.  If the character set is not from an ISO
+standard, but is registered with ISO (IPSJ/ITSCJ is the current ISO
+Registration Authority), the ISO Registry number is specified as
+ISOnnn followed by letters suggestive of the name or standards number
+of the code set.  When a national or international standard is
+revised, the year of revision is added to the cs alias of the new
+character set entry in the IANA Registry in order to distinguish the
+revised character set from the original character set.</pre>
+      </dd>
+      <dt>Alternative Formats</dt>
+      <dd>
+        <a class="altformat" href="character-sets.txt"><img src="/_img/icons/text-plain.png" /><br />Plain text</a>
+      </dd>
+    </dl>
+    <dl>
+      <dt>Alternative Formats</dt>
+      <dd>
+        <a class="altformat" href="character-sets-1.csv"><img src="/_img/icons/text-csv.png" /><br />CSV</a>
+      </dd>
+    </dl>
+    <table id="table-character-sets-1" class="sortable">
+      <thead>
+        <tr>
+          <th>Preferred MIME Name</th>
+          <th>Name</th>
+          <th>MIBenum</th>
+          <th>Source</th>
+          <th>Reference</th>
+          <th>Aliases</th>
+          <th>Note</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>US-ASCII</td>
+          <td>US-ASCII</td>
+          <td>3</td>
+          <td>ANSI X3.4-1986</td>
+          <td>[<a href="http://www.iana.org/go/rfc2046">RFC2046</a>]</td>
+          <td>iso-ir-6<br />ANSI_X3.4-1968<br />ANSI_X3.4-1986<br />ISO_646.irv:1991<br />ISO646-US<br />US-ASCII<br />us<br />IBM367<br />cp367<br />csASCII</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-1</td>
+          <td>ISO_8859-1:1987</td>
+          <td>4</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-100<br />ISO_8859-1<br />ISO-8859-1<br />latin1<br />l1<br />IBM819<br />CP819<br />csISOLatin1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-2</td>
+          <td>ISO_8859-2:1987</td>
+          <td>5</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-101<br />ISO_8859-2<br />ISO-8859-2<br />latin2<br />l2<br />csISOLatin2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-3</td>
+          <td>ISO_8859-3:1988</td>
+          <td>6</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-109<br />ISO_8859-3<br />ISO-8859-3<br />latin3<br />l3<br />csISOLatin3</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-4</td>
+          <td>ISO_8859-4:1988</td>
+          <td>7</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-110<br />ISO_8859-4<br />ISO-8859-4<br />latin4<br />l4<br />csISOLatin4</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-5</td>
+          <td>ISO_8859-5:1988</td>
+          <td>8</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-144<br />ISO_8859-5<br />ISO-8859-5<br />cyrillic<br />csISOLatinCyrillic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-6</td>
+          <td>ISO_8859-6:1987</td>
+          <td>9</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-127<br />ISO_8859-6<br />ISO-8859-6<br />ECMA-114<br />ASMO-708<br />arabic<br />csISOLatinArabic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-7</td>
+          <td>ISO_8859-7:1987</td>
+          <td>10</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1947">RFC1947</a>][<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-126<br />ISO_8859-7<br />ISO-8859-7<br />ELOT_928<br />ECMA-118<br />greek<br />greek8<br />csISOLatinGreek</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-8</td>
+          <td>ISO_8859-8:1988</td>
+          <td>11</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-138<br />ISO_8859-8<br />ISO-8859-8<br />hebrew<br />csISOLatinHebrew</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-9</td>
+          <td>ISO_8859-9:1989</td>
+          <td>12</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-148<br />ISO_8859-9<br />ISO-8859-9<br />latin5<br />l5<br />csISOLatin5</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-10</td>
+          <td>ISO-8859-10</td>
+          <td>13</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-157<br />l6<br />ISO_8859-10:1992<br />csISOLatin6<br />latin6</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_6937-2-add</td>
+          <td>14</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>] and ISO 6937-2:1983<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-142<br />csISOTextComm</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_X0201</td>
+          <td>15</td>
+          <td>JIS X 0201-1976.   One byte only, this is equivalent to
+JIS/Roman (similar to ASCII) plus eight-bit half-width
+Katakana</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>X0201<br />csHalfWidthKatakana</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_Encoding</td>
+          <td>16</td>
+          <td>JIS X 0202-1991.  Uses ISO 2022 escape sequences to
+shift code sets as documented in JIS X 0202-1991.</td>
+          <td></td>
+          <td>csJISEncoding</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>Shift_JIS</td>
+          <td>Shift_JIS</td>
+          <td>17</td>
+          <td>This charset is an extension of csHalfWidthKatakana by
+adding graphic characters in JIS X 0208.  The CCS's are
+JIS X0201:1997 and JIS X0208:1997.  The
+complete definition is shown in Appendix 1 of JIS
+X0208:1997.
+This charset can be used for the top-level media type "text".</td>
+          <td></td>
+          <td>MS_Kanji<br />csShiftJIS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>EUC-JP</td>
+          <td>Extended_UNIX_Code_Packed_Format_for_Japanese</td>
+          <td>18</td>
+          <td>Standardized by OSF, UNIX International, and UNIX Systems
+Laboratories Pacific.  Uses ISO 2022 rules to select
+code set 0: US-ASCII (a single 7-bit byte set)
+code set 1: JIS X0208-1990 (a double 8-bit byte set)
+restricted to A0-FF in both bytes
+code set 2: Half Width Katakana (a single 7-bit byte set)
+requiring SS2 as the character prefix
+code set 3: JIS X0212-1990 (a double 7-bit byte set)
+restricted to A0-FF in both bytes
+requiring SS3 as the character prefix</td>
+          <td></td>
+          <td>csEUCPkdFmtJapanese<br />EUC-JP</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Extended_UNIX_Code_Fixed_Width_for_Japanese</td>
+          <td>19</td>
+          <td>Used in Japan.  Each character is 2 octets.
+code set 0: US-ASCII (a single 7-bit byte set)
+1st byte = 00
+2nd byte = 20-7E
+code set 1: JIS X0208-1990 (a double 7-bit byte set)
+restricted  to A0-FF in both bytes
+code set 2: Half Width Katakana (a single 7-bit byte set)
+1st byte = 00
+2nd byte = A0-FF
+code set 3: JIS X0212-1990 (a double 7-bit byte set)
+restricted to A0-FF in
+the first byte
+and 21-7E in the second byte</td>
+          <td></td>
+          <td>csEUCFixWidJapanese</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>BS_4730</td>
+          <td>20</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-4<br />ISO646-GB<br />gb<br />uk<br />csISO4UnitedKingdom</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>SEN_850200_C</td>
+          <td>21</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-11<br />ISO646-SE2<br />se2<br />csISO11SwedishForNames</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IT</td>
+          <td>22</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-15<br />ISO646-IT<br />csISO15Italian</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ES</td>
+          <td>23</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-17<br />ISO646-ES<br />csISO17Spanish</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>DIN_66003</td>
+          <td>24</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-21<br />de<br />ISO646-DE<br />csISO21German</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NS_4551-1</td>
+          <td>25</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-60<br />ISO646-NO<br />no<br />csISO60DanishNorwegian<br />csISO60Norwegian1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NF_Z_62-010</td>
+          <td>26</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-69<br />ISO646-FR<br />fr<br />csISO69French</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-UTF-1</td>
+          <td>27</td>
+          <td>Universal Transfer Format (1), this is the multibyte
+encoding, that subsets ASCII-7. It does not have byte
+ordering issues.</td>
+          <td></td>
+          <td>csISO10646UTF1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_646.basic:1983</td>
+          <td>28</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>ref<br />csISO646basic1983</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>INVARIANT</td>
+          <td>29</td>
+          <td></td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csINVARIANT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_646.irv:1983</td>
+          <td>30</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-2<br />irv<br />csISO2IntlRefVersion</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NATS-SEFI</td>
+          <td>31</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-8-1<br />csNATSSEFI</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NATS-SEFI-ADD</td>
+          <td>32</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-8-2<br />csNATSSEFIADD</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NATS-DANO</td>
+          <td>33</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-9-1<br />csNATSDANO</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NATS-DANO-ADD</td>
+          <td>34</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-9-2<br />csNATSDANOADD</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>SEN_850200_B</td>
+          <td>35</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-10<br />FI<br />ISO646-FI<br />ISO646-SE<br />se<br />csISO10Swedish</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>KS_C_5601-1987</td>
+          <td>36</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-149<br />KS_C_5601-1989<br />KSC_5601<br />korean<br />csKSC56011987</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-2022-KR</td>
+          <td>ISO-2022-KR</td>
+          <td>37</td>
+          <td>[<a href="http://www.iana.org/go/rfc1557">RFC1557</a>] (see also KS_C_5601-1987)</td>
+          <td>[<a href="http://www.iana.org/go/rfc1557">RFC1557</a>][<a href="#Woohyong_Choi">Woohyong_Choi</a>]</td>
+          <td>csISO2022KR</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>EUC-KR</td>
+          <td>EUC-KR</td>
+          <td>38</td>
+          <td>[<a href="http://www.iana.org/go/rfc1557">RFC1557</a>] (see also KS_C_5861-1992)</td>
+          <td>[<a href="http://www.iana.org/go/rfc1557">RFC1557</a>][<a href="#Woohyong_Choi">Woohyong_Choi</a>]</td>
+          <td>csEUCKR</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-2022-JP</td>
+          <td>ISO-2022-JP</td>
+          <td>39</td>
+          <td>[<a href="http://www.iana.org/go/rfc1468">RFC1468</a>] (see also [<a href="http://www.iana.org/go/rfc2237">RFC2237</a>])</td>
+          <td>[<a href="http://www.iana.org/go/rfc1468">RFC1468</a>][<a href="#Jun_Murai">Jun_Murai</a>]</td>
+          <td>csISO2022JP</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-2022-JP-2</td>
+          <td>ISO-2022-JP-2</td>
+          <td>40</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1554">RFC1554</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1554">RFC1554</a>][<a href="#Masataka_Ohta">Masataka_Ohta</a>]</td>
+          <td>csISO2022JP2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6220-1969-jp</td>
+          <td>41</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>JIS_C6220-1969<br />iso-ir-13<br />katakana<br />x0201-7<br />csISO13JISC6220jp</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6220-1969-ro</td>
+          <td>42</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-14<br />jp<br />ISO646-JP<br />csISO14JISC6220ro</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>PT</td>
+          <td>43</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-16<br />ISO646-PT<br />csISO16Portuguese</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>greek7-old</td>
+          <td>44</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-18<br />csISO18Greek7Old</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>latin-greek</td>
+          <td>45</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-19<br />csISO19LatinGreek</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NF_Z_62-010_(1973)</td>
+          <td>46</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-25<br />ISO646-FR1<br />csISO25French</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Latin-greek-1</td>
+          <td>47</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-27<br />csISO27LatinGreek1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_5427</td>
+          <td>48</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-37<br />csISO5427Cyrillic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6226-1978</td>
+          <td>49</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-42<br />csISO42JISC62261978</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>BS_viewdata</td>
+          <td>50</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-47<br />csISO47BSViewdata</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>INIS</td>
+          <td>51</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-49<br />csISO49INIS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>INIS-8</td>
+          <td>52</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-50<br />csISO50INIS8</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>INIS-cyrillic</td>
+          <td>53</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-51<br />csISO51INISCyrillic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_5427:1981</td>
+          <td>54</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-54<br />ISO5427Cyrillic1981<br />csISO54271981</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_5428:1980</td>
+          <td>55</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-55<br />csISO5428Greek</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>GB_1988-80</td>
+          <td>56</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-57<br />cn<br />ISO646-CN<br />csISO57GB1988</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>GB_2312-80</td>
+          <td>57</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-58<br />chinese<br />csISO58GB231280</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NS_4551-2</td>
+          <td>58</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>ISO646-NO2<br />iso-ir-61<br />no2<br />csISO61Norwegian2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>videotex-suppl</td>
+          <td>59</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-70<br />csISO70VideotexSupp1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>PT2</td>
+          <td>60</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-84<br />ISO646-PT2<br />csISO84Portuguese2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ES2</td>
+          <td>61</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-85<br />ISO646-ES2<br />csISO85Spanish2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>MSZ_7795.3</td>
+          <td>62</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-86<br />ISO646-HU<br />hu<br />csISO86Hungarian</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6226-1983</td>
+          <td>63</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-87<br />x0208<br />JIS_X0208-1983<br />csISO87JISX0208</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>greek7</td>
+          <td>64</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-88<br />csISO88Greek7</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ASMO_449</td>
+          <td>65</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>ISO_9036<br />arabic7<br />iso-ir-89<br />csISO89ASMO449</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>iso-ir-90</td>
+          <td>66</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csISO90</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-a</td>
+          <td>67</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-91<br />jp-ocr-a<br />csISO91JISC62291984a</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-b</td>
+          <td>68</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-92<br />ISO646-JP-OCR-B<br />jp-ocr-b<br />csISO92JISC62991984b</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-b-add</td>
+          <td>69</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-93<br />jp-ocr-b-add<br />csISO93JIS62291984badd</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-hand</td>
+          <td>70</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-94<br />jp-ocr-hand<br />csISO94JIS62291984hand</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-hand-add</td>
+          <td>71</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-95<br />jp-ocr-hand-add<br />csISO95JIS62291984handadd</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_C6229-1984-kana</td>
+          <td>72</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-96<br />csISO96JISC62291984kana</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_2033-1983</td>
+          <td>73</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-98<br />e13b<br />csISO2033</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ANSI_X3.110-1983</td>
+          <td>74</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-99<br />CSA_T500-1983<br />NAPLPS<br />csISO99NAPLPS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>T.61-7bit</td>
+          <td>75</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-102<br />csISO102T617bit</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>T.61-8bit</td>
+          <td>76</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>T.61<br />iso-ir-103<br />csISO103T618bit</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ECMA-cyrillic</td>
+          <td>77</td>
+          <td>[<a href="http://www.itscj.ipsj.or.jp/ISO-IR/111.pdf">ISO registry</a>]
+        (formerly [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ECMA
+          registry</a>])</td>
+          <td></td>
+          <td>iso-ir-111<br />KOI8-E<br />csISO111ECMACyrillic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CSA_Z243.4-1985-1</td>
+          <td>78</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-121<br />ISO646-CA<br />csa7-1<br />csa71<br />ca<br />csISO121Canadian1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CSA_Z243.4-1985-2</td>
+          <td>79</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-122<br />ISO646-CA2<br />csa7-2<br />csa72<br />csISO122Canadian2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CSA_Z243.4-1985-gr</td>
+          <td>80</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-123<br />csISO123CSAZ24341985gr</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-6-E</td>
+          <td>ISO_8859-6-E</td>
+          <td>81</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1556">RFC1556</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1556">RFC1556</a>][<a href="#IANA">IANA</a>]</td>
+          <td>csISO88596E<br />ISO-8859-6-E</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-6-I</td>
+          <td>ISO_8859-6-I</td>
+          <td>82</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1556">RFC1556</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1556">RFC1556</a>][<a href="#IANA">IANA</a>]</td>
+          <td>csISO88596I<br />ISO-8859-6-I</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>T.101-G2</td>
+          <td>83</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-128<br />csISO128T101G2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-8-E</td>
+          <td>ISO_8859-8-E</td>
+          <td>84</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1556">RFC1556</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1556">RFC1556</a>][<a href="#Hank_Nussbacher">Hank_Nussbacher</a>]</td>
+          <td>csISO88598E<br />ISO-8859-8-E</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>ISO-8859-8-I</td>
+          <td>ISO_8859-8-I</td>
+          <td>85</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1556">RFC1556</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1556">RFC1556</a>][<a href="#Hank_Nussbacher">Hank_Nussbacher</a>]</td>
+          <td>csISO88598I<br />ISO-8859-8-I</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CSN_369103</td>
+          <td>86</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-139<br />csISO139CSN369103</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JUS_I.B1.002</td>
+          <td>87</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-141<br />ISO646-YU<br />js<br />yu<br />csISO141JUSIB1002</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IEC_P27-1</td>
+          <td>88</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-143<br />csISO143IECP271</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JUS_I.B1.003-serb</td>
+          <td>89</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-146<br />serbian<br />csISO146Serbian</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JUS_I.B1.003-mac</td>
+          <td>90</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>macedonian<br />iso-ir-147<br />csISO147Macedonian</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>greek-ccitt</td>
+          <td>91</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-150<br />csISO150<br />csISO150GreekCCITT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>NC_NC00-10:81</td>
+          <td>92</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cuba<br />iso-ir-151<br />ISO646-CU<br />csISO151Cuba</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_6937-2-25</td>
+          <td>93</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-152<br />csISO6937Add</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>GOST_19768-74</td>
+          <td>94</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>ST_SEV_358-88<br />iso-ir-153<br />csISO153GOST1976874</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_8859-supp</td>
+          <td>95</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-154<br />latin1-2-5<br />csISO8859Supp</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO_10367-box</td>
+          <td>96</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>iso-ir-155<br />csISO10367Box</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>latin-lap</td>
+          <td>97</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>lap<br />iso-ir-158<br />csISO158Lap</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>JIS_X0212-1990</td>
+          <td>98</td>
+          <td>
+        [<a href="http://www.itscj.ipsj.or.jp/ISO-IR/">ISO-IR: International Register of Escape Sequences</a>]<br />
+        Note: The current registration authority is IPSJ/ITSCJ, Japan.
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>x0212<br />iso-ir-159<br />csISO159JISX02121990</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>DS_2089</td>
+          <td>99</td>
+          <td>Danish Standard, DS 2089, February 1974</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>DS2089<br />ISO646-DK<br />dk<br />csISO646Danish</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>us-dk</td>
+          <td>100</td>
+          <td></td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csUSDK</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>dk-us</td>
+          <td>101</td>
+          <td></td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csDKUS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>KSC5636</td>
+          <td>102</td>
+          <td></td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>ISO646-KR<br />csKSC5636</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UNICODE-1-1-UTF-7</td>
+          <td>103</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1642">RFC1642</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1642">RFC1642</a>]</td>
+          <td>csUnicode11UTF7</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-2022-CN</td>
+          <td>104</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1922">RFC1922</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1922">RFC1922</a>]</td>
+          <td>csISO2022CN</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-2022-CN-EXT</td>
+          <td>105</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1922">RFC1922</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1922">RFC1922</a>]</td>
+          <td>csISO2022CNEXT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-8</td>
+          <td>106</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc3629">RFC3629</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc3629">RFC3629</a>]</td>
+          <td>csUTF8</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-13</td>
+          <td>109</td>
+          <td>ISO See [<a href="http://www.iana.org/assignments/charset-reg/ISO-8859-13">http://www.iana.org/assignments/charset-reg/ISO-8859-13</a>][<a href="#Vladas_Tumasonis">Vladas_Tumasonis</a>]</td>
+          <td></td>
+          <td>csISO885913</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-14</td>
+          <td>110</td>
+          <td>ISO See [<a href="http://www.iana.org/assignments/charset-reg/ISO-8859-14">http://www.iana.org/assignments/charset-reg/ISO-8859-14</a>] [<a href="#Keld_Simonsen_2">Keld_Simonsen_2</a>]</td>
+          <td></td>
+          <td>iso-ir-199<br />ISO_8859-14:1998<br />ISO_8859-14<br />latin8<br />iso-celtic<br />l8<br />csISO885914</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-15</td>
+          <td>111</td>
+          <td>ISO
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/ISO-8859-15">http://www.iana.org/assignments/charset-reg/ISO-8859-15</a>]</td>
+          <td></td>
+          <td>ISO_8859-15<br />Latin-9<br />csISO885915</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-16</td>
+          <td>112</td>
+          <td>ISO</td>
+          <td></td>
+          <td>iso-ir-226<br />ISO_8859-16:2001<br />ISO_8859-16<br />latin10<br />l10<br />csISO885916</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>GBK</td>
+          <td>113</td>
+          <td>Chinese IT Standardization Technical Committee
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/GBK">http://www.iana.org/assignments/charset-reg/GBK</a>]</td>
+          <td></td>
+          <td>CP936<br />MS936<br />windows-936<br />csGBK</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>GB18030</td>
+          <td>114</td>
+          <td>Chinese IT Standardization Technical Committee
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/GB18030">http://www.iana.org/assignments/charset-reg/GB18030</a>]</td>
+          <td></td>
+          <td>csGB18030</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>OSD_EBCDIC_DF04_15</td>
+          <td>115</td>
+          <td>Fujitsu-Siemens standard mainframe EBCDIC encoding
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15">http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-15</a>]</td>
+          <td></td>
+          <td>csOSDEBCDICDF0415</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>OSD_EBCDIC_DF03_IRV</td>
+          <td>116</td>
+          <td>Fujitsu-Siemens standard mainframe EBCDIC encoding
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV">http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF03-IRV</a>]</td>
+          <td></td>
+          <td>csOSDEBCDICDF03IRV</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>OSD_EBCDIC_DF04_1</td>
+          <td>117</td>
+          <td>Fujitsu-Siemens standard mainframe EBCDIC encoding
+Please see: [<a href="http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1">http://www.iana.org/assignments/charset-reg/OSD-EBCDIC-DF04-1</a>]</td>
+          <td></td>
+          <td>csOSDEBCDICDF041</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-11548-1</td>
+          <td>118</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/ISO-11548-1">http://www.iana.org/assignments/charset-reg/ISO-11548-1</a>]            [<a href="#Samuel_Thibault">Samuel_Thibault</a>]</td>
+          <td></td>
+          <td>ISO_11548-1<br />ISO_TR_11548-1<br />csISO115481</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>KZ-1048</td>
+          <td>119</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/KZ-1048">http://www.iana.org/assignments/charset-reg/KZ-1048</a>]      [<a href="#Sairan_M_Kikkarin">Sairan_M_Kikkarin</a>][<a href="#Alexei_Veremeev">Alexei_Veremeev</a>]</td>
+          <td></td>
+          <td>STRK1048-2002<br />RK1048<br />csKZ1048</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-UCS-2</td>
+          <td>1000</td>
+          <td>the 2-octet Basic Multilingual Plane, aka Unicode
+this needs to specify network byte order: the standard
+does not specify (it is a 16-bit integer space)</td>
+          <td></td>
+          <td>csUnicode</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-UCS-4</td>
+          <td>1001</td>
+          <td>the full code space. (same comment about byte order,
+these are 31-bit numbers.</td>
+          <td></td>
+          <td>csUCS4</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-UCS-Basic</td>
+          <td>1002</td>
+          <td>ASCII subset of Unicode.  Basic Latin = collection 1
+See ISO 10646, Appendix A</td>
+          <td></td>
+          <td>csUnicodeASCII</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-Unicode-Latin1</td>
+          <td>1003</td>
+          <td>ISO Latin-1 subset of Unicode. Basic Latin and Latin-1
+Supplement  = collections 1 and 2.  See ISO 10646,
+Appendix A.  See [<a href="http://www.iana.org/go/rfc1815">RFC1815</a>].</td>
+          <td></td>
+          <td>csUnicodeLatin1<br />ISO-10646</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-10646-J-1</td>
+          <td>1004</td>
+          <td>ISO 10646 Japanese, see [<a href="http://www.iana.org/go/rfc1815">RFC1815</a>].</td>
+          <td></td>
+          <td>csUnicodeJapanese</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-Unicode-IBM-1261</td>
+          <td>1005</td>
+          <td>IBM Latin-2, -3, -5, Extended Presentation Set, GCSGID: 1261</td>
+          <td></td>
+          <td>csUnicodeIBM1261</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-Unicode-IBM-1268</td>
+          <td>1006</td>
+          <td>IBM Latin-4 Extended Presentation Set, GCSGID: 1268</td>
+          <td></td>
+          <td>csUnicodeIBM1268</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-Unicode-IBM-1276</td>
+          <td>1007</td>
+          <td>IBM Cyrillic Greek Extended Presentation Set, GCSGID: 1276</td>
+          <td></td>
+          <td>csUnicodeIBM1276</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-Unicode-IBM-1264</td>
+          <td>1008</td>
+          <td>IBM Arabic Presentation Set, GCSGID: 1264</td>
+          <td></td>
+          <td>csUnicodeIBM1264</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-Unicode-IBM-1265</td>
+          <td>1009</td>
+          <td>IBM Hebrew Presentation Set, GCSGID: 1265</td>
+          <td></td>
+          <td>csUnicodeIBM1265</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UNICODE-1-1</td>
+          <td>1010</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1641">RFC1641</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1641">RFC1641</a>]</td>
+          <td>csUnicode11</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>SCSU</td>
+          <td>1011</td>
+          <td>SCSU See [<a href="http://www.iana.org/assignments/charset-reg/SCSU">http://www.iana.org/assignments/charset-reg/SCSU</a>]     [<a href="#Markus_Scherer">Markus_Scherer</a>]</td>
+          <td></td>
+          <td>csSCSU</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-7</td>
+          <td>1012</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc2152">RFC2152</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc2152">RFC2152</a>]</td>
+          <td>csUTF7</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-16BE</td>
+          <td>1013</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]</td>
+          <td>csUTF16BE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-16LE</td>
+          <td>1014</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]</td>
+          <td>csUTF16LE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-16</td>
+          <td>1015</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc2781">RFC2781</a>]</td>
+          <td>csUTF16</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CESU-8</td>
+          <td>1016</td>
+          <td>
+        [<a href="http://www.unicode.org/unicode/reports/tr26">http://www.unicode.org/unicode/reports/tr26</a>]
+      </td>
+          <td>[<a href="#Toby_Phipps">Toby_Phipps</a>]</td>
+          <td>csCESU8<br />csCESU-8</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-32</td>
+          <td>1017</td>
+          <td>
+        [<a href="http://www.unicode.org/unicode/reports/tr19/">http://www.unicode.org/unicode/reports/tr19/</a>]
+      </td>
+          <td>[<a href="#Mark_Davis">Mark_Davis</a>]</td>
+          <td>csUTF32</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-32BE</td>
+          <td>1018</td>
+          <td>
+        [<a href="http://www.unicode.org/unicode/reports/tr19/">http://www.unicode.org/unicode/reports/tr19/</a>]
+      </td>
+          <td>[<a href="#Mark_Davis">Mark_Davis</a>]</td>
+          <td>csUTF32BE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UTF-32LE</td>
+          <td>1019</td>
+          <td>
+        [<a href="http://www.unicode.org/unicode/reports/tr19/">http://www.unicode.org/unicode/reports/tr19/</a>]
+      </td>
+          <td>[<a href="#Mark_Davis">Mark_Davis</a>]</td>
+          <td>csUTF32LE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>BOCU-1</td>
+          <td>1020</td>
+          <td>
+        [<a href="http://www.unicode.org/notes/tn6/">http://www.unicode.org/notes/tn6/</a>]
+      </td>
+          <td>[<a href="#Markus_Scherer">Markus_Scherer</a>]</td>
+          <td>csBOCU1<br />csBOCU-1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-1-Windows-3.0-Latin-1</td>
+          <td>2000</td>
+          <td>Extended ISO 8859-1 Latin-1 for Windows 3.0.
+PCL Symbol Set id: 9U</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csWindows30Latin1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-1-Windows-3.1-Latin-1</td>
+          <td>2001</td>
+          <td>Extended ISO 8859-1 Latin-1 for Windows 3.1.
+PCL Symbol Set id: 19U</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csWindows31Latin1</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-2-Windows-Latin-2</td>
+          <td>2002</td>
+          <td>Extended ISO 8859-2.  Latin-2 for Windows 3.1.
+PCL Symbol Set id: 9E</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csWindows31Latin2</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>ISO-8859-9-Windows-Latin-5</td>
+          <td>2003</td>
+          <td>Extended ISO 8859-9.  Latin-5 for Windows 3.1
+PCL Symbol Set id: 5T</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csWindows31Latin5</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>hp-roman8</td>
+          <td>2004</td>
+          <td>LaserJet IIP Printer User's Manual,
+HP part no 33471-90901, Hewlet-Packard, June 1989.</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.][<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>roman8<br />r8<br />csHPRoman8</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Adobe-Standard-Encoding</td>
+          <td>2005</td>
+          <td>PostScript Language Reference Manual
+PCL Symbol Set id: 10J</td>
+          <td>[Adobe Systems Incorporated, PostScript Language Reference
+Manual, second edition, Addison-Wesley Publishing Company,
+Inc., 1990.]</td>
+          <td>csAdobeStandardEncoding</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Ventura-US</td>
+          <td>2006</td>
+          <td>Ventura US.  ASCII plus characters typically used in
+publishing, like pilcrow, copyright, registered, trade mark,
+section, dagger, and double dagger in the range A0 (hex)
+to FF (hex).
+PCL Symbol Set id: 14J</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csVenturaUS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Ventura-International</td>
+          <td>2007</td>
+          <td>Ventura International.  ASCII plus coded characters similar
+to Roman8.
+PCL Symbol Set id: 13J</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csVenturaInternational</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>DEC-MCS</td>
+          <td>2008</td>
+          <td>VAX/VMS User's Manual,
+Order Number: AI-Y517A-TE, April 1986.</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>dec<br />csDECMCS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM850</td>
+          <td>2009</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp850<br />850<br />csPC850Multilingual</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>PC8-Danish-Norwegian</td>
+          <td>2012</td>
+          <td>PC Danish Norwegian
+8-bit PC set for Danish Norwegian
+PCL Symbol Set id: 11U</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csPC8DanishNorwegian</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM862</td>
+          <td>2013</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp862<br />862<br />csPC862LatinHebrew</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>PC8-Turkish</td>
+          <td>2014</td>
+          <td>PC Latin Turkish.  PCL Symbol Set id: 9T</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csPC8Turkish</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM-Symbols</td>
+          <td>2015</td>
+          <td>Presentation Set, CPGID: 259</td>
+          <td>[IBM Corporation, "ABOUT TYPE: IBM's Technical Reference
+for Core Interchange Digitized Type", Publication number
+S544-3708-01]</td>
+          <td>csIBMSymbols</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM-Thai</td>
+          <td>2016</td>
+          <td>Presentation Set, CPGID: 838</td>
+          <td>[IBM Corporation, "ABOUT TYPE: IBM's Technical Reference
+for Core Interchange Digitized Type", Publication number
+S544-3708-01]</td>
+          <td>csIBMThai</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>HP-Legal</td>
+          <td>2017</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 1U</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csHPLegal</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>HP-Pi-font</td>
+          <td>2018</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 15U</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csHPPiFont</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>HP-Math8</td>
+          <td>2019</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 8M</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csHPMath8</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Adobe-Symbol-Encoding</td>
+          <td>2020</td>
+          <td>PostScript Language Reference Manual
+PCL Symbol Set id: 5M</td>
+          <td>[Adobe Systems Incorporated, PostScript Language Reference
+Manual, second edition, Addison-Wesley Publishing Company,
+Inc., 1990.]</td>
+          <td>csHPPSMath</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>HP-DeskTop</td>
+          <td>2021</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 7J</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csHPDesktop</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Ventura-Math</td>
+          <td>2022</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 6M</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csVenturaMath</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Microsoft-Publishing</td>
+          <td>2023</td>
+          <td>PCL 5 Comparison Guide, Hewlett-Packard,
+HP part number 5961-0510, October 1992
+PCL Symbol Set id: 6J</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>csMicrosoftPublishing</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Windows-31J</td>
+          <td>2024</td>
+          <td>Windows Japanese.  A further extension of Shift_JIS
+to include NEC special characters (Row 13), NEC
+selection of IBM extensions (Rows 89 to 92), and IBM
+extensions (Rows 115 to 119).  The CCS's are
+JIS X0201:1997, JIS X0208:1997, and these extensions.
+This charset can be used for the top-level media type "text",
+but it is of limited or specialized use (see [<a href="http://www.iana.org/go/rfc2278">RFC2278</a>]).
+PCL Symbol Set id: 19K</td>
+          <td></td>
+          <td>csWindows31J</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>GB2312</td>
+          <td>GB2312</td>
+          <td>2025</td>
+          <td>Chinese for People's Republic of China (PRC) mixed one byte,
+two byte set:
+20-7E = one byte ASCII
+A1-FE = two byte PRC Kanji
+See GB 2312-80
+PCL Symbol Set Id: 18C</td>
+          <td></td>
+          <td>csGB2312</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>Big5</td>
+          <td>Big5</td>
+          <td>2026</td>
+          <td>Chinese for Taiwan Multi-byte set.
+PCL Symbol Set Id: 18T</td>
+          <td></td>
+          <td>csBig5</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>macintosh</td>
+          <td>2027</td>
+          <td>The Unicode Standard ver1.0, ISBN 0-201-56788-1, Oct 1991</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>mac<br />csMacintosh</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM037</td>
+          <td>2028</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp037<br />ebcdic-cp-us<br />ebcdic-cp-ca<br />ebcdic-cp-wt<br />ebcdic-cp-nl<br />csIBM037</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM038</td>
+          <td>2029</td>
+          <td>IBM 3174 Character Set Ref, GA27-3831-02, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>EBCDIC-INT<br />cp038<br />csIBM038</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM273</td>
+          <td>2030</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP273<br />csIBM273</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM274</td>
+          <td>2031</td>
+          <td>IBM 3174 Character Set Ref, GA27-3831-02, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>EBCDIC-BE<br />CP274<br />csIBM274</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM275</td>
+          <td>2032</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>EBCDIC-BR<br />cp275<br />csIBM275</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM277</td>
+          <td>2033</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>EBCDIC-CP-DK<br />EBCDIC-CP-NO<br />csIBM277</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM278</td>
+          <td>2034</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP278<br />ebcdic-cp-fi<br />ebcdic-cp-se<br />csIBM278</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM280</td>
+          <td>2035</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP280<br />ebcdic-cp-it<br />csIBM280</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM281</td>
+          <td>2036</td>
+          <td>IBM 3174 Character Set Ref, GA27-3831-02, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>EBCDIC-JP-E<br />cp281<br />csIBM281</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM284</td>
+          <td>2037</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP284<br />ebcdic-cp-es<br />csIBM284</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM285</td>
+          <td>2038</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP285<br />ebcdic-cp-gb<br />csIBM285</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM290</td>
+          <td>2039</td>
+          <td>IBM 3174 Character Set Ref, GA27-3831-02, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp290<br />EBCDIC-JP-kana<br />csIBM290</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM297</td>
+          <td>2040</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp297<br />ebcdic-cp-fr<br />csIBM297</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM420</td>
+          <td>2041</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990,
+IBM NLS RM p 11-11</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp420<br />ebcdic-cp-ar1<br />csIBM420</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM423</td>
+          <td>2042</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp423<br />ebcdic-cp-gr<br />csIBM423</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM424</td>
+          <td>2043</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp424<br />ebcdic-cp-he<br />csIBM424</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM437</td>
+          <td>2011</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp437<br />437<br />csPC8CodePage437</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM500</td>
+          <td>2044</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP500<br />ebcdic-cp-be<br />ebcdic-cp-ch<br />csIBM500</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM851</td>
+          <td>2045</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp851<br />851<br />csIBM851</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM852</td>
+          <td>2010</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp852<br />852<br />csPCp852</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM855</td>
+          <td>2046</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp855<br />855<br />csIBM855</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM857</td>
+          <td>2047</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp857<br />857<br />csIBM857</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM860</td>
+          <td>2048</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp860<br />860<br />csIBM860</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM861</td>
+          <td>2049</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp861<br />861<br />cp-is<br />csIBM861</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM863</td>
+          <td>2050</td>
+          <td>IBM Keyboard layouts and code pages, PN 07G4586 June 1991</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp863<br />863<br />csIBM863</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM864</td>
+          <td>2051</td>
+          <td>IBM Keyboard layouts and code pages, PN 07G4586 June 1991</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp864<br />csIBM864</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM865</td>
+          <td>2052</td>
+          <td>IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp865<br />865<br />csIBM865</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM868</td>
+          <td>2053</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP868<br />cp-ar<br />csIBM868</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM869</td>
+          <td>2054</td>
+          <td>IBM Keyboard layouts and code pages, PN 07G4586 June 1991</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp869<br />869<br />cp-gr<br />csIBM869</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM870</td>
+          <td>2055</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP870<br />ebcdic-cp-roece<br />ebcdic-cp-yu<br />csIBM870</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM871</td>
+          <td>2056</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP871<br />ebcdic-cp-is<br />csIBM871</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM880</td>
+          <td>2057</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp880<br />EBCDIC-Cyrillic<br />csIBM880</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM891</td>
+          <td>2058</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp891<br />csIBM891</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM903</td>
+          <td>2059</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp903<br />csIBM903</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM904</td>
+          <td>2060</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>cp904<br />904<br />csIBBM904</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM905</td>
+          <td>2061</td>
+          <td>IBM 3174 Character Set Ref, GA27-3831-02, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP905<br />ebcdic-cp-tr<br />csIBM905</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM918</td>
+          <td>2062</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP918<br />ebcdic-cp-ar2<br />csIBM918</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM1026</td>
+          <td>2063</td>
+          <td>IBM NLS RM Vol2 SE09-8002-01, March 1990</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>CP1026<br />csIBM1026</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-AT-DE</td>
+          <td>2064</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csIBMEBCDICATDE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-AT-DE-A</td>
+          <td>2065</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICATDEA</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-CA-FR</td>
+          <td>2066</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICCAFR</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-DK-NO</td>
+          <td>2067</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICDKNO</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-DK-NO-A</td>
+          <td>2068</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICDKNOA</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-FI-SE</td>
+          <td>2069</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICFISE</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-FI-SE-A</td>
+          <td>2070</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICFISEA</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-FR</td>
+          <td>2071</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICFR</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-IT</td>
+          <td>2072</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICIT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-PT</td>
+          <td>2073</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICPT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-ES</td>
+          <td>2074</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICES</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-ES-A</td>
+          <td>2075</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICESA</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-ES-S</td>
+          <td>2076</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICESS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-UK</td>
+          <td>2077</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICUK</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>EBCDIC-US</td>
+          <td>2078</td>
+          <td>IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csEBCDICUS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>UNKNOWN-8BIT</td>
+          <td>2079</td>
+          <td></td>
+          <td>[<a href="http://www.iana.org/go/rfc1428">RFC1428</a>]</td>
+          <td>csUnknown8BiT</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>MNEMONIC</td>
+          <td>2080</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>], also known as "mnemonic+ascii+38"</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csMnemonic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>MNEM</td>
+          <td>2081</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>], also known as "mnemonic+ascii+8200"</td>
+          <td>[<a href="http://www.iana.org/go/rfc1345">RFC1345</a>][<a href="#Keld_Simonsen">Keld_Simonsen</a>]</td>
+          <td>csMnem</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>VISCII</td>
+          <td>2082</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1456">RFC1456</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1456">RFC1456</a>]</td>
+          <td>csVISCII</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>VIQR</td>
+          <td>2083</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc1456">RFC1456</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc1456">RFC1456</a>]</td>
+          <td>csVIQR</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>KOI8-R</td>
+          <td>KOI8-R</td>
+          <td>2084</td>
+          <td>[<a href="http://www.iana.org/go/rfc1489">RFC1489</a>], based on GOST-19768-74, ISO-6937/8,
+INIS-Cyrillic, ISO-5427.</td>
+          <td>[<a href="http://www.iana.org/go/rfc1489">RFC1489</a>]</td>
+          <td>csKOI8R</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>HZ-GB-2312</td>
+          <td>2085</td>
+          <td>[<a href="http://www.iana.org/go/rfc1842">RFC1842</a>], [<a href="http://www.iana.org/go/rfc1843">RFC1843</a>][<a href="http://www.iana.org/go/rfc1843">RFC1843</a>][<a href="http://www.iana.org/go/rfc1842">RFC1842</a>]</td>
+          <td></td>
+          <td></td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM866</td>
+          <td>2086</td>
+          <td>IBM NLDG Volume 2 (SE09-8002-03) August 1994</td>
+          <td>[<a href="#Rick_Pond">Rick_Pond</a>]</td>
+          <td>cp866<br />866<br />csIBM866</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM775</td>
+          <td>2087</td>
+          <td>HP PCL 5 Comparison Guide (P/N 5021-0329) pp B-13, 1996</td>
+          <td>[Hewlett-Packard Company, "HP PCL 5 Comparison Guide",
+(P/N 5021-0329) pp B-13, 1996.]</td>
+          <td>cp775<br />csPC775Baltic</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>KOI8-U</td>
+          <td>2088</td>
+          <td>
+        [<a href="http://www.iana.org/go/rfc2319">RFC2319</a>]
+      </td>
+          <td>[<a href="http://www.iana.org/go/rfc2319">RFC2319</a>]</td>
+          <td>csKOI8U</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM00858</td>
+          <td>2089</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM00858">http://www.iana.org/assignments/charset-reg/IBM00858</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID00858<br />CP00858<br />PC-Multilingual-850+euro<br />csIBM00858</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM00924</td>
+          <td>2090</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM00924">http://www.iana.org/assignments/charset-reg/IBM00924</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID00924<br />CP00924<br />ebcdic-Latin9--euro<br />csIBM00924</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01140</td>
+          <td>2091</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01140">http://www.iana.org/assignments/charset-reg/IBM01140</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01140<br />CP01140<br />ebcdic-us-37+euro<br />csIBM01140</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01141</td>
+          <td>2092</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01141">http://www.iana.org/assignments/charset-reg/IBM01141</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01141<br />CP01141<br />ebcdic-de-273+euro<br />csIBM01141</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01142</td>
+          <td>2093</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01142">http://www.iana.org/assignments/charset-reg/IBM01142</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01142<br />CP01142<br />ebcdic-dk-277+euro<br />ebcdic-no-277+euro<br />csIBM01142</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01143</td>
+          <td>2094</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01143">http://www.iana.org/assignments/charset-reg/IBM01143</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01143<br />CP01143<br />ebcdic-fi-278+euro<br />ebcdic-se-278+euro<br />csIBM01143</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01144</td>
+          <td>2095</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01144">http://www.iana.org/assignments/charset-reg/IBM01144</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01144<br />CP01144<br />ebcdic-it-280+euro<br />csIBM01144</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01145</td>
+          <td>2096</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01145">http://www.iana.org/assignments/charset-reg/IBM01145</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01145<br />CP01145<br />ebcdic-es-284+euro<br />csIBM01145</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01146</td>
+          <td>2097</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01146">http://www.iana.org/assignments/charset-reg/IBM01146</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01146<br />CP01146<br />ebcdic-gb-285+euro<br />csIBM01146</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01147</td>
+          <td>2098</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01147">http://www.iana.org/assignments/charset-reg/IBM01147</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01147<br />CP01147<br />ebcdic-fr-297+euro<br />csIBM01147</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01148</td>
+          <td>2099</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01148">http://www.iana.org/assignments/charset-reg/IBM01148</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01148<br />CP01148<br />ebcdic-international-500+euro<br />csIBM01148</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM01149</td>
+          <td>2100</td>
+          <td>IBM See [<a href="http://www.iana.org/assignments/charset-reg/IBM01149">http://www.iana.org/assignments/charset-reg/IBM01149</a>]    [<a href="#Tamer_Mahdi">Tamer_Mahdi</a>]</td>
+          <td></td>
+          <td>CCSID01149<br />CP01149<br />ebcdic-is-871+euro<br />csIBM01149</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Big5-HKSCS</td>
+          <td>2101</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/Big5-HKSCS">http://www.iana.org/assignments/charset-reg/Big5-HKSCS</a>]</td>
+          <td>[<a href="#Nicky_Yick">Nicky_Yick</a>]</td>
+          <td>csBig5HKSCS</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>IBM1047</td>
+          <td>2102</td>
+          <td>IBM1047 (EBCDIC Latin 1/Open Systems)
+[<a href="http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf">http://www-1.ibm.com/servers/eserver/iseries/software/globalization/pdf/cp01047z.pdf</a>]</td>
+          <td>[<a href="#Reuel_Robrigado">Reuel_Robrigado</a>]</td>
+          <td>IBM-1047<br />csIBM1047</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>PTCP154</td>
+          <td>2103</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/PTCP154">http://www.iana.org/assignments/charset-reg/PTCP154</a>]</td>
+          <td>[<a href="#Alexander_Uskov">Alexander_Uskov</a>]</td>
+          <td>csPTCP154<br />PT154<br />CP154<br />Cyrillic-Asian<br />csPTCP154</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>Amiga-1251</td>
+          <td>2104</td>
+          <td>See [<a href="http://www.amiga.ultranet.ru/Amiga-1251.html">http://www.amiga.ultranet.ru/Amiga-1251.html</a>]</td>
+          <td></td>
+          <td>Ami1251<br />Amiga1251<br />Ami-1251<br />csAmiga1251
+(Aliases are provided for historical reasons and should not be used) [Malyshev]</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>KOI7-switched</td>
+          <td>2105</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/KOI7-switched">http://www.iana.org/assignments/charset-reg/KOI7-switched</a>]</td>
+          <td></td>
+          <td>csKOI7switched</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>BRF</td>
+          <td>2106</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/BRF">http://www.iana.org/assignments/charset-reg/BRF</a>]                    [<a href="#Samuel_Thibault">Samuel_Thibault</a>]</td>
+          <td></td>
+          <td>csBRF</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>TSCII</td>
+          <td>2107</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/TSCII">http://www.iana.org/assignments/charset-reg/TSCII</a>]           [<a href="#Kuppuswamy_Kalyanasu">Kuppuswamy_Kalyanasu</a>]</td>
+          <td></td>
+          <td>csTSCII</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CP51932</td>
+          <td>2108</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/CP51932">http://www.iana.org/assignments/charset-reg/CP51932</a>]                  [<a href="#Yui_Naruse">Yui_Naruse</a>]</td>
+          <td></td>
+          <td>csCP51932</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-874</td>
+          <td>2109</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/windows-874">http://www.iana.org/assignments/charset-reg/windows-874</a>]              [<a href="#Shawn_Steele">Shawn_Steele</a>]</td>
+          <td></td>
+          <td>cswindows874</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1250</td>
+          <td>2250</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1250">http://www.iana.org/assignments/charset-reg/windows-1250</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1250</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1251</td>
+          <td>2251</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1251">http://www.iana.org/assignments/charset-reg/windows-1251</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1251</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1252</td>
+          <td>2252</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1252">http://www.iana.org/assignments/charset-reg/windows-1252</a>]       [<a href="#Chris_Wendt">Chris_Wendt</a>]</td>
+          <td></td>
+          <td>cswindows1252</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1253</td>
+          <td>2253</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1253">http://www.iana.org/assignments/charset-reg/windows-1253</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1253</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1254</td>
+          <td>2254</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1254">http://www.iana.org/assignments/charset-reg/windows-1254</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1254</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1255</td>
+          <td>2255</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1255">http://www.iana.org/assignments/charset-reg/windows-1255</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1255</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1256</td>
+          <td>2256</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1256">http://www.iana.org/assignments/charset-reg/windows-1256</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1256</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1257</td>
+          <td>2257</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1257">http://www.iana.org/assignments/charset-reg/windows-1257</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1257</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>windows-1258</td>
+          <td>2258</td>
+          <td>Microsoft  [<a href="http://www.iana.org/assignments/charset-reg/windows-1258">http://www.iana.org/assignments/charset-reg/windows-1258</a>] [<a href="#Katya_Lazhintseva">Katya_Lazhintseva</a>]</td>
+          <td></td>
+          <td>cswindows1258</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>TIS-620</td>
+          <td>2259</td>
+          <td>Thai Industrial Standards Institute (TISI)                             [<a href="#Trin_Tantsetthi">Trin_Tantsetthi</a>]</td>
+          <td></td>
+          <td>csTIS620</td>
+          <td></td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>CP50220</td>
+          <td>2260</td>
+          <td>See [<a href="http://www.iana.org/assignments/charset-reg/CP50220">http://www.iana.org/assignments/charset-reg/CP50220</a>]                  [<a href="#Yui_Naruse">Yui_Naruse</a>]</td>
+          <td></td>
+          <td>csCP50220</td>
+          <td></td>
+        </tr>
+      </tbody>
+    </table>
+    <h1 class="people">People</h1>
+    <table class="sortable">
+      <thead>
+        <tr>
+          <th>ID</th>
+          <th>Name</th>
+          <th>Contact URI</th>
+          <th>Last Updated</th>
+        </tr>
+      </thead>
+      <tbody>
+        <tr>
+          <td>
+            <a name="Alexander_Uskov" id="Alexander_Uskov">[Alexander_Uskov]</a>
+          </td>
+          <td>Alexander Uskov</td>
+          <td>
+            <a href="mailto:auskov&amp;idc.kz">mailto:auskov&amp;idc.kz</a>
+          </td>
+          <td>2002-09</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Alexei_Veremeev" id="Alexei_Veremeev">[Alexei_Veremeev]</a>
+          </td>
+          <td>Alexei Veremeev</td>
+          <td>
+            <a href="mailto:Alexey.Veremeev&amp;oracle.com">mailto:Alexey.Veremeev&amp;oracle.com</a>
+          </td>
+          <td>2006-12-07</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Chris_Wendt" id="Chris_Wendt">[Chris_Wendt]</a>
+          </td>
+          <td>Chris Wendt</td>
+          <td>
+            <a href="mailto:christw&amp;microsoft.com">mailto:christw&amp;microsoft.com</a>
+          </td>
+          <td>1999-12</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Hank_Nussbacher" id="Hank_Nussbacher">[Hank_Nussbacher]</a>
+          </td>
+          <td>Hank Nussbacher</td>
+          <td>
+            <a href="mailto:hank&amp;vm.tau.ac.il">mailto:hank&amp;vm.tau.ac.il</a>
+          </td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>
+            <a name="IANA" id="IANA">[IANA]</a>
+          </td>
+          <td>Internet Assigned Numbers Authority</td>
+          <td>
+            <a href="mailto:iana&amp;iana.org">mailto:iana&amp;iana.org</a>
+          </td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Jun_Murai" id="Jun_Murai">[Jun_Murai]</a>
+          </td>
+          <td>Jun Murai</td>
+          <td>
+            <a href="mailto:jun&amp;wide.ad.jp">mailto:jun&amp;wide.ad.jp</a>
+          </td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Katya_Lazhintseva" id="Katya_Lazhintseva">[Katya_Lazhintseva]</a>
+          </td>
+          <td>Katya Lazhintseva</td>
+          <td>
+            <a href="mailto:katyal&amp;microsoft.com">mailto:katyal&amp;microsoft.com</a>
+          </td>
+          <td>1996-05</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Keld_Simonsen" id="Keld_Simonsen">[Keld_Simonsen]</a>
+          </td>
+          <td>Keld Simonsen</td>
+          <td>
+            <a href="mailto:Keld.Simonsen&amp;dkuug.dk">mailto:Keld.Simonsen&amp;dkuug.dk</a>
+          </td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Keld_Simonsen_2" id="Keld_Simonsen_2">[Keld_Simonsen_2]</a>
+          </td>
+          <td>Keld Simonsen</td>
+          <td>
+            <a href="mailto:Keld.Simonsen&amp;rap.dk">mailto:Keld.Simonsen&amp;rap.dk</a>
+          </td>
+          <td>2000-08</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Kuppuswamy_Kalyanasu" id="Kuppuswamy_Kalyanasu">[Kuppuswamy_Kalyanasu]</a>
+          </td>
+          <td>Kuppuswamy Kalyanasundaram</td>
+          <td>
+            <a href="mailto:kalyan.geo&amp;yahoo.com">mailto:kalyan.geo&amp;yahoo.com</a>
+          </td>
+          <td>2007-05-14</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Mark_Davis" id="Mark_Davis">[Mark_Davis]</a>
+          </td>
+          <td>Mark Davis</td>
+          <td>
+            <a href="mailto:mark&amp;unicode.org">mailto:mark&amp;unicode.org</a>
+          </td>
+          <td>2002-04</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Markus_Scherer" id="Markus_Scherer">[Markus_Scherer]</a>
+          </td>
+          <td>Markus Scherer</td>
+          <td>
+            <a href="mailto:markus.scherer&amp;jtcsv.com">mailto:markus.scherer&amp;jtcsv.com</a>
+          </td>
+          <td>2002-09</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Masataka_Ohta" id="Masataka_Ohta">[Masataka_Ohta]</a>
+          </td>
+          <td>Masataka Ohta</td>
+          <td>
+            <a href="mailto:mohta&amp;cc.titech.ac.jp">mailto:mohta&amp;cc.titech.ac.jp</a>
+          </td>
+          <td>1995-07</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Nicky_Yick" id="Nicky_Yick">[Nicky_Yick]</a>
+          </td>
+          <td>Nicky Yick</td>
+          <td>
+            <a href="mailto:cliac&amp;itsd.gcn.gov.hk">mailto:cliac&amp;itsd.gcn.gov.hk</a>
+          </td>
+          <td>2000-10</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Reuel_Robrigado" id="Reuel_Robrigado">[Reuel_Robrigado]</a>
+          </td>
+          <td>Reuel Robrigado</td>
+          <td>
+            <a href="mailto:reuelr&amp;ca.ibm.com">mailto:reuelr&amp;ca.ibm.com</a>
+          </td>
+          <td>2002-09</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Rick_Pond" id="Rick_Pond">[Rick_Pond]</a>
+          </td>
+          <td>Rick Pond</td>
+          <td>
+            <a href="mailto:rickpond&amp;vnet.ibm.com">mailto:rickpond&amp;vnet.ibm.com</a>
+          </td>
+          <td>1997-03</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Sairan_M_Kikkarin" id="Sairan_M_Kikkarin">[Sairan_M_Kikkarin]</a>
+          </td>
+          <td>Sairan M. Kikkarin</td>
+          <td>
+            <a href="mailto:sairan&amp;sci.kz">mailto:sairan&amp;sci.kz</a>
+          </td>
+          <td>2006-12-07</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Samuel_Thibault" id="Samuel_Thibault">[Samuel_Thibault]</a>
+          </td>
+          <td>Samuel Thibault</td>
+          <td>
+            <a href="mailto:samuel.thibault&amp;ens-lyon.org">mailto:samuel.thibault&amp;ens-lyon.org</a>
+          </td>
+          <td>2006-12-07</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Shawn_Steele" id="Shawn_Steele">[Shawn_Steele]</a>
+          </td>
+          <td>Shawn Steele</td>
+          <td>
+            <a href="mailto:Shawn.Steele&amp;microsoft.com">mailto:Shawn.Steele&amp;microsoft.com</a>
+          </td>
+          <td>2010-11-04</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Tamer_Mahdi" id="Tamer_Mahdi">[Tamer_Mahdi]</a>
+          </td>
+          <td>Tamer Mahdi</td>
+          <td>
+            <a href="mailto:tamer&amp;ca.ibm.com">mailto:tamer&amp;ca.ibm.com</a>
+          </td>
+          <td>2000-08</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Toby_Phipps" id="Toby_Phipps">[Toby_Phipps]</a>
+          </td>
+          <td>Toby Phipps</td>
+          <td>
+            <a href="mailto:tphipps&amp;peoplesoft.com">mailto:tphipps&amp;peoplesoft.com</a>
+          </td>
+          <td>2002-03</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Trin_Tantsetthi" id="Trin_Tantsetthi">[Trin_Tantsetthi]</a>
+          </td>
+          <td>Trin Tantsetthi</td>
+          <td>
+            <a href="mailto:trin&amp;mozart.inet.co.th">mailto:trin&amp;mozart.inet.co.th</a>
+          </td>
+          <td>1998-09</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Vladas_Tumasonis" id="Vladas_Tumasonis">[Vladas_Tumasonis]</a>
+          </td>
+          <td>Vladas Tumasonis</td>
+          <td>
+            <a href="mailto:vladas.tumasonis&amp;maf.vu.lt">mailto:vladas.tumasonis&amp;maf.vu.lt</a>
+          </td>
+          <td>2000-08</td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Woohyong_Choi" id="Woohyong_Choi">[Woohyong_Choi]</a>
+          </td>
+          <td>Woohyong Choi</td>
+          <td>
+            <a href="mailto:whchoi&amp;cosmos.kaist.ac.kr">mailto:whchoi&amp;cosmos.kaist.ac.kr</a>
+          </td>
+          <td></td>
+        </tr>
+        <tr>
+          <td>
+            <a name="Yui_Naruse" id="Yui_Naruse">[Yui_Naruse]</a>
+          </td>
+          <td>Yui Naruse</td>
+          <td>
+            <a href="mailto:naruse&amp;airemix.jp">mailto:naruse&amp;airemix.jp</a>
+          </td>
+          <td>2011-09-23</td>
+        </tr>
+      </tbody>
+    </table>
+  </body>
+</html>
diff --git a/os400/iconv/ianatables.c b/os400/iconv/ianatables.c
new file mode 100644 (file)
index 0000000..44b29c6
--- /dev/null
@@ -0,0 +1,4609 @@
+/**
+***     Character set names table.
+***     Generated by program BLDCSNDFA from IANA character set assignment file
+***          and CCSID/MIBenum equivalence file.
+***     *** Do not edit by hand ***
+**/
+
+/**
+***     CCSID   For arg   Recognized name.
+***     62245      X      IBMCCSID62245 ibm-62245
+***     62235      X      IBMCCSID62235 ibm-62235
+***     62224      X      IBMCCSID62224 ibm-62224
+***     62211      X      IBMCCSID62211 ibm-62211
+***     61952      X      IBMCCSID61952 ibm-61952
+***     57345             IBMCCSID57345 ibm-57345
+***     33722      X      csEUCPkdFmtJapanese
+***                       Extended_UNIX_Code_Packed_Format_for_Japanese EUC-JP
+***                       iana-18 IBMCCSID33722 ibm-33722
+***     28709      X      IBMCCSID28709 ibm-28709
+***     25546             IBMCCSID25546 ibm-25546
+***     17354      X      IBMCCSID17354 ibm-17354
+***     13488      X      csUnicode ISO-10646-UCS-2 UCS2 UCS-2 iana-1000
+***                       IBMCCSID13488 ibm-13488
+***     13124      X      IBMCCSID13124 ibm-13124
+***     13121      X      IBMCCSID13121 ibm-13121
+***     12708      X      IBMCCSID12708 ibm-12708
+***      9449             cswindows1257 windows-1257 iana-2257 IBMCCSID09449
+***                       ibm-9449
+***      9448             cswindows1256 windows-1256 iana-2256 IBMCCSID09448
+***                       ibm-9448
+***      9447             cswindows1255 windows-1255 iana-2255 IBMCCSID09447
+***                       ibm-9447
+***      9066      X      IBMCCSID09066 ibm-9066
+***      9056      X      IBMCCSID09056 ibm-9056
+***      9030      X      IBMCCSID09030 ibm-9030
+***      8612      X      IBMCCSID08612 ibm-8612
+***      5478             csISO58GB231280 iso-ir-58 GB_2312-80 chinese iana-57
+***                       IBMCCSID05478 ibm-5478
+***      5123      X      IBMCCSID05123 ibm-5123
+***      5350      X      cswindows1254 windows-1254 iana-2254 IBMCCSID05350
+***                       ibm-5350
+***      5349      X      cswindows1253 windows-1253 iana-2253 IBMCCSID05349
+***                       ibm-5349
+***      5348      X      cswindows1252 windows-1252 iana-2252 IBMCCSID05348
+***                       ibm-5348
+***      5347      X      cswindows1251 windows-1251 iana-2251 IBMCCSID05347
+***                       ibm-5347
+***      5346      X      cswindows1250 windows-1250 iana-2250 IBMCCSID05346
+***                       ibm-5346
+***      5354             cswindows1258 windows-1258 iana-2258 IBMCCSID05354
+***                       ibm-5354
+***      5055      X      IBMCCSID05055 ibm-5055
+***      5054      X      IBMCCSID05054 ibm-5054
+***      5053      X      IBMCCSID05053 ibm-5053
+***      5052      X      IBMCCSID05052 ibm-5052
+***      5050      X      IBMCCSID05050 ibm-5050
+***      5035      X      IBMCCSID05035 ibm-5035
+***      5026      X      IBMCCSID05026 ibm-5026
+***      4971      X      IBMCCSID04971 ibm-4971
+***      4965             IBMCCSID04965 ibm-4965
+***      4960      X      IBMCCSID04960 ibm-4960
+***      4953             IBMCCSID04953 ibm-4953
+***      4952      X      IBMCCSID04952 ibm-4952
+***      4951      X      IBMCCSID04951 ibm-4951
+***      4948      X      IBMCCSID04948 ibm-4948
+***      4396      X      IBMCCSID04396 ibm-4396
+***      1399      X      IBMCCSID01399 ibm-1399
+***      1392      X      IBMCCSID01392 ibm-1392
+***      1388      X      IBMCCSID01388 ibm-1388
+***      1386      X      csGBK windows-936 MS936 CP936 GBK iana-113
+***                       IBMCCSID01386 ibm-1386
+***      1383      X      csGB2312 GB2312 EUC-CN iana-2025 IBMCCSID01383
+***                       ibm-1383
+***      1381      X      IBMCCSID01381 ibm-1381
+***      1380      X      IBMCCSID01380 ibm-1380
+***      1375             csBig5HKSCS Big5-HKSCS iana-2101 IBMCCSID01375
+***                       ibm-1375
+***      1373             IBMCCSID01373 ibm-1373
+***      1364      X      IBMCCSID01364 ibm-1364
+***      1363      X      csKSC56011987 KSC_5601 KS_C_5601-1989 iso-ir-149
+***                       KS_C_5601-1987 korean iana-36 IBMCCSID01363 ibm-1363
+***      1283      X      IBMCCSID01283 ibm-1283
+***      1282      X      IBMCCSID01282 ibm-1282
+***      1281      X      IBMCCSID01281 ibm-1281
+***      1280      X      IBMCCSID01280 ibm-1280
+***      1276             csAdobeStandardEncoding Adobe-Standard-Encoding
+***                       iana-2005 IBMCCSID01276 ibm-1276
+***      1275      X      IBMCCSID01275 ibm-1275
+***      1258      X      IBMCCSID01258 ibm-1258
+***      1257      X      IBMCCSID01257 ibm-1257
+***      1256      X      IBMCCSID01256 ibm-1256
+***      1255      X      IBMCCSID01255 ibm-1255
+***      1254      X      IBMCCSID01254 ibm-1254
+***      1253      X      IBMCCSID01253 ibm-1253
+***      1252      X      csWindows31Latin1 ISO-8859-1-Windows-3.1-Latin-1
+***                       iana-2001 IBMCCSID01252 ibm-1252
+***      1251      X      IBMCCSID01251 ibm-1251
+***      1250      X      csWindows31Latin2 ISO-8859-2-Windows-Latin-2 iana-2002
+***                       IBMCCSID01250 ibm-1250
+***      1235             csUTF32LE UTF-32LE UTF-32-LE UTF32LE UTF32-LE
+***                       iana-1019 IBMCCSID01235 ibm-1235
+***      1233             csUTF32BE UTF-32BE UTF-32-BE UTF32BE UTF32-BE
+***                       iana-1018 IBMCCSID01233 ibm-1233
+***      1208      X      csUTF8 UTF-8 UTF8 iana-106 IBMCCSID01208 ibm-1208
+***      1203             csUTF16LE UTF-16LE UTF-16-LE UTF16LE UTF16-LE
+***                       iana-1014 IBMCCSID01203 ibm-1203
+***      1201             csUTF16BE UTF-16BE UTF-16-BE UTF16BE UTF16-BE
+***                       iana-1013 IBMCCSID01201 ibm-1201
+***      1164      X      IBMCCSID01164 ibm-1164
+***      1160      X      IBMCCSID01160 ibm-1160
+***      1158      X      IBMCCSID01158 ibm-1158
+***      1157      X      IBMCCSID01157 ibm-1157
+***      1156      X      IBMCCSID01156 ibm-1156
+***      1155      X      IBMCCSID01155 ibm-1155
+***      1154      X      IBMCCSID01154 ibm-1154
+***      1153      X      IBMCCSID01153 ibm-1153
+***      1149      X      csIBM01149 ebcdic-is-871+euro CP01149 CCSID01149
+***                       IBM01149 iana-2100 IBMCCSID01149 ibm-1149
+***      1148      X      csIBM01148 ebcdic-international-500+euro CP01148
+***                       CCSID01148 IBM01148 iana-2099 IBMCCSID01148 ibm-1148
+***      1147      X      csIBM01147 ebcdic-fr-297+euro CP01147 CCSID01147
+***                       IBM01147 iana-2098 IBMCCSID01147 ibm-1147
+***      1146      X      csIBM01146 ebcdic-gb-285+euro CP01146 CCSID01146
+***                       IBM01146 iana-2097 IBMCCSID01146 ibm-1146
+***      1145      X      csIBM01145 ebcdic-es-284+euro CP01145 CCSID01145
+***                       IBM01145 iana-2096 IBMCCSID01145 ibm-1145
+***      1144      X      csIBM01144 ebcdic-it-280+euro CP01144 CCSID01144
+***                       IBM01144 iana-2095 IBMCCSID01144 ibm-1144
+***      1143      X      csIBM01143 ebcdic-se-278+euro ebcdic-fi-278+euro
+***                       CP01143 CCSID01143 IBM01143 iana-2094 IBMCCSID01143
+***                       ibm-1143
+***      1142      X      csIBM01142 ebcdic-no-277+euro ebcdic-dk-277+euro
+***                       CP01142 CCSID01142 IBM01142 iana-2093 IBMCCSID01142
+***                       ibm-1142
+***      1141      X      csIBM01141 ebcdic-de-273+euro CP01141 CCSID01141
+***                       IBM01141 iana-2092 IBMCCSID01141 ibm-1141
+***      1140      X      csIBM01140 ebcdic-us-37+euro CP01140 CCSID01140
+***                       IBM01140 iana-2091 IBMCCSID01140 ibm-1140
+***      1137      X      IBMCCSID01137 ibm-1137
+***      1133             IBMCCSID01133 ibm-1133
+***      1132      X      IBMCCSID01132 ibm-1132
+***      1130      X      IBMCCSID01130 ibm-1130
+***      1129      X      IBMCCSID01129 ibm-1129
+***      1123      X      IBMCCSID01123 ibm-1123
+***      1122      X      IBMCCSID01122 ibm-1122
+***      1115             IBMCCSID01115 ibm-1115
+***      1114             IBMCCSID01114 ibm-1114
+***      1112      X      IBMCCSID01112 ibm-1112
+***      1098      X      IBMCCSID01098 ibm-1098
+***      1097      X      IBMCCSID01097 ibm-1097
+***      1089      X      csISOLatinArabic arabic ASMO-708 ECMA-114 ISO_8859-6
+***                       iso-ir-127 ISO_8859-6:1987 ISO-8859-6 iana-9
+***                       IBMCCSID01089 ibm-1089
+***      1088             IBMCCSID01088 ibm-1088
+***      1051      X      csHPRoman8 r8 roman8 hp-roman8 iana-2004 IBMCCSID01051
+***                       ibm-1051
+***      1047      X      csIBM1047 IBM-1047 IBM1047 iana-2102 IBMCCSID01047
+***                       ibm-1047
+***      1046      X      IBMCCSID01046 ibm-1046
+***      1043             IBMCCSID01043 ibm-1043
+***      1042             IBMCCSID01042 ibm-1042
+***      1041             IBMCCSID01041 ibm-1041
+***      1040             IBMCCSID01040 ibm-1040
+***      1027      X      IBMCCSID01027 ibm-1027
+***      1026      X      csIBM1026 CP1026 IBM1026 iana-2063 IBMCCSID01026
+***                       ibm-1026
+***      1025      X      IBMCCSID01025 ibm-1025
+***      1019      X      IBMCCSID01019 ibm-1019
+***      1018      X      IBMCCSID01018 ibm-1018
+***      1017      X      IBMCCSID01017 ibm-1017
+***      1016      X      IBMCCSID01016 ibm-1016
+***      1015      X      IBMCCSID01015 ibm-1015
+***      1014      X      IBMCCSID01014 ibm-1014
+***      1013      X      IBMCCSID01013 ibm-1013
+***      1012      X      IBMCCSID01012 ibm-1012
+***      1011      X      IBMCCSID01011 ibm-1011
+***      1010      X      IBMCCSID01010 ibm-1010
+***      1009      X      IBMCCSID01009 ibm-1009
+***      1008             IBMCCSID01008 ibm-1008
+***       970      X      csEUCKR EUC-KR iana-38 IBMCCSID00970 ibm-970
+***       965      X      IBMCCSID00965 ibm-965
+***       964      X      IBMCCSID00964 ibm-964
+***       959      X      IBMCCSID00959 ibm-959
+***       958      X      IBMCCSID00958 ibm-958
+***       957      X      IBMCCSID00957 ibm-957
+***       956      X      IBMCCSID00956 ibm-956
+***       951      X      IBMCCSID00951 ibm-951
+***       950      X      IBMCCSID00950 ibm-950
+***       949      X      IBMCCSID00949 ibm-949
+***       947      X      IBMCCSID00947 ibm-947
+***       946      X      IBMCCSID00946 ibm-946
+***       944      X      IBMCCSID00944 ibm-944
+***       943      X      csShiftJIS MS_Kanji Shift_JIS iana-17 IBMCCSID00943
+***                       ibm-943
+***       942      X      IBMCCSID00942 ibm-942
+***       939      X      IBMCCSID00939 ibm-939
+***       938      X      IBMCCSID00938 ibm-938
+***       937      X      IBMCCSID00937 ibm-937
+***       936             IBMCCSID00936 ibm-936
+***       935      X      IBMCCSID00935 ibm-935
+***       934      X      IBMCCSID00934 ibm-934
+***       933      X      IBMCCSID00933 ibm-933
+***       932      X      IBMCCSID00932 ibm-932
+***       930      X      IBMCCSID00930 ibm-930
+***       928      X      IBMCCSID00928 ibm-928
+***       927      X      IBMCCSID00927 ibm-927
+***       926      X      IBMCCSID00926 ibm-926
+***       924      X      csIBM00924 ebcdic-Latin9--euro CP00924 CCSID00924
+***                       IBM00924 iana-2090 IBMCCSID00924 ibm-924
+***       923      X      csISO885915 Latin-9 ISO_8859-15 ISO-8859-15 iana-111
+***                       IBMCCSID00923 ibm-923
+***       922      X      IBMCCSID00922 ibm-922
+***       921      X      csISO885913 ISO-8859-13 iana-109 IBMCCSID00921 ibm-921
+***       920      X      csISOLatin5 l5 latin5 ISO_8859-9 iso-ir-148
+***                       ISO_8859-9:1989 ISO-8859-9 iana-12 IBMCCSID00920
+***                       ibm-920
+***       918      X      csIBM918 ebcdic-cp-ar2 CP918 IBM918 iana-2062
+***                       IBMCCSID00918 ibm-918
+***       916      X      csISOLatinHebrew hebrew ISO_8859-8 iso-ir-138
+***                       ISO_8859-8:1988 ISO-8859-8 iana-11 IBMCCSID00916
+***                       ibm-916
+***       915      X      csISOLatinCyrillic cyrillic ISO_8859-5 iso-ir-144
+***                       ISO_8859-5:1988 ISO-8859-5 iana-8 IBMCCSID00915
+***                       ibm-915
+***       914      X      csISOLatin4 l4 latin4 ISO_8859-4 iso-ir-110
+***                       ISO_8859-4:1988 ISO-8859-4 iana-7 IBMCCSID00914
+***                       ibm-914
+***       913             csISOLatin3 l3 latin3 ISO_8859-3 iso-ir-109
+***                       ISO_8859-3:1988 ISO-8859-3 iana-6 IBMCCSID00913
+***                       ibm-913
+***       912      X      csISOLatin2 l2 latin2 ISO_8859-2 iso-ir-101
+***                       ISO_8859-2:1987 ISO-8859-2 iana-5 IBMCCSID00912
+***                       ibm-912
+***       905      X      csIBM905 ebcdic-cp-tr CP905 IBM905 iana-2061
+***                       IBMCCSID00905 ibm-905
+***       904             csIBBM904 904 cp904 IBM904 iana-2060 IBMCCSID00904
+***                       ibm-904
+***       903             csIBM903 cp903 IBM903 iana-2059 IBMCCSID00903 ibm-903
+***       897      X      csHalfWidthKatakana X0201 JIS_X0201 iana-15
+***                       IBMCCSID00897 ibm-897
+***       896             IBMCCSID00896 ibm-896
+***       891      X      csIBM891 cp891 IBM891 iana-2058 IBMCCSID00891 ibm-891
+***       880      X      csIBM880 EBCDIC-Cyrillic cp880 IBM880 iana-2057
+***                       IBMCCSID00880 ibm-880
+***       878      X      csKOI8R KOI8-R iana-2084 IBMCCSID00878 ibm-878
+***       875      X      IBMCCSID00875 ibm-875
+***       874      X      csTIS620 TIS-620 csEUCTH eucTH EUC-TH> iana-2259
+***                       IBMCCSID00874 ibm-874
+***       871      X      csIBM871 ebcdic-cp-is CP871 IBM871 iana-2056
+***                       IBMCCSID00871 ibm-871
+***       870      X      csIBM870 ebcdic-cp-yu ebcdic-cp-roece CP870 IBM870
+***                       iana-2055 IBMCCSID00870 ibm-870
+***       869      X      csIBM869 cp-gr 869 cp869 IBM869 iana-2054
+***                       IBMCCSID00869 ibm-869
+***       868      X      csIBM868 cp-ar CP868 IBM868 iana-2053 IBMCCSID00868
+***                       ibm-868
+***       866      X      csIBM866 866 cp866 IBM866 iana-2086 IBMCCSID00866
+***                       ibm-866
+***       865      X      csIBM865 865 cp865 IBM865 iana-2052 IBMCCSID00865
+***                       ibm-865
+***       864      X      csIBM864 cp864 IBM864 iana-2051 IBMCCSID00864 ibm-864
+***       863      X      csIBM863 863 cp863 IBM863 iana-2050 IBMCCSID00863
+***                       ibm-863
+***       862      X      csPC862LatinHebrew 862 cp862 IBM862 iana-2013
+***                       IBMCCSID00862 ibm-862
+***       861      X      csIBM861 cp-is 861 cp861 IBM861 iana-2049
+***                       IBMCCSID00861 ibm-861
+***       860      X      csIBM860 860 cp860 IBM860 iana-2048 IBMCCSID00860
+***                       ibm-860
+***       858             csIBM00858 PC-Multilingual-850+euro CP00858 CCSID00858
+***                       IBM00858 iana-2089 IBMCCSID00858 ibm-858
+***       857      X      csIBM857 857 cp857 IBM857 iana-2047 IBMCCSID00857
+***                       ibm-857
+***       855      X      csIBM855 855 cp855 IBM855 iana-2046 IBMCCSID00855
+***                       ibm-855
+***       852      X      csPCp852 852 cp852 IBM852 iana-2010 IBMCCSID00852
+***                       ibm-852
+***       851      X      csIBM851 851 cp851 IBM851 iana-2045 IBMCCSID00851
+***                       ibm-851
+***       850      X      csPC850Multilingual 850 cp850 IBM850 iana-2009
+***                       IBMCCSID00850 ibm-850
+***       838      X      csIBMThai IBM-Thai iana-2016 IBMCCSID00838 ibm-838
+***       837      X      IBMCCSID00837 ibm-837
+***       836      X      IBMCCSID00836 ibm-836
+***       835      X      IBMCCSID00835 ibm-835
+***       833      X      IBMCCSID00833 ibm-833
+***       819      X      csISOLatin1 CP819 IBM819 l1 latin1 ISO_8859-1
+***                       iso-ir-100 ISO_8859-1:1987 ISO-8859-1 iana-4
+***                       IBMCCSID00819 ibm-819
+***       813      X      csISOLatinGreek greek8 greek ECMA-118 ELOT_928
+***                       ISO_8859-7 iso-ir-126 ISO_8859-7:1987 ISO-8859-7
+***                       iana-10 IBMCCSID00813 ibm-813
+***       775      X      csPC775Baltic cp775 IBM775 iana-2087 IBMCCSID00775
+***                       ibm-775
+***       737      X      IBMCCSID00737 ibm-737
+***       720      X      IBMCCSID00720 ibm-720
+***       500      X      csIBM500 ebcdic-cp-ch ebcdic-cp-be CP500 IBM500
+***                       iana-2044 IBMCCSID00500 ibm-500
+***       437      X      csPC8CodePage437 437 cp437 IBM437 iana-2011
+***                       IBMCCSID00437 ibm-437
+***       424      X      csIBM424 ebcdic-cp-he cp424 IBM424 iana-2043
+***                       IBMCCSID00424 ibm-424
+***       423      X      csIBM423 ebcdic-cp-gr cp423 IBM423 iana-2042
+***                       IBMCCSID00423 ibm-423
+***       420      X      csIBM420 ebcdic-cp-ar1 cp420 IBM420 iana-2041
+***                       IBMCCSID00420 ibm-420
+***       367      X      csASCII cp367 IBM367 us ISO646-US ISO_646.irv:1991
+***                       ANSI_X3.4-1986 ANSI_X3.4-1968 iso-ir-6 US-ASCII ASCII
+***                       iana-3 IBMCCSID00367 ibm-367
+***       301      X      IBMCCSID00301 ibm-301
+***       300      X      IBMCCSID00300 ibm-300
+***       297      X      csIBM297 ebcdic-cp-fr cp297 IBM297 iana-2040
+***                       IBMCCSID00297 ibm-297
+***       290      X      csIBM290 EBCDIC-JP-kana cp290 IBM290 iana-2039
+***                       IBMCCSID00290 ibm-290
+***       285      X      csIBM285 ebcdic-cp-gb CP285 IBM285 iana-2038
+***                       IBMCCSID00285 ibm-285
+***       284      X      csIBM284 ebcdic-cp-es CP284 IBM284 iana-2037
+***                       IBMCCSID00284 ibm-284
+***       280      X      csIBM280 ebcdic-cp-it CP280 IBM280 iana-2035
+***                       IBMCCSID00280 ibm-280
+***       278      X      csIBM278 ebcdic-cp-se ebcdic-cp-fi CP278 IBM278
+***                       iana-2034 IBMCCSID00278 ibm-278
+***       277      X      csIBM277 EBCDIC-CP-NO EBCDIC-CP-DK IBM277 iana-2033
+***                       IBMCCSID00277 ibm-277
+***       273      X      csIBM273 CP273 IBM273 iana-2030 IBMCCSID00273 ibm-273
+***       256      X      IBMCCSID00256 ibm-256
+***        37      X      csIBM037 ebcdic-cp-nl ebcdic-cp-wt ebcdic-cp-ca
+***                       ebcdic-cp-us cp037 IBM037 EBCDIC iana-2028
+***                       IBMCCSID00037 ibm-37
+***         0             IBMCCSID00000 ibm-0
+**/
+
+/**
+***     13499 states, 229 finals, 20020 transitions.
+**/
+
+typedef unsigned short          t_ccsid;
+typedef unsigned short          t_staterange;
+typedef unsigned short          t_transrange;
+
+static t_transrange     trans_array[] = {
+ 0, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
+ 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, 94,
+ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 137, 138, 139, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 153,
+ 154, 156, 157, 159, 160, 162, 163, 165, 166, 168, 169, 171, 172, 173, 174,
+ 176, 177, 179, 180, 182, 183, 185, 186, 188, 189, 191, 192, 194, 195, 197,
+ 198, 199, 200, 202, 203, 205, 206, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 233, 234, 235, 236, 238, 239, 241, 242, 243, 245, 246, 248, 249, 251, 252,
+ 254, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 271,
+ 275, 276, 277, 278, 279, 287, 288, 289, 291, 292, 294, 295, 297, 298, 300,
+ 301, 303, 304, 305, 306, 307, 308, 310, 311, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 357, 358,
+ 359, 360, 361, 362, 363, 365, 366, 367, 368, 370, 371, 373, 374, 376, 377,
+ 378, 380, 381, 383, 384, 386, 387, 389, 390, 392, 393, 394, 396, 398, 400,
+ 401, 402, 403, 409, 410, 411, 412, 413, 416, 417, 418, 419, 420, 421, 422,
+ 423, 424, 425, 426, 427, 429, 430, 431, 432, 433, 434, 435, 438, 439, 440,
+ 441, 442, 444, 445, 446, 447, 450, 451, 452, 453, 454, 455, 456, 457, 458,
+ 459, 462, 463, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476,
+ 477, 478, 479, 480, 489, 490, 491, 492, 493, 495, 496, 497, 498, 499, 500,
+ 501, 502, 503, 504, 505, 506, 512, 513, 514, 515, 516, 519, 520, 521, 522,
+ 523, 524, 525, 526, 527, 528, 531, 532, 533, 534, 535, 536, 537, 538, 539,
+ 540, 541, 551, 553, 554, 556, 557, 559, 560, 562, 563, 565, 566, 568, 569,
+ 571, 572, 574, 575, 577, 578, 580, 581, 583, 585, 586, 587, 591, 592, 593,
+ 595, 596, 598, 599, 600, 602, 603, 604, 606, 607, 609, 610, 612, 613, 615,
+ 616, 618, 619, 621, 622, 624, 625, 627, 628, 630, 631, 633, 634, 636, 637,
+ 639, 640, 642, 643, 644, 646, 647, 648, 649, 655, 656, 658, 659, 661, 662,
+ 663, 664, 665, 666, 667, 668, 669, 672, 673, 675, 676, 677, 679, 680, 682,
+ 683, 685, 686, 688, 689, 691, 692, 694, 695, 697, 698, 700, 701, 703, 704,
+ 706, 707, 709, 710, 712, 713, 715, 716, 718, 719, 721, 722, 723, 724, 725,
+ 727, 728, 730, 731, 733, 734, 736, 737, 739, 740, 741, 745, 746, 747, 748,
+ 750, 751, 752, 753, 754, 756, 757, 758, 759, 760, 763, 764, 767, 768, 771,
+ 779, 780, 781, 786, 788, 789, 791, 792, 793, 795, 796, 798, 799, 801, 802,
+ 803, 804, 805, 806, 807, 816, 817, 818, 822, 823, 824, 825, 826, 827, 828,
+ 829, 830, 831, 832, 833, 834, 836, 837, 839, 840, 841, 842, 843, 844, 845,
+ 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 861, 862,
+ 863, 865, 866, 868, 869, 871, 872, 874, 875, 877, 878, 880, 881, 883, 884,
+ 885, 887, 888, 890, 891, 893, 894, 896, 897, 898, 900, 901, 903, 904, 906,
+ 907, 909, 910, 912, 913, 914, 915, 916, 917, 918, 919, 920, 933, 934, 936,
+ 937, 939, 940, 942, 943, 945, 946, 947, 948, 952, 953, 955, 956, 957, 961,
+ 962, 963, 965, 966, 967, 968, 970, 971, 972, 973, 974, 975, 976, 977, 978,
+ 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 990, 991, 992, 996, 998,
+ 999, 1001, 1002, 1004, 1005, 1007, 1008, 1010, 1011, 1013, 1014, 1015, 1016,
+ 1017, 1019, 1020, 1022, 1023, 1025, 1026, 1028, 1029, 1031, 1032, 1034, 1035,
+ 1037, 1038, 1040, 1041, 1043, 1044, 1046, 1047, 1049, 1050, 1052, 1053, 1054,
+ 1056, 1057, 1059, 1060, 1062, 1063, 1065, 1066, 1068, 1069, 1071, 1072, 1074,
+ 1075, 1077, 1078, 1080, 1081, 1083, 1084, 1086, 1087, 1088, 1089, 1090, 1091,
+ 1093, 1094, 1096, 1097, 1099, 1100, 1102, 1103, 1105, 1106, 1108, 1109, 1111,
+ 1112, 1113, 1114, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1130,
+ 1131, 1133, 1134, 1135, 1137, 1138, 1140, 1141, 1143, 1144, 1146, 1147, 1149,
+ 1150, 1152, 1153, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1163, 1164, 1166,
+ 1167, 1168, 1170, 1171, 1173, 1174, 1176, 1177, 1179, 1180, 1182, 1183, 1184,
+ 1186, 1187, 1188, 1190, 1191, 1192, 1196, 1197, 1198, 1199, 1200, 1202, 1203,
+ 1204, 1206, 1207, 1208, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1221, 1222,
+ 1224, 1225, 1226, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239,
+ 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1257, 1258, 1259, 1260,
+ 1261, 1262, 1263, 1264, 1265, 1267, 1268, 1270, 1271, 1273, 1274, 1276, 1277,
+ 1279, 1280, 1282, 1283, 1284, 1285, 1286, 1288, 1289, 1291, 1292, 1294, 1295,
+ 1297, 1298, 1300, 1301, 1303, 1304, 1306, 1307, 1308, 1309, 1310, 1311, 1312,
+ 1313, 1314, 1315, 1316, 1317, 1318, 1342, 1343, 1344, 1346, 1347, 1349, 1350,
+ 1352, 1353, 1355, 1356, 1358, 1359, 1361, 1362, 1363, 1364, 1365, 1366, 1376,
+ 1378, 1379, 1381, 1383, 1387, 1389, 1391, 1395, 1399, 1401, 1405, 1409, 1411,
+ 1412, 1414, 1415, 1417, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1431, 1432,
+ 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445,
+ 1446, 1478, 1479, 1480, 1482, 1483, 1485, 1486, 1488, 1489, 1491, 1492, 1494,
+ 1495, 1497, 1498, 1499, 1503, 1505, 1506, 1508, 1509, 1511, 1512, 1514, 1515,
+ 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1526, 1527, 1529, 1530,
+ 1532, 1533, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545,
+ 1546, 1547, 1551, 1553, 1554, 1556, 1557, 1559, 1560, 1562, 1563, 1564, 1565,
+ 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1575, 1577, 1578, 1580, 1581,
+ 1583, 1584, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596,
+ 1598, 1599, 1601, 1602, 1604, 1605, 1607, 1608, 1609, 1610, 1611, 1612, 1613,
+ 1614, 1615, 1616, 1617, 1618, 1619, 1623, 1625, 1626, 1628, 1629, 1631, 1632,
+ 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1647,
+ 1649, 1650, 1652, 1653, 1655, 1656, 1658, 1659, 1660, 1661, 1662, 1663, 1664,
+ 1665, 1666, 1667, 1668, 1669, 1671, 1672, 1674, 1675, 1677, 1678, 1680, 1681,
+ 1683, 1684, 1686, 1687, 1689, 1690, 1692, 1693, 1695, 1696, 1698, 1699, 1701,
+ 1703, 1704, 1706, 1707, 1709, 1710, 1712, 1713, 1714, 1715, 1716, 1717, 1718,
+ 1719, 1720, 1721, 1722, 1724, 1725, 1727, 1728, 1730, 1731, 1733, 1734, 1735,
+ 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1752, 1754,
+ 1755, 1757, 1758, 1760, 1761, 1763, 1764, 1765, 1766, 1768, 1770, 1771, 1773,
+ 1774, 1776, 1777, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1788, 1789,
+ 1791, 1792, 1794, 1795, 1797, 1799, 1801, 1803, 1804, 1806, 1807, 1809, 1810,
+ 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1823, 1824, 1825,
+ 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1856, 1857, 1859, 1860,
+ 1862, 1863, 1865, 1866, 1868, 1869, 1871, 1873, 1874, 1875, 1876, 1877, 1878,
+ 1879, 1880, 1882, 1883, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893,
+ 1895, 1896, 1898, 1900, 1902, 1903, 1904, 1906, 1907, 1908, 1909, 1917, 1918,
+ 1921, 1922, 1924, 1925, 1926, 1928, 1929, 1931, 1932, 1934, 1935, 1936, 1937,
+ 1939, 1940, 1942, 1943, 1945, 1946, 1948, 1949, 1951, 1952, 1954, 1955, 1956,
+ 1957, 1959, 1960, 1962, 1963, 1965, 1966, 1968, 1969, 1971, 1972, 1974, 1975,
+ 1976, 1977, 1979, 1980, 1982, 1983, 1985, 1986, 1988, 1989, 1990, 1991, 1993,
+ 1994, 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2010, 2011,
+ 2013, 2014, 2016, 2017, 2019, 2020, 2022, 2023, 2024, 2025, 2026, 2027, 2037,
+ 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2051, 2053, 2054,
+ 2056, 2057, 2059, 2060, 2062, 2063, 2064, 2068, 2069, 2070, 2074, 2075, 2079,
+ 2080, 2081, 2086, 2089, 2090, 2091, 2092, 2093, 2099, 2104, 2108, 2110, 2117,
+ 2127, 2137, 2141, 2145, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163,
+ 2164, 2173, 2176, 2177, 2178, 2188, 2189, 2190, 2191, 2192, 2193, 2196, 2199,
+ 2201, 2202, 2203, 2204, 2205, 2214, 2215, 2216, 2217, 2219, 2220, 2222, 2223,
+ 2224, 2225, 2226, 2227, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237,
+ 2238, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2259,
+ 2260, 2261, 2262, 2263, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274,
+ 2275, 2276, 2282, 2283, 2284, 2285, 2287, 2288, 2289, 2290, 2291, 2293, 2294,
+ 2295, 2296, 2297, 2298, 2299, 2300, 2307, 2308, 2309, 2310, 2311, 2312, 2313,
+ 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2325, 2326, 2327, 2328, 2329, 2330,
+ 2331, 2332, 2333, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346,
+ 2347, 2348, 2349, 2355, 2356, 2357, 2358, 2359, 2361, 2362, 2363, 2364, 2365,
+ 2366, 2372, 2375, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386,
+ 2387, 2388, 2389, 2390, 2391, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 2409,
+ 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2421, 2422, 2423, 2424, 2425,
+ 2426, 2431, 2432, 2433, 2434, 2435, 2437, 2438, 2439, 2440, 2441, 2442, 2443,
+ 2444, 2446, 2447, 2448, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2461, 2462,
+ 2463, 2464, 2465, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2479, 2480, 2481,
+ 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2496, 2497, 2498,
+ 2499, 2500, 2501, 2502, 2503, 2504, 2506, 2507, 2508, 2509, 2510, 2511, 2512,
+ 2516, 2517, 2518, 2522, 2523, 2524, 2525, 2526, 2528, 2529, 2530, 2531, 2532,
+ 2533, 2534, 2535, 2539, 2540, 2541, 2542, 2543, 2545, 2546, 2547, 2548, 2549,
+ 2550, 2551, 2552, 2553, 2554, 2557, 2558, 2559, 2560, 2561, 2563, 2564, 2565,
+ 2566, 2567, 2568, 2569, 2570, 2574, 2575, 2576, 2579, 2580, 2581, 2582, 2583,
+ 2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2600,
+ 2601, 2602, 2603, 2607, 2608, 2609, 2610, 2611, 2612, 2616, 2618, 2619, 2620,
+ 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634,
+ 2635, 2636, 2637, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651,
+ 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664,
+ 2665, 2669, 2670, 2671, 2672, 2673, 2675, 2676, 2677, 2678, 2679, 2680, 2681,
+ 2682, 2683, 2686, 2688, 2689, 2690, 2691, 2692, 2693, 2694, 2695, 2696, 2701,
+ 2707, 2708, 2709, 2711, 2712, 2721, 2722, 2723, 2728, 2729, 2730, 2733, 2734,
+ 2735, 2736, 2737, 2738, 2739, 2746, 2747, 2748, 2750, 2751, 2752, 2754, 2755,
+ 2756, 2757, 2758, 2759, 2760, 2764, 2770, 2771, 2772, 2773, 2774, 2775, 2776,
+ 2777, 2778, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796,
+ 2797, 2798, 2799, 2800, 2801, 2802, 2803, 2804, 2813, 2814, 2818, 2819, 2820,
+ 2821, 2822, 2823, 2824, 2825, 2826, 2832, 2833, 2834, 2835, 2836, 2837, 2838,
+ 2839, 2840, 2841, 2842, 2843, 2844, 2850, 2851, 2852, 2853, 2854, 2856, 2857,
+ 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2873, 2874, 2875, 2876, 2877,
+ 2878, 2879, 2880, 2881, 2882, 2883, 2895, 2897, 2898, 2899, 2900, 2901, 2903,
+ 2904, 2907, 2910, 2912, 2913, 2914, 2915, 2916, 2920, 2922, 2923, 2924, 2925,
+ 2927, 2930, 2931, 2932, 2933, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942,
+ 2943, 2944, 2947, 2949, 2954, 2960, 2969, 2974, 2975, 2978, 2979, 2980, 2981,
+ 2982, 2983, 2984, 2985, 2992, 2995, 3001, 3009, 3018, 3024, 3030, 3032, 3033,
+ 3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3049, 3050, 3051, 3052, 3053,
+ 3054, 3055, 3056, 3057, 3065, 3067, 3077, 3080, 3086, 3087, 3089, 3091, 3092,
+ 3093, 3094, 3095, 3096, 3097, 3098, 3105, 3108, 3111, 3115, 3125, 3131, 3133,
+ 3134, 3135, 3136, 3137, 3138, 3139, 3145, 3148, 3150, 3159, 3161, 3165, 3166,
+ 3167, 3168, 3169, 3170, 3175, 3177, 3179, 3184, 3186, 3187, 3188, 3189, 3190,
+ 3194, 3195, 3196, 3197, 3198, 3202, 3203, 3204, 3205, 3206, 3209, 3211, 3212,
+ 3213, 3214, 3215, 3216, 3220, 3221, 3222, 3224, 3225, 3226, 3231, 3232, 3233,
+ 3234, 3237, 3238, 3239, 3240, 3244, 3246, 3247, 3248, 3250, 3251, 3252, 3253,
+ 3254, 3255, 3256, 3257, 3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269,
+ 3270, 3271, 3272, 3275, 3278, 3279, 3280, 3281, 3282, 3284, 3285, 3286, 3287,
+ 3288, 3289, 3290, 3296, 3297, 3298, 3299, 3300, 3301, 3303, 3304, 3305, 3306,
+ 3307, 3308, 3309, 3310, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320,
+ 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335,
+ 3337, 3338, 3339, 3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349,
+ 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 3358, 3359, 3360, 3361, 3362,
+ 3363, 3364, 3368, 3369, 3370, 3371, 3372, 3374, 3375, 3376, 3377, 3378, 3379,
+ 3380, 3386, 3387, 3389, 3390, 3392, 3393, 3395, 3396, 3398, 3399, 3400, 3401,
+ 3413, 3414, 3416, 3417, 3418, 3419, 3420, 3422, 3423, 3425, 3426, 3428, 3429,
+ 3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442,
+ 3444, 3445, 3447, 3448, 3450, 3451, 3453, 3454, 3456, 3457, 3458, 3459, 3460,
+ 3461, 3462, 3463, 3464, 3465, 3466, 3467, 3469, 3470, 3472, 3473, 3475, 3476,
+ 3478, 3479, 3481, 3482, 3484, 3485, 3487, 3488, 3492, 3493, 3494, 3495, 3496,
+ 3498, 3499, 3501, 3502, 3504, 3505, 3507, 3508, 3510, 3511, 3512, 3513, 3515,
+ 3516, 3518, 3519, 3521, 3522, 3524, 3525, 3527, 3528, 3530, 3531, 3533, 3534,
+ 3536, 3537, 3538, 3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 3555, 3558,
+ 3559, 3561, 3562, 3565, 3566, 3567, 3568, 3569, 3570, 3575, 3576, 3579, 3580,
+ 3581, 3582, 3584, 3585, 3586, 3587, 3591, 3593, 3594, 3596, 3597, 3598, 3599,
+ 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612,
+ 3614, 3615, 3617, 3618, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628,
+ 3629, 3630, 3631, 3632, 3633, 3634, 3637, 3638, 3639, 3640, 3641, 3642, 3643,
+ 3644, 3645, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3657, 3658,
+ 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3667, 3668, 3669, 3670, 3671, 3672,
+ 3673, 3674, 3675, 3677, 3678, 3679, 3680, 3681, 3682, 3683, 3684, 3685, 3687,
+ 3688, 3689, 3690, 3691, 3692, 3693, 3694, 3695, 3697, 3698, 3699, 3700, 3701,
+ 3702, 3703, 3705, 3706, 3707, 3708, 3709, 3710, 3711, 3712, 3713, 3715, 3716,
+ 3717, 3718, 3719, 3720, 3721, 3722, 3723, 3724, 3733, 3734, 3735, 3736, 3737,
+ 3738, 3739, 3740, 3741, 3742, 3743, 3745, 3746, 3747, 3748, 3751, 3752, 3754,
+ 3755, 3756, 3757, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3773,
+ 3774, 3775, 3776, 3778, 3779, 3781, 3782, 3783, 3784, 3786, 3787, 3789, 3790,
+ 3792, 3793, 3794, 3798, 3799, 3800, 3801, 3802, 3803, 3804, 3805, 3806, 3807,
+ 3809, 3810, 3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 3819, 3820, 3821,
+ 3822, 3823, 3824, 3825, 3826, 3827, 3828, 3830, 3831, 3832, 3835, 3836, 3837,
+ 3841, 3842, 3843, 3849, 3850, 3852, 3853, 3855, 3856, 3858, 3859, 3866, 3867,
+ 3869, 3870, 3872, 3873, 3875, 3876, 3878, 3879, 3881, 3882, 3883, 3885, 3886,
+ 3888, 3890, 3891, 3893, 3894, 3896, 3897, 3899, 3900, 3901, 3902, 3903, 3904,
+ 3905, 3906, 3907, 3908, 3909, 3910, 3912, 3913, 3915, 3916, 3918, 3919, 3921,
+ 3922, 3924, 3925, 3927, 3928, 3930, 3931, 3933, 3934, 3936, 3937, 3939, 3940,
+ 3942, 3943, 3945, 3946, 3947, 3948, 3950, 3953, 3954, 3955, 3957, 3958, 3960,
+ 3961, 3963, 3964, 3966, 3967, 3968, 3970, 3971, 3973, 3975, 3976, 3978, 3980,
+ 3981, 3983, 3984, 3986, 3991, 3992, 3993, 3998, 3999, 4000, 4001, 4002, 4005,
+ 4006, 4010, 4011, 4013, 4014, 4015, 4016, 4022, 4024, 4025, 4026, 4027, 4029,
+ 4030, 4032, 4033, 4035, 4036, 4038, 4039, 4041, 4042, 4044, 4045, 4046, 4047,
+ 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060,
+ 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 4074, 4075, 4076, 4083,
+ 4084, 4085, 4086, 4087, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097,
+ 4098, 4100, 4101, 4102, 4103, 4105, 4106, 4107, 4108, 4110, 4111, 4112, 4113,
+ 4115, 4116, 4117, 4118, 4120, 4121, 4122, 4123, 4125, 4126, 4127, 4128, 4130,
+ 4131, 4132, 4133, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4144, 4145,
+ 4146, 4147, 4149, 4150, 4151, 4152, 4154, 4155, 4156, 4157, 4159, 4160, 4161,
+ 4162, 4164, 4165, 4166, 4167, 4169, 4170, 4171, 4172, 4174, 4175, 4176, 4177,
+ 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 4188, 4189, 4190, 4191, 4193,
+ 4194, 4195, 4196, 4198, 4199, 4200, 4201, 4202, 4203, 4204, 4205, 4206, 4207,
+ 4208, 4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 4219, 4220, 4221,
+ 4222, 4223, 4224, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234,
+ 4235, 4236, 4237, 4239, 4240, 4241, 4242, 4243, 4244, 4245, 4246, 4248, 4249,
+ 4250, 4251, 4253, 4254, 4255, 4257, 4258, 4259, 4260, 4262, 4263, 4264, 4265,
+ 4267, 4268, 4269, 4270, 4272, 4273, 4274, 4276, 4277, 4278, 4279, 4281, 4282,
+ 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 4294, 4295,
+ 4296, 4297, 4298, 4299, 4301, 4302, 4303, 4304, 4305, 4309, 4310, 4311, 4312,
+ 4313, 4314, 4315, 4323, 4324, 4325, 4327, 4328, 4329, 4330, 4332, 4333, 4334,
+ 4335, 4337, 4338, 4339, 4340, 4342, 4343, 4344, 4345, 4347, 4348, 4349, 4350,
+ 4351, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4360, 4361, 4362, 4363, 4365,
+ 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378,
+ 4379, 4380, 4381, 4382, 4383, 4385, 4386, 4387, 4397, 4398, 4399, 4400, 4401,
+ 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4411, 4412, 4413, 4414, 4415,
+ 4416, 4417, 4418, 4420, 4421, 4422, 4423, 4425, 4426, 4427, 4428, 4430, 4431,
+ 4432, 4434, 4435, 4436, 4437, 4439, 4440, 4441, 4442, 4444, 4445, 4446, 4447,
+ 4449, 4450, 4451, 4452, 4454, 4455, 4456, 4458, 4459, 4460, 4462, 4463, 4464,
+ 4466, 4467, 4468, 4469, 4470, 4471, 4477, 4478, 4479, 4480, 4481, 4482, 4483,
+ 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498,
+ 4499, 4501, 4502, 4503, 4506, 4507, 4508, 4510, 4511, 4512, 4513, 4514, 4515,
+ 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4530, 4531, 4532,
+ 4533, 4535, 4536, 4537, 4538, 4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546,
+ 4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 4563, 4564, 4565, 4567, 4568,
+ 4569, 4570, 4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 4579, 4580, 4586,
+ 4587, 4588, 4591, 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 4600, 4601,
+ 4602, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616,
+ 4617, 4627, 4628, 4629, 4631, 4632, 4633, 4634, 4636, 4637, 4638, 4639, 4641,
+ 4642, 4643, 4644, 4646, 4647, 4648, 4649, 4651, 4652, 4653, 4654, 4656, 4657,
+ 4658, 4659, 4661, 4662, 4663, 4664, 4666, 4667, 4668, 4669, 4671, 4672, 4673,
+ 4674, 4676, 4677, 4678, 4679, 4681, 4682, 4683, 4685, 4686, 4687, 4688, 4689,
+ 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4701, 4702, 4703, 4704, 4706, 4707,
+ 4708, 4710, 4711, 4712, 4714, 4715, 4716, 4717, 4719, 4720, 4721, 4722, 4724,
+ 4725, 4726, 4727, 4729, 4730, 4731, 4732, 4734, 4735, 4736, 4737, 4739, 4740,
+ 4741, 4742, 4744, 4745, 4746, 4747, 4749, 4750, 4751, 4752, 4754, 4755, 4756,
+ 4757, 4759, 4760, 4761, 4762, 4764, 4765, 4766, 4767, 4769, 4770, 4771, 4772,
+ 4774, 4775, 4776, 4778, 4779, 4780, 4781, 4782, 4783, 4789, 4790, 4791, 4792,
+ 4794, 4795, 4796, 4797, 4799, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807,
+ 4808, 4809, 4810, 4811, 4812, 4813, 4816, 4817, 4818, 4819, 4821, 4822, 4823,
+ 4825, 4826, 4827, 4828, 4830, 4831, 4832, 4833, 4835, 4836, 4837, 4838, 4840,
+ 4841, 4842, 4843, 4845, 4846, 4847, 4848, 4850, 4851, 4852, 4853, 4855, 4856,
+ 4857, 4858, 4860, 4861, 4862, 4863, 4865, 4866, 4867, 4868, 4870, 4871, 4872,
+ 4873, 4875, 4876, 4877, 4878, 4880, 4881, 4882, 4883, 4885, 4886, 4887, 4888,
+ 4890, 4891, 4892, 4893, 4895, 4896, 4897, 4898, 4899, 4900, 4901, 4903, 4904,
+ 4905, 4906, 4908, 4909, 4910, 4911, 4913, 4914, 4915, 4916, 4918, 4919, 4920,
+ 4921, 4923, 4924, 4925, 4926, 4927, 4931, 4932, 4933, 4934, 4935, 4936, 4937,
+ 4938, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4948, 4949, 4950, 4951, 4952,
+ 4953, 4954, 4957, 4958, 4959, 4960, 4963, 4964, 4965, 4966, 4967, 4968, 4971,
+ 4972, 4973, 4981, 4982, 4983, 4984, 4985, 4990, 4991, 4992, 4994, 4995, 4996,
+ 4997, 4999, 5000, 5001, 5003, 5004, 5005, 5006, 5008, 5009, 5010, 5011, 5013,
+ 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5030, 5031, 5032, 5033, 5034,
+ 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 5050,
+ 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, 5063,
+ 5064, 5066, 5067, 5068, 5069, 5071, 5072, 5073, 5074, 5075, 5076, 5077, 5079,
+ 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, 5091, 5092,
+ 5093, 5094, 5095, 5096, 5097, 5099, 5100, 5101, 5103, 5104, 5105, 5106, 5108,
+ 5109, 5110, 5111, 5113, 5114, 5115, 5116, 5118, 5119, 5120, 5121, 5123, 5124,
+ 5125, 5126, 5128, 5129, 5130, 5131, 5133, 5134, 5135, 5137, 5138, 5139, 5140,
+ 5142, 5143, 5144, 5145, 5147, 5148, 5149, 5150, 5152, 5153, 5154, 5156, 5157,
+ 5158, 5159, 5161, 5162, 5163, 5164, 5166, 5167, 5168, 5169, 5171, 5172, 5173,
+ 5174, 5176, 5177, 5178, 5179, 5180, 5181, 5182, 5195, 5196, 5197, 5198, 5200,
+ 5201, 5202, 5203, 5205, 5206, 5207, 5208, 5210, 5211, 5212, 5213, 5215, 5216,
+ 5217, 5218, 5219, 5220, 5224, 5225, 5226, 5227, 5229, 5230, 5231, 5232, 5233,
+ 5237, 5238, 5239, 5241, 5242, 5243, 5244, 5245, 5246, 5247, 5248, 5250, 5251,
+ 5252, 5253, 5254, 5255, 5256, 5257, 5258, 5259, 5260, 5261, 5262, 5263, 5264,
+ 5265, 5266, 5267, 5268, 5269, 5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277,
+ 5278, 5279, 5280, 5281, 5282, 5283, 5284, 5286, 5287, 5288, 5289, 5290, 5294,
+ 5295, 5296, 5298, 5299, 5300, 5301, 5303, 5304, 5305, 5306, 5308, 5309, 5310,
+ 5311, 5313, 5314, 5315, 5316, 5318, 5319, 5320, 5321, 5323, 5324, 5325, 5326,
+ 5327, 5328, 5329, 5330, 5331, 5332, 5333, 5335, 5336, 5337, 5338, 5340, 5341,
+ 5342, 5343, 5345, 5346, 5347, 5348, 5350, 5351, 5352, 5353, 5355, 5356, 5357,
+ 5358, 5360, 5361, 5362, 5363, 5365, 5366, 5367, 5368, 5370, 5371, 5372, 5373,
+ 5375, 5376, 5377, 5378, 5380, 5381, 5382, 5383, 5385, 5386, 5387, 5388, 5390,
+ 5391, 5392, 5393, 5394, 5395, 5396, 5398, 5399, 5400, 5401, 5403, 5404, 5405,
+ 5406, 5408, 5409, 5410, 5411, 5413, 5414, 5415, 5416, 5418, 5419, 5420, 5421,
+ 5423, 5424, 5425, 5426, 5428, 5429, 5430, 5431, 5433, 5434, 5435, 5436, 5438,
+ 5439, 5440, 5441, 5443, 5444, 5445, 5446, 5448, 5449, 5450, 5451, 5452, 5453,
+ 5454, 5455, 5456, 5457, 5458, 5459, 5461, 5462, 5463, 5464, 5466, 5467, 5468,
+ 5469, 5471, 5472, 5473, 5474, 5476, 5477, 5478, 5479, 5481, 5482, 5483, 5484,
+ 5486, 5487, 5488, 5489, 5491, 5492, 5493, 5494, 5495, 5496, 5500, 5501, 5502,
+ 5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515,
+ 5516, 5520, 5521, 5522, 5523, 5525, 5526, 5527, 5529, 5530, 5531, 5532, 5534,
+ 5535, 5536, 5537, 5539, 5540, 5541, 5542, 5544, 5545, 5546, 5547, 5549, 5550,
+ 5551, 5552, 5554, 5555, 5556, 5557, 5559, 5560, 5561, 5562, 5563, 5564, 5565,
+ 5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 5575, 5576, 5577, 5578, 5580,
+ 5581, 5582, 5584, 5585, 5586, 5587, 5589, 5590, 5591, 5592, 5594, 5595, 5596,
+ 5597, 5599, 5600, 5601, 5602, 5604, 5605, 5606, 5608, 5609, 5610, 5612, 5613,
+ 5614, 5615, 5616, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 5628, 5629, 5630,
+ 5632, 5633, 5634, 5635, 5636, 5640, 5641, 5642, 5643, 5644, 5645, 5646, 5647,
+ 5648, 5651, 5652, 5653, 5654, 5656, 5657, 5658, 5659, 5660, 5664, 5665, 5666,
+ 5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 5683, 5684, 5685, 5687, 5688,
+ 5689, 5690, 5692, 5693, 5694, 5695, 5697, 5698, 5699, 5700, 5702, 5703, 5704,
+ 5705, 5707, 5708, 5709, 5710, 5712, 5713, 5714, 5715, 5716, 5717, 5718, 5719,
+ 5720, 5722, 5723, 5724, 5725, 5727, 5728, 5729, 5730, 5732, 5733, 5734, 5735,
+ 5737, 5738, 5739, 5740, 5742, 5743, 5744, 5745, 5747, 5748, 5749, 5750, 5752,
+ 5753, 5754, 5755, 5756, 5757, 5758, 5759, 5760, 5761, 5762, 5763, 5764, 5765,
+ 5766, 5790, 5791, 5792, 5794, 5795, 5796, 5797, 5799, 5800, 5801, 5802, 5804,
+ 5805, 5806, 5807, 5809, 5810, 5811, 5812, 5814, 5815, 5816, 5817, 5819, 5820,
+ 5821, 5822, 5823, 5824, 5825, 5826, 5836, 5837, 5838, 5840, 5841, 5842, 5843,
+ 5845, 5846, 5847, 5849, 5850, 5851, 5855, 5856, 5857, 5859, 5860, 5861, 5863,
+ 5864, 5865, 5869, 5870, 5871, 5875, 5876, 5877, 5879, 5880, 5881, 5885, 5886,
+ 5887, 5891, 5892, 5893, 5895, 5896, 5897, 5898, 5900, 5901, 5902, 5903, 5905,
+ 5906, 5907, 5908, 5910, 5911, 5912, 5914, 5915, 5916, 5918, 5919, 5920, 5922,
+ 5923, 5924, 5926, 5927, 5928, 5930, 5931, 5932, 5933, 5934, 5935, 5936, 5937,
+ 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 5980, 5981,
+ 5982, 5983, 5984, 5985, 5986, 5988, 5989, 5990, 5991, 5993, 5994, 5995, 5996,
+ 5998, 5999, 6000, 6001, 6003, 6004, 6005, 6006, 6008, 6009, 6010, 6011, 6013,
+ 6014, 6015, 6016, 6017, 6021, 6022, 6023, 6025, 6026, 6027, 6028, 6030, 6031,
+ 6032, 6033, 6035, 6036, 6037, 6038, 6040, 6041, 6042, 6043, 6044, 6045, 6046,
+ 6047, 6048, 6049, 6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059,
+ 6060, 6061, 6062, 6064, 6065, 6066, 6067, 6069, 6070, 6071, 6072, 6074, 6075,
+ 6076, 6077, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 6086, 6087, 6088, 6089,
+ 6090, 6091, 6092, 6093, 6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 6102,
+ 6103, 6107, 6108, 6109, 6111, 6112, 6113, 6114, 6116, 6117, 6118, 6119, 6121,
+ 6122, 6123, 6124, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135,
+ 6136, 6137, 6138, 6139, 6140, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148,
+ 6149, 6151, 6152, 6153, 6155, 6156, 6157, 6158, 6160, 6161, 6162, 6163, 6165,
+ 6166, 6167, 6168, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179,
+ 6180, 6181, 6182, 6183, 6184, 6185, 6186, 6187, 6188, 6189, 6190, 6191, 6192,
+ 6194, 6195, 6196, 6197, 6199, 6200, 6201, 6202, 6204, 6205, 6206, 6207, 6209,
+ 6210, 6211, 6212, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 6220, 6221, 6222,
+ 6223, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 6231, 6232, 6233, 6237, 6238,
+ 6239, 6241, 6242, 6243, 6244, 6246, 6247, 6248, 6249, 6251, 6252, 6253, 6254,
+ 6256, 6257, 6258, 6259, 6260, 6261, 6262, 6263, 6264, 6265, 6266, 6267, 6268,
+ 6269, 6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 6278, 6279, 6281, 6282,
+ 6283, 6285, 6286, 6287, 6288, 6290, 6291, 6292, 6293, 6295, 6296, 6297, 6298,
+ 6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 6308, 6309, 6310, 6311, 6312,
+ 6313, 6314, 6315, 6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 6325, 6326,
+ 6327, 6328, 6330, 6331, 6332, 6333, 6335, 6336, 6337, 6338, 6340, 6341, 6342,
+ 6343, 6345, 6346, 6347, 6348, 6350, 6351, 6352, 6353, 6355, 6356, 6357, 6358,
+ 6360, 6361, 6362, 6363, 6365, 6366, 6367, 6368, 6370, 6371, 6372, 6373, 6375,
+ 6376, 6377, 6379, 6380, 6381, 6382, 6384, 6385, 6386, 6387, 6389, 6390, 6391,
+ 6392, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405,
+ 6406, 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6418, 6419,
+ 6420, 6421, 6423, 6424, 6425, 6426, 6428, 6429, 6430, 6431, 6433, 6434, 6435,
+ 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 6444, 6445, 6446, 6447, 6448,
+ 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457, 6458, 6464, 6465, 6466,
+ 6468, 6469, 6470, 6471, 6473, 6474, 6475, 6476, 6478, 6479, 6480, 6481, 6483,
+ 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6492, 6493, 6494, 6496, 6497, 6498,
+ 6499, 6501, 6502, 6503, 6504, 6506, 6507, 6508, 6509, 6511, 6512, 6513, 6514,
+ 6515, 6516, 6517, 6518, 6519, 6520, 6521, 6522, 6523, 6524, 6525, 6526, 6528,
+ 6529, 6530, 6531, 6533, 6534, 6535, 6536, 6538, 6539, 6540, 6541, 6543, 6544,
+ 6545, 6547, 6548, 6549, 6551, 6552, 6553, 6555, 6556, 6557, 6558, 6560, 6561,
+ 6562, 6563, 6565, 6566, 6567, 6568, 6570, 6571, 6572, 6573, 6574, 6575, 6576,
+ 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585, 6586, 6587, 6588, 6589,
+ 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598, 6599, 6600, 6601, 6602, 6603,
+ 6604, 6626, 6627, 6628, 6629, 6630, 6631, 6632, 6634, 6636, 6637, 6638, 6639,
+ 6641, 6642, 6643, 6644, 6646, 6647, 6648, 6649, 6651, 6652, 6653, 6655, 6656,
+ 6657, 6658, 6659, 6660, 6661, 6662, 6663, 6664, 6665, 6666, 6667, 6668, 6669,
+ 6670, 6672, 6673, 6674, 6675, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684,
+ 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 6695, 6697, 6698,
+ 6699, 6700, 6702, 6703, 6704, 6706, 6707, 6708, 6710, 6711, 6712, 6713, 6714,
+ 6715, 6716, 6718, 6719, 6720, 6721, 6722, 6723, 6731, 6732, 6733, 6734, 6737,
+ 6738, 6739, 6740, 6742, 6743, 6744, 6745, 6746, 6747, 6748, 6750, 6751, 6752,
+ 6753, 6755, 6756, 6757, 6758, 6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767,
+ 6769, 6770, 6771, 6772, 6774, 6775, 6776, 6777, 6779, 6780, 6781, 6782, 6784,
+ 6785, 6786, 6787, 6789, 6790, 6791, 6792, 6794, 6795, 6796, 6797, 6798, 6799,
+ 6800, 6801, 6803, 6804, 6805, 6806, 6808, 6809, 6810, 6811, 6813, 6814, 6815,
+ 6816, 6818, 6819, 6820, 6821, 6823, 6824, 6825, 6826, 6828, 6829, 6830, 6831,
+ 6832, 6833, 6834, 6835, 6837, 6838, 6839, 6840, 6842, 6843, 6844, 6845, 6847,
+ 6848, 6849, 6850, 6852, 6853, 6854, 6855, 6856, 6857, 6858, 6859, 6861, 6862,
+ 6863, 6864, 6866, 6867, 6868, 6869, 6871, 6872, 6873, 6874, 6876, 6877, 6878,
+ 6879, 6880, 6881, 6882, 6883, 6885, 6886, 6887, 6888, 6890, 6891, 6892, 6893,
+ 6895, 6896, 6897, 6898, 6900, 6901, 6902, 6903, 6905, 6906, 6907, 6908, 6910,
+ 6911, 6912, 6913, 6914, 6915, 6916, 6917, 6927, 6928, 6929, 6930, 6931, 6932,
+ 6933, 6934, 6935, 6936, 6937, 6938, 6939, 6940, 6941, 6942, 6943, 6944, 6945,
+ 6946, 6947, 6948, 6949, 6953, 6954, 6955, 6957, 6959, 6960, 6961, 6962, 6964,
+ 6965, 6966, 6967, 6969, 6970, 6971, 6972, 6973, 6977, 6978, 6979, 6980, 6981,
+ 6982, 6983, 6987, 6988, 6989, 6990, 6991, 6992, 6996, 6997, 6998, 6999, 7000,
+ 7004, 7005, 7006, 7008, 7009, 7010, 7012, 7014, 7020, 7021, 7022, 7027, 7028,
+ 7029, 7033, 7034, 7035, 7037, 7038, 7039, 7046, 7047, 7048, 7058, 7059, 7060,
+ 7070, 7071, 7072, 7076, 7077, 7078, 7082, 7083, 7084, 7094, 7095, 7096, 7097,
+ 7098, 7099, 7100, 7101, 7102, 7103, 7104, 7105, 7114, 7115, 7116, 7119, 7120,
+ 7121, 7122, 7123, 7124, 7125, 7135, 7136, 7137, 7138, 7139, 7140, 7141, 7142,
+ 7143, 7144, 7147, 7148, 7149, 7151, 7152, 7153, 7154, 7155, 7156, 7158, 7160,
+ 7161, 7162, 7171, 7172, 7173, 7174, 7175, 7176, 7177, 7178, 7180, 7181, 7182,
+ 7183, 7185, 7186, 7187, 7189, 7190, 7191, 7201, 7202, 7203, 7206, 7207, 7208,
+ 7214, 7215, 7216, 7217, 7218, 7219, 7221, 7222, 7223, 7225, 7226, 7227, 7228,
+ 7229, 7230, 7231, 7232, 7233, 7234, 7241, 7242, 7243, 7246, 7247, 7248, 7251,
+ 7252, 7253, 7257, 7258, 7259, 7265, 7266, 7267, 7269, 7270, 7271, 7272, 7273,
+ 7274, 7275, 7276, 7282, 7283, 7284, 7287, 7288, 7289, 7291, 7292, 7293, 7302,
+ 7303, 7304, 7305, 7306, 7307, 7308, 7311, 7312, 7313, 7317, 7318, 7319, 7320,
+ 7321, 7322, 7323, 7324, 7329, 7330, 7331, 7333, 7334, 7335, 7336, 7337, 7338,
+ 7339, 7340, 7341, 7342, 7343, 7344, 7345, 7346, 7348, 7349, 7350, 7352, 7353,
+ 7354, 7359, 7360, 7361, 7363, 7364, 7365, 7366, 7367, 7368, 7369, 7370, 7371,
+ 7377, 7378, 7379, 7380, 7381, 7382, 7383, 7384, 7385, 7386, 7387, 7388, 7389,
+ 7390, 7391, 7392, 7393, 7394, 7395, 7400, 7401, 7402, 7403, 7404, 7405, 7406,
+ 7407, 7408, 7409, 7410, 7412, 7413, 7414, 7415, 7416, 7417, 7418, 7419, 7420,
+ 7421, 7422, 7426, 7427, 7428, 7429, 7430, 7434, 7435, 7436, 7438, 7439, 7440,
+ 7441, 7442, 7443, 7444, 7445, 7446, 7447, 7448, 7449, 7450, 7451, 7452, 7453,
+ 7457, 7458, 7459, 7460, 7461, 7462, 7463, 7465, 7466, 7467, 7468, 7469, 7470,
+ 7473, 7474, 7475, 7477, 7478, 7479, 7480, 7481, 7482, 7483, 7484, 7485, 7486,
+ 7490, 7491, 7492, 7493, 7494, 7497, 7498, 7499, 7500, 7501, 7502, 7503, 7504,
+ 7505, 7510, 7511, 7512, 7513, 7514, 7515, 7519, 7520, 7521, 7522, 7523, 7524,
+ 7525, 7526, 7527, 7528, 7532, 7533, 7534, 7536, 7537, 7538, 7539, 7540, 7542,
+ 7543, 7544, 7545, 7546, 7547, 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555,
+ 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, 7564, 7565, 7566, 7567, 7572,
+ 7573, 7574, 7575, 7576, 7577, 7578, 7579, 7580, 7581, 7582, 7583, 7584, 7585,
+ 7586, 7587, 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, 7596, 7597, 7598,
+ 7599, 7600, 7601, 7605, 7606, 7607, 7608, 7609, 7610, 7611, 7612, 7613, 7615,
+ 7616, 7617, 7618, 7619, 7620, 7621, 7622, 7623, 7624, 7625, 7628, 7629, 7630,
+ 7632, 7633, 7634, 7639, 7640, 7641, 7647, 7648, 7649, 7650, 7651, 7652, 7654,
+ 7663, 7664, 7665, 7670, 7671, 7672, 7675, 7676, 7677, 7678, 7679, 7680, 7681,
+ 7682, 7683, 7690, 7691, 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, 7700,
+ 7701, 7702, 7704, 7706, 7710, 7711, 7712, 7718, 7719, 7720, 7728, 7729, 7730,
+ 7739, 7740, 7741, 7744, 7745, 7746, 7748, 7754, 7755, 7756, 7762, 7763, 7764,
+ 7766, 7767, 7768, 7769, 7770, 7771, 7772, 7773, 7774, 7775, 7776, 7777, 7778,
+ 7779, 7787, 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, 7796, 7797, 7798,
+ 7810, 7811, 7812, 7814, 7815, 7816, 7817, 7818, 7819, 7820, 7821, 7822, 7824,
+ 7825, 7826, 7827, 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, 7836, 7837,
+ 7838, 7842, 7843, 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7852, 7853, 7854,
+ 7855, 7856, 7857, 7858, 7859, 7860, 7862, 7863, 7864, 7865, 7866, 7867, 7868,
+ 7869, 7870, 7871, 7872, 7873, 7874, 7875, 7876, 7877, 7878, 7879, 7882, 7883,
+ 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7893, 7894, 7895, 7896,
+ 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7912, 7913, 7914, 7915,
+ 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7927, 7928,
+ 7929, 7930, 7931, 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7946, 7947, 7948,
+ 7949, 7950, 7951, 7952, 7953, 7954, 7955, 7956, 7964, 7965, 7966, 7967, 7968,
+ 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, 7980, 7981,
+ 7982, 7983, 7984, 7985, 7986, 7987, 7994, 7995, 7996, 7997, 7998, 7999, 8000,
+ 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, 8012, 8013,
+ 8014, 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031,
+ 8032, 8033, 8034, 8035, 8036, 8037, 8042, 8043, 8044, 8045, 8046, 8047, 8048,
+ 8049, 8050, 8051, 8052, 8053, 8054, 8055, 8056, 8060, 8061, 8062, 8063, 8064,
+ 8065, 8066, 8070, 8071, 8072, 8073, 8074, 8075, 8076, 8077, 8078, 8079, 8080,
+ 8081, 8082, 8083, 8084, 8085, 8086, 8087, 8088, 8089, 8090, 8094, 8095, 8096,
+ 8097, 8098, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8109, 8110,
+ 8111, 8114, 8115, 8116, 8117, 8118, 8119, 8120, 8121, 8122, 8123, 8124, 8125,
+ 8126, 8127, 8128, 8130, 8131, 8132, 8133, 8134, 8135, 8136, 8137, 8138, 8139,
+ 8140, 8141, 8142, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155,
+ 8156, 8157, 8158, 8159, 8160, 8161, 8162, 8163, 8164, 8165, 8166, 8167, 8170,
+ 8171, 8172, 8173, 8174, 8175, 8176, 8177, 8178, 8179, 8180, 8182, 8183, 8184,
+ 8185, 8186, 8187, 8188, 8189, 8190, 8196, 8197, 8198, 8199, 8200, 8201, 8202,
+ 8203, 8204, 8205, 8206, 8207, 8208, 8209, 8210, 8211, 8212, 8213, 8214, 8215,
+ 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8227, 8228, 8229,
+ 8230, 8231, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239, 8242, 8243, 8244,
+ 8245, 8246, 8247, 8248, 8249, 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8257,
+ 8258, 8259, 8260, 8261, 8262, 8263, 8264, 8265, 8266, 8268, 8269, 8270, 8271,
+ 8272, 8273, 8274, 8275, 8276, 8277, 8278, 8279, 8280, 8281, 8282, 8283, 8284,
+ 8285, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297,
+ 8298, 8299, 8300, 8301, 8302, 8303, 8304, 8305, 8306, 8307, 8308, 8309, 8310,
+ 8311, 8312, 8313, 8314, 8315, 8316, 8317, 8318, 8319, 8320, 8324, 8325, 8326,
+ 8327, 8328, 8329, 8330, 8331, 8332, 8334, 8335, 8336, 8337, 8338, 8339, 8340,
+ 8341, 8342, 8348, 8349, 8350, 8351, 8353, 8354, 8355, 8356, 8358, 8359, 8360,
+ 8361, 8363, 8364, 8365, 8366, 8368, 8369, 8370, 8371, 8372, 8373, 8385, 8386,
+ 8387, 8388, 8390, 8391, 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400,
+ 8402, 8403, 8404, 8405, 8407, 8408, 8409, 8410, 8412, 8413, 8414, 8415, 8416,
+ 8417, 8418, 8419, 8420, 8421, 8422, 8423, 8424, 8425, 8426, 8427, 8428, 8429,
+ 8430, 8431, 8432, 8433, 8434, 8435, 8436, 8437, 8438, 8439, 8440, 8441, 8442,
+ 8444, 8445, 8446, 8447, 8449, 8450, 8451, 8452, 8454, 8455, 8456, 8457, 8459,
+ 8460, 8461, 8462, 8464, 8465, 8466, 8467, 8468, 8469, 8470, 8471, 8472, 8473,
+ 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481, 8482, 8483, 8484, 8485, 8486,
+ 8487, 8489, 8490, 8491, 8492, 8494, 8495, 8496, 8497, 8499, 8500, 8501, 8502,
+ 8504, 8505, 8506, 8507, 8509, 8510, 8511, 8512, 8514, 8515, 8516, 8517, 8519,
+ 8520, 8521, 8522, 8525, 8526, 8527, 8528, 8529, 8530, 8531, 8532, 8533, 8534,
+ 8535, 8537, 8538, 8539, 8540, 8542, 8543, 8544, 8545, 8547, 8548, 8549, 8550,
+ 8552, 8553, 8554, 8555, 8557, 8558, 8559, 8560, 8561, 8562, 8563, 8564, 8566,
+ 8567, 8568, 8569, 8571, 8572, 8573, 8574, 8576, 8577, 8578, 8579, 8581, 8582,
+ 8583, 8584, 8586, 8587, 8588, 8589, 8591, 8592, 8593, 8594, 8596, 8597, 8598,
+ 8599, 8600, 8601, 8602, 8604, 8606, 8615, 8616, 8617, 8618, 8619, 8620, 8621,
+ 8622, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631, 8632, 8633, 8636,
+ 8637, 8638, 8639, 8640, 8641, 8643, 8644, 8645, 8646, 8647, 8648, 8651, 8652,
+ 8653, 8654, 8655, 8656, 8657, 8658, 8663, 8664, 8665, 8666, 8669, 8670, 8671,
+ 8672, 8673, 8674, 8675, 8676, 8678, 8679, 8680, 8681, 8682, 8683, 8687, 8688,
+ 8689, 8691, 8692, 8693, 8694, 8696, 8697, 8698, 8699, 8700, 8701, 8702, 8703,
+ 8704, 8705, 8706, 8707, 8708, 8709, 8710, 8711, 8712, 8713, 8714, 8715, 8716,
+ 8717, 8718, 8719, 8720, 8721, 8722, 8723, 8724, 8725, 8726, 8727, 8728, 8729,
+ 8730, 8732, 8733, 8734, 8735, 8737, 8738, 8739, 8740, 8742, 8743, 8744, 8745,
+ 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756, 8757, 8758,
+ 8759, 8760, 8761, 8762, 8763, 8764, 8765, 8766, 8767, 8768, 8769, 8770, 8771,
+ 8772, 8774, 8775, 8776, 8777, 8778, 8779, 8780, 8781, 8782, 8783, 8784, 8785,
+ 8786, 8787, 8788, 8789, 8790, 8791, 8792, 8793, 8794, 8795, 8796, 8797, 8798,
+ 8799, 8800, 8801, 8802, 8803, 8804, 8805, 8806, 8807, 8808, 8809, 8810, 8811,
+ 8812, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8822, 8823, 8824,
+ 8825, 8826, 8827, 8828, 8829, 8830, 8831, 8832, 8833, 8834, 8835, 8836, 8837,
+ 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845, 8846, 8847, 8848, 8849, 8850,
+ 8851, 8852, 8853, 8854, 8855, 8856, 8857, 8858, 8859, 8860, 8861, 8862, 8863,
+ 8864, 8865, 8866, 8867, 8868, 8869, 8870, 8871, 8872, 8873, 8874, 8875, 8876,
+ 8877, 8878, 8879, 8880, 8881, 8882, 8883, 8884, 8885, 8886, 8887, 8888, 8889,
+ 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901, 8902,
+ 8903, 8904, 8905, 8906, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915,
+ 8916, 8917, 8918, 8919, 8920, 8921, 8922, 8923, 8924, 8926, 8928, 8930, 8932,
+ 8934, 8936, 8938, 8940, 8942, 8951, 8952, 8953, 8954, 8955, 8956, 8957, 8958,
+ 8959, 8960, 8961, 8962, 8963, 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971,
+ 8973, 8974, 8975, 8976, 8977, 8978, 8981, 8982, 8983, 8984, 8986, 8987, 8988,
+ 8989, 8990, 8991, 8997, 8998, 8999, 9000, 9001, 9002, 9003, 9004, 9005, 9006,
+ 9007, 9008, 9009, 9010, 9011, 9012, 9013, 9014, 9015, 9017, 9018, 9019, 9020,
+ 9021, 9022, 9023, 9024, 9026, 9027, 9028, 9029, 9031, 9032, 9033, 9034, 9035,
+ 9036, 9037, 9038, 9039, 9040, 9042, 9043, 9044, 9045, 9047, 9048, 9049, 9050,
+ 9052, 9053, 9054, 9055, 9056, 9060, 9061, 9062, 9063, 9064, 9065, 9066, 9067,
+ 9068, 9069, 9070, 9071, 9072, 9073, 9074, 9075, 9076, 9077, 9078, 9079, 9080,
+ 9081, 9083, 9084, 9085, 9086, 9087, 9088, 9089, 9090, 9091, 9092, 9093, 9094,
+ 9095, 9096, 9097, 9098, 9099, 9100, 9101, 9102, 9103, 9104, 9105, 9106, 9107,
+ 9108, 9109, 9110, 9111, 9112, 9113, 9114, 9115, 9116, 9117, 9118, 9119, 9120,
+ 9121, 9122, 9124, 9125, 9126, 9127, 9128, 9131, 9132, 9133, 9134, 9135, 9139,
+ 9140, 9141, 9142, 9143, 9144, 9145, 9151, 9152, 9153, 9154, 9156, 9157, 9158,
+ 9159, 9161, 9162, 9163, 9164, 9166, 9167, 9168, 9169, 9176, 9177, 9178, 9179,
+ 9180, 9181, 9183, 9184, 9185, 9186, 9188, 9189, 9190, 9191, 9193, 9194, 9195,
+ 9196, 9198, 9199, 9200, 9201, 9203, 9204, 9205, 9206, 9207, 9209, 9210, 9211,
+ 9212, 9214, 9215, 9216, 9218, 9219, 9220, 9221, 9223, 9224, 9225, 9226, 9228,
+ 9229, 9230, 9231, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242,
+ 9243, 9244, 9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255,
+ 9256, 9258, 9259, 9260, 9261, 9263, 9264, 9265, 9266, 9268, 9269, 9270, 9271,
+ 9273, 9274, 9275, 9276, 9278, 9279, 9280, 9281, 9283, 9284, 9285, 9286, 9288,
+ 9289, 9290, 9291, 9293, 9294, 9295, 9296, 9298, 9299, 9300, 9301, 9303, 9304,
+ 9305, 9306, 9308, 9309, 9310, 9311, 9313, 9314, 9315, 9316, 9317, 9318, 9319,
+ 9320, 9322, 9323, 9324, 9327, 9328, 9329, 9330, 9331, 9332, 9333, 9335, 9336,
+ 9337, 9338, 9340, 9341, 9342, 9343, 9345, 9346, 9347, 9348, 9350, 9351, 9352,
+ 9353, 9354, 9355, 9356, 9358, 9359, 9360, 9361, 9363, 9364, 9365, 9367, 9368,
+ 9369, 9370, 9372, 9373, 9374, 9376, 9377, 9378, 9379, 9381, 9382, 9383, 9384,
+ 9385, 9386, 9387, 9392, 9393, 9394, 9395, 9396, 9397, 9398, 9403, 9404, 9405,
+ 9406, 9407, 9408, 9409, 9410, 9411, 9414, 9415, 9416, 9417, 9421, 9422, 9423,
+ 9424, 9426, 9427, 9428, 9429, 9431, 9432, 9438, 9439, 9440, 9442, 9443, 9444,
+ 9445, 9446, 9447, 9448, 9449, 9451, 9452, 9453, 9454, 9456, 9457, 9458, 9459,
+ 9461, 9462, 9463, 9464, 9466, 9467, 9468, 9469, 9471, 9472, 9473, 9474, 9476,
+ 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489,
+ 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502,
+ 9503, 9504, 9505, 9506, 9507, 9508, 9510, 9511, 9512, 9513, 9514, 9515, 9516,
+ 9517, 9518, 9519, 9520, 9521, 9523, 9524, 9525, 9526, 9528, 9529, 9530, 9531,
+ 9533, 9534, 9535, 9536, 9538, 9539, 9540, 9541, 9543, 9544, 9545, 9546, 9548,
+ 9549, 9550, 9551, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9562, 9563,
+ 9564, 9565, 9567, 9568, 9569, 9570, 9572, 9573, 9574, 9575, 9577, 9578, 9579,
+ 9580, 9582, 9583, 9584, 9585, 9587, 9588, 9589, 9590, 9592, 9593, 9594, 9595,
+ 9597, 9598, 9599, 9600, 9601, 9602, 9603, 9604, 9606, 9607, 9608, 9609, 9611,
+ 9612, 9613, 9614, 9616, 9617, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9626,
+ 9627, 9628, 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639,
+ 9640, 9641, 9642, 9643, 9644, 9645, 9646, 9647, 9648, 9649, 9650, 9651, 9652,
+ 9653, 9655, 9656, 9657, 9658, 9659, 9660, 9661, 9662, 9664, 9665, 9666, 9667,
+ 9669, 9670, 9671, 9672, 9673, 9674, 9676, 9677, 9678, 9679, 9681, 9682, 9683,
+ 9684, 9686, 9687, 9688, 9689, 9690, 9691, 9693, 9694, 9695, 9696, 9697, 9698,
+ 9699, 9700, 9701, 9702, 9703, 9704, 9705, 9706, 9707, 9708, 9709, 9710, 9712,
+ 9713, 9714, 9715, 9716, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 9734, 9735,
+ 9736, 9737, 9738, 9739, 9741, 9742, 9743, 9744, 9746, 9747, 9748, 9749, 9751,
+ 9752, 9753, 9754, 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 9765,
+ 9766, 9767, 9769, 9770, 9771, 9772, 9774, 9775, 9776, 9777, 9778, 9779, 9780,
+ 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788, 9789, 9790, 9792, 9793, 9794,
+ 9795, 9796, 9797, 9798, 9799, 9800, 9801, 9802, 9803, 9804, 9805, 9806, 9808,
+ 9809, 9810, 9811, 9812, 9813, 9814, 9815, 9817, 9818, 9819, 9820, 9822, 9823,
+ 9824, 9825, 9827, 9828, 9829, 9830, 9831, 9832, 9834, 9835, 9836, 9837, 9839,
+ 9840, 9841, 9842, 9844, 9845, 9846, 9847, 9849, 9850, 9851, 9852, 9853, 9854,
+ 9855, 9856, 9857, 9858, 9859, 9860, 9866, 9867, 9868, 9869, 9870, 9871, 9874,
+ 9875, 9876, 9877, 9878, 9879, 9880, 9881, 9882, 9883, 9884, 9885, 9886, 9887,
+ 9888, 9889, 9890, 9891, 9892, 9893, 9894, 9895, 9898, 9899, 9900, 9901, 9902,
+ 9903, 9904, 9905, 9906, 9907, 9908, 9909, 9911, 9912, 9913, 9914, 9915, 9916,
+ 9917, 9918, 9919, 9920, 9921, 9922, 9923, 9924, 9925, 9926, 9927, 9928, 9929,
+ 9930, 9931, 9932, 9933, 9934, 9935, 9936, 9937, 9938, 9939, 9940, 9946, 9947,
+ 9948, 9949, 9950, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 9960, 9961, 9962,
+ 9963, 9964, 9965, 9966, 9967, 9968, 9969, 9970, 9971, 9972, 9982, 9983, 9984,
+ 9986, 9987, 9988, 9989, 9991, 9992, 9993, 9994, 9996, 9997, 9998, 9999, 10001,
+ 10002, 10003, 10004, 10006, 10007, 10008, 10009, 10011, 10012, 10013, 10014,
+ 10016, 10017, 10018, 10019, 10021, 10022, 10023, 10024, 10026, 10027, 10028,
+ 10029, 10031, 10032, 10033, 10034, 10036, 10037, 10038, 10040, 10041, 10042,
+ 10043, 10044, 10048, 10049, 10050, 10051, 10052, 10053, 10054, 10056, 10057,
+ 10058, 10059, 10061, 10062, 10063, 10064, 10065, 10066, 10067, 10068, 10070,
+ 10071, 10072, 10073, 10075, 10076, 10077, 10078, 10080, 10081, 10082, 10083,
+ 10085, 10086, 10087, 10088, 10090, 10091, 10092, 10093, 10095, 10096, 10097,
+ 10098, 10100, 10101, 10102, 10103, 10105, 10106, 10107, 10108, 10110, 10111,
+ 10112, 10113, 10115, 10116, 10117, 10118, 10120, 10121, 10122, 10123, 10125,
+ 10126, 10127, 10128, 10129, 10130, 10131, 10132, 10138, 10139, 10140, 10141,
+ 10143, 10144, 10145, 10146, 10148, 10149, 10150, 10151, 10152, 10153, 10154,
+ 10155, 10156, 10157, 10158, 10159, 10160, 10161, 10164, 10165, 10166, 10167,
+ 10169, 10170, 10171, 10172, 10173, 10174, 10176, 10177, 10178, 10179, 10181,
+ 10182, 10183, 10184, 10186, 10187, 10188, 10189, 10191, 10192, 10193, 10194,
+ 10196, 10197, 10198, 10199, 10201, 10202, 10203, 10204, 10206, 10207, 10208,
+ 10209, 10211, 10212, 10213, 10214, 10216, 10217, 10218, 10219, 10221, 10222,
+ 10223, 10224, 10226, 10227, 10228, 10229, 10231, 10232, 10233, 10234, 10236,
+ 10237, 10238, 10239, 10241, 10242, 10243, 10244, 10245, 10246, 10248, 10249,
+ 10250, 10251, 10253, 10254, 10255, 10256, 10258, 10259, 10260, 10261, 10263,
+ 10264, 10265, 10266, 10268, 10269, 10270, 10271, 10272, 10276, 10277, 10278,
+ 10279, 10280, 10281, 10282, 10283, 10285, 10286, 10287, 10288, 10289, 10290,
+ 10292, 10293, 10294, 10295, 10296, 10297, 10298, 10299, 10300, 10301, 10304,
+ 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313, 10314, 10315,
+ 10320, 10321, 10322, 10323, 10324, 10325, 10327, 10328, 10329, 10330, 10331,
+ 10332, 10334, 10335, 10336, 10337, 10339, 10340, 10341, 10342, 10343, 10344,
+ 10345, 10346, 10347, 10356, 10357, 10358, 10359, 10360, 10364, 10365, 10366,
+ 10367, 10368, 10369, 10370, 10371, 10372, 10373, 10374, 10375, 10376, 10377,
+ 10378, 10379, 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388,
+ 10389, 10391, 10392, 10393, 10394, 10396, 10397, 10398, 10399, 10400, 10401,
+ 10402, 10403, 10404, 10405, 10406, 10407, 10408, 10409, 10410, 10411, 10412,
+ 10413, 10414, 10415, 10416, 10417, 10418, 10419, 10420, 10422, 10423, 10424,
+ 10425, 10426, 10427, 10429, 10430, 10431, 10432, 10434, 10435, 10436, 10437,
+ 10439, 10440, 10441, 10442, 10444, 10445, 10446, 10447, 10449, 10450, 10451,
+ 10452, 10454, 10455, 10456, 10457, 10458, 10459, 10461, 10462, 10463, 10464,
+ 10466, 10467, 10468, 10469, 10471, 10472, 10473, 10474, 10475, 10476, 10478,
+ 10479, 10480, 10481, 10483, 10484, 10485, 10486, 10488, 10489, 10490, 10491,
+ 10493, 10494, 10495, 10496, 10497, 10498, 10499, 10512, 10513, 10514, 10515,
+ 10517, 10518, 10519, 10520, 10522, 10523, 10524, 10525, 10527, 10528, 10529,
+ 10530, 10532, 10533, 10534, 10535, 10536, 10537, 10541, 10542, 10543, 10544,
+ 10546, 10547, 10548, 10549, 10550, 10554, 10555, 10556, 10557, 10558, 10559,
+ 10560, 10561, 10562, 10563, 10565, 10566, 10567, 10568, 10569, 10570, 10571,
+ 10572, 10573, 10574, 10575, 10576, 10577, 10578, 10579, 10580, 10581, 10582,
+ 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593,
+ 10594, 10595, 10596, 10597, 10598, 10600, 10601, 10602, 10603, 10604, 10608,
+ 10609, 10610, 10611, 10612, 10613, 10615, 10616, 10617, 10618, 10620, 10621,
+ 10622, 10623, 10625, 10626, 10627, 10628, 10630, 10631, 10632, 10633, 10635,
+ 10636, 10637, 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10646,
+ 10647, 10648, 10650, 10651, 10652, 10653, 10655, 10656, 10657, 10658, 10660,
+ 10661, 10662, 10663, 10665, 10666, 10667, 10668, 10670, 10671, 10672, 10673,
+ 10675, 10676, 10677, 10678, 10680, 10681, 10682, 10683, 10685, 10686, 10687,
+ 10688, 10690, 10691, 10692, 10693, 10695, 10696, 10697, 10698, 10700, 10701,
+ 10702, 10703, 10704, 10705, 10706, 10707, 10708, 10709, 10711, 10712, 10713,
+ 10714, 10716, 10717, 10718, 10719, 10721, 10722, 10723, 10724, 10726, 10727,
+ 10728, 10729, 10731, 10732, 10733, 10734, 10736, 10737, 10738, 10739, 10741,
+ 10742, 10743, 10744, 10746, 10747, 10748, 10749, 10751, 10752, 10753, 10754,
+ 10756, 10757, 10758, 10759, 10760, 10761, 10762, 10763, 10764, 10765, 10766,
+ 10767, 10769, 10770, 10771, 10772, 10774, 10775, 10776, 10777, 10779, 10780,
+ 10781, 10782, 10784, 10785, 10786, 10787, 10789, 10790, 10791, 10792, 10794,
+ 10795, 10796, 10797, 10799, 10800, 10801, 10802, 10803, 10804, 10808, 10809,
+ 10810, 10811, 10812, 10813, 10814, 10815, 10816, 10817, 10818, 10819, 10820,
+ 10821, 10822, 10823, 10827, 10828, 10829, 10830, 10832, 10833, 10834, 10835,
+ 10836, 10837, 10839, 10840, 10841, 10842, 10844, 10845, 10846, 10847, 10849,
+ 10850, 10851, 10852, 10854, 10855, 10856, 10857, 10859, 10860, 10861, 10862,
+ 10864, 10865, 10866, 10867, 10868, 10869, 10870, 10871, 10872, 10873, 10874,
+ 10875, 10876, 10877, 10879, 10880, 10881, 10882, 10884, 10885, 10886, 10887,
+ 10888, 10889, 10891, 10892, 10893, 10894, 10896, 10897, 10898, 10899, 10901,
+ 10902, 10903, 10904, 10906, 10907, 10908, 10909, 10910, 10911, 10912, 10913,
+ 10914, 10918, 10919, 10920, 10921, 10922, 10923, 10924, 10925, 10926, 10927,
+ 10928, 10929, 10930, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 10941,
+ 10942, 10945, 10946, 10947, 10948, 10950, 10951, 10952, 10953, 10954, 10958,
+ 10959, 10960, 10961, 10962, 10963, 10964, 10965, 10966, 10967, 10968, 10969,
+ 10970, 10971, 10972, 10973, 10975, 10976, 10977, 10978, 10980, 10981, 10982,
+ 10983, 10985, 10986, 10987, 10988, 10990, 10991, 10992, 10993, 10995, 10996,
+ 10997, 10998, 10999, 11000, 11001, 11002, 11003, 11005, 11006, 11007, 11008,
+ 11010, 11011, 11012, 11013, 11015, 11016, 11017, 11018, 11020, 11021, 11022,
+ 11023, 11025, 11026, 11027, 11028, 11030, 11031, 11032, 11033, 11035, 11036,
+ 11037, 11038, 11039, 11040, 11041, 11042, 11043, 11044, 11045, 11046, 11047,
+ 11048, 11049, 11073, 11074, 11075, 11076, 11077, 11078, 11080, 11081, 11082,
+ 11083, 11085, 11086, 11087, 11088, 11090, 11091, 11092, 11093, 11095, 11096,
+ 11097, 11098, 11100, 11101, 11102, 11103, 11104, 11105, 11106, 11107, 11117,
+ 11118, 11119, 11120, 11121, 11122, 11124, 11125, 11126, 11127, 11128, 11129,
+ 11130, 11131, 11132, 11133, 11134, 11135, 11136, 11137, 11138, 11139, 11140,
+ 11141, 11142, 11143, 11144, 11145, 11146, 11147, 11149, 11150, 11151, 11152,
+ 11154, 11155, 11156, 11157, 11159, 11160, 11161, 11162, 11163, 11164, 11165,
+ 11166, 11167, 11168, 11169, 11170, 11171, 11172, 11173, 11174, 11175, 11176,
+ 11177, 11178, 11179, 11180, 11181, 11182, 11183, 11184, 11185, 11186, 11187,
+ 11219, 11220, 11221, 11222, 11223, 11224, 11225, 11226, 11227, 11228, 11230,
+ 11231, 11232, 11233, 11235, 11236, 11237, 11238, 11240, 11241, 11242, 11243,
+ 11245, 11246, 11247, 11248, 11250, 11251, 11252, 11253, 11254, 11258, 11259,
+ 11260, 11261, 11262, 11263, 11265, 11266, 11267, 11268, 11270, 11271, 11272,
+ 11273, 11275, 11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 11284,
+ 11285, 11286, 11287, 11288, 11289, 11290, 11291, 11292, 11293, 11294, 11295,
+ 11296, 11297, 11298, 11299, 11300, 11302, 11303, 11304, 11305, 11307, 11308,
+ 11309, 11310, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 11319, 11320,
+ 11321, 11322, 11323, 11324, 11325, 11326, 11327, 11328, 11329, 11330, 11331,
+ 11332, 11333, 11334, 11335, 11336, 11340, 11341, 11342, 11343, 11344, 11345,
+ 11347, 11348, 11349, 11350, 11352, 11353, 11354, 11355, 11357, 11358, 11359,
+ 11360, 11361, 11362, 11363, 11364, 11365, 11366, 11367, 11368, 11369, 11370,
+ 11371, 11372, 11373, 11374, 11375, 11376, 11377, 11378, 11379, 11380, 11382,
+ 11383, 11384, 11385, 11386, 11387, 11389, 11390, 11391, 11392, 11394, 11395,
+ 11396, 11397, 11399, 11400, 11401, 11402, 11403, 11404, 11405, 11406, 11407,
+ 11408, 11409, 11410, 11411, 11412, 11413, 11414, 11415, 11416, 11417, 11418,
+ 11419, 11420, 11421, 11422, 11423, 11424, 11426, 11427, 11428, 11429, 11431,
+ 11432, 11433, 11434, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11443,
+ 11444, 11445, 11446, 11447, 11448, 11449, 11450, 11451, 11452, 11453, 11454,
+ 11455, 11456, 11457, 11458, 11459, 11460, 11464, 11465, 11466, 11467, 11468,
+ 11469, 11471, 11472, 11473, 11474, 11476, 11477, 11478, 11479, 11481, 11482,
+ 11483, 11484, 11485, 11486, 11487, 11488, 11489, 11490, 11491, 11492, 11493,
+ 11494, 11495, 11496, 11497, 11498, 11499, 11500, 11501, 11502, 11503, 11504,
+ 11506, 11507, 11508, 11509, 11510, 11511, 11513, 11514, 11515, 11516, 11518,
+ 11519, 11520, 11521, 11523, 11524, 11525, 11526, 11527, 11528, 11529, 11530,
+ 11531, 11532, 11533, 11534, 11535, 11536, 11537, 11538, 11539, 11540, 11541,
+ 11542, 11543, 11544, 11545, 11546, 11548, 11549, 11550, 11551, 11553, 11554,
+ 11555, 11556, 11558, 11559, 11560, 11561, 11563, 11564, 11565, 11566, 11568,
+ 11569, 11570, 11571, 11573, 11574, 11575, 11576, 11578, 11579, 11580, 11581,
+ 11583, 11584, 11585, 11586, 11588, 11589, 11590, 11591, 11593, 11594, 11595,
+ 11596, 11598, 11599, 11600, 11601, 11602, 11603, 11605, 11606, 11607, 11608,
+ 11610, 11611, 11612, 11613, 11615, 11616, 11617, 11618, 11619, 11620, 11621,
+ 11622, 11623, 11624, 11625, 11626, 11627, 11628, 11629, 11630, 11631, 11632,
+ 11633, 11634, 11635, 11636, 11637, 11638, 11639, 11640, 11642, 11643, 11644,
+ 11645, 11647, 11648, 11649, 11650, 11652, 11653, 11654, 11655, 11656, 11657,
+ 11658, 11659, 11660, 11661, 11662, 11663, 11664, 11665, 11666, 11667, 11668,
+ 11669, 11670, 11671, 11672, 11673, 11674, 11675, 11676, 11677, 11683, 11684,
+ 11685, 11686, 11687, 11688, 11690, 11691, 11692, 11693, 11695, 11696, 11697,
+ 11698, 11700, 11701, 11702, 11703, 11704, 11705, 11706, 11707, 11709, 11710,
+ 11711, 11712, 11713, 11714, 11716, 11717, 11718, 11719, 11721, 11722, 11723,
+ 11724, 11726, 11727, 11728, 11729, 11730, 11731, 11732, 11733, 11734, 11735,
+ 11736, 11737, 11738, 11739, 11740, 11741, 11743, 11744, 11745, 11746, 11748,
+ 11749, 11750, 11751, 11753, 11754, 11755, 11756, 11758, 11759, 11760, 11762,
+ 11763, 11764, 11766, 11767, 11768, 11769, 11770, 11771, 11773, 11774, 11775,
+ 11776, 11778, 11779, 11780, 11781, 11783, 11784, 11785, 11786, 11787, 11788,
+ 11789, 11790, 11791, 11792, 11793, 11794, 11795, 11796, 11797, 11798, 11799,
+ 11800, 11801, 11802, 11804, 11805, 11806, 11807, 11808, 11809, 11810, 11811,
+ 11812, 11813, 11814, 11815, 11816, 11817, 11839, 11840, 11841, 11842, 11843,
+ 11844, 11845, 11847, 11849, 11850, 11851, 11852, 11854, 11855, 11856, 11857,
+ 11859, 11860, 11861, 11862, 11864, 11865, 11866, 11867, 11868, 11869, 11870,
+ 11871, 11872, 11873, 11874, 11875, 11876, 11877, 11878, 11879, 11880, 11881,
+ 11883, 11884, 11885, 11886, 11888, 11889, 11890, 11891, 11892, 11893, 11894,
+ 11895, 11896, 11897, 11898, 11899, 11900, 11901, 11902, 11903, 11904, 11905,
+ 11907, 11908, 11909, 11910, 11912, 11913, 11914, 11915, 11916, 11917, 11918,
+ 11919, 11920, 11921, 11923, 11924, 11925, 11926, 11927, 11928, 11936, 11937,
+ 11938, 11939, 11942, 11943, 11944, 11945, 11947, 11948, 11949, 11950, 11951,
+ 11952, 11953, 11955, 11956, 11957, 11958, 11960, 11961, 11962, 11963, 11965,
+ 11966, 11967, 11968, 11969, 11970, 11971, 11972, 11974, 11975, 11976, 11977,
+ 11979, 11980, 11981, 11982, 11984, 11985, 11986, 11987, 11989, 11990, 11991,
+ 11992, 11994, 11995, 11996, 11997, 11999, 12000, 12001, 12002, 12003, 12004,
+ 12005, 12006, 12008, 12009, 12010, 12011, 12013, 12014, 12015, 12016, 12018,
+ 12019, 12020, 12021, 12023, 12024, 12025, 12026, 12028, 12029, 12030, 12031,
+ 12033, 12034, 12035, 12036, 12037, 12038, 12039, 12040, 12042, 12043, 12044,
+ 12045, 12047, 12048, 12049, 12050, 12052, 12053, 12054, 12055, 12057, 12058,
+ 12059, 12060, 12061, 12062, 12063, 12064, 12066, 12067, 12068, 12069, 12071,
+ 12072, 12073, 12074, 12076, 12077, 12078, 12079, 12081, 12082, 12083, 12084,
+ 12085, 12086, 12087, 12088, 12090, 12091, 12092, 12093, 12095, 12096, 12097,
+ 12098, 12100, 12101, 12102, 12103, 12105, 12106, 12107, 12108, 12110, 12111,
+ 12112, 12113, 12115, 12116, 12117, 12118, 12119, 12120, 12121, 12122, 12132,
+ 12133, 12134, 12135, 12136, 12137, 12138, 12139, 12140, 12141, 12142, 12143,
+ 12144, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154,
+ 12158, 12159, 12160, 12162, 12164, 12165, 12166, 12167, 12169, 12170, 12171,
+ 12172, 12174, 12175, 12176, 12177, 12178, 12182, 12183, 12184, 12185, 12186,
+ 12187, 12188, 12192, 12193, 12194, 12195, 12196, 12197, 12198, 12199, 12200,
+ 12204, 12205, 12206, 12207, 12208, 12210, 12212, 12218, 12219, 12220, 12221,
+ 12222, 12223, 12224, 12225, 12226, 12227, 12228, 12229, 12230, 12231, 12232,
+ 12233, 12234, 12235, 12236, 12237, 12238, 12239, 12240, 12241, 12242, 12243,
+ 12244, 12245, 12246, 12247, 12256, 12257, 12258, 12259, 12260, 12261, 12262,
+ 12263, 12264, 12265, 12266, 12267, 12268, 12269, 12270, 12271, 12272, 12273,
+ 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12284, 12286, 12287, 12288,
+ 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12306, 12307, 12308,
+ 12309, 12311, 12312, 12313, 12314, 12315, 12316, 12317, 12318, 12319, 12320,
+ 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12330, 12331,
+ 12332, 12333, 12334, 12341, 12342, 12343, 12344, 12345, 12346, 12347, 12348,
+ 12349, 12350, 12351, 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12364,
+ 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375,
+ 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12392,
+ 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403,
+ 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414,
+ 12415, 12416, 12417, 12418, 12419, 12420, 12426, 12427, 12428, 12429, 12430,
+ 12431, 12432, 12433, 12434, 12435, 12436, 12437, 12438, 12439, 12440, 12441,
+ 12442, 12443, 12448, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456,
+ 12457, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468,
+ 12472, 12473, 12474, 12475, 12476, 12480, 12481, 12482, 12483, 12484, 12485,
+ 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496,
+ 12500, 12501, 12502, 12503, 12504, 12505, 12507, 12508, 12509, 12510, 12511,
+ 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12525,
+ 12526, 12527, 12528, 12529, 12532, 12533, 12534, 12535, 12536, 12537, 12538,
+ 12539, 12540, 12541, 12542, 12543, 12547, 12548, 12549, 12550, 12551, 12552,
+ 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12563, 12564,
+ 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575,
+ 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 12586,
+ 12591, 12592, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601,
+ 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612,
+ 12613, 12614, 12615, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626,
+ 12627, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12640,
+ 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12652,
+ 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671,
+ 12672, 12673, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 12687, 12688,
+ 12689, 12691, 12693, 12697, 12698, 12699, 12700, 12701, 12702, 12703, 12704,
+ 12705, 12706, 12707, 12709, 12715, 12716, 12717, 12718, 12719, 12720, 12721,
+ 12722, 12723, 12724, 12725, 12726, 12727, 12728, 12729, 12730, 12731, 12739,
+ 12740, 12741, 12742, 12743, 12744, 12745, 12746, 12747, 12748, 12749, 12750,
+ 12762, 12763, 12764, 12766, 12767, 12768, 12769, 12770, 12771, 12772, 12773,
+ 12774, 12776, 12777, 12778, 12779, 12780, 12781, 12782, 12783, 12784, 12785,
+ 12786, 12787, 12788, 12789, 12790, 12794, 12795, 12796, 12797, 12798, 12799,
+ 12800, 12801, 12802, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811,
+ 12812, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823,
+ 12824, 12825, 12826, 12827, 12828, 12829, 12830, 12831, 12834, 12835, 12836,
+ 12837, 12838, 12839, 12840, 12841, 12842, 12843, 12844, 12845, 12846, 12847,
+ 12848, 12849, 12850, 12851, 12852, 12853, 12854, 12855, 12856, 12857, 12864,
+ 12865, 12866, 12867, 12868, 12869, 12870, 12871, 12872, 12873, 12874, 12875,
+ 12876, 12877, 12878, 12879, 12880, 12881, 12882, 12883, 12884, 12885, 12886,
+ 12887, 12888, 12889, 12890, 12898, 12899, 12900, 12901, 12902, 12903, 12904,
+ 12905, 12906, 12907, 12908, 12916, 12917, 12918, 12919, 12920, 12921, 12922,
+ 12923, 12924, 12925, 12926, 12927, 12928, 12929, 12930, 12931, 12932, 12933,
+ 12934, 12935, 12936, 12937, 12938, 12939, 12946, 12947, 12948, 12949, 12950,
+ 12951, 12952, 12953, 12954, 12955, 12956, 12957, 12958, 12959, 12960, 12961,
+ 12962, 12963, 12964, 12965, 12966, 12972, 12973, 12974, 12975, 12976, 12977,
+ 12978, 12979, 12980, 12981, 12982, 12983, 12984, 12985, 12986, 12987, 12988,
+ 12989, 12994, 12995, 12996, 12997, 12998, 12999, 13000, 13001, 13002, 13003,
+ 13004, 13005, 13006, 13007, 13008, 13012, 13013, 13014, 13015, 13016, 13017,
+ 13018, 13022, 13023, 13024, 13025, 13026, 13027, 13028, 13029, 13030, 13031,
+ 13032, 13033, 13034, 13035, 13036, 13037, 13038, 13039, 13040, 13041, 13042,
+ 13046, 13047, 13048, 13049, 13050, 13052, 13053, 13054, 13055, 13056, 13057,
+ 13058, 13059, 13060, 13061, 13062, 13063, 13066, 13067, 13068, 13069, 13070,
+ 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13082,
+ 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093,
+ 13094, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107,
+ 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118,
+ 13119, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131,
+ 13132, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13148,
+ 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159,
+ 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170,
+ 13171, 13172, 13173, 13174, 13176, 13177, 13178, 13179, 13180, 13181, 13182,
+ 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13194, 13195,
+ 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206,
+ 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217,
+ 13218, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229,
+ 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240,
+ 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251,
+ 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262,
+ 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13276,
+ 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13286, 13287, 13288,
+ 13289, 13290, 13291, 13292, 13293, 13294, 13300, 13301, 13302, 13303, 13305,
+ 13306, 13307, 13308, 13310, 13311, 13312, 13313, 13315, 13316, 13317, 13318,
+ 13320, 13321, 13322, 13323, 13324, 13325, 13337, 13338, 13339, 13340, 13342,
+ 13343, 13344, 13345, 13346, 13347, 13348, 13349, 13350, 13351, 13353, 13354,
+ 13355, 13356, 13358, 13359, 13360, 13361, 13363, 13364, 13365, 13366, 13367,
+ 13368, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376, 13377, 13378,
+ 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387, 13388, 13389,
+ 13390, 13391, 13392, 13394, 13395, 13396, 13397, 13399, 13400, 13401, 13402,
+ 13404, 13405, 13406, 13407, 13409, 13410, 13411, 13412, 13414, 13415, 13416,
+ 13417, 13418, 13419, 13420, 13421, 13422, 13423, 13424, 13425, 13426, 13427,
+ 13428, 13429, 13430, 13431, 13432, 13433, 13434, 13435, 13436, 13437, 13439,
+ 13440, 13441, 13442, 13444, 13445, 13446, 13447, 13449, 13450, 13451, 13452,
+ 13454, 13455, 13456, 13457, 13459, 13460, 13461, 13462, 13464, 13465, 13466,
+ 13467, 13469, 13470, 13471, 13472, 13475, 13476, 13477, 13478, 13479, 13480,
+ 13481, 13482, 13483, 13484, 13486, 13487, 13488, 13489, 13491, 13492, 13493,
+ 13494, 13496, 13497, 13498, 13499, 13501, 13502, 13503, 13504, 13506, 13507,
+ 13508, 13509, 13510, 13511, 13512, 13513, 13515, 13516, 13517, 13518, 13520,
+ 13521, 13522, 13523, 13525, 13526, 13527, 13528, 13530, 13531, 13532, 13533,
+ 13535, 13536, 13537, 13538, 13540, 13541, 13542, 13543, 13545, 13546, 13547,
+ 13548, 13549, 13550, 13551, 13553, 13555, 13564, 13565, 13566, 13567, 13568,
+ 13569, 13570, 13571, 13572, 13573, 13574, 13575, 13576, 13577, 13578, 13579,
+ 13580, 13581, 13582, 13583, 13584, 13585, 13586, 13587, 13588, 13589, 13590,
+ 13591, 13592, 13593, 13594, 13595, 13596, 13597, 13602, 13603, 13604, 13605,
+ 13608, 13609, 13610, 13611, 13612, 13613, 13614, 13615, 13617, 13618, 13619,
+ 13620, 13621, 13622, 13626, 13627, 13628, 13629, 13630, 13631, 13633, 13634,
+ 13635, 13636, 13637, 13638, 13639, 13640, 13641, 13642, 13643, 13644, 13645,
+ 13646, 13647, 13648, 13649, 13650, 13651, 13652, 13653, 13654, 13655, 13656,
+ 13657, 13658, 13659, 13660, 13661, 13662, 13663, 13664, 13665, 13666, 13668,
+ 13669, 13670, 13671, 13673, 13674, 13675, 13676, 13678, 13679, 13680, 13681,
+ 13682, 13683, 13684, 13685, 13686, 13687, 13688, 13689, 13690, 13691, 13692,
+ 13693, 13694, 13695, 13696, 13697, 13698, 13699, 13700, 13701, 13702, 13703,
+ 13704, 13705, 13706, 13707, 13709, 13710, 13711, 13712, 13713, 13714, 13715,
+ 13716, 13717, 13718, 13719, 13720, 13721, 13722, 13723, 13724, 13725, 13726,
+ 13727, 13728, 13729, 13730, 13731, 13732, 13733, 13734, 13735, 13736, 13737,
+ 13738, 13739, 13740, 13741, 13742, 13743, 13744, 13745, 13746, 13747, 13748,
+ 13749, 13750, 13751, 13752, 13753, 13754, 13755, 13756, 13757, 13758, 13759,
+ 13760, 13761, 13762, 13763, 13764, 13765, 13766, 13767, 13768, 13769, 13770,
+ 13771, 13772, 13773, 13774, 13775, 13776, 13777, 13778, 13779, 13780, 13781,
+ 13782, 13783, 13784, 13785, 13786, 13787, 13788, 13789, 13790, 13791, 13792,
+ 13793, 13794, 13795, 13796, 13797, 13798, 13799, 13800, 13801, 13802, 13803,
+ 13804, 13805, 13806, 13807, 13808, 13809, 13810, 13811, 13812, 13813, 13814,
+ 13815, 13816, 13817, 13818, 13819, 13820, 13821, 13822, 13823, 13824, 13825,
+ 13826, 13827, 13828, 13829, 13830, 13831, 13832, 13833, 13834, 13835, 13836,
+ 13837, 13838, 13839, 13840, 13841, 13842, 13843, 13844, 13845, 13846, 13847,
+ 13848, 13849, 13850, 13851, 13852, 13854, 13856, 13858, 13860, 13862, 13864,
+ 13866, 13868, 13870, 13879, 13880, 13881, 13882, 13883, 13884, 13885, 13886,
+ 13887, 13888, 13889, 13890, 13891, 13892, 13893, 13894, 13895, 13896, 13897,
+ 13898, 13899, 13901, 13902, 13903, 13904, 13905, 13906, 13909, 13910, 13911,
+ 13912, 13914, 13915, 13916, 13917, 13918, 13919, 13925, 13926, 13927, 13928,
+ 13929, 13930, 13931, 13932, 13933, 13934, 13935, 13936, 13937, 13938, 13939,
+ 13940, 13941, 13942, 13944, 13945, 13946, 13947, 13948, 13949, 13950, 13951,
+ 13953, 13954, 13955, 13956, 13958, 13959, 13960, 13961, 13962, 13963, 13964,
+ 13965, 13966, 13967, 13968, 13969, 13970, 13972, 13973, 13974, 13975, 13977,
+ 13978, 13979, 13980, 13981, 13985, 13986, 13987, 13988, 13989, 13990, 13991,
+ 13992, 13993, 13994, 13995, 13996, 13997, 13998, 13999, 14000, 14001, 14002,
+ 14003, 14004, 14005, 14006, 14007, 14008, 14009, 14010, 14011, 14012, 14013,
+ 14014, 14015, 14016, 14017, 14018, 14019, 14020, 14021, 14022, 14023, 14024,
+ 14025, 14026, 14027, 14028, 14029, 14030, 14031, 14032, 14033, 14034, 14035,
+ 14036, 14037, 14038, 14039, 14040, 14041, 14042, 14043, 14044, 14046, 14047,
+ 14048, 14049, 14050, 14053, 14054, 14055, 14056, 14057, 14061, 14062, 14063,
+ 14064, 14065, 14066, 14072, 14073, 14074, 14075, 14077, 14078, 14079, 14080,
+ 14082, 14083, 14084, 14085, 14087, 14088, 14089, 14090, 14097, 14098, 14099,
+ 14100, 14101, 14102, 14103, 14104, 14105, 14107, 14108, 14109, 14110, 14112,
+ 14113, 14114, 14115, 14117, 14118, 14119, 14120, 14122, 14123, 14124, 14125,
+ 14126, 14128, 14129, 14130, 14131, 14133, 14134, 14135, 14136, 14137, 14138,
+ 14140, 14141, 14142, 14143, 14145, 14146, 14147, 14148, 14150, 14151, 14152,
+ 14153, 14154, 14155, 14156, 14157, 14158, 14159, 14160, 14161, 14162, 14163,
+ 14164, 14165, 14166, 14167, 14168, 14169, 14170, 14171, 14172, 14173, 14175,
+ 14176, 14177, 14178, 14180, 14181, 14182, 14183, 14185, 14186, 14187, 14188,
+ 14190, 14191, 14192, 14193, 14195, 14196, 14197, 14198, 14200, 14201, 14202,
+ 14203, 14205, 14206, 14207, 14208, 14210, 14211, 14212, 14213, 14215, 14216,
+ 14217, 14218, 14220, 14221, 14222, 14223, 14225, 14226, 14227, 14228, 14230,
+ 14231, 14232, 14233, 14234, 14235, 14236, 14237, 14239, 14240, 14241, 14244,
+ 14245, 14246, 14247, 14248, 14249, 14250, 14252, 14253, 14254, 14255, 14257,
+ 14258, 14259, 14260, 14262, 14263, 14264, 14265, 14267, 14268, 14269, 14270,
+ 14271, 14272, 14273, 14275, 14276, 14277, 14278, 14280, 14281, 14282, 14284,
+ 14285, 14286, 14287, 14289, 14290, 14291, 14293, 14294, 14295, 14296, 14298,
+ 14299, 14300, 14301, 14302, 14303, 14304, 14309, 14310, 14311, 14312, 14313,
+ 14314, 14315, 14320, 14321, 14322, 14323, 14324, 14325, 14326, 14327, 14328,
+ 14331, 14332, 14333, 14334, 14338, 14339, 14340, 14341, 14343, 14344, 14345,
+ 14346, 14348, 14349, 14355, 14356, 14357, 14359, 14360, 14361, 14362, 14363,
+ 14364, 14365, 14366, 14368, 14369, 14370, 14371, 14373, 14374, 14375, 14376,
+ 14378, 14379, 14380, 14381, 14383, 14384, 14385, 14386, 14388, 14389, 14390,
+ 14391, 14393, 14394, 14395, 14396, 14397, 14398, 14399, 14400, 14401, 14402,
+ 14403, 14404, 14405, 14406, 14407, 14408, 14409, 14410, 14411, 14412, 14413,
+ 14452, 14491, 14493, 14495, 14497, 14499, 14501, 14503, 14505, 14507, 14508,
+ 14510, 14512, 14514, 14516, 14518, 14520, 14522, 14524, 14525, 14527, 14529,
+ 14531, 14532, 14533, 14534, 14535, 14536, 14537, 14539, 14540, 14542, 14544,
+ 14546, 14547, 14548, 14549, 14551, 14553, 14557, 14559, 14561, 14563, 14565,
+ 14567, 14569, 14571, 14572, 14573, 14575, 14576, 14577, 14578, 14579, 14581,
+ 14583, 14584, 14586, 14588, 14590, 14592, 14594, 14595, 14598, 14604, 14605,
+ 14606, 14608, 14609, 14612, 14613, 14616, 14622, 14624, 14626, 14628, 14630,
+ 14632, 14634, 14636, 14638, 14640, 14642, 14644, 14646, 14647, 14649, 14651,
+ 14653, 14655, 14657, 14659, 14661, 14663, 14665, 14667, 14669, 14671, 14673,
+ 14679, 14681, 14682, 14683, 14686, 14688, 14690, 14692, 14694, 14696, 14698,
+ 14700, 14702, 14704, 14706, 14708, 14710, 14712, 14714, 14716, 14718, 14720,
+ 14722, 14724, 14725, 14726, 14728, 14730, 14732, 14734, 14739, 14740, 14743,
+ 14744, 14753, 14755, 14756, 14757, 14758, 14759, 14760, 14762, 14764, 14765,
+ 14766, 14767, 14769, 14771, 14773, 14775, 14777, 14779, 14781, 14783, 14785,
+ 14787, 14789, 14791, 14793, 14795, 14808, 14810, 14812, 14814, 14816, 14817,
+ 14818, 14822, 14824, 14828, 14829, 14830, 14831, 14832, 14833, 14834, 14835,
+ 14836, 14838, 14840, 14842, 14844, 14846, 14848, 14850, 14851, 14853, 14855,
+ 14857, 14859, 14861, 14863, 14865, 14867, 14869, 14871, 14873, 14875, 14877,
+ 14879, 14881, 14883, 14885, 14887, 14889, 14891, 14893, 14894, 14895, 14897,
+ 14899, 14901, 14903, 14905, 14907, 14909, 14910, 14911, 14912, 14913, 14917,
+ 14918, 14922, 14924, 14926, 14928, 14930, 14932, 14933, 14934, 14936, 14938,
+ 14940, 14942, 14946, 14950, 14951, 14952, 14955, 14957, 14959, 14960, 14962,
+ 14964, 14966, 14968, 14970, 14971, 14972, 14974, 14976, 14978, 14980, 14982,
+ 14984, 14986, 14990, 14992, 14994, 14996, 15000, 15004, 15008, 15010, 15012,
+ 15014, 15018, 15020, 15022, 15024, 15026, 15028, 15052, 15062, 15064, 15066,
+ 15068, 15070, 15072, 15074, 15106, 15108, 15110, 15112, 15114, 15116, 15117,
+ 15119, 15121, 15123, 15124, 15125, 15126, 15127, 15129, 15131, 15133, 15134,
+ 15135, 15136, 15137, 15138, 15139, 15141, 15143, 15145, 15146, 15147, 15148,
+ 15149, 15150, 15152, 15154, 15156, 15157, 15158, 15159, 15160, 15162, 15164,
+ 15166, 15167, 15168, 15169, 15170, 15171, 15172, 15174, 15176, 15178, 15179,
+ 15180, 15181, 15182, 15183, 15185, 15187, 15189, 15190, 15191, 15192, 15193,
+ 15194, 15196, 15198, 15200, 15202, 15204, 15206, 15208, 15210, 15212, 15214,
+ 15216, 15218, 15220, 15221, 15222, 15223, 15224, 15226, 15228, 15230, 15231,
+ 15232, 15233, 15234, 15235, 15236, 15238, 15240, 15242, 15244, 15245, 15247,
+ 15249, 15251, 15252, 15253, 15254, 15256, 15258, 15260, 15262, 15264, 15266,
+ 15267, 15268, 15269, 15270, 15272, 15274, 15276, 15278, 15280, 15286, 15288,
+ 15292, 15294, 15298, 15302, 15324, 15326, 15328, 15330, 15332, 15333, 15334,
+ 15335, 15337, 15338, 15339, 15340, 15342, 15344, 15352, 15355, 15356, 15358,
+ 15360, 15362, 15363, 15365, 15367, 15369, 15371, 15373, 15375, 15376, 15378,
+ 15380, 15382, 15384, 15386, 15388, 15389, 15391, 15393, 15395, 15397, 15398,
+ 15400, 15402, 15404, 15406, 15407, 15409, 15411, 15413, 15415, 15417, 15419,
+ 15421, 15423, 15425, 15427, 15428, 15429, 15430, 15431, 15432, 15434, 15436,
+ 15438, 15440, 15444, 15446, 15448, 15450, 15452, 15453, 15456, 15461, 15462,
+ 15463, 15472, 15474, 15477, 15480, 15486, 15495, 15496, 15498, 15501, 15502,
+ 15503, 15504, 15505, 15511, 15516, 15522, 15529, 15530, 15531, 15535, 15537,
+ 15538, 15539, 15543, 15545, 15546, 15547, 15548, 15550, 15551, 15555, 15556,
+ 15560, 15561, 15562, 15564, 15573, 15575, 15577, 15581, 15587, 15591, 15599,
+ 15606, 15609, 15611, 15616, 15619, 15623, 15627, 15632, 15640, 15647, 15650,
+ 15651, 15653, 15655, 15659, 15661, 15665, 15670, 15676, 15683, 15687, 15688,
+ 15689, 15691, 15692, 15695, 15696, 15697, 15700, 15702, 15703, 15707, 15709,
+ 15713, 15721, 15722, 15723, 15724, 15725, 15726, 15728, 15729, 15730, 15731,
+ 15732, 15733, 15734, 15735, 15736, 15737, 15738, 15742, 15743, 15744, 15746,
+ 15747, 15748, 15750, 15753, 15759, 15765, 15767, 15769, 15771, 15773, 15775,
+ 15787, 15799, 15800, 15802, 15804, 15806, 15807, 15808, 15809, 15810, 15811,
+ 15813, 15815, 15817, 15819, 15821, 15822, 15823, 15824, 15825, 15826, 15828,
+ 15830, 15832, 15834, 15836, 15838, 15840, 15841, 15843, 15845, 15847, 15849,
+ 15851, 15852, 15854, 15856, 15858, 15860, 15862, 15864, 15866, 15868, 15872,
+ 15881, 15882, 15883, 15884, 15889, 15892, 15893, 15895, 15896, 15897, 15899,
+ 15900, 15901, 15902, 15903, 15904, 15905, 15907, 15909, 15911, 15912, 15913,
+ 15914, 15915, 15916, 15917, 15918, 15919, 15920, 15921, 15922, 15923, 15924,
+ 15925, 15926, 15927, 15928, 15929, 15930, 15931, 15932, 15933, 15934, 15935,
+ 15936, 15937, 15938, 15939, 15940, 15942, 15944, 15946, 15948, 15950, 15952,
+ 15954, 15956, 15959, 15968, 15969, 15970, 15971, 15972, 15973, 15975, 15976,
+ 15980, 15983, 15985, 15987, 15989, 15990, 15992, 15994, 15996, 15998, 16000,
+ 16001, 16003, 16005, 16007, 16009, 16010, 16011, 16012, 16014, 16015, 16017,
+ 16018, 16020, 16022, 16023, 16024, 16025, 16026, 16027, 16028, 16029, 16030,
+ 16031, 16032, 16033, 16034, 16035, 16037, 16038, 16041, 16045, 16051, 16053,
+ 16055, 16057, 16059, 16061, 16063, 16065, 16066, 16068, 16070, 16072, 16074,
+ 16075, 16076, 16077, 16078, 16079, 16081, 16083, 16085, 16087, 16089, 16091,
+ 16093, 16095, 16097, 16099, 16101, 16103, 16104, 16105, 16106, 16107, 16108,
+ 16111, 16112, 16115, 16116, 16118, 16120, 16122, 16123, 16125, 16127, 16129,
+ 16131, 16136, 16141, 16142, 16143, 16146, 16150, 16152, 16154, 16156, 16158,
+ 16159, 16161, 16163, 16165, 16167, 16169, 16171, 16173, 16175, 16177, 16179,
+ 16181, 16183, 16185, 16186, 16188, 16190, 16192, 16194, 16196, 16198, 16200,
+ 16202, 16203, 16205, 16207, 16208, 16209, 16211, 16212, 16213, 16214, 16215,
+ 16216, 16217, 16220, 16221, 16224, 16226, 16228, 16230, 16232, 16234, 16236,
+ 16238, 16240, 16241, 16243, 16245, 16247, 16249, 16251, 16253, 16255, 16257,
+ 16258, 16260, 16262, 16264, 16266, 16268, 16270, 16272, 16274, 16277, 16278,
+ 16279, 16280, 16281, 16284, 16287, 16293, 16295, 16297, 16299, 16302, 16304,
+ 16306, 16308, 16310, 16312, 16314, 16316, 16318, 16319, 16321, 16322, 16323,
+ 16326, 16327, 16328, 16329, 16337, 16342, 16344, 16345, 16349, 16350, 16352,
+ 16353, 16354, 16355, 16361, 16363, 16365, 16367, 16369, 16371, 16373, 16375,
+ 16377, 16379, 16381, 16383, 16385, 16387, 16389, 16391, 16393, 16395, 16397,
+ 16399, 16400, 16402, 16404, 16406, 16408, 16410, 16412, 16414, 16416, 16418,
+ 16420, 16422, 16424, 16426, 16428, 16430, 16432, 16438, 16440, 16441, 16442,
+ 16443, 16446, 16448, 16450, 16452, 16454, 16456, 16458, 16460, 16462, 16464,
+ 16466, 16468, 16470, 16472, 16474, 16476, 16477, 16478, 16479, 16481, 16483,
+ 16484, 16485, 16486, 16487, 16497, 16498, 16499, 16501, 16502, 16503, 16505,
+ 16508, 16511, 16512, 16514, 16522, 16525, 16526, 16528, 16530, 16535, 16536,
+ 16537, 16540, 16541, 16544, 16546, 16555, 16557, 16559, 16561, 16563, 16565,
+ 16567, 16569, 16571, 16573, 16575, 16577, 16579, 16581, 16583, 16596, 16598,
+ 16600, 16602, 16603, 16604, 16605, 16606, 16607, 16608, 16610, 16612, 16614,
+ 16615, 16616, 16617, 16618, 16619, 16621, 16625, 16627, 16631, 16633, 16634,
+ 16635, 16636, 16637, 16638, 16639, 16640, 16641, 16642, 16644, 16646, 16647,
+ 16648, 16650, 16652, 16654, 16656, 16658, 16660, 16661, 16662, 16663, 16665,
+ 16667, 16669, 16671, 16673, 16675, 16677, 16679, 16681, 16683, 16685, 16687,
+ 16689, 16691, 16693, 16695, 16697, 16699, 16701, 16703, 16705, 16707, 16709,
+ 16711, 16713, 16715, 16717, 16719, 16721, 16722, 16723, 16725, 16729, 16730,
+ 16731, 16735, 16737, 16739, 16741, 16743, 16745, 16747, 16748, 16749, 16750,
+ 16752, 16754, 16756, 16758, 16760, 16762, 16764, 16768, 16770, 16772, 16776,
+ 16777, 16778, 16781, 16783, 16785, 16794, 16795, 16797, 16799, 16801, 16803,
+ 16805, 16807, 16808, 16809, 16811, 16813, 16815, 16817, 16819, 16821, 16823,
+ 16827, 16829, 16831, 16833, 16837, 16841, 16845, 16847, 16849, 16851, 16855,
+ 16857, 16859, 16861, 16863, 16865, 16867, 16891, 16899, 16901, 16903, 16905,
+ 16907, 16909, 16911, 16913, 16915, 16917, 16919, 16921, 16923, 16927, 16929,
+ 16933, 16937, 16939, 16943, 16945, 16947, 16977, 16978, 16980, 16982, 16984,
+ 16986, 16987, 16988, 16989, 16990, 16992, 16994, 16996, 16998, 16999, 17000,
+ 17001, 17002, 17003, 17004, 17006, 17008, 17010, 17012, 17013, 17014, 17015,
+ 17016, 17017, 17019, 17021, 17023, 17025, 17026, 17027, 17028, 17029, 17031,
+ 17033, 17035, 17037, 17038, 17039, 17040, 17041, 17042, 17043, 17045, 17047,
+ 17049, 17051, 17052, 17053, 17054, 17055, 17056, 17058, 17060, 17062, 17064,
+ 17065, 17066, 17067, 17068, 17069, 17071, 17073, 17075, 17077, 17079, 17081,
+ 17083, 17085, 17087, 17089, 17091, 17093, 17095, 17097, 17098, 17099, 17100,
+ 17101, 17103, 17105, 17107, 17109, 17110, 17111, 17112, 17113, 17114, 17115,
+ 17117, 17119, 17121, 17123, 17125, 17127, 17129, 17132, 17133, 17135, 17137,
+ 17139, 17141, 17142, 17143, 17144, 17146, 17148, 17150, 17152, 17154, 17156,
+ 17157, 17158, 17159, 17161, 17163, 17165, 17167, 17169, 17171, 17173, 17175,
+ 17177, 17179, 17181, 17183, 17185, 17189, 17191, 17195, 17199, 17201, 17205,
+ 17207, 17209, 17214, 17217, 17251, 17253, 17255, 17257, 17259, 17261, 17263,
+ 17265, 17267, 17269, 17271, 17273, 17275, 17276, 17278, 17280, 17282, 17284,
+ 17285, 17286, 17287, 17288, 17290, 17292, 17294, 17296, 17297, 17298, 17299,
+ 17300, 17301, 17302, 17304, 17306, 17308, 17310, 17311, 17312, 17313, 17314,
+ 17315, 17317, 17319, 17321, 17323, 17324, 17325, 17326, 17327, 17329, 17331,
+ 17333, 17335, 17336, 17337, 17338, 17339, 17340, 17341, 17343, 17345, 17347,
+ 17349, 17350, 17351, 17352, 17353, 17354, 17356, 17358, 17360, 17362, 17363,
+ 17364, 17365, 17366, 17367, 17369, 17371, 17373, 17375, 17377, 17379, 17381,
+ 17383, 17385, 17387, 17389, 17391, 17393, 17395, 17396, 17397, 17398, 17399,
+ 17401, 17403, 17405, 17407, 17408, 17409, 17410, 17411, 17412, 17413, 17415,
+ 17417, 17419, 17421, 17423, 17424, 17425, 17426, 17427, 17429, 17431, 17433,
+ 17435, 17436, 17437, 17438, 17439, 17441, 17443, 17445, 17447, 17449, 17455,
+ 17457, 17461, 17463, 17467, 17473, 17475, 17478, 17481, 17487, 17489, 17493,
+ 17495, 17499, 17501, 17534, 17536, 17539, 17542, 17545, 17547, 17548, 17549,
+ 17550, 17553, 17554, 17555, 17556, 17557, 17560, 17561, 17564, 17567, 17570,
+ 17573, 17576, 17588, 17592, 17594, 17596, 17598, 17600, 17602, 17604, 17606,
+ 17608, 17609, 17611, 17613, 17615, 17616, 17618, 17620, 17622, 17624, 17626,
+ 17628, 17629, 17631, 17633, 17635, 17637, 17639, 17641, 17642, 17644, 17646,
+ 17648, 17650, 17651, 17653, 17655, 17657, 17659, 17660, 17662, 17664, 17666,
+ 17668, 17670, 17671, 17673, 17675, 17677, 17678, 17680, 17682, 17684, 17686,
+ 17688, 17690, 17691, 17693, 17695, 17697, 17699, 17701, 17703, 17704, 17706,
+ 17708, 17710, 17712, 17713, 17715, 17717, 17719, 17721, 17722, 17724, 17726,
+ 17728, 17730, 17732, 17734, 17736, 17739, 17742, 17745, 17748, 17752, 17753,
+ 17756, 17761, 17771, 17775, 17779, 17789, 17799, 17806, 17808, 17812, 17817,
+ 17820, 17830, 17831, 17832, 17841, 17843, 17846, 17849, 17855, 17864, 17865,
+ 17867, 17869, 17871, 17872, 17878, 17881, 17891, 17893, 17895, 17901, 17905,
+ 17908, 17911, 17912, 17916, 17919, 17928, 17930, 17933, 17935, 17936, 17938,
+ 17943, 17945, 17947, 17948, 17949, 17950, 17951, 17952, 17958, 17963, 17969,
+ 17976, 17977, 17978, 17979, 17980, 17984, 17986, 17987, 17988, 17989, 17991,
+ 17992, 17993, 17995, 17998, 17999, 18003, 18005, 18010, 18011, 18012, 18013,
+ 18015, 18019, 18020, 18021, 18022, 18023, 18024, 18026, 18027, 18031, 18032,
+ 18033, 18034, 18035, 18036, 18037, 18041, 18042, 18043, 18044, 18045, 18047,
+ 18050, 18055, 18064, 18070, 18075, 18077, 18078, 18080, 18082, 18086, 18087,
+ 18089, 18095, 18101, 18110, 18118, 18124, 18128, 18136, 18143, 18146, 18148,
+ 18153, 18156, 18160, 18164, 18169, 18179, 18180, 18183, 18184, 18186, 18187,
+ 18190, 18195, 18198, 18199, 18201, 18203, 18204, 18206, 18208, 18210, 18212,
+ 18214, 18216, 18218, 18223, 18225, 18227, 18229, 18230, 18231, 18233, 18235,
+ 18237, 18239, 18241, 18242, 18243, 18245, 18247, 18249, 18250, 18253, 18256,
+ 18258, 18260, 18262, 18263, 18265, 18274, 18275, 18276, 18279, 18282, 18288,
+ 18291, 18292, 18298, 18300, 18302, 18304, 18306, 18308, 18310, 18312, 18314,
+ 18316, 18318, 18320, 18322, 18324, 18326, 18328, 18330, 18332, 18334, 18335,
+ 18337, 18339, 18341, 18343, 18345, 18347, 18349, 18351, 18357, 18359, 18362,
+ 18364, 18366, 18368, 18370, 18372, 18374, 18376, 18378, 18380, 18382, 18384,
+ 18386, 18388, 18390, 18392, 18394, 18396, 18398, 18400, 18402, 18404, 18406,
+ 18408, 18417, 18419, 18421, 18423, 18425, 18427, 18429, 18431, 18433, 18435,
+ 18437, 18439, 18441, 18443, 18445, 18447, 18449, 18451, 18453, 18466, 18468,
+ 18470, 18472, 18474, 18476, 18477, 18479, 18483, 18485, 18489, 18491, 18492,
+ 18494, 18496, 18498, 18500, 18502, 18504, 18506, 18508, 18509, 18511, 18513,
+ 18515, 18517, 18519, 18521, 18523, 18525, 18527, 18529, 18531, 18533, 18535,
+ 18537, 18539, 18541, 18543, 18545, 18547, 18549, 18551, 18553, 18555, 18557,
+ 18559, 18561, 18563, 18565, 18567, 18568, 18569, 18571, 18575, 18576, 18580,
+ 18582, 18584, 18586, 18588, 18590, 18592, 18594, 18596, 18598, 18600, 18602,
+ 18604, 18606, 18610, 18612, 18614, 18618, 18619, 18620, 18623, 18625, 18627,
+ 18629, 18631, 18633, 18635, 18637, 18638, 18640, 18642, 18644, 18646, 18648,
+ 18650, 18652, 18656, 18658, 18660, 18662, 18666, 18670, 18674, 18676, 18678,
+ 18680, 18684, 18686, 18688, 18690, 18692, 18694, 18696, 18720, 18722, 18732,
+ 18735, 18736, 18737, 18738, 18739, 18740, 18742, 18744, 18746, 18751, 18752,
+ 18755, 18756, 18757, 18759, 18762, 18765, 18766, 18767, 18769, 18770, 18773,
+ 18774, 18775, 18776, 18777, 18780, 18781, 18786, 18795, 18801, 18806, 18808,
+ 18809, 18811, 18817, 18823, 18832, 18840, 18846, 18849, 18857, 18864, 18867,
+ 18868, 18870, 18872, 18876, 18878, 18880, 18882, 18883, 18889, 18892, 18902,
+ 18904, 18906, 18912, 18922, 18926, 18929, 18932, 18936, 18938, 18947, 18949,
+ 18952, 18954, 18959, 18961, 18963, 18967, 18972, 18978, 18985, 18986, 18987,
+ 18989, 18992, 18993, 18997, 18998, 19003, 19004, 19005, 19006, 19008, 19012,
+ 19013, 19014, 19016, 19017, 19020, 19021, 19022, 19023, 19024, 19025, 19028,
+ 19029, 19032, 19034, 19035, 19039, 19041, 19045, 19053, 19054, 19055, 19057,
+ 19058, 19059, 19060, 19061, 19062, 19063, 19065, 19066, 19067, 19068, 19069,
+ 19070, 19071, 19072, 19073, 19074, 19075, 19076, 19077, 19078, 19079, 19080,
+ 19081, 19082, 19083, 19084, 19088, 19089, 19090, 19092, 19093, 19094, 19096,
+ 19099, 19105, 19111, 19114, 19117, 19120, 19122, 19125, 19138, 19151, 19153,
+ 19154, 19155, 19158, 19161, 19164, 19165, 19166, 19167, 19168, 19169, 19170,
+ 19172, 19174, 19176, 19178, 19180, 19181, 19182, 19183, 19184, 19185, 19187,
+ 19189, 19191, 19193, 19195, 19197, 19199, 19201, 19203, 19204, 19205, 19206,
+ 19207, 19208, 19210, 19212, 19214, 19216, 19218, 19220, 19223, 19226, 19227,
+ 19228, 19230, 19232, 19234, 19236, 19238, 19239, 19241, 19243, 19245, 19247,
+ 19249, 19251, 19253, 19255, 19257, 19258, 19260, 19262, 19264, 19266, 19268,
+ 19270, 19273, 19276, 19278, 19282, 19291, 19292, 19293, 19294, 19295, 19296,
+ 19298, 19299, 19300, 19301, 19302, 19303, 19305, 19307, 19309, 19311, 19314,
+ 19315, 19316, 19317, 19318, 19319, 19320, 19321, 19322, 19323, 19324, 19325,
+ 19326, 19327, 19328, 19329, 19330, 19331, 19332, 19333, 19334, 19335, 19336,
+ 19337, 19338, 19339, 19340, 19341, 19342, 19343, 19344, 19345, 19346, 19347,
+ 19348, 19349, 19350, 19351, 19353, 19355, 19357, 19359, 19361, 19363, 19365,
+ 19367, 19370, 19379, 19380, 19381, 19382, 19383, 19384, 19387, 19390, 19391,
+ 19392, 19393, 19395, 19399, 19402, 19405, 19407, 19410, 19413, 19414, 19416,
+ 19418, 19420, 19421, 19422, 19423, 19424, 19425, 19427, 19428, 19429, 19430,
+ 19431, 19432, 19433, 19434, 19435, 19436, 19439, 19440, 19444, 19449, 19450,
+ 19451, 19453, 19455, 19461, 19463, 19465, 19467, 19469, 19471, 19473, 19475,
+ 19477, 19479, 19481, 19484, 19485, 19488, 19490, 19492, 19494, 19496, 19498,
+ 19499, 19500, 19501, 19502, 19503, 19505, 19507, 19509, 19511, 19513, 19515,
+ 19517, 19519, 19521, 19523, 19525, 19527, 19529, 19530, 19531, 19532, 19533,
+ 19534, 19536, 19538, 19540, 19542, 19544, 19546, 19548, 19550, 19552, 19554,
+ 19556, 19559, 19562, 19563, 19564, 19566, 19568, 19569, 19571, 19573, 19575,
+ 19577, 19578, 19581, 19583, 19586, 19589, 19592, 19595, 19598, 19604, 19611,
+ 19614, 19617, 19623, 19630, 19631, 19632, 19635, 19639, 19642, 19644, 19647,
+ 19649, 19650, 19652, 19654, 19656, 19658, 19660, 19662, 19664, 19666, 19668,
+ 19670, 19677, 19678, 19679, 19680, 19681, 19682, 19683, 19684, 19685, 19686,
+ 19687, 19688, 19689, 19690, 19691, 19692, 19693, 19694, 19695, 19696, 19697,
+ 19698, 19699, 19700, 19701, 19702, 19703, 19704, 19705, 19706, 19707, 19708,
+ 19709, 19710, 19711, 19712, 19713, 19714, 19715, 19716, 19717, 19718, 19719,
+ 19720, 19721, 19722, 19723, 19724, 19725, 19726, 19727, 19728, 19729, 19730,
+ 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19738, 19739, 19740, 19741,
+ 19742, 19743, 19744, 19745, 19746, 19747, 19748, 19749, 19750, 19751, 19752,
+ 19753, 19754, 19756, 19758, 19760, 19769, 19772, 19775, 19778, 19781, 19784,
+ 19787, 19795, 19801, 19809, 19813, 19818, 19830, 19833, 19840, 19842, 19848,
+ 19863, 19871, 19883, 19885, 19891, 19893, 19895, 19901, 19903, 19905, 19912,
+ 19916, 19918, 19928, 19934, 19938, 19948, 19958, 19960, 19968, 19970, 19971,
+ 20010, 20011, 20012, 20013, 20014, 20015, 20016, 20017, 20018, 20019, 20020
+};
+
+static t_ccsid          final_array[] = {
+ 0, 62246, 368, 916, 898, 33723, 905, 870, 867, 866, 864, 863, 862, 861, 858,
+ 856, 853, 852, 851, 438, 1387, 5355, 9450, 9449, 9448, 5351, 5350, 5349,
+ 5348, 5347, 1209, 1236, 1234, 1204, 1202, 13489, 875, 944, 1052, 859, 921,
+ 915, 914, 913, 820, 924, 1364, 879, 917, 814, 1090, 1251, 922, 1253, 5479,
+ 971, 1048, 1376, 1150, 1149, 1148, 1147, 1146, 1145, 1144, 1143, 1142, 1141,
+ 925, 776, 1027, 919, 906, 904, 892, 881, 872, 871, 869, 865, 501, 425, 424,
+ 421, 298, 291, 286, 285, 281, 279, 278, 274, 38, 1384, 839, 1277, 62236,
+ 62225, 62212, 61953, 57346, 28710, 25547, 17355, 13122, 13125, 12709, 9067,
+ 9057, 9031, 8613, 5124, 5051, 5053, 5054, 5055, 5056, 5036, 5027, 4972, 4961,
+ 4966, 4952, 4953, 4954, 4949, 4397, 1393, 1400, 1381, 1382, 1389, 1374, 1365,
+ 1281, 1282, 1283, 1284, 1276, 1252, 1254, 1255, 1256, 1257, 1258, 1259, 1161,
+ 1165, 1154, 1155, 1156, 1157, 1158, 1159, 1131, 1133, 1134, 1138, 1123, 1124,
+ 1130, 1113, 1115, 1116, 1098, 1099, 1089, 1041, 1042, 1043, 1044, 1047, 1026,
+ 1028, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1009, 1010,
+ 965, 966, 951, 952, 957, 958, 959, 960, 943, 945, 947, 948, 950, 931, 933,
+ 934, 935, 936, 937, 938, 939, 940, 923, 927, 928, 929, 897, 876, 834, 836,
+ 837, 838, 738, 721, 301, 302, 257, 1, 898, 916, 368, 368, 62246
+};
+
+static t_staterange     goto_array[] = {
+ 13445, 11977, 13446, 12066, 11793, 13448, 13449, 13450, 13451, 13453, 13454,
+ 13455, 13456, 13457, 13473, 13458, 13459, 13460, 13466, 13461, 13462, 13468,
+ 11793, 13447, 13449, 13450, 13451, 11793, 13448, 13449, 13450, 13451, 13452,
+ 13453, 13454, 13455, 13456, 13457, 13473, 13458, 13459, 13460, 13466, 13461,
+ 13462, 13468, 11735, 13469, 13470, 13463, 13464, 13473, 13465, 13474, 13475,
+ 13476, 13477, 13478, 13479, 13480, 13481, 13466, 13482, 13467, 13483, 13468,
+ 13485, 11735, 13469, 13470, 13471, 13472, 13473, 13474, 13475, 13476, 13477,
+ 13478, 13479, 13480, 13481, 13482, 13483, 13484, 13485, 11147, 13486, 11230,
+ 13487, 13488, 13426, 13419, 13420, 13496, 13423, 13498, 19, 229, 230, 231,
+ 232, 18, 17, 16, 15, 14, 238, 237, 236, 235, 234, 239, 240, 241, 242, 243,
+ 13, 12, 11, 10, 9, 8, 7, 251, 250, 249, 248, 247, 246, 245, 252, 253, 254,
+ 255, 256, 257, 258, 259, 244, 261, 260, 6, 263, 264, 265, 266, 95, 268, 269,
+ 269, 270, 271, 271, 272, 273, 273, 274, 275, 275, 276, 277, 277, 278, 279,
+ 279, 280, 281, 281, 282, 283, 283, 284, 285, 286, 287, 287, 288, 289, 289,
+ 290, 291, 291, 292, 293, 293, 294, 295, 295, 296, 297, 297, 298, 299, 299,
+ 300, 301, 301, 302, 303, 304, 305, 305, 306, 307, 307, 308, 309, 309, 227,
+ 311, 13494, 2, 314, 315, 316, 313, 317, 318, 319, 320, 321, 322, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 332, 333, 334, 335, 336, 336, 337,
+ 338, 338, 50, 340, 341, 341, 342, 343, 343, 344, 345, 345, 346, 347, 347,
+ 315, 315, 349, 350, 350, 341, 352, 353, 354, 355, 356, 357, 358, 359, 359,
+ 360, 351, 362, 362, 361, 361, 363, 348, 339, 310, 365, 365, 364, 366, 367,
+ 364, 366, 367, 57, 369, 370, 370, 371, 372, 372, 373, 374, 374, 375, 376,
+ 376, 377, 378, 378, 379, 380, 381, 382, 383, 384, 384, 385, 386, 386, 39,
+ 388, 389, 390, 391, 68, 393, 394, 395, 396, 397, 392, 398, 399, 67, 66, 65,
+ 64, 63, 62, 61, 60, 59, 58, 410, 409, 408, 407, 406, 405, 404, 403, 402,
+ 401, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
+ 425, 400, 426, 427, 428, 429, 430, 431, 431, 432, 433, 433, 434, 435, 435,
+ 54, 437, 438, 438, 439, 440, 440, 441, 442, 442, 443, 444, 444, 445, 446,
+ 446, 78, 448, 449, 449, 252, 252, 257, 257, 452, 451, 450, 453, 454, 455,
+ 453, 454, 455, 92, 457, 458, 459, 460, 426, 427, 70, 462, 463, 464, 465,
+ 466, 467, 91, 89, 470, 469, 471, 472, 88, 87, 86, 476, 475, 474, 477, 478,
+ 479, 85, 84, 482, 481, 483, 484, 485, 480, 473, 486, 487, 488, 315, 490,
+ 491, 83, 82, 81, 495, 494, 493, 496, 497, 498, 499, 232, 500, 80, 502, 503,
+ 504, 505, 69, 507, 508, 509, 510, 44, 512, 513, 79, 515, 252, 449, 253, 254,
+ 516, 255, 256, 257, 258, 77, 76, 519, 518, 520, 521, 75, 523, 524, 74, 526,
+ 527, 528, 525, 522, 517, 514, 529, 530, 531, 532, 261, 533, 73, 72, 536,
+ 535, 537, 264, 538, 71, 540, 541, 20, 543, 544, 545, 542, 539, 546, 547,
+ 548, 549, 534, 511, 506, 501, 492, 489, 468, 461, 456, 551, 552, 553, 554,
+ 555, 558, 550, 556, 557, 559, 285, 285, 561, 562, 562, 563, 564, 564, 565,
+ 566, 566, 567, 568, 568, 569, 570, 570, 571, 572, 572, 573, 574, 574, 575,
+ 576, 576, 577, 578, 578, 579, 580, 580, 362, 362, 582, 581, 583, 583, 584,
+ 584, 380, 586, 587, 587, 588, 589, 589, 55, 591, 592, 592, 5, 594, 595, 595,
+ 596, 597, 597, 598, 599, 599, 600, 601, 601, 602, 603, 603, 604, 605, 605,
+ 606, 607, 607, 608, 609, 609, 610, 611, 611, 612, 613, 613, 614, 615, 615,
+ 616, 617, 617, 618, 619, 619, 36, 621, 622, 622, 623, 620, 593, 624, 624,
+ 626, 626, 625, 625, 627, 628, 628, 629, 630, 630, 93, 632, 633, 634, 635,
+ 636, 637, 638, 544, 544, 639, 640, 641, 641, 224, 643, 644, 644, 645, 646,
+ 646, 647, 648, 648, 649, 650, 650, 651, 652, 652, 653, 654, 654, 655, 656,
+ 656, 657, 658, 658, 659, 660, 660, 661, 662, 662, 663, 664, 664, 665, 666,
+ 666, 667, 668, 668, 669, 670, 670, 671, 672, 672, 38, 674, 675, 676, 677,
+ 677, 678, 679, 679, 680, 681, 681, 682, 683, 683, 684, 685, 685, 686, 673,
+ 687, 687, 688, 688, 267, 690, 691, 692, 692, 56, 694, 695, 696, 697, 465,
+ 698, 699, 90, 701, 471, 702, 472, 703, 486, 487, 704, 500, 239, 240, 242,
+ 252, 253, 254, 255, 257, 258, 449, 516, 708, 707, 529, 530, 531, 709, 710,
+ 537, 538, 712, 547, 713, 94, 715, 716, 716, 717, 718, 718, 719, 720, 720,
+ 721, 714, 711, 706, 705, 700, 553, 558, 722, 722, 726, 727, 723, 724, 725,
+ 728, 693, 729, 730, 729, 730, 438, 732, 733, 734, 735, 736, 737, 738, 739,
+ 740, 741, 742, 743, 743, 744, 745, 745, 746, 747, 52, 45, 750, 749, 751,
+ 752, 753, 754, 755, 756, 757, 758, 759, 760, 43, 42, 41, 40, 365, 365, 225,
+ 767, 768, 768, 769, 770, 770, 771, 772, 772, 773, 774, 774, 775, 776, 776,
+ 777, 778, 778, 779, 780, 780, 49, 782, 783, 783, 784, 785, 785, 786, 787,
+ 787, 788, 789, 789, 48, 791, 792, 792, 793, 794, 794, 795, 796, 796, 797,
+ 798, 798, 799, 800, 800, 801, 790, 781, 766, 765, 764, 763, 762, 513, 806,
+ 807, 808, 809, 802, 803, 804, 805, 802, 803, 804, 805, 810, 811, 811, 812,
+ 813, 813, 814, 815, 815, 816, 817, 817, 818, 761, 748, 819, 819, 820, 821,
+ 822, 823, 823, 824, 731, 825, 826, 825, 826, 47, 828, 829, 829, 830, 831,
+ 832, 833, 833, 46, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845,
+ 846, 847, 848, 849, 850, 851, 852, 852, 853, 834, 854, 855, 854, 855, 508,
+ 508, 857, 858, 858, 859, 860, 860, 861, 862, 862, 863, 864, 864, 865, 866,
+ 866, 867, 868, 869, 870, 243, 243, 872, 873, 873, 874, 875, 875, 876, 877,
+ 877, 878, 879, 879, 880, 881, 881, 882, 883, 883, 884, 885, 885, 886, 887,
+ 887, 888, 889, 889, 890, 891, 891, 892, 893, 893, 894, 895, 256, 256, 897,
+ 898, 898, 899, 900, 900, 901, 902, 902, 903, 904, 904, 905, 906, 906, 907,
+ 908, 908, 909, 910, 910, 911, 912, 912, 913, 914, 914, 915, 916, 916, 917,
+ 918, 233, 920, 921, 922, 922, 923, 924, 924, 925, 926, 926, 927, 928, 928,
+ 929, 930, 930, 931, 932, 932, 933, 934, 934, 935, 919, 896, 936, 936, 937,
+ 938, 241, 940, 941, 942, 943, 944, 939, 871, 945, 945, 946, 947, 948, 949,
+ 949, 37, 951, 952, 952, 953, 954, 954, 955, 956, 956, 957, 958, 958, 959,
+ 960, 960, 961, 962, 962, 963, 964, 964, 622, 966, 967, 968, 969, 970, 971,
+ 971, 972, 973, 973, 35, 975, 976, 976, 977, 978, 978, 979, 980, 980, 981,
+ 982, 982, 983, 984, 984, 34, 986, 987, 987, 33, 989, 990, 990, 991, 988,
+ 992, 992, 993, 993, 994, 995, 32, 997, 998, 998, 31, 1000, 1001, 1001, 1002,
+ 999, 1003, 1003, 1004, 1004, 1005, 1006, 30, 1008, 1007, 996, 1009, 1010,
+ 1011, 1012, 1013, 1013, 1014, 985, 1015, 1016, 1015, 1016, 29, 28, 27, 26,
+ 25, 24, 23, 22, 21, 1026, 1025, 1024, 1023, 1022, 1021, 1020, 1019, 1018,
+ 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
+ 53, 51, 1042, 1041, 1043, 1044, 1045, 1046, 1046, 1047, 1048, 1048, 1049,
+ 1050, 1050, 1051, 1052, 1052, 1053, 1054, 1054, 1055, 1056, 1057, 1040, 1059,
+ 1058, 1060, 1061, 1061, 1062, 1063, 1063, 1064, 1065, 1065, 1066, 1067, 1067,
+ 1068, 1069, 1069, 1070, 1071, 1071, 1072, 1017, 974, 965, 950, 856, 827,
+ 689, 642, 631, 590, 585, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080,
+ 1081, 1082, 1083, 1084, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
+ 1082, 1083, 1084, 3, 1086, 1087, 1087, 1088, 1089, 1089, 1090, 1091, 1091,
+ 1092, 1093, 1093, 1094, 1095, 1095, 1096, 1097, 1097, 1098, 1085, 560, 447,
+ 436, 1099, 1100, 1101, 1102, 1103, 1099, 1100, 1101, 1102, 1103, 498, 541,
+ 1105, 1106, 1106, 503, 503, 458, 458, 503, 503, 702, 702, 478, 478, 471,
+ 471, 483, 483, 477, 477, 497, 497, 496, 496, 479, 479, 520, 520, 458, 458,
+ 702, 702, 521, 521, 1117, 1118, 1118, 1119, 1120, 1120, 1121, 1122, 1122,
+ 471, 471, 537, 537, 458, 458, 458, 458, 521, 521, 1128, 1127, 1126, 1125,
+ 1124, 1123, 1116, 1115, 1114, 1113, 1112, 1111, 1110, 1109, 1108, 1107, 1129,
+ 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142,
+ 1143, 1144, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139,
+ 1140, 1141, 1142, 1143, 1144, 1145, 1146, 524, 524, 1148, 1149, 1149, 1150,
+ 1151, 1151, 1152, 1153, 1153, 1154, 1155, 1155, 1156, 1157, 1157, 1158, 1147,
+ 1159, 1160, 1159, 1160, 419, 419, 1162, 1163, 1163, 1164, 1165, 1165, 1166,
+ 1167, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 418,
+ 418, 1179, 1180, 1180, 1181, 1182, 1182, 1183, 1184, 1184, 1185, 1186, 1187,
+ 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1178, 1196, 1196, 1197, 1197,
+ 415, 415, 1199, 1200, 1200, 1201, 1202, 1202, 1203, 1204, 1204, 1205, 1206,
+ 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1216, 417, 417,
+ 1218, 1219, 1219, 1220, 1221, 1221, 1222, 1223, 1223, 1224, 1225, 1226, 1227,
+ 1228, 1229, 1230, 1231, 1232, 1233, 413, 413, 1235, 1236, 1236, 1237, 1238,
+ 1238, 1239, 1240, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249,
+ 1250, 1251, 1234, 1253, 1253, 1252, 1252, 414, 414, 1255, 1256, 1256, 1257,
+ 1258, 1258, 1259, 1260, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268,
+ 1269, 1270, 1271, 1272, 1272, 412, 412, 1274, 1275, 1275, 1276, 1277, 1277,
+ 1278, 1279, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289,
+ 1290, 1291, 1291, 1292, 1293, 1293, 1294, 1295, 1295, 1296, 1297, 1297, 1298,
+ 1299, 1299, 1300, 1301, 1301, 1302, 1303, 1303, 1304, 1305, 1305, 1306, 1307,
+ 1307, 1308, 1309, 1309, 1310, 1311, 1311, 411, 411, 1313, 1314, 1314, 1315,
+ 1316, 1316, 1317, 1318, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326,
+ 1327, 1328, 416, 416, 1330, 1331, 1331, 1332, 1333, 1333, 1334, 1335, 1335,
+ 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1329, 1312,
+ 1347, 1348, 1349, 1347, 1348, 1349, 484, 484, 1351, 1352, 1352, 1353, 1354,
+ 1354, 1355, 1356, 1356, 1357, 1358, 1359, 1360, 1360, 394, 394, 1362, 1363,
+ 1363, 1364, 1365, 1365, 1366, 1367, 1367, 1368, 1369, 1370, 1371, 1372, 1373,
+ 1374, 1375, 1375, 1376, 1377, 1377, 1378, 1379, 1379, 1380, 1381, 1381, 1196,
+ 1196, 1253, 1253, 420, 420, 1385, 1386, 1386, 1387, 1388, 1388, 1389, 1390,
+ 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1400, 1401,
+ 1384, 1383, 1382, 1361, 1350, 1273, 1254, 1217, 1198, 1161, 1402, 1403, 1404,
+ 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1402, 1403, 1404, 1405, 1406,
+ 1407, 1408, 1409, 1410, 1411, 1412, 1413, 92, 1414, 1415, 1416, 1416, 1417,
+ 1418, 1418, 1419, 1420, 1420, 1421, 1422, 1422, 341, 783, 1424, 1425, 1426,
+ 1427, 1428, 1429, 1430, 1431, 1431, 1432, 1433, 1433, 783, 1435, 1436, 1437,
+ 1438, 1439, 1440, 1441, 1442, 1442, 1443, 1444, 1444, 633, 633, 595, 595,
+ 622, 1448, 1449, 1449, 1450, 1447, 1446, 1451, 626, 1452, 1453, 1451, 626,
+ 1452, 1453, 1454, 624, 624, 1455, 1456, 1457, 1457, 611, 1459, 1460, 1460,
+ 1461, 1462, 1462, 1463, 1464, 1464, 1465, 1466, 1467, 1468, 1468, 1469, 1470,
+ 1470, 1471, 1472, 1472, 1473, 1474, 1474, 1475, 1476, 1476, 1477, 1478, 1478,
+ 1479, 1480, 1481, 1482, 1482, 1483, 1484, 1484, 1485, 1486, 1486, 1487, 1488,
+ 1488, 1489, 1490, 1490, 1491, 1492, 1492, 1493, 1494, 1495, 1496, 1496, 1497,
+ 1498, 1498, 1499, 1500, 1500, 1501, 1502, 1502, 1503, 1504, 1505, 1506, 1506,
+ 1507, 1508, 1508, 1509, 1510, 1510, 1511, 1512, 1512, 1513, 1514, 1515, 1516,
+ 1516, 1517, 1518, 1518, 1519, 1520, 1520, 1521, 1522, 1522, 1523, 1524, 1524,
+ 1525, 1526, 1526, 1527, 1458, 1445, 1434, 1423, 1528, 1529, 1530, 1531, 1532,
+ 1528, 1529, 1530, 1531, 1532, 735, 1534, 1535, 1536, 1537, 1538, 1539, 1540,
+ 1541, 1542, 544, 544, 1543, 639, 49, 783, 1545, 1546, 1546, 1547, 1548, 1548,
+ 1549, 1550, 1550, 1551, 1544, 1552, 1553, 1552, 1553, 687, 1555, 1556, 800,
+ 1556, 800, 976, 987, 990, 998, 1001, 1559, 1558, 49, 752, 1009, 1560, 1561,
+ 48, 544, 751, 4, 1564, 1563, 1562, 595, 806, 952, 1565, 1566, 1567, 243,
+ 269, 675, 1043, 1044, 230, 241, 256, 716, 458, 633, 471, 472, 477, 478, 479,
+ 484, 702, 239, 240, 242, 257, 258, 483, 496, 497, 498, 503, 252, 254, 255,
+ 449, 516, 520, 521, 524, 527, 538, 264, 463, 537, 541, 253, 389, 508, 829,
+ 394, 412, 413, 414, 415, 416, 417, 418, 419, 420, 1577, 1576, 1575, 1574,
+ 1573, 1572, 1571, 1570, 1569, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585,
+ 1586, 370, 411, 695, 1588, 1589, 622, 1027, 1028, 1029, 1030, 1031, 1032,
+ 1033, 1034, 1035, 1591, 1592, 1593, 1590, 1587, 1594, 1595, 1596, 2, 592,
+ 836, 43, 438, 1599, 1598, 1597, 1568, 341, 513, 807, 808, 1087, 1600, 1601,
+ 1602, 1603, 1604, 1605, 1606, 1607, 1607, 1608, 1609, 1609, 223, 184, 185,
+ 1613, 1612, 1614, 1615, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 1626, 1625, 1624, 1623, 1622, 1621, 1620, 1619, 1618, 1617, 1627, 1628, 1629,
+ 1630, 1631, 1632, 1633, 1634, 1635, 1636, 172, 173, 1639, 1638, 463, 1640,
+ 1641, 167, 168, 169, 170, 171, 1647, 1646, 1645, 1644, 1643, 695, 1648, 1649,
+ 1650, 1651, 1652, 675, 166, 1655, 341, 1656, 164, 165, 1659, 1658, 1660,
+ 1661, 1662, 1657, 1654, 1653, 1642, 1637, 1616, 1663, 1664, 1665, 1666, 1667,
+ 1668, 1669, 161, 162, 163, 1673, 1672, 1671, 1674, 1675, 1676, 158, 159,
+ 160, 1680, 1679, 1678, 1681, 1682, 1683, 154, 155, 156, 157, 1688, 1687,
+ 1686, 1685, 1689, 1690, 1691, 1692, 148, 149, 150, 151, 152, 153, 1699, 1698,
+ 1697, 1696, 1695, 1694, 1700, 1701, 1702, 1703, 1704, 1705, 146, 147, 1708,
+ 1707, 1709, 1710, 1711, 1706, 1693, 1684, 1677, 422, 1712, 1713, 1714, 1715,
+ 1716, 987, 990, 1009, 998, 1001, 139, 140, 141, 142, 143, 144, 145, 1726,
+ 1725, 1724, 1723, 1722, 1721, 1720, 1043, 1044, 1727, 1728, 1729, 1730, 1731,
+ 1732, 1733, 106, 1735, 1736, 138, 1738, 1737, 269, 1739, 1740, 134, 135,
+ 136, 137, 1745, 1744, 1743, 1742, 1746, 1747, 1748, 1749, 1750, 1741, 1734,
+ 1719, 1718, 1751, 1752, 1753, 1754, 1755, 104, 105, 1758, 1757, 1759, 1760,
+ 1761, 1762, 976, 1764, 1765, 133, 1767, 836, 1768, 132, 1770, 370, 1771,
+ 129, 130, 131, 1775, 1774, 1773, 544, 1776, 633, 1777, 1778, 127, 128, 1781,
+ 1780, 1782, 1783, 1784, 1779, 1772, 1769, 1766, 1763, 1785, 1786, 1787, 1788,
+ 1789, 1790, 103, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1791, 1756, 1717,
+ 1670, 1799, 1800, 1801, 1802, 1803, 102, 1805, 1806, 1807, 1808, 222, 1810,
+ 1809, 1811, 1812, 101, 1814, 1815, 1816, 1817, 1818, 477, 478, 479, 1819,
+ 1820, 1813, 486, 704, 1821, 1822, 220, 221, 1825, 1824, 1826, 1827, 595,
+ 1829, 1830, 1831, 1832, 1833, 1828, 458, 491, 1834, 1835, 126, 1837, 1838,
+ 1839, 230, 1840, 125, 1842, 1843, 122, 123, 124, 1847, 1846, 1845, 1848,
+ 1849, 1850, 120, 121, 1853, 1852, 1854, 1855, 119, 1857, 1858, 1859, 1856,
+ 1851, 1844, 1860, 1861, 1862, 1863, 1864, 1841, 500, 1865, 1866, 118, 1868,
+ 1869, 117, 1871, 1872, 112, 113, 114, 115, 116, 1878, 1877, 1876, 1875, 1874,
+ 1879, 1880, 1881, 1882, 1883, 1884, 1873, 1870, 503, 1885, 1886, 1887, 111,
+ 1889, 1890, 1891, 1892, 1032, 1033, 1034, 1035, 1027, 1031, 1895, 1894, 1896,
+ 1897, 438, 1899, 1900, 100, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1901,
+ 1898, 1893, 1888, 1909, 1910, 1911, 1912, 1913, 99, 1915, 1916, 1917, 1918,
+ 1919, 1920, 98, 1922, 1923, 97, 1925, 1926, 96, 1928, 1929, 228, 1931, 1932,
+ 1933, 1930, 1927, 1924, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1921, 1941,
+ 1942, 219, 1944, 1945, 218, 1947, 1948, 1949, 1946, 510, 1950, 1951, 513,
+ 783, 214, 215, 216, 217, 1957, 1956, 1955, 1954, 716, 1958, 1959, 1960, 1961,
+ 239, 240, 241, 242, 243, 389, 110, 1964, 12, 1965, 1966, 252, 253, 254, 255,
+ 256, 258, 449, 516, 1967, 213, 1969, 520, 521, 622, 829, 1970, 212, 1972,
+ 527, 1565, 1973, 1974, 1971, 1968, 1963, 1962, 1953, 530, 1975, 1976, 1977,
+ 1978, 1979, 1980, 109, 1982, 73, 1983, 108, 1985, 72, 1986, 107, 1988, 1989,
+ 1990, 1987, 1984, 264, 1991, 1992, 1993, 541, 792, 807, 808, 809, 1087, 208,
+ 209, 210, 211, 1999, 1998, 1997, 1996, 394, 751, 752, 806, 2000, 2001, 2002,
+ 2003, 199, 200, 201, 202, 203, 204, 205, 206, 207, 2013, 2012, 2011, 2010,
+ 2009, 2008, 2007, 2006, 2005, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021,
+ 2022, 194, 1028, 1029, 1030, 195, 196, 197, 198, 2028, 2027, 2026, 2025,
+ 2024, 952, 2029, 2030, 2031, 2032, 2033, 188, 189, 190, 191, 192, 193, 2040,
+ 2039, 2038, 2037, 2036, 2035, 2041, 2042, 2043, 2044, 2045, 2046, 186, 187,
+ 2049, 2048, 2050, 2051, 592, 2053, 2052, 2047, 2034, 2023, 2004, 1995, 1994,
+ 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 1981, 1952, 1943, 1914,
+ 1867, 1836, 1823, 1804, 1611, 722, 722, 2063, 2064, 2065, 2066, 2067, 2068,
+ 2069, 2070, 2071, 2072, 547, 548, 223, 92, 2076, 2075, 2077, 2078, 222, 89,
+ 90, 91, 86, 87, 88, 84, 85, 2083, 2082, 2081, 2080, 2084, 2085, 2086, 2087,
+ 220, 221, 2, 2090, 2089, 2091, 2092, 81, 82, 83, 19, 2095, 2094, 2096, 2097,
+ 80, 2099, 2100, 219, 218, 69, 2104, 2103, 2102, 2105, 2106, 2107, 44, 49,
+ 94, 214, 215, 216, 217, 14, 15, 16, 17, 18, 39, 7, 8, 9, 10, 11, 12, 13,
+ 78, 79, 36, 47, 76, 77, 213, 75, 4, 74, 212, 2115, 2114, 2113, 2112, 2111,
+ 2110, 2109, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 6, 72, 73, 3, 41, 42,
+ 43, 48, 71, 40, 45, 52, 68, 208, 209, 210, 211, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 37, 194, 195, 196, 197, 198, 188, 189, 190, 191, 192,
+ 193, 186, 187, 55, 2131, 2130, 2129, 2128, 2127, 2126, 2125, 2124, 2132,
+ 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2123, 2108, 2101, 2098, 2093,
+ 2088, 2079, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 184, 185, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 70, 172, 173, 56, 167, 168,
+ 169, 170, 171, 38, 50, 166, 164, 165, 2156, 2155, 2154, 2153, 2152, 2151,
+ 2150, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 161, 162, 163, 158, 159,
+ 160, 154, 155, 156, 157, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 148, 149,
+ 150, 151, 152, 153, 146, 147, 2170, 2169, 2168, 2167, 2166, 2165, 2171, 2172,
+ 2173, 2174, 2175, 2176, 30, 33, 34, 31, 32, 51, 53, 139, 140, 141, 142, 143,
+ 144, 145, 95, 138, 134, 135, 136, 137, 2182, 2181, 2180, 2179, 2178, 2183,
+ 2184, 2185, 2186, 2187, 46, 133, 57, 132, 20, 93, 129, 130, 131, 127, 128,
+ 2192, 2191, 2190, 2189, 2193, 2194, 2195, 2196, 2197, 2188, 2177, 2164, 2198,
+ 2199, 2200, 2201, 126, 2203, 2204, 125, 122, 123, 124, 120, 121, 119, 2209,
+ 2208, 2207, 2206, 2210, 2211, 2212, 2213, 2214, 2205, 2215, 2216, 118, 117,
+ 112, 113, 114, 115, 116, 2220, 2219, 2218, 2221, 2222, 2223, 111, 2225, 2226,
+ 26, 27, 28, 29, 21, 25, 2229, 2228, 2230, 2231, 54, 2233, 2234, 2235, 2232,
+ 2227, 2224, 2236, 2237, 2238, 2239, 110, 2241, 2242, 2243, 2244, 109, 108,
+ 107, 2248, 2247, 2246, 2249, 2250, 2251, 22, 23, 24, 2253, 2254, 2255, 2252,
+ 2256, 2257, 2258, 2245, 2240, 2217, 2202, 2149, 2259, 2260, 2261, 2262, 2263,
+ 2264, 106, 2266, 2267, 2268, 2269, 104, 105, 2271, 2272, 35, 2274, 2275,
+ 2276, 2273, 2277, 2278, 103, 2280, 2281, 2282, 2283, 2284, 2279, 2270, 2285,
+ 2286, 2287, 102, 2289, 2290, 2291, 2292, 101, 2294, 2295, 2296, 2297, 2298,
+ 2293, 2299, 2300, 5, 2302, 2303, 2304, 2305, 2306, 2307, 100, 2309, 2310,
+ 2311, 2312, 2313, 2314, 99, 2316, 2317, 2318, 2319, 98, 97, 96, 1, 2324,
+ 2323, 2322, 2321, 2325, 2326, 2327, 2328, 2329, 2330, 2331, 2320, 2332, 2333,
+ 2334, 2315, 2308, 2301, 2288, 2265, 2335, 2336, 2337, 2338, 2339, 2340, 2341,
+ 2342, 2342, 2343, 2344, 2344, 2345, 2346, 2346, 2347, 2348, 2348, 2349, 2074,
+ 2073, 2350, 2350, 2351, 551, 552, 553, 554, 555, 726, 727, 558, 2352, 2353,
+ 2354, 2354, 976, 2356, 2357, 2358, 2359, 2359, 2360, 2361, 2361, 2362, 2363,
+ 2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 1044, 2375,
+ 2376, 2377, 2378, 2378, 2379, 2380, 2380, 2381, 2382, 2382, 2383, 2384, 2384,
+ 2385, 2386, 2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396,
+ 2397, 2398, 2398, 2399, 2400, 2400, 2401, 2402, 2402, 2403, 2404, 2404, 2405,
+ 2406, 2406, 2407, 2408, 2408, 2409, 2410, 2410, 2411, 44, 751, 752, 2412,
+ 1043, 2414, 2415, 2416, 2417, 2417, 2418, 2419, 2419, 2420, 2421, 2421, 2422,
+ 2423, 2423, 2424, 2425, 2425, 2426, 2427, 2428, 2429, 2429, 2430, 2431, 2431,
+ 2432, 2433, 2433, 2434, 2435, 2435, 2436, 2437, 2437, 2438, 2439, 2439, 2440,
+ 2441, 2441, 2442, 43, 2443, 2444, 2413, 341, 783, 792, 806, 807, 808, 1087,
+ 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 513, 808, 809,
+ 807, 341, 783, 792, 806, 836, 1087, 2460, 2459, 2458, 2457, 2456, 2462, 2461,
+ 2463, 2464, 2465, 2466, 315, 1900, 2467, 2468, 2469, 2470, 2471, 2471, 2472,
+ 2455, 2374, 2473, 2473, 2474, 2475, 315, 315, 2477, 2478, 2478, 2479, 2480,
+ 2481, 2482, 2483, 2484, 312, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493,
+ 2494, 2495, 2495, 2496, 2497, 2497, 2498, 2499, 2499, 2500, 2501, 2502, 2503,
+ 2504, 2505, 513, 2507, 2508, 2509, 2510, 2511, 2512, 2513, 44, 751, 2514,
+ 809, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 43, 2523, 808, 2525, 2526,
+ 2527, 2528, 2529, 2530, 2531, 42, 2532, 807, 2534, 2535, 2536, 2537, 2538,
+ 2539, 2540, 41, 2541, 1087, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 3,
+ 2550, 341, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 50, 2559, 783, 2561,
+ 2562, 2563, 2564, 2565, 2566, 2567, 49, 2568, 2462, 2570, 2571, 2572, 2573,
+ 2574, 48, 2575, 806, 2577, 2578, 2579, 2580, 2581, 2582, 2583, 40, 2584,
+ 2585, 2576, 2569, 2560, 2551, 2542, 2533, 2524, 2515, 2586, 2587, 2588, 2589,
+ 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601, 2602,
+ 2603, 2506, 2604, 2605, 2606, 2485, 2476, 2607, 2608, 2609, 2610, 2611, 2611,
+ 2612, 2355, 1610, 2613, 2614, 2615, 2613, 2614, 2615, 1565, 2617, 2618, 2619,
+ 2620, 2621, 2622, 2623, 2624, 2624, 2625, 2626, 2627, 2628, 2628, 2629, 2630,
+ 2630, 831, 2632, 2633, 836, 836, 2635, 2636, 2636, 2637, 2638, 2638, 2639,
+ 2634, 2640, 2641, 2640, 2641, 836, 2643, 2644, 2645, 2646, 2647, 2648, 2649,
+ 2650, 836, 836, 2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661,
+ 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2671, 2672, 2651,
+ 2674, 2673, 2674, 2675, 2642, 2676, 2677, 2676, 2677, 751, 2679, 513, 806,
+ 807, 808, 809, 2680, 2681, 2682, 2682, 2683, 2684, 2684, 2685, 2686, 2686,
+ 2687, 2688, 2688, 806, 807, 808, 809, 513, 546, 952, 952, 2691, 2692, 2692,
+ 2693, 2694, 2694, 2695, 2696, 2696, 2697, 2698, 2698, 2699, 2690, 2701, 2700,
+ 2702, 2703, 2703, 389, 389, 2705, 2706, 2706, 2707, 2708, 2708, 2709, 2710,
+ 2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722,
+ 2722, 2723, 2724, 2724, 2725, 2726, 2726, 2727, 2728, 2728, 2729, 2730, 2730,
+ 2731, 2732, 2732, 2733, 2734, 2734, 2735, 2736, 2736, 2737, 2738, 2738, 2739,
+ 2740, 2740, 2741, 2742, 2742, 2743, 2744, 2744, 2745, 2746, 2747, 2748, 2748,
+ 683, 683, 675, 958, 2751, 2752, 2752, 2753, 2754, 2754, 2755, 2756, 2756,
+ 2757, 2758, 2758, 971, 2760, 2761, 2761, 2762, 2763, 2763, 976, 2357, 2765,
+ 2766, 2766, 583, 583, 2768, 2769, 2769, 2770, 2, 2771, 992, 993, 992, 993,
+ 995, 2773, 2774, 1003, 1004, 1003, 1004, 1006, 2776, 2777, 2778, 2775, 1009,
+ 2779, 2780, 2781, 1009, 2779, 2780, 2782, 2783, 2784, 2784, 2785, 2772, 2767,
+ 2786, 2787, 2788, 2786, 2787, 2788, 2701, 1059, 2790, 2791, 2792, 2793, 2793,
+ 2794, 2795, 2795, 2796, 2797, 2797, 2798, 2799, 2799, 2800, 2801, 2801, 2802,
+ 2803, 2803, 2804, 2789, 2764, 2759, 2750, 2749, 2704, 2689, 2678, 2631, 2616,
+ 1557, 1554, 1533, 1104, 387, 368, 262, 229, 2823, 2824, 2825, 2826, 2827,
+ 2828, 234, 235, 236, 237, 238, 2830, 2831, 245, 246, 247, 248, 249, 250,
+ 251, 2833, 2834, 2835, 2832, 2837, 2836, 2838, 2839, 263, 2841, 2842, 2843,
+ 2844, 2845, 2846, 268, 268, 2848, 2849, 2850, 2851, 2851, 2852, 2853, 2854,
+ 2855, 2855, 2856, 2857, 2858, 2859, 2859, 2860, 2861, 2862, 2863, 2863, 2864,
+ 2865, 2866, 2867, 2867, 2868, 2869, 2870, 2871, 2871, 2872, 2873, 2874, 2875,
+ 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2883, 2884, 2885, 2886,
+ 2887, 2887, 2888, 2889, 2890, 2891, 2891, 2892, 2893, 2894, 2895, 2895, 2896,
+ 2897, 2898, 2899, 2899, 2900, 2901, 2902, 2903, 2903, 2904, 2905, 2906, 2907,
+ 2907, 2908, 2909, 2910, 2911, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918,
+ 2919, 2919, 2920, 2921, 2922, 2923, 2923, 2924, 2925, 2926, 2927, 2927, 2928,
+ 2929, 13491, 2931, 2932, 314, 2934, 2935, 2936, 2933, 2937, 2938, 2939, 2940,
+ 2941, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953,
+ 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 2965, 2966,
+ 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2974, 2975, 2976, 2977,
+ 2978, 2978, 2979, 2980, 340, 340, 2982, 2983, 2984, 2985, 2985, 2986, 2987,
+ 2988, 2989, 2989, 2990, 2991, 2992, 2993, 2993, 2994, 2995, 314, 314, 2997,
+ 2998, 2999, 3000, 3000, 3001, 3002, 340, 3004, 3005, 3006, 3007, 3008, 3009,
+ 3010, 3011, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 3019, 3019, 3020, 3021,
+ 3022, 3003, 3024, 3024, 3023, 3023, 3025, 3026, 3027, 2996, 2981, 2930, 3029,
+ 3029, 3028, 3030, 3031, 3028, 3030, 3031, 3032, 3033, 369, 369, 3035, 3036,
+ 3037, 3038, 3038, 3039, 3040, 3041, 3042, 3042, 3043, 3044, 3045, 3046, 3046,
+ 3047, 3048, 3049, 3050, 3050, 3051, 3052, 3053, 3054, 3055, 3056, 3057, 3058,
+ 3059, 3060, 3061, 3062, 3062, 3063, 3064, 3065, 3066, 3066, 3067, 3068, 388,
+ 3070, 3071, 3072, 3073, 3074, 3075, 393, 3077, 3078, 3079, 3080, 3081, 3082,
+ 3083, 3076, 3084, 3085, 3086, 3087, 401, 402, 403, 404, 405, 406, 407, 408,
+ 409, 410, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099,
+ 3088, 3100, 3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3109, 3110,
+ 3111, 3112, 3113, 3113, 3114, 3115, 3116, 3117, 3117, 3118, 3119, 437, 437,
+ 3121, 3122, 3123, 3124, 3124, 3125, 3126, 3127, 3128, 3128, 3129, 3130, 3131,
+ 3132, 3132, 3133, 3134, 3135, 3136, 3136, 3137, 3138, 448, 448, 3140, 3141,
+ 251, 251, 3143, 3144, 246, 246, 3146, 3147, 3148, 3145, 3142, 3149, 3150,
+ 3151, 3149, 3150, 3151, 3152, 3153, 457, 3155, 3156, 3157, 3158, 3100, 3101,
+ 3159, 3160, 462, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171,
+ 469, 470, 3173, 3174, 474, 475, 476, 3176, 3177, 481, 482, 3179, 3180, 3181,
+ 3178, 3175, 3182, 3183, 3184, 3185, 3186, 314, 3188, 3189, 3190, 3191, 3192,
+ 3193, 493, 494, 495, 3195, 3196, 3197, 2826, 3198, 3199, 3200, 502, 3202,
+ 3203, 3204, 3205, 3206, 3207, 507, 3209, 3210, 3211, 3212, 3213, 3214, 512,
+ 3216, 3217, 245, 246, 247, 248, 249, 250, 251, 448, 515, 3219, 3220, 518,
+ 519, 3222, 3223, 523, 3225, 3226, 526, 3228, 3229, 3230, 3227, 3224, 3221,
+ 3218, 3231, 3232, 3233, 3234, 2837, 3235, 3236, 3237, 263, 535, 536, 3239,
+ 3240, 540, 3242, 3243, 543, 3245, 3246, 3247, 3244, 3241, 3248, 3249, 3250,
+ 3251, 3252, 3253, 3238, 3215, 3208, 3201, 3194, 3187, 3172, 3161, 3154, 3255,
+ 3256, 3257, 3258, 3259, 3262, 3254, 3260, 3261, 3263, 3264, 3265, 2879, 2879,
+ 3267, 3268, 3269, 3270, 3270, 3271, 3272, 3273, 3274, 3274, 3275, 3276, 3277,
+ 3278, 3278, 3279, 3280, 3281, 3282, 3282, 3283, 3284, 3285, 3286, 3286, 3287,
+ 3288, 3289, 3290, 3290, 3291, 3292, 3293, 3294, 3294, 3295, 3296, 3297, 3298,
+ 3298, 3299, 3300, 3301, 3302, 3302, 3303, 3304, 3305, 3306, 3306, 3307, 3308,
+ 3024, 3024, 3310, 3311, 3312, 3309, 3313, 3313, 3314, 3314, 3315, 3316, 3054,
+ 3318, 3319, 3320, 3321, 3321, 3322, 3323, 3324, 3325, 3325, 3326, 3327, 591,
+ 591, 3329, 3330, 594, 594, 3332, 3333, 3334, 3335, 3335, 3336, 3337, 3338,
+ 3339, 3339, 3340, 3341, 3342, 3343, 3343, 3344, 3345, 3346, 3347, 3347, 3348,
+ 3349, 3350, 3351, 3351, 3352, 3353, 3354, 3355, 3355, 3356, 3357, 3358, 3359,
+ 3359, 3360, 3361, 3362, 3363, 3363, 3364, 3365, 3366, 3367, 3367, 3368, 3369,
+ 3370, 3371, 3371, 3372, 3373, 3374, 3375, 3375, 3376, 3377, 3378, 3379, 3379,
+ 3380, 3381, 621, 621, 3383, 3384, 3385, 3382, 3331, 3386, 3386, 3388, 3388,
+ 3387, 3387, 3389, 3390, 3391, 3392, 3392, 3393, 3394, 3395, 3396, 3396, 3397,
+ 3398, 632, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410,
+ 543, 543, 3411, 3412, 3413, 3414, 3415, 3415, 3416, 3417, 643, 643, 3419,
+ 3420, 3421, 3422, 3422, 3423, 3424, 3425, 3426, 3426, 3427, 3428, 3429, 3430,
+ 3430, 3431, 3432, 3433, 3434, 3434, 3435, 3436, 3437, 3438, 3438, 3439, 3440,
+ 3441, 3442, 3442, 3443, 3444, 3445, 3446, 3446, 3447, 3448, 3449, 3450, 3450,
+ 3451, 3452, 3453, 3454, 3454, 3455, 3456, 3457, 3458, 3458, 3459, 3460, 3461,
+ 3462, 3462, 3463, 3464, 3465, 3466, 3466, 3467, 3468, 3469, 3470, 3470, 3471,
+ 3472, 3473, 3474, 3474, 3475, 3476, 674, 3478, 3479, 3480, 3481, 3481, 3482,
+ 3483, 3484, 3485, 3485, 3486, 3487, 3488, 3489, 3489, 3490, 3491, 3492, 3493,
+ 3493, 3494, 3495, 3496, 3497, 3497, 3498, 3499, 3500, 3477, 3501, 3501, 3502,
+ 3502, 3503, 3504, 2847, 3506, 3507, 3508, 3509, 3510, 3510, 3511, 3512, 694,
+ 3514, 3515, 3516, 3517, 3165, 3518, 3519, 3520, 3521, 3522, 3523, 469, 470,
+ 701, 3525, 3526, 3527, 3182, 3183, 3528, 3529, 3530, 3198, 3532, 3533, 235,
+ 237, 238, 3535, 3536, 245, 246, 248, 249, 250, 251, 448, 515, 3538, 3539,
+ 3540, 3537, 3231, 3232, 3233, 3541, 3542, 3543, 3544, 535, 536, 3546, 3547,
+ 3548, 3249, 3549, 3550, 3551, 715, 715, 3553, 3554, 3555, 3556, 3556, 3557,
+ 3558, 3559, 3560, 3560, 3561, 3562, 3563, 3552, 3545, 3534, 3531, 3524, 3257,
+ 3262, 3564, 3564, 3568, 3569, 3565, 3566, 3567, 3570, 3571, 3572, 3513, 3573,
+ 3574, 3573, 3574, 3575, 3576, 437, 3578, 3579, 3580, 3581, 3582, 3583, 3584,
+ 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597,
+ 3598, 3599, 3600, 3601, 3601, 3602, 3603, 3604, 3605, 3605, 3606, 3607, 3608,
+ 3609, 3610, 3611, 749, 750, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620,
+ 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3029, 3029, 3632,
+ 3633, 767, 767, 3635, 3636, 3637, 3638, 3638, 3639, 3640, 3641, 3642, 3642,
+ 3643, 3644, 3645, 3646, 3646, 3647, 3648, 3649, 3650, 3650, 3651, 3652, 3653,
+ 3654, 3654, 3655, 3656, 3657, 3658, 3658, 3659, 3660, 782, 782, 3662, 3663,
+ 3664, 3665, 3665, 3666, 3667, 3668, 3669, 3669, 3670, 3671, 3672, 3673, 3673,
+ 3674, 3675, 791, 791, 3677, 3678, 3679, 3680, 3680, 3681, 3682, 3683, 3684,
+ 3684, 3685, 3686, 3687, 3688, 3688, 3689, 3690, 3691, 3692, 3692, 3693, 3694,
+ 3695, 3676, 3661, 3634, 512, 762, 763, 764, 765, 3696, 3697, 3698, 3699,
+ 3696, 3697, 3698, 3699, 3700, 3701, 3702, 3703, 3703, 3704, 3705, 3706, 3707,
+ 3707, 3708, 3709, 3710, 3711, 3711, 3712, 3713, 3714, 3715, 3715, 3716, 3717,
+ 3718, 3631, 3612, 3719, 3719, 3720, 3721, 3722, 3723, 3724, 3725, 3725, 3726,
+ 3727, 3728, 3577, 3729, 3730, 3729, 3730, 3731, 3732, 828, 828, 3734, 3735,
+ 3736, 3737, 3738, 3739, 3740, 3741, 3741, 3742, 3743, 835, 3745, 3746, 3747,
+ 3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 3756, 3757, 3758, 3759, 3760,
+ 3761, 3762, 3763, 3764, 3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 3773,
+ 3774, 3775, 3776, 3776, 3777, 3778, 3779, 3744, 3780, 3781, 3780, 3781, 3782,
+ 3783, 507, 507, 3785, 3786, 3787, 3788, 3788, 3789, 3790, 3791, 3792, 3792,
+ 3793, 3794, 3795, 3796, 3796, 3797, 3798, 3799, 3800, 3800, 3801, 3802, 3803,
+ 3804, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 3811, 3812, 3813, 3814, 234,
+ 234, 3816, 3817, 3818, 3819, 3819, 3820, 3821, 3822, 3823, 3823, 3824, 3825,
+ 3826, 3827, 3827, 3828, 3829, 3830, 3831, 3831, 3832, 3833, 3834, 3835, 3835,
+ 3836, 3837, 3838, 3839, 3839, 3840, 3841, 3842, 3843, 3843, 3844, 3845, 3846,
+ 3847, 3847, 3848, 3849, 3850, 3851, 3851, 3852, 3853, 3854, 3855, 3855, 3856,
+ 3857, 3858, 3859, 3859, 3860, 3861, 3862, 3863, 3864, 3865, 247, 247, 3867,
+ 3868, 3869, 3870, 3870, 3871, 3872, 3873, 3874, 3874, 3875, 3876, 3877, 3878,
+ 3878, 3879, 3880, 3881, 3882, 3882, 3883, 3884, 3885, 3886, 3886, 3887, 3888,
+ 3889, 3890, 3890, 3891, 3892, 3893, 3894, 3894, 3895, 3896, 3897, 3898, 3898,
+ 3899, 3900, 3901, 3902, 3902, 3903, 3904, 3905, 3906, 3906, 3907, 3908, 3909,
+ 3910, 3911, 3912, 2829, 3914, 3915, 3916, 3917, 3918, 3918, 3919, 3920, 3921,
+ 3922, 3922, 3923, 3924, 3925, 3926, 3926, 3927, 3928, 3929, 3930, 3930, 3931,
+ 3932, 3933, 3934, 3934, 3935, 3936, 3937, 3938, 3938, 3939, 3940, 3941, 3942,
+ 3942, 3943, 3944, 3945, 3913, 3866, 3946, 3946, 3947, 3948, 3949, 3950, 236,
+ 3952, 3953, 3954, 3955, 3956, 3957, 3958, 3959, 3960, 3961, 3962, 3951, 3815,
+ 3963, 3963, 3964, 3965, 3966, 3967, 3968, 3969, 3969, 3970, 3971, 951, 951,
+ 3973, 3974, 3975, 3976, 3976, 3977, 3978, 3979, 3980, 3980, 3981, 3982, 3983,
+ 3984, 3984, 3985, 3986, 3987, 3988, 3988, 3989, 3990, 3991, 3992, 3992, 3993,
+ 3994, 3995, 3996, 3996, 3997, 3998, 621, 4000, 4001, 4002, 4003, 4004, 4005,
+ 4006, 4007, 4008, 4009, 4010, 4011, 4011, 4012, 4013, 4014, 4015, 4015, 4016,
+ 4017, 975, 975, 4019, 4020, 4021, 4022, 4022, 4023, 4024, 4025, 4026, 4026,
+ 4027, 4028, 4029, 4030, 4030, 4031, 4032, 4033, 4034, 4034, 4035, 4036, 986,
+ 986, 4038, 4039, 989, 989, 4041, 4042, 4043, 4040, 4044, 4044, 4045, 4045,
+ 4046, 4047, 4048, 4049, 4050, 4051, 997, 997, 4053, 4054, 1000, 1000, 4056,
+ 4057, 4058, 4055, 4059, 4059, 4060, 4060, 4061, 4062, 4063, 4064, 4065, 4066,
+ 4067, 4052, 1008, 4068, 4069, 4070, 4071, 4072, 4073, 4073, 4074, 4075, 4076,
+ 4037, 4077, 4078, 4077, 4078, 4079, 4080, 1018, 1019, 1020, 1021, 1022, 1023,
+ 1024, 1025, 1026, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091,
+ 1041, 1042, 4093, 4094, 4095, 4096, 4096, 4097, 4098, 4099, 4100, 4100, 4101,
+ 4102, 4103, 4104, 4104, 4105, 4106, 4107, 4108, 4108, 4109, 4110, 4111, 4112,
+ 4112, 4113, 4114, 4115, 4116, 4117, 4118, 4119, 4092, 4121, 4120, 4122, 4123,
+ 4124, 4125, 4125, 4126, 4127, 4128, 4129, 4129, 4130, 4131, 4132, 4133, 4133,
+ 4134, 4135, 4136, 4137, 4137, 4138, 4139, 4140, 4141, 4141, 4142, 4143, 4144,
+ 4145, 4145, 4146, 4147, 4148, 4081, 4018, 3999, 3972, 3784, 3733, 3505, 3418,
+ 3399, 3328, 3317, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158,
+ 4159, 4160, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159,
+ 4160, 4161, 4162, 1086, 1086, 4164, 4165, 4166, 4167, 4167, 4168, 4169, 4170,
+ 4171, 4171, 4172, 4173, 4174, 4175, 4175, 4176, 4177, 4178, 4179, 4179, 4180,
+ 4181, 4182, 4183, 4183, 4184, 4185, 4186, 4163, 3266, 3139, 3120, 4187, 4188,
+ 4189, 4190, 4191, 4187, 4188, 4189, 4190, 4191, 4192, 4193, 493, 540, 4195,
+ 4196, 4197, 4198, 4198, 4199, 4200, 502, 502, 4202, 4203, 457, 457, 502,
+ 502, 4205, 4206, 701, 701, 4208, 4209, 475, 475, 4211, 4212, 470, 470, 482,
+ 482, 4214, 4215, 476, 476, 494, 494, 4217, 4218, 495, 495, 4220, 4221, 474,
+ 474, 519, 519, 4223, 4224, 457, 457, 701, 701, 4226, 4227, 518, 518, 4229,
+ 4230, 4231, 4232, 4232, 4233, 4234, 4235, 4236, 4236, 4237, 4238, 4239, 4240,
+ 4240, 4241, 4242, 470, 470, 4244, 4245, 536, 536, 4247, 4248, 457, 457, 4250,
+ 4251, 457, 457, 4253, 4254, 518, 518, 4256, 4257, 4258, 4255, 4252, 4249,
+ 4246, 4243, 4228, 4225, 4222, 4219, 4216, 4213, 4210, 4207, 4204, 4201, 4259,
+ 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 4272,
+ 4273, 4274, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 4267, 4268, 4269,
+ 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 4280, 523, 523,
+ 4282, 4283, 4284, 4285, 4285, 4286, 4287, 4288, 4289, 4289, 4290, 4291, 4292,
+ 4293, 4293, 4294, 4295, 4296, 4297, 4297, 4298, 4299, 4300, 4301, 4301, 4302,
+ 4303, 4304, 4281, 4305, 4306, 4305, 4306, 4307, 4308, 402, 402, 4310, 4311,
+ 4312, 4313, 4313, 4314, 4315, 4316, 4317, 4317, 4318, 4319, 4320, 4321, 4321,
+ 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, 4334,
+ 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, 403, 403, 4345, 4346,
+ 4347, 4348, 4348, 4349, 4350, 4351, 4352, 4352, 4353, 4354, 4355, 4356, 4356,
+ 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369,
+ 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4344, 4380, 4380,
+ 4381, 4381, 4382, 4383, 406, 406, 4385, 4386, 4387, 4388, 4388, 4389, 4390,
+ 4391, 4392, 4392, 4393, 4394, 4395, 4396, 4396, 4397, 4398, 4399, 4400, 4401,
+ 4402, 4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, 4414,
+ 4415, 4416, 4417, 4418, 4419, 4420, 4420, 4421, 4422, 404, 404, 4424, 4425,
+ 4426, 4427, 4427, 4428, 4429, 4430, 4431, 4431, 4432, 4433, 4434, 4435, 4435,
+ 4436, 4437, 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 4448,
+ 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 408, 408, 4459, 4460,
+ 4461, 4462, 4462, 4463, 4464, 4465, 4466, 4466, 4467, 4468, 4469, 4470, 4470,
+ 4471, 4472, 4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 4483,
+ 4484, 4485, 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, 4458, 4495, 4495,
+ 4494, 4494, 4496, 4497, 407, 407, 4499, 4500, 4501, 4502, 4502, 4503, 4504,
+ 4505, 4506, 4506, 4507, 4508, 4509, 4510, 4510, 4511, 4512, 4513, 4514, 4515,
+ 4516, 4517, 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, 4526, 4527, 4528,
+ 4529, 4530, 4531, 4532, 4533, 4534, 4534, 4535, 4536, 409, 409, 4538, 4539,
+ 4540, 4541, 4541, 4542, 4543, 4544, 4545, 4545, 4546, 4547, 4548, 4549, 4549,
+ 4550, 4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562,
+ 4563, 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, 4573, 4574,
+ 4575, 4576, 4577, 4577, 4578, 4579, 4580, 4581, 4581, 4582, 4583, 4584, 4585,
+ 4585, 4586, 4587, 4588, 4589, 4589, 4590, 4591, 4592, 4593, 4593, 4594, 4595,
+ 4596, 4597, 4597, 4598, 4599, 4600, 4601, 4601, 4602, 4603, 4604, 4605, 4605,
+ 4606, 4607, 4608, 4609, 4609, 4610, 4611, 4612, 4613, 4613, 4614, 4615, 410,
+ 410, 4617, 4618, 4619, 4620, 4620, 4621, 4622, 4623, 4624, 4624, 4625, 4626,
+ 4627, 4628, 4628, 4629, 4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638,
+ 4639, 4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, 405,
+ 405, 4652, 4653, 4654, 4655, 4655, 4656, 4657, 4658, 4659, 4659, 4660, 4661,
+ 4662, 4663, 4663, 4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673,
+ 4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686,
+ 4651, 4616, 4687, 4688, 4689, 4687, 4688, 4689, 4690, 4691, 481, 481, 4693,
+ 4694, 4695, 4696, 4696, 4697, 4698, 4699, 4700, 4700, 4701, 4702, 4703, 4704,
+ 4704, 4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4712, 4713, 4714, 393,
+ 393, 4716, 4717, 4718, 4719, 4719, 4720, 4721, 4722, 4723, 4723, 4724, 4725,
+ 4726, 4727, 4727, 4728, 4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 4737,
+ 4738, 4739, 4740, 4741, 4742, 4743, 4743, 4744, 4745, 4746, 4747, 4747, 4748,
+ 4749, 4750, 4751, 4751, 4752, 4753, 4754, 4755, 4755, 4756, 4757, 4380, 4380,
+ 4759, 4760, 4495, 4495, 4762, 4763, 401, 401, 4765, 4766, 4767, 4768, 4768,
+ 4769, 4770, 4771, 4772, 4772, 4773, 4774, 4775, 4776, 4776, 4777, 4778, 4779,
+ 4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792,
+ 4793, 4794, 4795, 4796, 4796, 4797, 4798, 4799, 4764, 4761, 4758, 4715, 4692,
+ 4537, 4498, 4423, 4384, 4309, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807,
+ 4808, 4809, 4810, 4800, 4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 4809,
+ 4810, 4811, 4812, 4813, 4814, 4815, 4816, 92, 4817, 4818, 4818, 4819, 4820,
+ 4821, 4822, 4822, 4823, 4824, 4825, 4826, 4826, 4827, 4828, 4829, 4830, 4830,
+ 4831, 4832, 340, 782, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841, 4842,
+ 4843, 4844, 4845, 4846, 4847, 4848, 4849, 4849, 4850, 4851, 4852, 4853, 4853,
+ 4854, 4855, 782, 4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 4865, 4866,
+ 4867, 4868, 4869, 4870, 4871, 4872, 4872, 4873, 4874, 4875, 4876, 4876, 4877,
+ 4878, 632, 632, 4880, 4881, 594, 594, 4883, 4884, 621, 4886, 4887, 4888,
+ 4889, 4889, 4890, 4891, 4892, 4885, 4882, 4893, 3388, 4894, 4895, 4893, 3388,
+ 4894, 4895, 4896, 4897, 4898, 3386, 3386, 4899, 4900, 4901, 4902, 4903, 4903,
+ 4904, 4905, 3363, 4907, 4908, 4909, 4910, 4910, 4911, 4912, 4913, 4914, 4914,
+ 4915, 4916, 4917, 4918, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 4925, 4926,
+ 4926, 4927, 4928, 4929, 4930, 4930, 4931, 4932, 4933, 4934, 4934, 4935, 4936,
+ 4937, 4938, 4938, 4939, 4940, 4941, 4942, 4942, 4943, 4944, 4945, 4946, 4946,
+ 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4954, 4955, 4956, 4957, 4958,
+ 4958, 4959, 4960, 4961, 4962, 4962, 4963, 4964, 4965, 4966, 4966, 4967, 4968,
+ 4969, 4970, 4970, 4971, 4972, 4973, 4974, 4974, 4975, 4976, 4977, 4978, 4979,
+ 4980, 4981, 4982, 4982, 4983, 4984, 4985, 4986, 4986, 4987, 4988, 4989, 4990,
+ 4990, 4991, 4992, 4993, 4994, 4994, 4995, 4996, 4997, 4998, 4999, 5000, 5001,
+ 5002, 5002, 5003, 5004, 5005, 5006, 5006, 5007, 5008, 5009, 5010, 5010, 5011,
+ 5012, 5013, 5014, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5022,
+ 5023, 5024, 5025, 5026, 5026, 5027, 5028, 5029, 5030, 5030, 5031, 5032, 5033,
+ 5034, 5034, 5035, 5036, 5037, 5038, 5038, 5039, 5040, 5041, 5042, 5042, 5043,
+ 5044, 5045, 4906, 4879, 4856, 4833, 5046, 5047, 5048, 5049, 5050, 5046, 5047,
+ 5048, 5049, 5050, 5051, 5052, 3585, 5054, 5055, 5056, 5057, 5058, 5059, 5060,
+ 5061, 5062, 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 543,
+ 543, 5073, 3411, 5074, 5075, 49, 4859, 5077, 5077, 5078, 5079, 5080, 5081,
+ 5081, 5082, 5083, 5084, 5085, 5085, 5086, 5087, 5088, 5076, 5089, 5090, 5089,
+ 5090, 5091, 5092, 3501, 5094, 5095, 5096, 5097, 3692, 5097, 3692, 5098, 5099,
+ 975, 5101, 5102, 986, 989, 997, 1000, 5104, 5105, 5106, 5103, 749, 1008,
+ 5107, 5108, 5109, 5110, 543, 750, 5112, 5113, 48, 5114, 49, 5111, 594, 765,
+ 951, 1564, 5115, 5116, 5117, 5118, 234, 268, 674, 1041, 1042, 5120, 5121,
+ 229, 236, 247, 715, 5123, 5124, 457, 632, 5126, 5127, 469, 470, 474, 475,
+ 476, 481, 701, 5129, 5130, 235, 237, 238, 245, 246, 482, 493, 494, 495, 502,
+ 5132, 5133, 248, 249, 251, 448, 515, 518, 519, 523, 526, 535, 5135, 5136,
+ 263, 462, 536, 540, 5138, 5139, 250, 388, 507, 828, 5141, 5142, 393, 401,
+ 402, 403, 404, 405, 406, 407, 408, 409, 5144, 5145, 5146, 5143, 5140, 5137,
+ 5134, 5131, 5128, 5125, 5122, 5147, 5148, 5149, 5150, 5151, 5152, 5153, 5154,
+ 5155, 5156, 5157, 369, 410, 694, 5159, 5160, 5161, 5162, 5163, 5164, 621,
+ 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 5166, 5167, 5168, 5169,
+ 5170, 5171, 5172, 5165, 5158, 5173, 5174, 5175, 5176, 5177, 591, 835, 5179,
+ 5180, 437, 5182, 5183, 43, 5184, 2, 5181, 5178, 5119, 340, 512, 763, 764,
+ 1086, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 5196,
+ 5196, 5197, 5198, 5199, 5200, 5200, 5201, 5202, 1612, 1613, 5204, 5205, 1617,
+ 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 5207, 5208, 462, 1638,
+ 1639, 5210, 5211, 694, 1643, 1644, 1645, 1646, 1647, 5213, 5214, 674, 5216,
+ 5217, 340, 1655, 5219, 5220, 1658, 1659, 5222, 5223, 5224, 5221, 5218, 5215,
+ 5212, 5209, 5206, 5225, 5226, 5227, 5228, 5229, 5230, 5231, 5232, 5233, 1671,
+ 1672, 1673, 5235, 5236, 1678, 1679, 1680, 5238, 5239, 1685, 1686, 1687, 1688,
+ 5241, 5242, 1694, 1695, 1696, 1697, 1698, 1699, 5244, 5245, 1707, 1708, 5247,
+ 5248, 5249, 5246, 5243, 5240, 5237, 3092, 5250, 5251, 5252, 5253, 5254, 5255,
+ 5256, 986, 989, 1008, 5258, 5259, 997, 1000, 5261, 5262, 1041, 1042, 1720,
+ 1721, 1722, 1723, 1724, 1725, 1726, 5264, 5265, 1735, 5267, 5268, 5269, 268,
+ 1738, 5270, 5271, 5272, 1742, 1743, 1744, 1745, 5274, 5275, 5276, 5273, 5266,
+ 5263, 5260, 5277, 5278, 5279, 5280, 5281, 5282, 5283, 1757, 1758, 5285, 5286,
+ 5287, 5288, 5289, 5290, 975, 5292, 5293, 5294, 5295, 5296, 5297, 835, 1767,
+ 5299, 5300, 369, 1770, 5302, 5303, 543, 632, 1773, 1774, 1775, 5305, 5306,
+ 1780, 1781, 5308, 5309, 5310, 5307, 5304, 5301, 5298, 5291, 5311, 5312, 5313,
+ 5314, 5315, 5316, 5317, 5318, 1792, 5320, 5321, 5322, 5323, 5324, 5325, 5326,
+ 5327, 5328, 5329, 5330, 5319, 5284, 5257, 5234, 5331, 5332, 5333, 5334, 5335,
+ 5336, 5337, 1805, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 1810, 5346, 5347,
+ 5348, 1814, 5350, 5351, 5352, 5353, 5354, 5355, 5356, 474, 475, 476, 5357,
+ 5358, 5359, 5360, 5349, 3182, 3528, 5361, 5362, 5363, 5364, 1824, 1825, 5366,
+ 5367, 594, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 5376, 5377, 5378, 5379,
+ 5368, 457, 3191, 5380, 5381, 5382, 5383, 1837, 5385, 5386, 5387, 229, 5388,
+ 5389, 5390, 1842, 5392, 5393, 1845, 1846, 1847, 5395, 5396, 1852, 1853, 5398,
+ 5399, 1857, 5401, 5402, 5403, 5400, 5397, 5394, 5404, 5405, 5406, 5407, 5408,
+ 5409, 5410, 5391, 3198, 5411, 5412, 5413, 5414, 1868, 5416, 5417, 1871, 5419,
+ 5420, 1874, 1875, 1876, 1877, 1878, 5422, 5423, 5424, 5421, 5418, 502, 5425,
+ 5426, 5427, 5428, 5429, 1889, 5431, 5432, 5433, 5434, 5435, 5436, 1018, 1019,
+ 1020, 1021, 5438, 5439, 1022, 1026, 5441, 5442, 5443, 5440, 5444, 5445, 5446,
+ 5447, 437, 5449, 5450, 5451, 5452, 5453, 5454, 1902, 5456, 5457, 5458, 5459,
+ 5460, 5461, 5462, 5463, 5464, 5465, 5466, 5455, 5448, 5437, 5430, 5467, 5468,
+ 5469, 5470, 5471, 5472, 5473, 1915, 5475, 5476, 5477, 5478, 5479, 5480, 5481,
+ 5482, 5483, 5484, 1922, 5486, 5487, 1925, 5489, 5490, 1928, 5492, 5493, 1931,
+ 5495, 5496, 5497, 5494, 5491, 5488, 5498, 5499, 5500, 5501, 5502, 5503, 5504,
+ 5505, 5506, 5507, 5508, 5485, 5509, 5510, 5511, 5512, 1944, 5514, 5515, 1947,
+ 5517, 5518, 5519, 5516, 3212, 5520, 5521, 5522, 5523, 512, 782, 5525, 5526,
+ 715, 1954, 1955, 1956, 1957, 5528, 5529, 234, 235, 236, 237, 238, 388, 5531,
+ 5532, 1964, 5534, 5535, 12, 5536, 245, 247, 248, 249, 250, 251, 448, 515,
+ 5537, 5538, 5539, 518, 519, 621, 828, 1969, 5541, 5542, 526, 1564, 1972,
+ 5544, 5545, 5546, 5543, 5540, 5533, 5530, 5527, 3232, 5547, 5548, 5549, 5550,
+ 5551, 5552, 5553, 5554, 1982, 5556, 5557, 1985, 5559, 5560, 1988, 5562, 5563,
+ 5564, 72, 5561, 73, 5558, 263, 5565, 5566, 5567, 5568, 5569, 540, 762, 763,
+ 764, 791, 1086, 5571, 5572, 393, 749, 750, 765, 1996, 1997, 1998, 1999, 5574,
+ 5575, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 5577, 5578, 1023,
+ 1024, 1025, 5580, 5581, 5582, 195, 951, 2024, 2026, 2027, 2028, 5583, 5584,
+ 5585, 2035, 2036, 2037, 2038, 2039, 2040, 5587, 5588, 2048, 2049, 5590, 5591,
+ 591, 5593, 5594, 5595, 5592, 5589, 5586, 5579, 5576, 5573, 5570, 5596, 5597,
+ 5598, 5599, 5600, 5601, 5602, 5603, 5604, 5605, 5606, 5555, 5524, 5513, 5474,
+ 5415, 5384, 5365, 5338, 1611, 3564, 3564, 5607, 5608, 5609, 5610, 5611, 5612,
+ 5613, 5614, 5615, 5616, 5617, 3249, 3250, 5619, 5620, 2075, 5622, 2076, 5624,
+ 5625, 5623, 5626, 5627, 5628, 5629, 2080, 5631, 2081, 5633, 2082, 5635, 2083,
+ 5637, 5638, 5636, 5634, 5632, 5639, 5640, 5641, 5642, 5643, 5644, 2089, 5646,
+ 2090, 5648, 5649, 5647, 5650, 5651, 5652, 5653, 2094, 5655, 2095, 5657, 5658,
+ 5656, 5659, 5660, 5661, 5662, 2099, 5664, 5665, 5666, 5667, 5668, 2102, 5670,
+ 2103, 5672, 2104, 5674, 5675, 5673, 5671, 5676, 5677, 5678, 5679, 5680, 2109,
+ 5682, 2110, 5684, 2111, 5686, 2112, 5688, 2113, 5690, 2114, 5692, 2115, 5694,
+ 5695, 5693, 5691, 5689, 5687, 5685, 5683, 5696, 5697, 5698, 5699, 5700, 5701,
+ 5702, 5703, 5704, 2124, 5706, 2125, 5708, 2126, 5710, 2127, 5712, 2128, 5714,
+ 2129, 5716, 2130, 5718, 2131, 5720, 5721, 5719, 5717, 5715, 5713, 5711, 5709,
+ 5707, 5722, 5723, 5724, 5725, 5726, 5727, 5728, 5729, 5730, 5731, 5732, 5705,
+ 5681, 5669, 5663, 5654, 5645, 5630, 5733, 5734, 5735, 5736, 5737, 5738, 5739,
+ 5740, 5741, 5742, 2150, 5744, 2151, 5746, 2152, 5748, 2153, 5750, 2154, 5752,
+ 2155, 5754, 2156, 5756, 5757, 5755, 5753, 5751, 5749, 5747, 5745, 5758, 5759,
+ 5760, 5761, 5762, 5763, 5764, 5765, 5766, 2165, 5768, 2166, 5770, 2167, 5772,
+ 2168, 5774, 2169, 5776, 2170, 5778, 5779, 5777, 5775, 5773, 5771, 5769, 5780,
+ 5781, 5782, 5783, 5784, 5785, 5786, 5787, 2178, 5789, 2179, 5791, 2180, 5793,
+ 2181, 5795, 2182, 5797, 5798, 5796, 5794, 5792, 5790, 5799, 5800, 5801, 5802,
+ 5803, 5804, 5805, 2189, 5807, 2190, 5809, 2191, 5811, 2192, 5813, 5814, 5812,
+ 5810, 5808, 5815, 5816, 5817, 5818, 5819, 5820, 5821, 5806, 5788, 5767, 5822,
+ 5823, 5824, 5825, 5826, 5827, 2203, 5829, 5830, 5831, 5832, 5833, 2206, 5835,
+ 2207, 5837, 2208, 5839, 2209, 5841, 5842, 5840, 5838, 5836, 5843, 5844, 5845,
+ 5846, 5847, 5848, 5849, 5834, 5850, 5851, 5852, 5853, 2218, 5855, 2219, 5857,
+ 2220, 5859, 5860, 5858, 5856, 5861, 5862, 5863, 5864, 5865, 2225, 5867, 5868,
+ 5869, 5870, 5871, 2228, 5873, 2229, 5875, 5876, 5874, 5877, 5878, 5879, 5880,
+ 2233, 5882, 5883, 5884, 5885, 5886, 5887, 5881, 5872, 5866, 5888, 5889, 5890,
+ 5891, 5892, 5893, 2241, 5895, 5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903,
+ 2246, 5905, 2247, 5907, 2248, 5909, 5910, 5908, 5906, 5911, 5912, 5913, 5914,
+ 5915, 2253, 5917, 5918, 5919, 5920, 5921, 5922, 5916, 5923, 5924, 5925, 5926,
+ 5927, 5904, 5894, 5854, 5828, 5743, 5928, 5929, 5930, 5931, 5932, 5933, 5934,
+ 5935, 2266, 5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 5945, 2271, 5947,
+ 5948, 5949, 5950, 5951, 2274, 5953, 5954, 5955, 5956, 5957, 5958, 5952, 5959,
+ 5960, 5961, 5962, 2280, 5964, 5965, 5966, 5967, 5968, 5969, 5970, 5971, 5972,
+ 5973, 5963, 5946, 5974, 5975, 5976, 5977, 5978, 2289, 5980, 5981, 5982, 5983,
+ 5984, 5985, 5986, 5987, 5988, 2294, 5990, 5991, 5992, 5993, 5994, 5995, 5996,
+ 5997, 5998, 5999, 5989, 6000, 6001, 6002, 6003, 2302, 6005, 6006, 6007, 6008,
+ 6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 6017, 2309, 6019, 6020, 6021,
+ 6022, 6023, 6024, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 2316, 6033, 6034,
+ 6035, 6036, 6037, 6038, 6039, 6040, 6041, 2321, 6043, 2322, 6045, 2323, 6047,
+ 2324, 6049, 6050, 6048, 6046, 6044, 6051, 6052, 6053, 6054, 6055, 6056, 6057,
+ 6058, 6059, 6060, 6061, 6042, 6062, 6063, 6064, 6065, 6066, 6032, 6018, 6004,
+ 5979, 5936, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 6076, 6076,
+ 6077, 6078, 6079, 6080, 6080, 6081, 6082, 6083, 6084, 6084, 6085, 6086, 6087,
+ 6088, 6088, 6089, 6090, 6091, 5621, 5618, 6092, 6092, 6093, 3255, 3256, 3257,
+ 3258, 3259, 3568, 3569, 3262, 6094, 6095, 6096, 6097, 6098, 6098, 6099, 6100,
+ 975, 6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 6109, 6110, 6111, 6112,
+ 6113, 6113, 6114, 6115, 6116, 6117, 6117, 6118, 6119, 6120, 6121, 6122, 6123,
+ 6124, 6125, 6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 6134, 6135, 6136,
+ 6137, 6138, 6139, 1041, 6141, 6142, 6143, 6144, 6145, 6146, 6147, 6148, 6148,
+ 6149, 6150, 6151, 6152, 6152, 6153, 6154, 6155, 6156, 6156, 6157, 6158, 6159,
+ 6160, 6160, 6161, 6162, 6163, 6164, 6164, 6165, 6166, 6167, 6168, 6169, 6170,
+ 6171, 6172, 6173, 6174, 6175, 6176, 6177, 6178, 6179, 6180, 6181, 6182, 6183,
+ 6184, 6185, 6186, 6187, 6188, 6188, 6189, 6190, 6191, 6192, 6192, 6193, 6194,
+ 6195, 6196, 6196, 6197, 6198, 6199, 6200, 6200, 6201, 6202, 6203, 6204, 6204,
+ 6205, 6206, 6207, 6208, 6208, 6209, 6210, 6211, 6212, 6212, 6213, 6214, 6215,
+ 749, 750, 6216, 6217, 6218, 1042, 6220, 6221, 6222, 6223, 6224, 6225, 6226,
+ 6227, 6227, 6228, 6229, 6230, 6231, 6231, 6232, 6233, 6234, 6235, 6235, 6236,
+ 6237, 6238, 6239, 6239, 6240, 6241, 6242, 6243, 6243, 6244, 6245, 6246, 6247,
+ 6248, 6249, 6250, 6251, 6251, 6252, 6253, 6254, 6255, 6255, 6256, 6257, 6258,
+ 6259, 6259, 6260, 6261, 6262, 6263, 6263, 6264, 6265, 6266, 6267, 6267, 6268,
+ 6269, 6270, 6271, 6271, 6272, 6273, 6274, 6275, 6275, 6276, 6277, 6278, 6279,
+ 6280, 6281, 43, 6282, 44, 6219, 340, 763, 764, 765, 782, 791, 1086, 6283,
+ 6284, 6285, 6286, 6287, 6288, 6289, 6290, 6291, 6292, 6293, 6294, 6295, 6296,
+ 6297, 6298, 6299, 6300, 6301, 6302, 512, 762, 763, 6304, 6305, 764, 6307,
+ 6308, 340, 782, 6310, 6311, 791, 6313, 6314, 765, 835, 1086, 6316, 6317,
+ 6318, 6315, 6312, 6309, 6306, 6320, 6319, 6321, 6322, 6323, 6324, 6325, 6326,
+ 314, 5452, 6327, 6328, 6329, 6330, 6331, 6332, 6333, 6334, 6335, 6335, 6336,
+ 6337, 6338, 6303, 6140, 6339, 6339, 6340, 6341, 6342, 6343, 314, 314, 6345,
+ 6346, 6347, 6348, 6348, 6349, 6350, 6351, 6352, 6353, 6354, 6355, 6356, 6357,
+ 6358, 6359, 6360, 6361, 6362, 311, 6364, 6365, 6366, 6367, 6368, 6369, 6370,
+ 6371, 6372, 6373, 6374, 6375, 6376, 6377, 6378, 6379, 6380, 6381, 6382, 6383,
+ 6383, 6384, 6385, 6386, 6387, 6387, 6388, 6389, 6390, 6391, 6391, 6392, 6393,
+ 6394, 6395, 6396, 6397, 6398, 6399, 6400, 6401, 6402, 6403, 6404, 6405, 512,
+ 6407, 6408, 6409, 6410, 6411, 6412, 6413, 6414, 6415, 6416, 6417, 6418, 6419,
+ 6420, 6421, 750, 6422, 6423, 6424, 762, 6426, 6427, 6428, 6429, 6430, 6431,
+ 6432, 6433, 6434, 6435, 6436, 6437, 6438, 6439, 6440, 6441, 6442, 6443, 763,
+ 6445, 6446, 6447, 6448, 6449, 6450, 6451, 6452, 6453, 6454, 6455, 6456, 6457,
+ 6458, 6459, 6460, 6461, 6462, 764, 6464, 6465, 6466, 6467, 6468, 6469, 6470,
+ 6471, 6472, 6473, 6474, 6475, 6476, 6477, 6478, 6479, 6480, 6481, 1086, 6483,
+ 6484, 6485, 6486, 6487, 6488, 6489, 6490, 6491, 6492, 6493, 6494, 6495, 6496,
+ 6497, 6498, 6499, 6500, 340, 6502, 6503, 6504, 6505, 6506, 6507, 6508, 6509,
+ 6510, 6511, 6512, 6513, 6514, 6515, 6516, 6517, 6518, 6519, 782, 6521, 6522,
+ 6523, 6524, 6525, 6526, 6527, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 6535,
+ 6536, 6537, 6538, 6320, 6540, 6541, 6542, 6543, 6544, 6545, 6546, 6547, 6548,
+ 6549, 6550, 6551, 6552, 6553, 765, 6555, 6556, 6557, 6558, 6559, 6560, 6561,
+ 6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 6570, 6571, 6572, 40, 6573,
+ 48, 6554, 49, 6539, 50, 6520, 3, 6501, 41, 6482, 42, 6463, 43, 6444, 44,
+ 6425, 6574, 6575, 6576, 6577, 6578, 6579, 6580, 6581, 6582, 6583, 6584, 6585,
+ 6586, 6587, 6588, 6589, 6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 6598,
+ 6599, 6600, 6601, 6406, 6602, 6603, 6604, 6605, 6606, 6363, 6344, 6607, 6608,
+ 6609, 6610, 6611, 6612, 6613, 6613, 6614, 6615, 6616, 6101, 5203, 6617, 6618,
+ 6619, 6617, 6618, 6619, 6620, 6621, 1564, 6623, 6624, 6625, 6626, 6627, 6628,
+ 6629, 6630, 6631, 6632, 6633, 6634, 6635, 6636, 6637, 6638, 6638, 6639, 6640,
+ 6641, 6642, 6643, 6644, 6645, 6646, 6646, 6647, 6648, 6649, 6650, 6650, 6651,
+ 6652, 3737, 6654, 6655, 6656, 6657, 6658, 6659, 835, 835, 6661, 6662, 6663,
+ 6664, 6664, 6665, 6666, 6667, 6668, 6668, 6669, 6670, 6671, 6660, 6672, 6673,
+ 6672, 6673, 6674, 6675, 835, 6677, 6678, 6679, 6680, 6681, 6682, 6683, 6684,
+ 6685, 6686, 6687, 6688, 6689, 6690, 6691, 6692, 6693, 6694, 835, 835, 6696,
+ 6697, 6698, 6699, 6700, 6701, 6702, 6703, 6704, 6705, 6706, 6707, 6708, 6709,
+ 6710, 6711, 6712, 6713, 6714, 6715, 6716, 6717, 6718, 6719, 6720, 6721, 6722,
+ 6723, 6724, 6725, 6726, 6727, 6728, 6729, 6730, 6731, 6732, 6733, 6734, 6735,
+ 6735, 6736, 6737, 6738, 6695, 6740, 6739, 6740, 6741, 6742, 6743, 6676, 6744,
+ 6745, 6744, 6745, 6746, 6747, 750, 6749, 6750, 6751, 512, 762, 763, 764,
+ 765, 6752, 6753, 6754, 6755, 6756, 6756, 6757, 6758, 6759, 6760, 6760, 6761,
+ 6762, 6763, 6764, 6764, 6765, 6766, 6767, 512, 762, 763, 764, 765, 6768,
+ 6768, 6769, 6770, 3248, 6772, 6773, 951, 951, 6775, 6776, 6777, 6778, 6778,
+ 6779, 6780, 6781, 6782, 6782, 6783, 6784, 6785, 6786, 6786, 6787, 6788, 6789,
+ 6790, 6790, 6791, 6792, 6793, 6774, 6795, 6794, 6796, 6797, 6798, 6799, 6799,
+ 6800, 6801, 388, 388, 6803, 6804, 6805, 6806, 6806, 6807, 6808, 6809, 6810,
+ 6810, 6811, 6812, 6813, 6814, 6814, 6815, 6816, 6817, 6818, 6819, 6820, 6821,
+ 6822, 6823, 6824, 6825, 6826, 6827, 6828, 6829, 6830, 6831, 6832, 6833, 6834,
+ 6835, 6836, 6837, 6838, 6838, 6839, 6840, 6841, 6842, 6842, 6843, 6844, 6845,
+ 6846, 6846, 6847, 6848, 6849, 6850, 6850, 6851, 6852, 6853, 6854, 6854, 6855,
+ 6856, 6857, 6858, 6858, 6859, 6860, 6861, 6862, 6862, 6863, 6864, 6865, 6866,
+ 6866, 6867, 6868, 6869, 6870, 6870, 6871, 6872, 6873, 6874, 6874, 6875, 6876,
+ 6877, 6878, 6878, 6879, 6880, 6881, 6882, 6882, 6883, 6884, 6885, 6886, 6887,
+ 6888, 6889, 6890, 6890, 6891, 6892, 674, 3493, 3493, 6894, 6895, 3984, 6897,
+ 6898, 6899, 6900, 6900, 6901, 6902, 6903, 6904, 6904, 6905, 6906, 6907, 6908,
+ 6908, 6909, 6910, 6911, 6912, 6912, 6913, 6914, 4011, 6916, 6917, 6918, 6919,
+ 6919, 6920, 6921, 6922, 6923, 6923, 6924, 6925, 975, 6105, 6927, 6928, 6929,
+ 6930, 6930, 6931, 6932, 3313, 3313, 6934, 6935, 6936, 6937, 6937, 6938, 6939,
+ 6940, 6941, 6942, 6943, 4044, 4045, 4044, 4045, 4049, 6945, 6946, 6947, 6948,
+ 6949, 6950, 4059, 4060, 4059, 4060, 4064, 6952, 6953, 6954, 6955, 6956, 6957,
+ 6958, 6951, 1008, 6959, 6960, 6961, 6962, 6963, 1008, 6959, 6960, 6964, 6965,
+ 6966, 6967, 6968, 6968, 6969, 6970, 6971, 2, 6944, 6933, 6972, 6973, 6974,
+ 6972, 6973, 6974, 6975, 6976, 6795, 4121, 6978, 6979, 6980, 6981, 6982, 6983,
+ 6984, 6985, 6985, 6986, 6987, 6988, 6989, 6989, 6990, 6991, 6992, 6993, 6993,
+ 6994, 6995, 6996, 6997, 6997, 6998, 6999, 7000, 7001, 7001, 7002, 7003, 7004,
+ 7005, 7005, 7006, 7007, 7008, 6977, 6926, 6915, 6896, 6893, 6802, 6771, 6748,
+ 6653, 6622, 5100, 5093, 5053, 4194, 3069, 3034, 2840, 2823, 7027, 7028, 7029,
+ 7030, 7031, 2830, 7033, 2833, 7035, 7036, 7034, 7038, 7037, 7039, 7040, 2841,
+ 7042, 7043, 7044, 7045, 7046, 2848, 7048, 7049, 7050, 7050, 7051, 7052, 7053,
+ 7054, 7054, 7055, 7056, 7057, 7058, 7058, 7059, 7060, 7061, 7062, 7062, 7063,
+ 7064, 7065, 7066, 7066, 7067, 7068, 7069, 7070, 7070, 7071, 7072, 7073, 7074,
+ 7074, 7075, 7076, 7077, 7078, 7079, 7080, 7081, 7082, 7082, 7083, 7084, 7085,
+ 7086, 7086, 7087, 7088, 7089, 7090, 7090, 7091, 7092, 7093, 7094, 7094, 7095,
+ 7096, 7097, 7098, 7098, 7099, 7100, 7101, 7102, 7102, 7103, 7104, 7105, 7106,
+ 7106, 7107, 7108, 7109, 7110, 7110, 7111, 7112, 7113, 7114, 7115, 7116, 7117,
+ 7118, 7118, 7119, 7120, 7121, 7122, 7122, 7123, 7124, 7125, 7126, 7126, 7127,
+ 7128, 2931, 7130, 2934, 7132, 7133, 7131, 7134, 7135, 7136, 7137, 7138, 7139,
+ 7140, 7141, 7142, 7143, 7144, 7145, 7146, 7147, 7148, 7149, 7150, 7151, 7152,
+ 7153, 7154, 7155, 7156, 7157, 7158, 7159, 7160, 7161, 7162, 7163, 7163, 7164,
+ 7165, 7166, 7167, 7168, 7169, 7170, 7171, 7171, 7172, 7173, 7174, 7175, 7175,
+ 7176, 7177, 2982, 7179, 7180, 7181, 7181, 7182, 7183, 7184, 7185, 7185, 7186,
+ 7187, 7188, 7189, 7189, 7190, 7191, 2997, 7193, 7194, 7195, 7195, 7196, 7197,
+ 3004, 7199, 7200, 7201, 7202, 7203, 7204, 7205, 7206, 7207, 7208, 7209, 7210,
+ 7211, 7212, 7213, 7213, 7214, 7215, 7216, 7198, 7218, 7218, 7217, 7217, 7219,
+ 7220, 7221, 7192, 7178, 7129, 7223, 7223, 7222, 7224, 7225, 7222, 7224, 7225,
+ 7226, 7227, 3035, 7229, 7230, 7231, 7231, 7232, 7233, 7234, 7235, 7235, 7236,
+ 7237, 7238, 7239, 7239, 7240, 7241, 7242, 7243, 7243, 7244, 7245, 7246, 7247,
+ 7248, 7249, 7250, 7251, 7252, 7253, 7254, 7255, 7255, 7256, 7257, 7258, 7259,
+ 7259, 7260, 7261, 3070, 7263, 7264, 7265, 7266, 7267, 3077, 7269, 7270, 7271,
+ 7272, 7273, 7274, 7268, 7275, 7276, 7277, 7278, 3089, 7280, 7281, 7282, 7283,
+ 7284, 7285, 7286, 7287, 7288, 7289, 7279, 7290, 7291, 7292, 7293, 7294, 7295,
+ 7296, 7297, 7298, 7299, 7299, 7300, 7301, 7302, 7303, 7303, 7304, 7305, 7306,
+ 7307, 7307, 7308, 7309, 3121, 7311, 7312, 7313, 7313, 7314, 7315, 7316, 7317,
+ 7317, 7318, 7319, 7320, 7321, 7321, 7322, 7323, 7324, 7325, 7325, 7326, 7327,
+ 3140, 7329, 3143, 7331, 3146, 7333, 7334, 7332, 7330, 7335, 7336, 7337, 7335,
+ 7336, 7337, 7338, 7339, 3155, 7341, 7342, 7343, 7290, 7291, 7344, 7345, 3162,
+ 7347, 7348, 7349, 7350, 7351, 7352, 7353, 7354, 7355, 3173, 7357, 3176, 7359,
+ 3179, 7361, 7362, 7360, 7358, 7363, 7364, 7365, 7366, 7367, 3188, 7369, 7370,
+ 7371, 7372, 7373, 3195, 7375, 7376, 7029, 7377, 7378, 7379, 3202, 7381, 7382,
+ 7383, 7384, 7385, 3209, 7387, 7388, 7389, 7390, 7391, 3216, 7393, 3219, 7395,
+ 3222, 7397, 3225, 7399, 3228, 7401, 7402, 7400, 7398, 7396, 7394, 7403, 7404,
+ 7405, 7406, 7038, 7407, 7408, 7409, 3239, 7411, 3242, 7413, 3245, 7415, 7416,
+ 7414, 7412, 7417, 7418, 7419, 7420, 7421, 7422, 7410, 7392, 7386, 7380, 7374,
+ 7368, 7356, 7346, 7340, 7424, 7425, 7426, 7427, 7428, 7431, 7423, 7429, 7430,
+ 7432, 7433, 7434, 7078, 7078, 7436, 7437, 7438, 7439, 7439, 7440, 7441, 7442,
+ 7443, 7443, 7444, 7445, 7446, 7447, 7447, 7448, 7449, 7450, 7451, 7451, 7452,
+ 7453, 7454, 7455, 7455, 7456, 7457, 7458, 7459, 7459, 7460, 7461, 7462, 7463,
+ 7463, 7464, 7465, 7466, 7467, 7467, 7468, 7469, 7470, 7471, 7471, 7472, 7473,
+ 7474, 7475, 7475, 7476, 7477, 7218, 7218, 7479, 7480, 7481, 7478, 7482, 7482,
+ 7483, 7483, 7484, 7485, 7247, 7487, 7488, 7489, 7490, 7490, 7491, 7492, 7493,
+ 7494, 7494, 7495, 7496, 3329, 7498, 3332, 7500, 7501, 7502, 7502, 7503, 7504,
+ 7505, 7506, 7506, 7507, 7508, 7509, 7510, 7510, 7511, 7512, 7513, 7514, 7514,
+ 7515, 7516, 7517, 7518, 7518, 7519, 7520, 7521, 7522, 7522, 7523, 7524, 7525,
+ 7526, 7526, 7527, 7528, 7529, 7530, 7530, 7531, 7532, 7533, 7534, 7534, 7535,
+ 7536, 7537, 7538, 7538, 7539, 7540, 7541, 7542, 7542, 7543, 7544, 7545, 7546,
+ 7546, 7547, 7548, 3383, 7550, 7551, 7549, 7499, 7552, 7552, 7554, 7554, 7553,
+ 7553, 7555, 7556, 7557, 7558, 7558, 7559, 7560, 7561, 7562, 7562, 7563, 7564,
+ 3400, 7566, 7567, 7568, 7569, 7570, 7571, 7572, 7573, 7574, 7575, 543, 543,
+ 7576, 7577, 7578, 7579, 7580, 7580, 7581, 7582, 3419, 7584, 7585, 7586, 7586,
+ 7587, 7588, 7589, 7590, 7590, 7591, 7592, 7593, 7594, 7594, 7595, 7596, 7597,
+ 7598, 7598, 7599, 7600, 7601, 7602, 7602, 7603, 7604, 7605, 7606, 7606, 7607,
+ 7608, 7609, 7610, 7610, 7611, 7612, 7613, 7614, 7614, 7615, 7616, 7617, 7618,
+ 7618, 7619, 7620, 7621, 7622, 7622, 7623, 7624, 7625, 7626, 7626, 7627, 7628,
+ 7629, 7630, 7630, 7631, 7632, 7633, 7634, 7634, 7635, 7636, 7637, 7638, 7638,
+ 7639, 7640, 3478, 7642, 7643, 7644, 7644, 7645, 7646, 7647, 7648, 7648, 7649,
+ 7650, 7651, 7652, 7652, 7653, 7654, 7655, 7656, 7656, 7657, 7658, 7659, 7660,
+ 7660, 7661, 7662, 7663, 7641, 7664, 7664, 7665, 7665, 7666, 7667, 7047, 7669,
+ 7670, 7671, 7672, 7673, 7673, 7674, 7675, 3514, 7677, 7678, 7679, 7349, 7680,
+ 7681, 7682, 7683, 7684, 7685, 3525, 7687, 7688, 7363, 7364, 7689, 7690, 7691,
+ 7377, 7693, 7694, 3535, 7696, 3538, 7698, 7699, 7697, 7403, 7404, 7405, 7700,
+ 7701, 7702, 7703, 3546, 7705, 7706, 7418, 7707, 7708, 7709, 3553, 7711, 7712,
+ 7713, 7713, 7714, 7715, 7716, 7717, 7717, 7718, 7719, 7720, 7710, 7704, 7695,
+ 7692, 7686, 7426, 7431, 7721, 7721, 7725, 7726, 7722, 7723, 7724, 7727, 7728,
+ 7729, 7676, 7730, 7731, 7730, 7731, 7732, 7733, 3578, 7735, 7736, 7737, 7738,
+ 7739, 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, 7748, 7749, 7750, 7751,
+ 7752, 7753, 7754, 7755, 7756, 7757, 7757, 7758, 7759, 7760, 7761, 7761, 7762,
+ 7763, 7764, 7765, 7766, 7767, 3613, 7769, 7770, 7771, 7772, 7773, 7774, 7775,
+ 7776, 7777, 7778, 7779, 7780, 7781, 7782, 7783, 7784, 7785, 7223, 7223, 7787,
+ 7788, 3635, 7790, 7791, 7792, 7792, 7793, 7794, 7795, 7796, 7796, 7797, 7798,
+ 7799, 7800, 7800, 7801, 7802, 7803, 7804, 7804, 7805, 7806, 7807, 7808, 7808,
+ 7809, 7810, 7811, 7812, 7812, 7813, 7814, 3662, 7816, 7817, 7818, 7818, 7819,
+ 7820, 7821, 7822, 7822, 7823, 7824, 7825, 7826, 7826, 7827, 7828, 3677, 7830,
+ 7831, 7832, 7832, 7833, 7834, 7835, 7836, 7836, 7837, 7838, 7839, 7840, 7840,
+ 7841, 7842, 7843, 7844, 7844, 7845, 7846, 7847, 7829, 7815, 7789, 512, 762,
+ 763, 764, 765, 7848, 7849, 7850, 7851, 7848, 7849, 7850, 7851, 7852, 7853,
+ 7854, 7855, 7855, 7856, 7857, 7858, 7859, 7859, 7860, 7861, 7862, 7863, 7863,
+ 7864, 7865, 7866, 7867, 7867, 7868, 7869, 7870, 7786, 7768, 7871, 7871, 7872,
+ 7873, 7874, 7875, 7876, 7877, 7877, 7878, 7879, 7880, 7734, 7881, 7882, 7881,
+ 7882, 7883, 7884, 3734, 7886, 7887, 7888, 7889, 7890, 7891, 7892, 7892, 7893,
+ 7894, 3745, 7896, 7897, 7898, 7899, 7900, 7901, 7902, 7903, 7904, 7905, 7906,
+ 7907, 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, 7916, 7917, 7918, 7919,
+ 7920, 7921, 7922, 7923, 7924, 7925, 7926, 7926, 7927, 7928, 7929, 7895, 7930,
+ 7931, 7930, 7931, 7932, 7933, 3785, 7935, 7936, 7937, 7937, 7938, 7939, 7940,
+ 7941, 7941, 7942, 7943, 7944, 7945, 7945, 7946, 7947, 7948, 7949, 7949, 7950,
+ 7951, 7952, 7953, 7953, 7954, 7955, 7956, 7957, 7958, 7959, 7960, 7961, 7962,
+ 7963, 3816, 7965, 7966, 7967, 7967, 7968, 7969, 7970, 7971, 7971, 7972, 7973,
+ 7974, 7975, 7975, 7976, 7977, 7978, 7979, 7979, 7980, 7981, 7982, 7983, 7983,
+ 7984, 7985, 7986, 7987, 7987, 7988, 7989, 7990, 7991, 7991, 7992, 7993, 7994,
+ 7995, 7995, 7996, 7997, 7998, 7999, 7999, 8000, 8001, 8002, 8003, 8003, 8004,
+ 8005, 8006, 8007, 8007, 8008, 8009, 8010, 8011, 8012, 8013, 3867, 8015, 8016,
+ 8017, 8017, 8018, 8019, 8020, 8021, 8021, 8022, 8023, 8024, 8025, 8025, 8026,
+ 8027, 8028, 8029, 8029, 8030, 8031, 8032, 8033, 8033, 8034, 8035, 8036, 8037,
+ 8037, 8038, 8039, 8040, 8041, 8041, 8042, 8043, 8044, 8045, 8045, 8046, 8047,
+ 8048, 8049, 8049, 8050, 8051, 8052, 8053, 8053, 8054, 8055, 8056, 8057, 8058,
+ 8059, 7032, 8061, 8062, 8063, 8064, 8065, 8065, 8066, 8067, 8068, 8069, 8069,
+ 8070, 8071, 8072, 8073, 8073, 8074, 8075, 8076, 8077, 8077, 8078, 8079, 8080,
+ 8081, 8081, 8082, 8083, 8084, 8085, 8085, 8086, 8087, 8088, 8089, 8089, 8090,
+ 8091, 8092, 8060, 8014, 8093, 8093, 8094, 8095, 8096, 8097, 3952, 8099, 8100,
+ 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, 8098, 7964, 8109, 8109, 8110,
+ 8111, 8112, 8113, 8114, 8115, 8115, 8116, 8117, 3973, 8119, 8120, 8121, 8121,
+ 8122, 8123, 8124, 8125, 8125, 8126, 8127, 8128, 8129, 8129, 8130, 8131, 8132,
+ 8133, 8133, 8134, 8135, 8136, 8137, 8137, 8138, 8139, 8140, 8141, 8141, 8142,
+ 8143, 4000, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155,
+ 8155, 8156, 8157, 8158, 8159, 8159, 8160, 8161, 4019, 8163, 8164, 8165, 8165,
+ 8166, 8167, 8168, 8169, 8169, 8170, 8171, 8172, 8173, 8173, 8174, 8175, 8176,
+ 8177, 8177, 8178, 8179, 4038, 8181, 4041, 8183, 8184, 8182, 8185, 8185, 8186,
+ 8186, 8187, 8188, 8189, 8190, 8191, 8192, 4053, 8194, 4056, 8196, 8197, 8195,
+ 8198, 8198, 8199, 8199, 8200, 8201, 8202, 8203, 8204, 8205, 8206, 8193, 1008,
+ 8207, 8208, 8209, 8210, 8211, 8212, 8212, 8213, 8214, 8215, 8180, 8216, 8217,
+ 8216, 8217, 8218, 8219, 4082, 8221, 8222, 8223, 8224, 8225, 8226, 8227, 8228,
+ 8229, 4093, 8231, 8232, 8233, 8233, 8234, 8235, 8236, 8237, 8237, 8238, 8239,
+ 8240, 8241, 8241, 8242, 8243, 8244, 8245, 8245, 8246, 8247, 8248, 8249, 8249,
+ 8250, 8251, 8252, 8253, 8254, 8255, 8256, 8230, 8258, 8257, 8259, 8260, 8261,
+ 8262, 8262, 8263, 8264, 8265, 8266, 8266, 8267, 8268, 8269, 8270, 8270, 8271,
+ 8272, 8273, 8274, 8274, 8275, 8276, 8277, 8278, 8278, 8279, 8280, 8281, 8282,
+ 8282, 8283, 8284, 8285, 8220, 8162, 8144, 8118, 7934, 7885, 7668, 7583, 7565,
+ 7497, 7486, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296,
+ 8297, 8286, 8287, 8288, 8289, 8290, 8291, 8292, 8293, 8294, 8295, 8296, 8297,
+ 8298, 8299, 4164, 8301, 8302, 8303, 8303, 8304, 8305, 8306, 8307, 8307, 8308,
+ 8309, 8310, 8311, 8311, 8312, 8313, 8314, 8315, 8315, 8316, 8317, 8318, 8319,
+ 8319, 8320, 8321, 8322, 8300, 7435, 7328, 7310, 8323, 8324, 8325, 8326, 8327,
+ 8323, 8324, 8325, 8326, 8327, 8328, 8329, 4195, 8331, 8332, 8333, 8333, 8334,
+ 8335, 4202, 8337, 4205, 8339, 4208, 8341, 4211, 8343, 4214, 8345, 4217, 8347,
+ 4220, 8349, 4223, 8351, 4226, 8353, 4229, 8355, 8356, 8357, 8357, 8358, 8359,
+ 8360, 8361, 8361, 8362, 8363, 8364, 8365, 8365, 8366, 8367, 4244, 8369, 4247,
+ 8371, 4250, 8373, 4253, 8375, 4256, 8377, 8378, 8376, 8374, 8372, 8370, 8368,
+ 8354, 8352, 8350, 8348, 8346, 8344, 8342, 8340, 8338, 8336, 8379, 8380, 8381,
+ 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391, 8392, 8393, 8394,
+ 8379, 8380, 8381, 8382, 8383, 8384, 8385, 8386, 8387, 8388, 8389, 8390, 8391,
+ 8392, 8393, 8394, 8395, 8396, 8397, 8398, 8399, 8400, 4282, 8402, 8403, 8404,
+ 8404, 8405, 8406, 8407, 8408, 8408, 8409, 8410, 8411, 8412, 8412, 8413, 8414,
+ 8415, 8416, 8416, 8417, 8418, 8419, 8420, 8420, 8421, 8422, 8423, 8401, 8424,
+ 8425, 8424, 8425, 8426, 8427, 4310, 8429, 8430, 8431, 8431, 8432, 8433, 8434,
+ 8435, 8435, 8436, 8437, 8438, 8439, 8439, 8440, 8441, 8442, 8443, 8444, 8445,
+ 8446, 8447, 8448, 8449, 8450, 8451, 8452, 8453, 8454, 8455, 8456, 8457, 8458,
+ 8459, 8460, 8461, 4345, 8463, 8464, 8465, 8465, 8466, 8467, 8468, 8469, 8469,
+ 8470, 8471, 8472, 8473, 8473, 8474, 8475, 8476, 8477, 8478, 8479, 8480, 8481,
+ 8482, 8483, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8491, 8492, 8493, 8494,
+ 8495, 8496, 8462, 8497, 8497, 8498, 8498, 8499, 8500, 4385, 8502, 8503, 8504,
+ 8504, 8505, 8506, 8507, 8508, 8508, 8509, 8510, 8511, 8512, 8512, 8513, 8514,
+ 8515, 8516, 8517, 8518, 8519, 8520, 8521, 8522, 8523, 8524, 8525, 8526, 8527,
+ 8528, 8529, 8530, 8531, 8532, 8533, 8534, 8535, 8536, 8536, 8537, 8538, 4424,
+ 8540, 8541, 8542, 8542, 8543, 8544, 8545, 8546, 8546, 8547, 8548, 8549, 8550,
+ 8550, 8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 8559, 8560, 8561, 8562,
+ 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8570, 8571, 8572, 4459, 8574, 8575,
+ 8576, 8576, 8577, 8578, 8579, 8580, 8580, 8581, 8582, 8583, 8584, 8584, 8585,
+ 8586, 8587, 8588, 8589, 8590, 8591, 8592, 8593, 8594, 8595, 8596, 8597, 8598,
+ 8599, 8600, 8601, 8602, 8603, 8604, 8605, 8606, 8607, 8573, 8609, 8609, 8608,
+ 8608, 8610, 8611, 4499, 8613, 8614, 8615, 8615, 8616, 8617, 8618, 8619, 8619,
+ 8620, 8621, 8622, 8623, 8623, 8624, 8625, 8626, 8627, 8628, 8629, 8630, 8631,
+ 8632, 8633, 8634, 8635, 8636, 8637, 8638, 8639, 8640, 8641, 8642, 8643, 8644,
+ 8645, 8646, 8647, 8647, 8648, 8649, 4538, 8651, 8652, 8653, 8653, 8654, 8655,
+ 8656, 8657, 8657, 8658, 8659, 8660, 8661, 8661, 8662, 8663, 8664, 8665, 8666,
+ 8667, 8668, 8669, 8670, 8671, 8672, 8673, 8674, 8675, 8676, 8677, 8678, 8679,
+ 8680, 8681, 8682, 8683, 8684, 8685, 8685, 8686, 8687, 8688, 8689, 8689, 8690,
+ 8691, 8692, 8693, 8693, 8694, 8695, 8696, 8697, 8697, 8698, 8699, 8700, 8701,
+ 8701, 8702, 8703, 8704, 8705, 8705, 8706, 8707, 8708, 8709, 8709, 8710, 8711,
+ 8712, 8713, 8713, 8714, 8715, 8716, 8717, 8717, 8718, 8719, 8720, 8721, 8721,
+ 8722, 8723, 8724, 8725, 8725, 8726, 8727, 4617, 8729, 8730, 8731, 8731, 8732,
+ 8733, 8734, 8735, 8735, 8736, 8737, 8738, 8739, 8739, 8740, 8741, 8742, 8743,
+ 8744, 8745, 8746, 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754, 8755, 8756,
+ 8757, 8758, 8759, 8760, 8761, 4652, 8763, 8764, 8765, 8765, 8766, 8767, 8768,
+ 8769, 8769, 8770, 8771, 8772, 8773, 8773, 8774, 8775, 8776, 8777, 8778, 8779,
+ 8780, 8781, 8782, 8783, 8784, 8785, 8786, 8787, 8788, 8789, 8790, 8791, 8792,
+ 8793, 8794, 8795, 8796, 8762, 8728, 8797, 8798, 8799, 8797, 8798, 8799, 8800,
+ 8801, 4693, 8803, 8804, 8805, 8805, 8806, 8807, 8808, 8809, 8809, 8810, 8811,
+ 8812, 8813, 8813, 8814, 8815, 8816, 8817, 8818, 8819, 8820, 8821, 8821, 8822,
+ 8823, 4716, 8825, 8826, 8827, 8827, 8828, 8829, 8830, 8831, 8831, 8832, 8833,
+ 8834, 8835, 8835, 8836, 8837, 8838, 8839, 8840, 8841, 8842, 8843, 8844, 8845,
+ 8846, 8847, 8848, 8849, 8850, 8851, 8851, 8852, 8853, 8854, 8855, 8855, 8856,
+ 8857, 8858, 8859, 8859, 8860, 8861, 8862, 8863, 8863, 8864, 8865, 8497, 8497,
+ 8867, 8868, 8609, 8609, 8870, 8871, 4765, 8873, 8874, 8875, 8875, 8876, 8877,
+ 8878, 8879, 8879, 8880, 8881, 8882, 8883, 8883, 8884, 8885, 8886, 8887, 8888,
+ 8889, 8890, 8891, 8892, 8893, 8894, 8895, 8896, 8897, 8898, 8899, 8900, 8901,
+ 8902, 8903, 8903, 8904, 8905, 8906, 8872, 8869, 8866, 8824, 8802, 8650, 8612,
+ 8539, 8501, 8428, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916,
+ 8917, 8907, 8908, 8909, 8910, 8911, 8912, 8913, 8914, 8915, 8916, 8917, 8918,
+ 8919, 8920, 8921, 8922, 8923, 92, 8924, 8925, 8925, 8926, 8927, 8928, 8929,
+ 8929, 8930, 8931, 8932, 8933, 8933, 8934, 8935, 8936, 8937, 8937, 8938, 8939,
+ 4834, 8941, 8942, 8943, 8944, 8945, 8946, 8947, 8948, 8949, 8950, 8951, 8952,
+ 8953, 8954, 8955, 8955, 8956, 8957, 8958, 8959, 8959, 8960, 8961, 4857, 8963,
+ 8964, 8965, 8966, 8967, 8968, 8969, 8970, 8971, 8972, 8973, 8974, 8975, 8976,
+ 8977, 8977, 8978, 8979, 8980, 8981, 8981, 8982, 8983, 4880, 8985, 4883, 8987,
+ 4886, 8989, 8990, 8991, 8991, 8992, 8993, 8994, 8988, 8986, 8995, 7554, 8996,
+ 8997, 8995, 7554, 8996, 8997, 8998, 8999, 9000, 7552, 7552, 9001, 9002, 9003,
+ 9004, 9005, 9005, 9006, 9007, 7530, 9009, 9010, 9011, 9012, 9012, 9013, 9014,
+ 9015, 9016, 9016, 9017, 9018, 9019, 9020, 9020, 9021, 9022, 9023, 9024, 9025,
+ 9026, 9027, 9028, 9028, 9029, 9030, 9031, 9032, 9032, 9033, 9034, 9035, 9036,
+ 9036, 9037, 9038, 9039, 9040, 9040, 9041, 9042, 9043, 9044, 9044, 9045, 9046,
+ 9047, 9048, 9048, 9049, 9050, 9051, 9052, 9053, 9054, 9055, 9056, 9056, 9057,
+ 9058, 9059, 9060, 9060, 9061, 9062, 9063, 9064, 9064, 9065, 9066, 9067, 9068,
+ 9068, 9069, 9070, 9071, 9072, 9072, 9073, 9074, 9075, 9076, 9076, 9077, 9078,
+ 9079, 9080, 9081, 9082, 9083, 9084, 9084, 9085, 9086, 9087, 9088, 9088, 9089,
+ 9090, 9091, 9092, 9092, 9093, 9094, 9095, 9096, 9096, 9097, 9098, 9099, 9100,
+ 9101, 9102, 9103, 9104, 9104, 9105, 9106, 9107, 9108, 9108, 9109, 9110, 9111,
+ 9112, 9112, 9113, 9114, 9115, 9116, 9116, 9117, 9118, 9119, 9120, 9121, 9122,
+ 9123, 9124, 9124, 9125, 9126, 9127, 9128, 9128, 9129, 9130, 9131, 9132, 9132,
+ 9133, 9134, 9135, 9136, 9136, 9137, 9138, 9139, 9140, 9140, 9141, 9142, 9143,
+ 9144, 9144, 9145, 9146, 9147, 9008, 8984, 8962, 8940, 9148, 9149, 9150, 9151,
+ 9152, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 7741, 9156, 9157, 9158, 9159,
+ 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167, 9168, 9169, 9170, 9171, 9172,
+ 9173, 9174, 543, 543, 9175, 7576, 9176, 9177, 49, 8964, 9179, 9179, 9180,
+ 9181, 9182, 9183, 9183, 9184, 9185, 9186, 9187, 9187, 9188, 9189, 9190, 9178,
+ 9191, 9192, 9191, 9192, 9193, 9194, 7664, 9196, 9197, 9198, 9199, 7844, 9199,
+ 7844, 9200, 9201, 5101, 9203, 5104, 9205, 9206, 9204, 749, 1008, 9207, 9208,
+ 9209, 9210, 5112, 9212, 48, 9213, 49, 9211, 594, 765, 951, 1564, 9214, 9215,
+ 9216, 9217, 5120, 9219, 5123, 9221, 5126, 9223, 5129, 9225, 5132, 9227, 5135,
+ 9229, 5138, 9231, 5141, 9233, 5144, 9235, 9236, 9234, 9232, 9230, 9228, 9226,
+ 9224, 9222, 9220, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246,
+ 9247, 5159, 9249, 9250, 9251, 9252, 9253, 5166, 9255, 9256, 9257, 9258, 9259,
+ 9260, 9254, 9248, 9261, 9262, 9263, 9264, 9265, 5179, 9267, 5182, 9269, 43,
+ 9270, 2, 9268, 9266, 9218, 340, 512, 763, 764, 1086, 9271, 9272, 9273, 9274,
+ 9275, 9276, 9277, 9278, 9279, 9280, 9281, 9282, 9282, 9283, 9284, 9285, 9286,
+ 9286, 9287, 9288, 5204, 9290, 5207, 9292, 5210, 9294, 5213, 9296, 5216, 9298,
+ 5219, 9300, 5222, 9302, 9303, 9301, 9299, 9297, 9295, 9293, 9291, 9304, 9305,
+ 9306, 9307, 9308, 9309, 9310, 9311, 9312, 5235, 9314, 5238, 9316, 5241, 9318,
+ 5244, 9320, 5247, 9322, 9323, 9321, 9319, 9317, 9315, 7282, 9324, 9325, 9326,
+ 9327, 9328, 9329, 9330, 5258, 9332, 5261, 9334, 5264, 9336, 5267, 9338, 9339,
+ 268, 1738, 9340, 9341, 9342, 5274, 9344, 9345, 9343, 9337, 9335, 9333, 9346,
+ 9347, 9348, 9349, 9350, 9351, 9352, 5285, 9354, 9355, 9356, 9357, 9358, 5292,
+ 9360, 9361, 9362, 9363, 9364, 5299, 9366, 5302, 9368, 5305, 9370, 5308, 9372,
+ 9373, 9371, 9369, 9367, 9365, 9359, 9374, 9375, 9376, 9377, 9378, 9379, 9380,
+ 9381, 5320, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9382,
+ 9353, 9331, 9313, 9393, 9394, 9395, 9396, 9397, 9398, 9399, 5339, 9401, 9402,
+ 9403, 9404, 9405, 9406, 1810, 9407, 9408, 9409, 5350, 9411, 9412, 9413, 9414,
+ 9415, 9416, 474, 475, 476, 9417, 9418, 9419, 9420, 9410, 7363, 7689, 9421,
+ 9422, 9423, 9424, 5366, 9426, 5369, 9428, 9429, 9430, 9431, 9432, 9433, 9434,
+ 9435, 9436, 9437, 9427, 457, 7371, 9438, 9439, 9440, 9441, 5385, 9443, 9444,
+ 229, 9445, 9446, 9447, 5392, 9449, 5395, 9451, 5398, 9453, 5401, 9455, 9456,
+ 9454, 9452, 9450, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9448, 7377, 9464,
+ 9465, 9466, 9467, 5416, 9469, 5419, 9471, 5422, 9473, 9474, 9472, 9470, 502,
+ 9475, 9476, 9477, 9478, 9479, 5431, 9481, 9482, 9483, 9484, 9485, 5438, 9487,
+ 5441, 9489, 9490, 9488, 9491, 9492, 9493, 9494, 5449, 9496, 9497, 9498, 9499,
+ 9500, 5456, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9501,
+ 9495, 9486, 9480, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 5475, 9520, 9521,
+ 9522, 9523, 9524, 9525, 9526, 9527, 9528, 5486, 9530, 5489, 9532, 5492, 9534,
+ 5495, 9536, 9537, 9535, 9533, 9531, 9538, 9539, 9540, 9541, 9542, 9543, 9544,
+ 9545, 9546, 9547, 9548, 9529, 9549, 9550, 9551, 9552, 5514, 9554, 5517, 9556,
+ 9557, 9555, 7389, 9558, 9559, 9560, 9561, 5525, 9563, 5528, 9565, 5531, 9567,
+ 5534, 9569, 12, 9570, 245, 247, 248, 249, 250, 251, 448, 515, 9571, 9572,
+ 9573, 5541, 9575, 5544, 9577, 9578, 9576, 9574, 9568, 9566, 9564, 7404, 9579,
+ 9580, 9581, 9582, 9583, 9584, 9585, 9586, 5556, 9588, 5559, 9590, 5562, 9592,
+ 9593, 72, 9591, 73, 9589, 263, 9594, 9595, 9596, 9597, 9598, 5571, 9600,
+ 5574, 9602, 5577, 9604, 5580, 9606, 9607, 195, 951, 2024, 2026, 2027, 2028,
+ 9608, 9609, 9610, 5587, 9612, 5590, 9614, 5593, 9616, 9617, 9615, 9613, 9611,
+ 9605, 9603, 9601, 9599, 9618, 9619, 9620, 9621, 9622, 9623, 9624, 9625, 9626,
+ 9627, 9628, 9587, 9562, 9553, 9519, 9468, 9442, 9425, 9400, 1611, 7721, 7721,
+ 9629, 9630, 9631, 9632, 9633, 9634, 9635, 9636, 9637, 9638, 9639, 7418, 7419,
+ 9641, 9642, 2075, 9644, 2076, 9646, 9647, 9645, 9648, 9649, 9650, 9651, 2080,
+ 9653, 2081, 9655, 2082, 9657, 2083, 9659, 9660, 9658, 9656, 9654, 9661, 9662,
+ 9663, 9664, 9665, 9666, 2089, 9668, 2090, 9670, 9671, 9669, 9672, 9673, 9674,
+ 9675, 2094, 9677, 2095, 9679, 9680, 9678, 9681, 9682, 9683, 9684, 2099, 9686,
+ 9687, 9688, 9689, 9690, 2102, 9692, 2103, 9694, 2104, 9696, 9697, 9695, 9693,
+ 9698, 9699, 9700, 9701, 9702, 2109, 9704, 2110, 9706, 2111, 9708, 2112, 9710,
+ 2113, 9712, 2114, 9714, 2115, 9716, 9717, 9715, 9713, 9711, 9709, 9707, 9705,
+ 9718, 9719, 9720, 9721, 9722, 9723, 9724, 9725, 9726, 2124, 9728, 2125, 9730,
+ 2126, 9732, 2127, 9734, 2128, 9736, 2129, 9738, 2130, 9740, 2131, 9742, 9743,
+ 9741, 9739, 9737, 9735, 9733, 9731, 9729, 9744, 9745, 9746, 9747, 9748, 9749,
+ 9750, 9751, 9752, 9753, 9754, 9727, 9703, 9691, 9685, 9676, 9667, 9652, 9755,
+ 9756, 9757, 9758, 9759, 9760, 9761, 9762, 9763, 9764, 2150, 9766, 2151, 9768,
+ 2152, 9770, 2153, 9772, 2154, 9774, 2155, 9776, 2156, 9778, 9779, 9777, 9775,
+ 9773, 9771, 9769, 9767, 9780, 9781, 9782, 9783, 9784, 9785, 9786, 9787, 9788,
+ 2165, 9790, 2166, 9792, 2167, 9794, 2168, 9796, 2169, 9798, 2170, 9800, 9801,
+ 9799, 9797, 9795, 9793, 9791, 9802, 9803, 9804, 9805, 9806, 9807, 9808, 9809,
+ 2178, 9811, 2179, 9813, 2180, 9815, 2181, 9817, 2182, 9819, 9820, 9818, 9816,
+ 9814, 9812, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 2189, 9829, 2190, 9831,
+ 2191, 9833, 2192, 9835, 9836, 9834, 9832, 9830, 9837, 9838, 9839, 9840, 9841,
+ 9842, 9843, 9828, 9810, 9789, 9844, 9845, 9846, 9847, 9848, 9849, 2203, 9851,
+ 9852, 9853, 9854, 9855, 2206, 9857, 2207, 9859, 2208, 9861, 2209, 9863, 9864,
+ 9862, 9860, 9858, 9865, 9866, 9867, 9868, 9869, 9870, 9871, 9856, 9872, 9873,
+ 9874, 9875, 2218, 9877, 2219, 9879, 2220, 9881, 9882, 9880, 9878, 9883, 9884,
+ 9885, 9886, 9887, 2225, 9889, 9890, 9891, 9892, 9893, 2228, 9895, 2229, 9897,
+ 9898, 9896, 9899, 9900, 9901, 9902, 2233, 9904, 9905, 9906, 9907, 9908, 9909,
+ 9903, 9894, 9888, 9910, 9911, 9912, 9913, 9914, 9915, 2241, 9917, 9918, 9919,
+ 9920, 9921, 9922, 9923, 9924, 9925, 2246, 9927, 2247, 9929, 2248, 9931, 9932,
+ 9930, 9928, 9933, 9934, 9935, 9936, 9937, 2253, 9939, 9940, 9941, 9942, 9943,
+ 9944, 9938, 9945, 9946, 9947, 9948, 9949, 9926, 9916, 9876, 9850, 9765, 9950,
+ 9951, 9952, 9953, 9954, 9955, 9956, 9957, 2266, 9959, 9960, 9961, 9962, 9963,
+ 9964, 9965, 9966, 9967, 2271, 9969, 9970, 9971, 9972, 9973, 2274, 9975, 9976,
+ 9977, 9978, 9979, 9980, 9974, 9981, 9982, 9983, 9984, 2280, 9986, 9987, 9988,
+ 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9985, 9968, 9996, 9997, 9998, 9999,
+ 10000, 2289, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010,
+ 2294, 10012, 10013, 10014, 10015, 10016, 10017, 10018, 10019, 10020, 10021,
+ 10011, 10022, 10023, 10024, 10025, 2302, 10027, 10028, 10029, 10030, 10031,
+ 10032, 10033, 10034, 10035, 10036, 10037, 10038, 10039, 2309, 10041, 10042,
+ 10043, 10044, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052, 10053,
+ 2316, 10055, 10056, 10057, 10058, 10059, 10060, 10061, 10062, 10063, 2321,
+ 10065, 2322, 10067, 2323, 10069, 2324, 10071, 10072, 10070, 10068, 10066,
+ 10073, 10074, 10075, 10076, 10077, 10078, 10079, 10080, 10081, 10082, 10083,
+ 10064, 10084, 10085, 10086, 10087, 10088, 10054, 10040, 10026, 10001, 9958,
+ 10089, 10090, 10091, 10092, 10093, 10094, 10095, 10096, 10097, 10098, 10098,
+ 10099, 10100, 10101, 10102, 10102, 10103, 10104, 10105, 10106, 10106, 10107,
+ 10108, 10109, 10110, 10110, 10111, 10112, 10113, 9643, 9640, 10114, 10114,
+ 10115, 7424, 7425, 7426, 7427, 7428, 7725, 7726, 7431, 10116, 10117, 10118,
+ 10119, 10120, 10120, 10121, 10122, 6102, 10124, 10125, 10126, 10127, 10128,
+ 10129, 10130, 10130, 10131, 10132, 10133, 10134, 10134, 10135, 10136, 10137,
+ 10138, 10138, 10139, 10140, 10141, 10142, 10143, 10144, 10145, 10146, 10147,
+ 10148, 10149, 10150, 10151, 10152, 10153, 10154, 10155, 10156, 10157, 10158,
+ 10159, 10160, 6141, 10162, 10163, 10164, 10165, 10166, 10167, 10168, 10168,
+ 10169, 10170, 10171, 10172, 10172, 10173, 10174, 10175, 10176, 10176, 10177,
+ 10178, 10179, 10180, 10180, 10181, 10182, 10183, 10184, 10184, 10185, 10186,
+ 10187, 10188, 10189, 10190, 10191, 10192, 10193, 10194, 10195, 10196, 10197,
+ 10198, 10199, 10200, 10201, 10202, 10203, 10204, 10205, 10206, 10207, 10208,
+ 10208, 10209, 10210, 10211, 10212, 10212, 10213, 10214, 10215, 10216, 10216,
+ 10217, 10218, 10219, 10220, 10220, 10221, 10222, 10223, 10224, 10224, 10225,
+ 10226, 10227, 10228, 10228, 10229, 10230, 10231, 10232, 10232, 10233, 10234,
+ 10235, 749, 750, 10236, 10237, 10238, 6220, 10240, 10241, 10242, 10243, 10244,
+ 10245, 10246, 10246, 10247, 10248, 10249, 10250, 10250, 10251, 10252, 10253,
+ 10254, 10254, 10255, 10256, 10257, 10258, 10258, 10259, 10260, 10261, 10262,
+ 10262, 10263, 10264, 10265, 10266, 10267, 10268, 10269, 10270, 10270, 10271,
+ 10272, 10273, 10274, 10274, 10275, 10276, 10277, 10278, 10278, 10279, 10280,
+ 10281, 10282, 10282, 10283, 10284, 10285, 10286, 10286, 10287, 10288, 10289,
+ 10290, 10290, 10291, 10292, 10293, 10294, 10294, 10295, 10296, 10297, 10298,
+ 10299, 10300, 43, 10301, 44, 10239, 340, 763, 764, 765, 782, 791, 1086, 10302,
+ 10303, 10304, 10305, 10306, 10307, 10308, 10309, 10310, 10311, 10312, 10313,
+ 10314, 10315, 10316, 10317, 10318, 10319, 10320, 10321, 6304, 10323, 6307,
+ 10325, 6310, 10327, 6313, 10329, 6316, 10331, 10332, 10330, 10328, 10326,
+ 10324, 10334, 10333, 10335, 10336, 10337, 10338, 10339, 10340, 314, 9498,
+ 10341, 10342, 10343, 10344, 10345, 10346, 10347, 10348, 10349, 10349, 10350,
+ 10351, 10352, 10322, 10161, 10353, 10353, 10354, 10355, 10356, 10357, 6345,
+ 10359, 10360, 10361, 10361, 10362, 10363, 10364, 10365, 10366, 10367, 10368,
+ 10369, 10370, 10371, 10372, 10373, 10374, 10375, 6364, 10377, 10378, 10379,
+ 10380, 10381, 10382, 10383, 10384, 10385, 10386, 10387, 10388, 10389, 10390,
+ 10391, 10392, 10393, 10394, 10395, 10395, 10396, 10397, 10398, 10399, 10399,
+ 10400, 10401, 10402, 10403, 10403, 10404, 10405, 10406, 10407, 10408, 10409,
+ 10410, 10411, 10412, 10413, 10414, 10415, 10416, 10417, 6407, 10419, 10420,
+ 10421, 10422, 10423, 10424, 10425, 10426, 10427, 10428, 10429, 10430, 10431,
+ 10432, 750, 10433, 10434, 10435, 6426, 10437, 10438, 10439, 10440, 10441,
+ 10442, 10443, 10444, 10445, 10446, 10447, 10448, 10449, 10450, 10451, 10452,
+ 10453, 6445, 10455, 10456, 10457, 10458, 10459, 10460, 10461, 10462, 10463,
+ 10464, 10465, 10466, 10467, 10468, 10469, 10470, 10471, 6464, 10473, 10474,
+ 10475, 10476, 10477, 10478, 10479, 10480, 10481, 10482, 10483, 10484, 10485,
+ 10486, 10487, 10488, 10489, 6483, 10491, 10492, 10493, 10494, 10495, 10496,
+ 10497, 10498, 10499, 10500, 10501, 10502, 10503, 10504, 10505, 10506, 10507,
+ 6502, 10509, 10510, 10511, 10512, 10513, 10514, 10515, 10516, 10517, 10518,
+ 10519, 10520, 10521, 10522, 10523, 10524, 10525, 6521, 10527, 10528, 10529,
+ 10530, 10531, 10532, 10533, 10534, 10535, 10536, 10537, 10538, 10539, 10540,
+ 10541, 10542, 10543, 10334, 10545, 10546, 10547, 10548, 10549, 10550, 10551,
+ 10552, 10553, 10554, 10555, 10556, 10557, 10558, 6555, 10560, 10561, 10562,
+ 10563, 10564, 10565, 10566, 10567, 10568, 10569, 10570, 10571, 10572, 10573,
+ 10574, 10575, 10576, 40, 10577, 48, 10559, 49, 10544, 50, 10526, 3, 10508,
+ 41, 10490, 42, 10472, 43, 10454, 44, 10436, 10578, 10579, 10580, 10581, 10582,
+ 10583, 10584, 10585, 10586, 10587, 10588, 10589, 10590, 10591, 10592, 10593,
+ 10594, 10595, 10596, 10597, 10598, 10599, 10600, 10601, 10602, 10603, 10604,
+ 10605, 10418, 10606, 10607, 10608, 10609, 10610, 10376, 10358, 10611, 10612,
+ 10613, 10614, 10615, 10616, 10617, 10617, 10618, 10619, 10620, 10123, 9289,
+ 10621, 10622, 10623, 10621, 10622, 10623, 10624, 10625, 6623, 10627, 10628,
+ 10629, 10630, 10631, 10632, 10633, 10634, 10635, 10636, 10637, 10638, 10639,
+ 10640, 10641, 10641, 10642, 10643, 10644, 10645, 10646, 10647, 10648, 10649,
+ 10649, 10650, 10651, 10652, 10653, 10653, 10654, 10655, 7888, 10657, 10658,
+ 10659, 10660, 10661, 10662, 6661, 10664, 10665, 10666, 10666, 10667, 10668,
+ 10669, 10670, 10670, 10671, 10672, 10673, 10663, 10674, 10675, 10674, 10675,
+ 10676, 10677, 6677, 10679, 10680, 10681, 10682, 10683, 10684, 10685, 10686,
+ 10687, 10688, 10689, 10690, 10691, 10692, 10693, 10694, 10695, 6696, 10697,
+ 10698, 10699, 10700, 10701, 10702, 10703, 10704, 10705, 10706, 10707, 10708,
+ 10709, 10710, 10711, 10712, 10713, 10714, 10715, 10716, 10717, 10718, 10719,
+ 10720, 10721, 10722, 10723, 10724, 10725, 10726, 10727, 10728, 10729, 10730,
+ 10731, 10732, 10733, 10734, 10735, 10735, 10736, 10737, 10738, 10696, 10740,
+ 10739, 10740, 10741, 10742, 10743, 10678, 10744, 10745, 10744, 10745, 10746,
+ 10747, 6749, 10749, 10750, 512, 762, 763, 764, 765, 10751, 10752, 10753,
+ 10754, 10755, 10755, 10756, 10757, 10758, 10759, 10759, 10760, 10761, 10762,
+ 10763, 10763, 10764, 10765, 10766, 512, 762, 763, 764, 765, 10767, 10767,
+ 10768, 10769, 7417, 10771, 10772, 6775, 10774, 10775, 10776, 10776, 10777,
+ 10778, 10779, 10780, 10780, 10781, 10782, 10783, 10784, 10784, 10785, 10786,
+ 10787, 10788, 10788, 10789, 10790, 10791, 10773, 10793, 10792, 10794, 10795,
+ 10796, 10797, 10797, 10798, 10799, 6803, 10801, 10802, 10803, 10803, 10804,
+ 10805, 10806, 10807, 10807, 10808, 10809, 10810, 10811, 10811, 10812, 10813,
+ 10814, 10815, 10816, 10817, 10818, 10819, 10820, 10821, 10822, 10823, 10824,
+ 10825, 10826, 10827, 10828, 10829, 10830, 10831, 10832, 10833, 10834, 10835,
+ 10835, 10836, 10837, 10838, 10839, 10839, 10840, 10841, 10842, 10843, 10843,
+ 10844, 10845, 10846, 10847, 10847, 10848, 10849, 10850, 10851, 10851, 10852,
+ 10853, 10854, 10855, 10855, 10856, 10857, 10858, 10859, 10859, 10860, 10861,
+ 10862, 10863, 10863, 10864, 10865, 10866, 10867, 10867, 10868, 10869, 10870,
+ 10871, 10871, 10872, 10873, 10874, 10875, 10875, 10876, 10877, 10878, 10879,
+ 10879, 10880, 10881, 10882, 10883, 10884, 10885, 10886, 10887, 10887, 10888,
+ 10889, 674, 7656, 7656, 10891, 10892, 8129, 10894, 10895, 10896, 10897, 10897,
+ 10898, 10899, 10900, 10901, 10901, 10902, 10903, 10904, 10905, 10905, 10906,
+ 10907, 10908, 10909, 10909, 10910, 10911, 8155, 10913, 10914, 10915, 10916,
+ 10916, 10917, 10918, 10919, 10920, 10920, 10921, 10922, 975, 10126, 10924,
+ 10925, 10926, 10927, 10927, 10928, 10929, 7482, 7482, 10931, 10932, 10933,
+ 10934, 10934, 10935, 10936, 10937, 10938, 10939, 10940, 8185, 8186, 8185,
+ 8186, 8190, 10942, 10943, 10944, 10945, 10946, 10947, 8198, 8199, 8198, 8199,
+ 8203, 10949, 10950, 10951, 10952, 10953, 10954, 10955, 10948, 1008, 10956,
+ 10957, 10958, 10959, 10960, 1008, 10956, 10957, 10961, 10962, 10963, 10964,
+ 10965, 10965, 10966, 10967, 10968, 2, 10941, 10930, 10969, 10970, 10971,
+ 10969, 10970, 10971, 10972, 10973, 10793, 8258, 10975, 10976, 10977, 10978,
+ 10979, 10980, 10981, 10982, 10982, 10983, 10984, 10985, 10986, 10986, 10987,
+ 10988, 10989, 10990, 10990, 10991, 10992, 10993, 10994, 10994, 10995, 10996,
+ 10997, 10998, 10998, 10999, 11000, 11001, 11002, 11002, 11003, 11004, 11005,
+ 10974, 10923, 10912, 10893, 10890, 10800, 10770, 10748, 10656, 10626, 9202,
+ 9195, 9155, 8330, 7262, 7228, 7041, 10641, 11006, 11007, 11008, 11009, 11010,
+ 11011, 11012, 11013, 11014, 11015, 11016, 11017, 11018, 11019, 11020, 11021,
+ 11022, 10641, 11006, 11007, 11008, 11009, 11010, 11011, 11012, 11013, 11014,
+ 11015, 11016, 11017, 11018, 11019, 11020, 11021, 11022, 7669, 11023, 8061,
+ 6638, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7016, 7017, 7018, 7019, 7020,
+ 7021, 7022, 7023, 7024, 7025, 6638, 7009, 7010, 7011, 7012, 7013, 7014, 7015,
+ 7016, 7017, 7018, 7019, 7020, 7021, 7022, 7023, 7024, 7025, 3506, 7026, 3914,
+ 11024, 11025, 2848, 2848, 11027, 11027, 11028, 11028, 11029, 11029, 11030,
+ 11030, 11031, 11031, 11032, 11032, 11033, 11034, 11034, 11035, 11035, 11036,
+ 11036, 11037, 11037, 11038, 11038, 11039, 11039, 11040, 11040, 11041, 11041,
+ 11042, 11043, 11043, 11044, 11044, 2934, 2931, 11046, 11047, 11048, 11049,
+ 11050, 11051, 11052, 11052, 11053, 11054, 11054, 2982, 2982, 11056, 11056,
+ 3004, 11058, 11059, 11060, 11060, 2997, 2997, 11062, 11062, 11061, 11061,
+ 11057, 11057, 11055, 11055, 11045, 11045, 3035, 3035, 11067, 11067, 11068,
+ 11068, 11069, 11069, 11070, 11071, 11072, 11072, 3077, 3070, 3089, 11076,
+ 11074, 11075, 11077, 11078, 11079, 11080, 11080, 11081, 11081, 3121, 3121,
+ 11083, 11083, 11084, 11084, 3162, 3239, 3242, 3245, 3228, 3225, 3222, 3219,
+ 2830, 3216, 3209, 3202, 2823, 3195, 3188, 3176, 3179, 3173, 11086, 3155,
+ 11077, 11078, 3146, 3143, 3140, 3146, 3143, 3140, 11033, 11033, 11097, 11097,
+ 11098, 11098, 11099, 11099, 11100, 11100, 11101, 11101, 11102, 11102, 11103,
+ 11103, 11104, 11104, 11105, 11105, 11062, 11062, 11106, 11106, 11070, 11109,
+ 11109, 3332, 3332, 11111, 11111, 11112, 11112, 11113, 11113, 11114, 11114,
+ 11115, 11115, 11116, 11116, 11117, 11117, 11118, 11118, 11119, 11119, 11120,
+ 11120, 11121, 11121, 3329, 3329, 3383, 3383, 11122, 11122, 11123, 11123,
+ 3400, 11125, 543, 543, 11126, 3419, 3419, 11128, 11128, 11129, 11129, 11130,
+ 11130, 11131, 11131, 11132, 11132, 11133, 11133, 11134, 11134, 11135, 11135,
+ 11136, 11136, 11137, 11137, 11138, 11138, 11139, 11139, 3478, 3478, 11141,
+ 11141, 11142, 11142, 11143, 11143, 11144, 11144, 11140, 11140, 2841, 11147,
+ 3514, 3162, 3553, 3553, 11150, 11150, 3242, 3546, 3222, 3225, 3228, 3538,
+ 3535, 3195, 3179, 3176, 3525, 11149, 11090, 11095, 11151, 11151, 11155, 11156,
+ 11152, 11153, 11154, 11148, 11148, 3578, 11159, 11160, 11161, 11162, 11163,
+ 11163, 11164, 11164, 3613, 11166, 11167, 3635, 3635, 11169, 11169, 11170,
+ 11170, 11171, 11171, 11172, 11172, 3662, 3662, 11174, 11174, 3677, 3677,
+ 11176, 11176, 11177, 11177, 11178, 11178, 11175, 11175, 11173, 11173, 11064,
+ 11064, 512, 762, 763, 764, 765, 11179, 11180, 11181, 11182, 11179, 11180,
+ 11181, 11182, 11183, 11183, 11184, 11184, 11185, 11185, 11186, 11186, 11168,
+ 11165, 11187, 11187, 11188, 11189, 11190, 11190, 11157, 11158, 11157, 11158,
+ 3734, 3745, 11194, 11195, 11196, 11197, 11198, 11199, 11200, 11200, 11193,
+ 11193, 3785, 3785, 11203, 11203, 11204, 11204, 11205, 11205, 11206, 11206,
+ 11207, 3816, 3816, 11209, 11209, 11210, 11210, 11211, 11211, 11212, 11212,
+ 11213, 11213, 11214, 11214, 11215, 11215, 11216, 11216, 11217, 11217, 11218,
+ 11218, 3867, 3867, 11220, 11220, 11221, 11221, 11222, 11222, 11223, 11223,
+ 11224, 11224, 11225, 11225, 11226, 11226, 11227, 11227, 11228, 11228, 2823,
+ 11230, 11231, 11231, 11232, 11232, 11233, 11233, 11234, 11234, 11235, 11235,
+ 11236, 11236, 11237, 11237, 11229, 11219, 3952, 11241, 11238, 11238, 11239,
+ 11240, 11208, 11242, 11242, 11243, 11244, 3973, 3973, 11246, 11246, 11247,
+ 11247, 11248, 11248, 11249, 11249, 4000, 11251, 11252, 11252, 4019, 4019,
+ 11254, 11254, 11255, 11255, 4038, 4038, 4041, 4041, 4053, 4053, 4056, 4056,
+ 11258, 11257, 1008, 11259, 11260, 11261, 11261, 11256, 11256, 4082, 4093,
+ 4093, 11265, 11265, 11266, 11266, 11267, 11267, 11268, 11268, 11269, 11264,
+ 11271, 11270, 11272, 11272, 11273, 11273, 11274, 11274, 11275, 11275, 11276,
+ 11276, 11277, 11277, 11262, 11263, 11262, 11263, 11253, 11253, 11250, 11250,
+ 11245, 11245, 11201, 11202, 11201, 11202, 11191, 11192, 11191, 11192, 11145,
+ 11145, 11146, 11146, 11127, 11127, 11124, 11124, 11110, 11110, 11107, 11107,
+ 11108, 11108, 4164, 4164, 11290, 11290, 11291, 11291, 11292, 11292, 11293,
+ 11293, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286, 11287,
+ 11288, 11289, 11278, 11279, 11280, 11281, 11282, 11283, 11284, 11285, 11286,
+ 11287, 11288, 11289, 11088, 11089, 11090, 11091, 11092, 11095, 11087, 11093,
+ 11094, 11096, 11085, 11085, 11082, 11082, 4229, 4229, 11299, 11299, 11300,
+ 11300, 4195, 4195, 4256, 4253, 4250, 4247, 4244, 11301, 4226, 4223, 4220,
+ 4217, 4214, 4211, 4208, 4205, 4202, 11302, 4256, 4253, 4250, 4247, 4244,
+ 11301, 4226, 4223, 4220, 4217, 4214, 4211, 4208, 4205, 4202, 11302, 4282,
+ 4282, 11304, 11304, 11305, 11305, 11306, 11306, 11307, 11307, 11303, 4310,
+ 4310, 11310, 11310, 11311, 11311, 11312, 11313, 11314, 11315, 4345, 4345,
+ 11317, 11317, 11318, 11318, 11319, 11320, 11321, 11322, 11323, 11316, 4385,
+ 4385, 11326, 11326, 11327, 11327, 11328, 11329, 11330, 11331, 11332, 4424,
+ 4424, 11334, 11334, 11335, 11335, 11336, 11337, 11338, 11339, 4459, 4459,
+ 11341, 11341, 11342, 11342, 11343, 11344, 11345, 11346, 11347, 11340, 4499,
+ 4499, 11350, 11350, 11351, 11351, 11352, 11353, 11354, 11355, 11356, 4538,
+ 4538, 11358, 11358, 11359, 11359, 11360, 11361, 11362, 11363, 11364, 11365,
+ 11365, 11366, 11366, 11367, 11367, 11368, 11368, 11369, 11369, 11370, 11370,
+ 11371, 11371, 11372, 11372, 11373, 11373, 11374, 11374, 4617, 4617, 11376,
+ 11376, 11377, 11377, 11378, 11379, 11380, 11381, 4652, 4652, 11383, 11383,
+ 11384, 11384, 11385, 11386, 11387, 11388, 11389, 11382, 11375, 11375, 4693,
+ 4693, 11393, 11393, 11394, 11394, 11395, 4716, 4716, 11397, 11397, 11398,
+ 11398, 11399, 11400, 11401, 11402, 11402, 11403, 11403, 11404, 11404, 4765,
+ 4765, 11406, 11406, 11407, 11407, 11408, 11409, 11410, 11411, 11412, 11412,
+ 11349, 11349, 11324, 11324, 11405, 11405, 11396, 11396, 11390, 11391, 11392,
+ 11390, 11391, 11392, 11357, 11357, 11349, 11349, 11348, 11348, 11333, 11333,
+ 11324, 11324, 11325, 11325, 11308, 11309, 11308, 11309, 11413, 11414, 11415,
+ 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 11413, 11414, 11415,
+ 11416, 11417, 11418, 11419, 11420, 11421, 11422, 11423, 92, 11424, 11425,
+ 11425, 11426, 11426, 11427, 11427, 4834, 11429, 11430, 11431, 11431, 4857,
+ 11433, 11434, 11435, 11435, 4886, 4886, 11437, 3329, 4883, 4880, 11437, 3329,
+ 4883, 4880, 3383, 3383, 11438, 11117, 11440, 11440, 11441, 11441, 11442,
+ 11442, 11443, 11444, 11444, 11445, 11445, 11446, 11446, 11447, 11447, 11448,
+ 11448, 11449, 11449, 11450, 11451, 11451, 11452, 11452, 11453, 11453, 11454,
+ 11454, 11455, 11455, 11456, 11456, 11457, 11458, 11458, 11459, 11459, 11460,
+ 11460, 11461, 11461, 11462, 11463, 11463, 11464, 11464, 11465, 11465, 11466,
+ 11466, 11467, 11468, 11468, 11469, 11469, 11470, 11470, 11471, 11471, 11472,
+ 11472, 11473, 11473, 11439, 11439, 11436, 11436, 11432, 11432, 11428, 11428,
+ 11159, 11479, 11480, 11481, 11482, 49, 782, 11484, 11484, 11485, 11485, 11486,
+ 11486, 543, 543, 11483, 11126, 49, 782, 11489, 11489, 11490, 11490, 11491,
+ 11491, 11145, 48, 543, 750, 49, 749, 1008, 5104, 5101, 5166, 5159, 5144,
+ 5141, 5138, 5135, 5132, 5129, 5126, 5123, 5120, 43, 437, 2, 591, 835, 11496,
+ 11497, 11498, 594, 765, 951, 1564, 11494, 11495, 340, 512, 763, 764, 1086,
+ 11499, 11500, 11501, 11502, 11503, 11504, 11504, 268, 1738, 5267, 5292, 5285,
+ 5320, 11509, 5308, 5305, 5302, 5299, 11507, 11508, 5274, 11506, 5264, 5261,
+ 5258, 3089, 5247, 5244, 5241, 5238, 5235, 5222, 5219, 5216, 5213, 5210, 5207,
+ 5204, 5339, 5350, 474, 475, 476, 11516, 1810, 11515, 5369, 11519, 5401, 5398,
+ 5395, 5392, 229, 5385, 5456, 11523, 5449, 5441, 5438, 5431, 502, 5422, 5419,
+ 5416, 5475, 5495, 5492, 5489, 5486, 11530, 11529, 12, 1964, 245, 247, 248,
+ 249, 250, 251, 448, 515, 11533, 72, 1985, 73, 1982, 1023, 1024, 1025, 195,
+ 951, 2024, 2026, 2027, 2028, 11537, 263, 5562, 11535, 11536, 5593, 5590,
+ 5587, 11538, 5577, 5574, 5571, 11539, 3225, 5544, 5541, 11534, 5531, 5528,
+ 5525, 3209, 5517, 5514, 11531, 11532, 11524, 11525, 11526, 11527, 11528,
+ 3195, 11521, 11522, 457, 3188, 11520, 5366, 3179, 3525, 11517, 11518, 11510,
+ 11511, 11512, 11513, 11514, 2131, 2130, 2129, 2128, 2127, 2126, 2125, 2124,
+ 2115, 2114, 2113, 2112, 2111, 2110, 2109, 2104, 2103, 2102, 2099, 2095, 2094,
+ 2090, 2089, 2083, 2082, 2081, 2080, 2076, 2075, 2192, 2191, 2190, 2189, 2182,
+ 2181, 2180, 2179, 2178, 2170, 2169, 2168, 2167, 2166, 2165, 2156, 2155, 2154,
+ 2153, 2152, 2151, 2150, 2209, 2208, 2207, 2206, 2203, 2233, 2229, 2228, 2225,
+ 2220, 2219, 2218, 2241, 2253, 2248, 2247, 2246, 11568, 11569, 11567, 11563,
+ 11564, 11565, 11566, 11561, 11562, 11557, 11558, 11559, 11560, 11549, 11550,
+ 11551, 11552, 11553, 11554, 11555, 11556, 2266, 2274, 2271, 2280, 11579,
+ 11577, 11578, 11576, 2289, 2294, 11584, 11583, 2302, 11587, 2309, 11589,
+ 2316, 2324, 2323, 2322, 2321, 11592, 11591, 11593, 11594, 11590, 11588, 11585,
+ 11586, 11580, 11581, 11582, 11570, 11571, 11572, 11573, 11574, 11575, 11595,
+ 11596, 11597, 11598, 11599, 11600, 11601, 11601, 11602, 11602, 11603, 11603,
+ 11604, 11604, 3242, 3239, 1611, 11151, 11151, 11540, 11541, 11542, 11543,
+ 11544, 11545, 11546, 11547, 11548, 11605, 11605, 11606, 11088, 11089, 11090,
+ 11091, 11092, 11155, 11156, 11095, 11607, 6102, 11609, 11609, 11610, 11610,
+ 11611, 11611, 11612, 11613, 11614, 11615, 6141, 11617, 11617, 11618, 11618,
+ 11619, 11619, 11620, 11620, 11621, 11621, 11622, 11623, 11624, 11625, 11626,
+ 11627, 11627, 11628, 11628, 11629, 11629, 11630, 11630, 11631, 11631, 11632,
+ 11632, 11633, 11633, 6220, 11635, 11635, 11636, 11636, 11637, 11637, 11638,
+ 11638, 11639, 11639, 11640, 11641, 11641, 11642, 11642, 11643, 11643, 11644,
+ 11644, 11645, 11645, 11646, 11646, 11647, 11647, 43, 11648, 44, 749, 750,
+ 11634, 340, 763, 764, 765, 782, 791, 1086, 11649, 11650, 11651, 11652, 11653,
+ 6313, 6316, 6310, 6307, 6304, 314, 5449, 11655, 11656, 11657, 11657, 11654,
+ 11616, 6345, 6345, 11661, 11662, 6364, 11664, 11665, 11666, 11667, 11667,
+ 11668, 11668, 11669, 11669, 11670, 11671, 6407, 11673, 11674, 6426, 11676,
+ 11677, 6445, 11679, 11680, 6464, 11682, 11683, 6483, 11685, 11686, 6502,
+ 11688, 11689, 6521, 11691, 11692, 6313, 11694, 11695, 6555, 11697, 11698,
+ 40, 11699, 48, 11696, 49, 11693, 50, 11690, 3, 11687, 41, 11684, 42, 11681,
+ 43, 11678, 44, 750, 11675, 11700, 11701, 11702, 11703, 11704, 11705, 11706,
+ 11707, 11708, 11709, 11710, 11711, 11712, 11672, 11713, 11714, 11663, 11658,
+ 11658, 11659, 11660, 11715, 11716, 11717, 791, 791, 11719, 11719, 11720,
+ 11720, 674, 11722, 11722, 11723, 11723, 11724, 11724, 11725, 11725, 11726,
+ 11726, 11727, 11721, 11721, 11718, 11718, 11608, 11608, 11505, 11505, 6623,
+ 11733, 11734, 11735, 11735, 11736, 11737, 11737, 3734, 6661, 6661, 11740,
+ 11740, 11739, 6677, 11743, 11744, 6696, 11746, 11747, 11748, 11749, 11750,
+ 11751, 11752, 11753, 11754, 11754, 11745, 11756, 11755, 11756, 11741, 11742,
+ 11741, 11742, 512, 762, 763, 764, 765, 6749, 11759, 11759, 11760, 11760,
+ 11761, 11761, 6775, 6775, 11763, 11763, 11764, 11764, 11765, 11765, 3245,
+ 11767, 11766, 6803, 6803, 11769, 11769, 11770, 11770, 11771, 11772, 11773,
+ 11774, 11775, 11776, 11776, 11777, 11777, 11778, 11778, 11779, 11779, 11780,
+ 11780, 11781, 11781, 11782, 11782, 11783, 11783, 11784, 11784, 11785, 11785,
+ 11786, 11786, 11787, 11787, 11788, 1564, 11790, 11791, 11792, 11793, 11793,
+ 11793, 11794, 11795, 11795, 11795, 11247, 11797, 11797, 11798, 11798, 11799,
+ 11799, 11252, 11801, 11801, 975, 6102, 11107, 11107, 11804, 11804, 4041,
+ 4038, 4041, 4038, 11257, 4056, 4053, 4056, 4053, 11258, 11807, 11806, 1008,
+ 11808, 11809, 1008, 11808, 11809, 11810, 11811, 11811, 2, 11805, 11803, 11803,
+ 11767, 11271, 11815, 11816, 11816, 11817, 11817, 11818, 11818, 11819, 11819,
+ 11820, 11820, 268, 268, 11822, 11822, 11823, 11823, 11824, 11824, 11825,
+ 11825, 11826, 11826, 11827, 11827, 11828, 11828, 11829, 11830, 11830, 11831,
+ 11831, 11832, 11832, 11833, 11833, 11834, 11834, 11835, 11835, 11836, 11836,
+ 11837, 11837, 11838, 11839, 11839, 11840, 11840, 314, 13491, 11842, 11843,
+ 11844, 11845, 11846, 11847, 11848, 11849, 11850, 11850, 11850, 11851, 11852,
+ 11852, 11852, 268, 268, 11854, 11854, 11855, 11855, 11856, 11856, 11857,
+ 11857, 11858, 11858, 11859, 11859, 11860, 11860, 11861, 11862, 11862, 11863,
+ 11863, 11864, 11864, 11865, 11865, 11866, 11866, 11867, 11867, 11868, 11868,
+ 11869, 11869, 11870, 11871, 11871, 11872, 11872, 340, 340, 11874, 11874,
+ 11875, 11875, 340, 340, 11877, 11877, 11878, 11878, 314, 314, 314, 340, 11881,
+ 11882, 11883, 11884, 11884, 11884, 11880, 11880, 11880, 11886, 11886, 11886,
+ 11885, 11885, 11885, 11879, 11879, 11876, 11876, 11873, 11873, 11853, 11853,
+ 11853, 11841, 11841, 437, 437, 11893, 11893, 11894, 11894, 11895, 11895,
+ 246, 246, 251, 251, 448, 448, 457, 481, 482, 314, 229, 493, 494, 495, 507,
+ 526, 523, 245, 246, 247, 248, 249, 250, 251, 515, 238, 237, 236, 235, 234,
+ 263, 535, 11910, 11906, 11907, 11909, 11908, 11905, 11903, 11904, 11902,
+ 11901, 11900, 11897, 11898, 11899, 11897, 11898, 11899, 11829, 11829, 11919,
+ 11919, 11920, 11920, 11921, 11921, 11922, 11922, 11923, 11923, 11924, 11924,
+ 11925, 11925, 11926, 11926, 11927, 11927, 314, 314, 11929, 11929, 11930,
+ 11930, 11928, 11928, 369, 369, 11933, 11933, 11934, 11934, 11935, 11935,
+ 11936, 11936, 11937, 11938, 11938, 594, 594, 11940, 11940, 11941, 11941,
+ 11942, 11942, 11943, 11943, 11944, 11944, 11945, 11945, 11946, 11946, 11947,
+ 11947, 11948, 11948, 11949, 11949, 11950, 11950, 621, 621, 11951, 11951,
+ 591, 591, 11952, 11953, 11954, 11952, 11953, 11954, 11955, 11955, 632, 11957,
+ 11958, 543, 543, 11959, 643, 643, 11961, 11961, 11962, 11962, 11963, 11963,
+ 11964, 11964, 11965, 11965, 11966, 11966, 11967, 11967, 11968, 11968, 11969,
+ 11969, 11970, 11970, 11971, 11971, 11972, 11972, 11973, 11973, 11974, 11974,
+ 263, 11976, 11977, 715, 715, 11979, 11979, 388, 393, 11982, 11981, 401, 402,
+ 403, 404, 405, 406, 407, 408, 409, 410, 11985, 11986, 11983, 11984, 694,
+ 462, 11989, 11990, 474, 475, 476, 469, 470, 701, 502, 518, 519, 245, 246,
+ 248, 249, 250, 251, 448, 515, 235, 237, 238, 540, 535, 536, 11998, 11999,
+ 11906, 11907, 11995, 11996, 11997, 11994, 11904, 11901, 11992, 11993, 11991,
+ 11900, 11987, 11988, 11980, 11980, 12000, 12001, 12002, 12003, 12004, 12005,
+ 12006, 12007, 12007, 11978, 11978, 767, 767, 12010, 12010, 12011, 12011,
+ 12012, 12012, 12013, 12013, 12014, 12014, 782, 782, 12016, 12016, 12017,
+ 12017, 11729, 11729, 12018, 12018, 12015, 12015, 11888, 11888, 512, 762,
+ 763, 764, 765, 12019, 12020, 12021, 12022, 12019, 12020, 12021, 12022, 12023,
+ 12023, 12024, 12024, 12025, 12025, 437, 12027, 12028, 12029, 12030, 12031,
+ 12032, 12032, 12033, 12033, 749, 750, 12035, 12036, 12037, 12038, 12034,
+ 12026, 12026, 12039, 12040, 12041, 12041, 12042, 12042, 12008, 12009, 12008,
+ 12009, 828, 828, 12045, 835, 12047, 12048, 12049, 12050, 12051, 12052, 12053,
+ 12054, 12054, 12046, 12046, 236, 12057, 507, 507, 12059, 12059, 12060, 12060,
+ 12061, 12061, 12062, 12062, 12063, 12063, 12064, 11903, 12066, 12067, 12067,
+ 12068, 12068, 12069, 12069, 12070, 12070, 12071, 12071, 12072, 12072, 234,
+ 234, 12074, 12074, 12075, 12075, 12076, 12076, 12077, 12077, 12078, 12078,
+ 12079, 12079, 12080, 12080, 12081, 12081, 12082, 12082, 12083, 12083, 12084,
+ 12084, 247, 247, 12086, 12086, 12087, 12087, 12088, 12088, 12089, 12089,
+ 12090, 12090, 12091, 12091, 12092, 12092, 12093, 12093, 12094, 12094, 12095,
+ 12095, 12096, 12085, 12073, 12073, 12097, 12098, 12099, 12099, 12065, 12058,
+ 12102, 12102, 12100, 12101, 951, 951, 12104, 12104, 12105, 12105, 12106,
+ 12106, 12107, 12107, 12108, 12108, 621, 12110, 12111, 12112, 12112, 975,
+ 975, 12114, 12114, 12115, 12115, 12116, 12116, 989, 989, 986, 986, 12118,
+ 12119, 12118, 12119, 1000, 1000, 997, 997, 12121, 12122, 12121, 12122, 12123,
+ 12120, 1008, 12124, 12125, 12126, 12126, 12117, 12117, 1026, 1025, 1024,
+ 1023, 1022, 1021, 1020, 1019, 1018, 12129, 1041, 1042, 12131, 12131, 12132,
+ 12132, 12133, 12133, 12134, 12134, 12135, 12135, 12136, 12130, 12138, 12137,
+ 12139, 12139, 12140, 12140, 12141, 12141, 12142, 12142, 12143, 12143, 12144,
+ 12144, 12127, 12128, 12127, 12128, 12113, 12113, 12109, 12109, 12103, 12103,
+ 12055, 12056, 12055, 12056, 12043, 12044, 12043, 12044, 11727, 11975, 11727,
+ 11975, 11960, 11960, 11956, 11956, 11939, 11939, 11931, 11932, 11931, 11932,
+ 1086, 1086, 12157, 12157, 12158, 12158, 12159, 12159, 12160, 12160, 12161,
+ 12161, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153, 12154,
+ 12155, 12156, 12145, 12146, 12147, 12148, 12149, 12150, 12151, 12152, 12153,
+ 12154, 12155, 12156, 11913, 11914, 11915, 11911, 11912, 11916, 11917, 11918,
+ 11896, 11896, 493, 540, 518, 518, 12167, 12167, 12168, 12168, 518, 518, 457,
+ 457, 457, 457, 536, 536, 470, 470, 12169, 12169, 457, 457, 474, 474, 519,
+ 519, 495, 495, 476, 476, 494, 494, 470, 470, 482, 482, 475, 475, 457, 457,
+ 502, 502, 502, 502, 12166, 12166, 12170, 12171, 12172, 12173, 12174, 12175,
+ 12176, 12177, 12178, 12179, 12180, 12181, 12182, 12183, 12184, 12170, 12171,
+ 12172, 12173, 12174, 12175, 12176, 12177, 12178, 12179, 12180, 12181, 12182,
+ 12183, 12184, 12185, 402, 402, 12187, 12187, 12188, 12188, 12189, 12189,
+ 12190, 12191, 12192, 12193, 403, 403, 12195, 12195, 12196, 12196, 12197,
+ 12197, 12198, 12199, 12200, 12201, 12202, 12194, 406, 406, 12205, 12205,
+ 12206, 12206, 12207, 12207, 12208, 12209, 12210, 12211, 12212, 404, 404,
+ 12214, 12214, 12215, 12215, 12216, 12216, 12217, 12218, 12219, 12220, 408,
+ 408, 12222, 12222, 12223, 12223, 12224, 12224, 12225, 12226, 12227, 12228,
+ 12229, 12221, 407, 407, 12232, 12232, 12233, 12233, 12234, 12234, 12235,
+ 12236, 12237, 12238, 12239, 409, 409, 12241, 12241, 12242, 12242, 12243,
+ 12243, 12244, 12245, 12246, 12247, 12248, 12249, 12249, 12250, 12250, 12251,
+ 12251, 12252, 12252, 12253, 12253, 12254, 12254, 12255, 12255, 12256, 12256,
+ 12257, 12257, 12258, 12258, 410, 410, 12260, 12260, 12261, 12261, 12262,
+ 12262, 12263, 12264, 12265, 12266, 405, 405, 12268, 12268, 12269, 12269,
+ 12270, 12270, 12271, 12272, 12273, 12274, 12275, 12267, 12259, 12259, 481,
+ 481, 12279, 12279, 481, 481, 12281, 12281, 12282, 12282, 12280, 12280, 12283,
+ 12283, 12284, 12285, 393, 393, 12287, 12287, 12288, 12288, 12289, 12289,
+ 12290, 12291, 12292, 12293, 12293, 12294, 12294, 393, 393, 12296, 12296,
+ 12297, 12297, 12298, 12298, 12299, 12300, 12301, 12302, 12302, 12303, 12303,
+ 12304, 12304, 12295, 12295, 518, 518, 12307, 12307, 12308, 12308, 518, 518,
+ 457, 457, 457, 457, 536, 536, 470, 470, 12309, 12309, 474, 474, 519, 519,
+ 495, 495, 476, 476, 494, 494, 470, 470, 482, 482, 475, 475, 457, 457, 502,
+ 502, 502, 502, 12166, 12166, 457, 457, 701, 701, 701, 701, 701, 701, 12310,
+ 12311, 12312, 12313, 12314, 12315, 12324, 12316, 12317, 12318, 12319, 12320,
+ 12325, 12321, 12322, 12323, 12310, 12311, 12312, 12313, 12314, 12315, 12324,
+ 12316, 12317, 12318, 12319, 12320, 12325, 12321, 12322, 12323, 12324, 12325,
+ 523, 523, 12327, 12327, 12328, 12328, 12329, 12329, 12330, 12330, 523, 523,
+ 12332, 12332, 12333, 12333, 12334, 12334, 12335, 12335, 12336, 12336, 12331,
+ 12331, 12326, 402, 402, 12340, 12340, 12341, 12341, 12342, 12342, 12343,
+ 12344, 12345, 12346, 403, 403, 12348, 12348, 12349, 12349, 12350, 12350,
+ 12351, 12352, 12353, 12354, 12355, 12347, 406, 406, 12358, 12358, 12359,
+ 12359, 12360, 12360, 12361, 12362, 12363, 12364, 12365, 404, 404, 12367,
+ 12367, 12368, 12368, 12369, 12369, 12370, 12371, 12372, 12373, 408, 408,
+ 12375, 12375, 12376, 12376, 12377, 12377, 12378, 12379, 12380, 12381, 12382,
+ 12374, 407, 407, 12385, 12385, 12386, 12386, 12387, 12387, 12388, 12389,
+ 12390, 12391, 12392, 409, 409, 12394, 12394, 12395, 12395, 12396, 12396,
+ 12397, 12398, 12399, 12400, 12401, 12402, 12402, 12403, 12403, 12404, 12404,
+ 12405, 12405, 12406, 12406, 12407, 12407, 12408, 12408, 12409, 12409, 12410,
+ 12410, 12411, 12411, 410, 410, 12413, 12413, 12414, 12414, 12415, 12415,
+ 12416, 12417, 12418, 12419, 405, 405, 12421, 12421, 12422, 12422, 12423,
+ 12423, 12424, 12425, 12426, 12427, 12428, 12420, 12412, 12412, 401, 401,
+ 12432, 12432, 12433, 12433, 12434, 12434, 12435, 12436, 12437, 12438, 401,
+ 401, 12440, 12440, 12441, 12441, 12442, 12442, 12443, 12444, 12445, 12446,
+ 12447, 12447, 12231, 12231, 12439, 12439, 12384, 12384, 12356, 12356, 12429,
+ 12430, 12431, 12429, 12430, 12431, 12393, 12393, 12384, 12384, 12383, 12383,
+ 12366, 12366, 12356, 12356, 12357, 12357, 12338, 12339, 12337, 12338, 12339,
+ 12339, 12203, 12203, 12305, 12305, 12306, 12286, 12286, 12286, 12276, 12277,
+ 12278, 12276, 12277, 12278, 12240, 12240, 12231, 12231, 12230, 12230, 12213,
+ 12213, 12203, 12203, 12204, 12204, 12186, 12186, 12450, 12451, 12452, 12460,
+ 12461, 12453, 12454, 12455, 12456, 12457, 12458, 12448, 12449, 12450, 12451,
+ 12452, 12460, 12461, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460,
+ 12461, 12462, 12463, 12464, 12465, 12466, 12467, 92, 12468, 12469, 12469,
+ 12469, 12470, 12470, 12470, 12471, 12471, 12471, 340, 782, 12473, 12474,
+ 12475, 12476, 12476, 12476, 782, 12478, 12479, 12480, 12481, 12481, 12481,
+ 621, 12483, 12483, 12483, 591, 591, 591, 594, 594, 594, 632, 632, 632, 621,
+ 621, 621, 12484, 12485, 12486, 12487, 12484, 12484, 12485, 12486, 12487,
+ 12485, 12486, 12487, 12488, 12488, 12488, 12489, 594, 594, 12491, 12491,
+ 12492, 12492, 12493, 12493, 12494, 12494, 12495, 12495, 12496, 12496, 12497,
+ 12497, 12498, 12499, 12499, 12500, 12500, 12501, 12501, 12502, 12503, 12503,
+ 12504, 12504, 12505, 12505, 12506, 12506, 12507, 12507, 12508, 12508, 12509,
+ 12510, 12510, 12511, 12511, 12512, 12512, 12513, 12513, 12514, 12514, 12515,
+ 12515, 12516, 12517, 12517, 12518, 12518, 12519, 12519, 12520, 12520, 12521,
+ 12522, 12522, 12523, 12523, 12524, 12524, 12525, 12525, 12526, 12527, 12527,
+ 12528, 12528, 12529, 12529, 12530, 12530, 12531, 12531, 11947, 12533, 12533,
+ 12534, 12534, 12535, 12535, 12536, 12537, 12537, 12538, 12538, 12539, 12539,
+ 12540, 12540, 12541, 12541, 12542, 12542, 12543, 12544, 12544, 12545, 12545,
+ 12546, 12546, 12547, 12547, 12548, 12548, 12549, 12549, 12550, 12551, 12551,
+ 12552, 12552, 12553, 12553, 12554, 12554, 12555, 12556, 12556, 12557, 12557,
+ 12558, 12558, 12559, 12559, 12560, 12561, 12561, 12562, 12562, 12563, 12563,
+ 12564, 12564, 12565, 12565, 12566, 12566, 12532, 12532, 12490, 12490, 12490,
+ 12482, 12482, 12482, 12477, 12477, 12477, 12472, 12472, 12472, 986, 989,
+ 997, 1000, 975, 48, 543, 750, 49, 749, 1008, 12573, 12574, 409, 408, 407,
+ 406, 405, 404, 403, 402, 401, 393, 250, 388, 828, 507, 263, 462, 540, 536,
+ 248, 249, 251, 535, 526, 523, 519, 518, 448, 515, 235, 237, 238, 245, 246,
+ 502, 495, 494, 493, 482, 481, 476, 475, 474, 470, 701, 469, 457, 632, 229,
+ 236, 247, 715, 234, 674, 1041, 1042, 268, 694, 369, 410, 621, 1018, 1019,
+ 1020, 1021, 1022, 1023, 1024, 1025, 1026, 12587, 12586, 12577, 12578, 12579,
+ 12580, 12581, 12582, 12583, 12584, 12585, 43, 437, 2, 835, 591, 12588, 12589,
+ 12590, 765, 951, 1564, 594, 12575, 12576, 340, 512, 763, 764, 1086, 12591,
+ 12592, 12593, 12594, 12595, 12596, 12596, 1659, 1658, 340, 1655, 674, 694,
+ 1647, 1646, 1645, 1644, 1643, 462, 1639, 1638, 1626, 1625, 1624, 1623, 1622,
+ 1621, 1620, 1619, 1618, 1617, 1613, 1612, 1708, 1707, 1699, 1698, 1697, 1696,
+ 1695, 1694, 1688, 1687, 1686, 1685, 1680, 1679, 1678, 1673, 1672, 1671, 1735,
+ 1745, 1744, 1743, 1742, 268, 1738, 12610, 1041, 1042, 1726, 1725, 1724, 1723,
+ 1722, 1721, 1720, 997, 1000, 986, 989, 1008, 1758, 1757, 975, 1781, 1780,
+ 543, 632, 1775, 1774, 1773, 369, 1770, 835, 1767, 12617, 12616, 1792, 12624,
+ 12625, 12618, 12619, 12620, 12621, 12622, 12623, 12611, 12612, 12613, 12614,
+ 12615, 11985, 12605, 12606, 12607, 12608, 12609, 12598, 12599, 12600, 12601,
+ 12602, 12603, 12604, 1805, 12631, 1814, 12633, 474, 475, 476, 12634, 1810,
+ 12632, 594, 12637, 12638, 1825, 1824, 1837, 1857, 1853, 1852, 1847, 1846,
+ 1845, 1842, 12642, 12643, 12644, 12645, 229, 12641, 1878, 1877, 1876, 1875,
+ 1874, 1871, 1868, 1889, 1022, 1026, 1018, 1019, 1020, 1021, 437, 1902, 12655,
+ 12656, 12654, 12652, 12653, 12651, 502, 12648, 12649, 12650, 1915, 12662,
+ 1931, 1928, 1925, 1922, 12664, 12665, 12666, 12667, 12668, 12663, 1947, 1944,
+ 12, 1964, 526, 1564, 1972, 518, 519, 621, 828, 1969, 245, 247, 248, 249,
+ 250, 251, 448, 515, 12673, 234, 235, 236, 237, 238, 388, 715, 1957, 1956,
+ 1955, 1954, 512, 782, 1988, 72, 1985, 73, 1982, 1023, 1024, 1025, 195, 591,
+ 2049, 2048, 2040, 2039, 2038, 2037, 2036, 2035, 951, 2028, 2027, 2026, 12683,
+ 2024, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 393, 749, 750,
+ 765, 1999, 1998, 1997, 1996, 540, 762, 763, 764, 791, 1086, 263, 12680, 12681,
+ 12682, 12684, 12685, 12686, 12687, 12688, 12689, 12690, 12691, 11907, 12674,
+ 12675, 12676, 12677, 12678, 12679, 11905, 12671, 12672, 12669, 12670, 12657,
+ 12658, 12659, 12660, 12661, 11904, 12646, 12647, 457, 11902, 12639, 12640,
+ 11901, 11993, 12635, 12636, 12626, 12627, 12628, 12629, 12630, 1611, 12692,
+ 12693, 12694, 12695, 12696, 12697, 12698, 12699, 12700, 12701, 765, 835,
+ 1086, 791, 340, 782, 764, 512, 762, 763, 12704, 12703, 12705, 12706, 12707,
+ 314, 12654, 12708, 12709, 12710, 12710, 12711, 12711, 12712, 12713, 12713,
+ 12702, 12702, 12597, 12597, 835, 835, 12717, 12717, 12718, 12718, 12719,
+ 12719, 512, 762, 763, 764, 765, 12721, 12721, 12722, 12722, 12723, 12723,
+ 11937, 12725, 369, 369, 12727, 12727, 12728, 12728, 12729, 12729, 12730,
+ 12730, 12731, 12732, 12733, 12733, 12726, 12726, 11987, 11988, 12736, 12737,
+ 12737, 12737, 12738, 12738, 12738, 246, 246, 251, 251, 448, 448, 11990, 469,
+ 470, 245, 246, 247, 248, 249, 250, 251, 448, 515, 512, 543, 263, 535, 536,
+ 11998, 12747, 12748, 11909, 11906, 11907, 11995, 12745, 12746, 11901, 11992,
+ 12744, 12743, 12740, 12741, 12742, 12740, 12741, 12742, 437, 437, 12754,
+ 12754, 12755, 12755, 12756, 12756, 11861, 11861, 12758, 12758, 12759, 12759,
+ 12760, 12760, 12761, 12761, 12762, 12762, 12763, 12763, 12764, 12764, 12765,
+ 12765, 12766, 12766, 314, 314, 12768, 12768, 12769, 12769, 12767, 12767,
+ 12731, 12772, 12772, 12498, 12498, 12774, 12774, 12775, 12775, 12776, 12776,
+ 621, 621, 12777, 12777, 591, 591, 12778, 12779, 12780, 12778, 12779, 12780,
+ 12781, 12781, 543, 543, 11959, 643, 643, 12784, 12784, 12785, 12785, 12786,
+ 12786, 12787, 12787, 12788, 12788, 12789, 12789, 12790, 12790, 12791, 12791,
+ 12792, 12792, 12793, 12793, 12794, 12794, 12795, 12795, 12796, 12796, 11722,
+ 11722, 12798, 12798, 12799, 12799, 12800, 12800, 12801, 12801, 12797, 12797,
+ 715, 715, 12804, 12804, 12805, 12805, 12002, 12004, 12005, 12006, 12000,
+ 12001, 12003, 12806, 12806, 11978, 11978, 767, 767, 12809, 12809, 12810,
+ 12810, 12811, 12811, 12812, 12812, 12813, 12813, 782, 782, 12815, 12815,
+ 12816, 12816, 791, 791, 12818, 12818, 12819, 12819, 12820, 12820, 12821,
+ 12821, 12817, 12817, 12814, 12814, 11889, 11889, 512, 762, 763, 764, 765,
+ 12822, 12823, 12824, 12825, 12822, 12823, 12824, 12825, 12826, 12826, 12827,
+ 12827, 12828, 12828, 12032, 12032, 12830, 12830, 12831, 12829, 12829, 12039,
+ 12832, 12833, 12833, 12834, 12834, 12807, 12808, 12807, 12808, 828, 828,
+ 12837, 12054, 12054, 12838, 12838, 507, 507, 12841, 12841, 12842, 12842,
+ 12843, 12843, 12844, 12844, 12845, 12845, 12846, 12067, 12067, 12848, 12848,
+ 12849, 12849, 12850, 12850, 12851, 12851, 12852, 12852, 234, 234, 12854,
+ 12854, 12855, 12855, 12856, 12856, 12857, 12857, 12858, 12858, 12859, 12859,
+ 12860, 12860, 12861, 12861, 12862, 12862, 12863, 12863, 12864, 12864, 247,
+ 247, 12866, 12866, 12867, 12867, 12868, 12868, 12869, 12869, 12870, 12870,
+ 12871, 12871, 12872, 12872, 12873, 12873, 12874, 12874, 12875, 12875, 12876,
+ 12865, 12853, 12853, 12877, 12878, 12879, 12879, 12847, 12880, 12881, 12102,
+ 12102, 951, 951, 12883, 12883, 12884, 12884, 12885, 12885, 12886, 12886,
+ 12887, 12887, 12112, 12112, 975, 975, 12890, 12890, 12891, 12891, 12892,
+ 12892, 989, 989, 986, 986, 12894, 12895, 12894, 12895, 1000, 1000, 997, 997,
+ 12897, 12898, 12897, 12898, 12899, 12896, 1008, 12900, 12901, 12902, 12902,
+ 12893, 12893, 12131, 12131, 12905, 12905, 12906, 12906, 12907, 12907, 12908,
+ 12908, 12909, 12138, 12910, 12911, 12911, 12912, 12912, 12913, 12913, 12914,
+ 12914, 12915, 12915, 12916, 12916, 12903, 12904, 12903, 12904, 12889, 12889,
+ 12888, 12888, 12882, 12882, 12839, 12840, 12839, 12840, 12835, 12836, 12835,
+ 12836, 12802, 12802, 12803, 12803, 12783, 12783, 12782, 12782, 12773, 12773,
+ 12770, 12771, 12770, 12771, 1086, 1086, 12929, 12929, 12930, 12930, 12931,
+ 12931, 12932, 12932, 12933, 12933, 12917, 12918, 12919, 12920, 12921, 12922,
+ 12923, 12924, 12925, 12926, 12927, 12928, 12917, 12918, 12919, 12920, 12921,
+ 12922, 12923, 12924, 12925, 12926, 12927, 12928, 12757, 12757, 11913, 11914,
+ 11915, 12002, 12006, 12750, 12749, 12751, 12752, 12753, 12739, 12739, 12739,
+ 12028, 12939, 12940, 12941, 12942, 11489, 11489, 12944, 12944, 12945, 12945,
+ 543, 543, 543, 11959, 12943, 12802, 12805, 12805, 11980, 92, 223, 84, 85,
+ 86, 87, 88, 89, 90, 91, 222, 2, 220, 221, 19, 81, 82, 83, 80, 69, 218, 219,
+ 4, 74, 212, 75, 36, 47, 76, 77, 213, 7, 8, 9, 10, 11, 12, 13, 78, 79, 14,
+ 15, 16, 17, 18, 39, 94, 214, 215, 216, 217, 44, 49, 55, 186, 187, 188, 189,
+ 190, 191, 192, 193, 37, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 40, 45, 52, 68, 208, 209, 210, 211, 3, 41, 42, 43, 48,
+ 71, 6, 72, 73, 12971, 12972, 12973, 12974, 12975, 12976, 12977, 12978, 12964,
+ 12965, 12966, 12967, 12968, 12969, 12970, 12961, 12962, 12963, 12960, 12958,
+ 12959, 12956, 12957, 12952, 12953, 12954, 12955, 12950, 12951, 164, 165,
+ 50, 166, 38, 56, 167, 168, 169, 170, 171, 70, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 146, 147, 148, 149, 150, 151, 152,
+ 153, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 134, 135, 136, 137, 95, 138, 51, 53, 139, 140, 141, 142,
+ 143, 144, 145, 31, 32, 30, 33, 34, 127, 128, 20, 93, 129, 130, 131, 57, 132,
+ 46, 133, 13005, 13006, 13007, 13008, 13000, 13001, 13002, 13003, 13004, 12994,
+ 12995, 12996, 12997, 12998, 12999, 12987, 12988, 12989, 12990, 12991, 12992,
+ 12993, 126, 119, 120, 121, 122, 123, 124, 125, 13014, 13015, 13016, 13017,
+ 13013, 112, 113, 114, 115, 116, 117, 118, 111, 21, 25, 26, 27, 28, 29, 54,
+ 13026, 13024, 13025, 13023, 13020, 13021, 13022, 110, 13031, 107, 108, 109,
+ 22, 23, 24, 13036, 13033, 13034, 13035, 13037, 13038, 13032, 13027, 13028,
+ 13029, 13030, 13018, 13019, 13009, 13010, 13011, 13012, 12979, 12980, 12981,
+ 12982, 12983, 12984, 12985, 12986, 106, 13045, 104, 105, 35, 13048, 13047,
+ 103, 13051, 13052, 13049, 13050, 13046, 102, 13056, 101, 13058, 13059, 13057,
+ 5, 13062, 13063, 100, 13065, 13066, 99, 13068, 1, 96, 97, 98, 13070, 13071,
+ 13072, 13073, 13074, 13069, 13075, 13076, 13067, 13064, 13060, 13061, 13053,
+ 13054, 13055, 13039, 13040, 13041, 13042, 13043, 13044, 13077, 13078, 13079,
+ 13080, 13081, 13082, 13083, 13083, 13083, 13084, 13084, 13084, 13085, 13085,
+ 13085, 11998, 12748, 13086, 13086, 13086, 12692, 12693, 12694, 12695, 12696,
+ 12697, 12698, 12699, 12700, 1611, 12949, 12949, 12949, 13087, 12750, 11913,
+ 12002, 11914, 11915, 12004, 12005, 12006, 13088, 13088, 13088, 13089, 12596,
+ 12596, 975, 13092, 13093, 13093, 13093, 13094, 13094, 13094, 13095, 13095,
+ 13095, 13096, 13097, 13098, 13099, 1041, 13101, 13102, 13102, 13103, 13103,
+ 13104, 13104, 13105, 13105, 13106, 13106, 13107, 13108, 13109, 13110, 13111,
+ 13112, 13112, 13113, 13113, 13114, 13114, 13115, 13115, 13102, 13102, 13117,
+ 13117, 13118, 13118, 13119, 13119, 13120, 13120, 13121, 13122, 13123, 13124,
+ 13125, 13126, 13126, 13127, 13127, 13128, 13128, 13129, 13129, 13130, 13130,
+ 13116, 13116, 13131, 13131, 13132, 13133, 13133, 13133, 1042, 13135, 13136,
+ 13136, 13137, 13137, 13138, 13138, 13139, 13139, 13140, 13140, 13141, 13142,
+ 13142, 13143, 13143, 13144, 13144, 13145, 13145, 13136, 13136, 13147, 13147,
+ 13148, 13148, 13149, 13149, 13150, 13150, 13151, 13152, 13152, 13153, 13153,
+ 13154, 13154, 13155, 13155, 13156, 13156, 13146, 13146, 13157, 13157, 13158,
+ 13159, 13159, 13159, 43, 13160, 44, 750, 749, 13134, 340, 763, 764, 765,
+ 782, 791, 1086, 13161, 13162, 13163, 13164, 13165, 13166, 13100, 12710, 12710,
+ 311, 13170, 13171, 13172, 13173, 13174, 13174, 13174, 13174, 13176, 13176,
+ 13175, 13175, 13177, 13177, 13178, 13179, 13180, 512, 13182, 13183, 13184,
+ 762, 13186, 13187, 13188, 763, 13190, 13191, 13192, 764, 13194, 13195, 13196,
+ 1086, 13198, 13199, 13200, 340, 13202, 13203, 13204, 782, 13206, 13207, 13208,
+ 12704, 13210, 13211, 765, 13213, 13214, 13215, 40, 13216, 48, 13212, 49,
+ 13209, 50, 13205, 3, 13201, 41, 13197, 42, 13193, 43, 13189, 44, 750, 13185,
+ 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227,
+ 13228, 13229, 13181, 314, 314, 314, 13232, 13232, 13232, 13233, 13234, 13235,
+ 13230, 13231, 13167, 13168, 13169, 13169, 13236, 13237, 13238, 13239, 13239,
+ 13239, 13091, 13091, 13090, 13090, 13090, 828, 828, 828, 13243, 835, 835,
+ 13245, 13245, 13246, 13246, 13244, 835, 13249, 13250, 13251, 835, 835, 13253,
+ 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13262, 13262,
+ 13252, 13264, 13264, 13263, 13264, 13247, 13248, 13247, 13248, 13248, 750,
+ 13267, 13268, 13268, 13269, 13269, 512, 762, 763, 764, 765, 13267, 13271,
+ 13271, 13272, 13272, 13273, 13273, 13270, 13270, 951, 951, 13276, 13276,
+ 951, 951, 13278, 13278, 13279, 13279, 13277, 13277, 13280, 13280, 13281,
+ 12747, 13282, 13282, 13282, 13283, 13284, 388, 388, 13286, 13286, 13287,
+ 13287, 13288, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13294, 13295,
+ 13295, 13296, 13296, 13297, 13297, 13298, 13298, 13299, 13299, 13300, 13300,
+ 13301, 13301, 13302, 13302, 388, 388, 13304, 13304, 13305, 13305, 13306,
+ 13306, 13307, 13308, 13309, 13310, 13311, 13312, 13312, 13313, 13313, 13314,
+ 13314, 13315, 13315, 13316, 13316, 13317, 13317, 13318, 13318, 13319, 13319,
+ 13320, 13320, 13321, 13321, 13303, 13303, 13323, 13322, 13323, 13324, 13324,
+ 13324, 13325, 12106, 13327, 13327, 13328, 13328, 12885, 13330, 13330, 13331,
+ 13331, 13332, 13332, 13329, 13329, 12112, 13335, 13335, 13335, 975, 13092,
+ 11886, 11886, 11886, 13338, 13338, 13338, 13339, 13339, 13339, 989, 989,
+ 989, 986, 986, 986, 13341, 13341, 13341, 13342, 13342, 13342, 13341, 13342,
+ 13341, 13342, 13341, 13342, 13343, 1000, 1000, 1000, 997, 997, 997, 13345,
+ 13345, 13345, 13346, 13346, 13346, 13345, 13346, 13345, 13346, 13345, 13346,
+ 13347, 13348, 13344, 1008, 13349, 13350, 1008, 13349, 13350, 13351, 13352,
+ 13352, 13352, 2, 13340, 13337, 13337, 13337, 13283, 12138, 13356, 13357,
+ 13357, 13358, 13358, 13359, 13359, 13360, 13360, 13361, 13361, 13357, 13357,
+ 13363, 13363, 13364, 13364, 13365, 13365, 13366, 13366, 251, 250, 249, 248,
+ 247, 246, 245, 5, 13369, 13370, 13371, 13372, 13373, 13374, 13375, 13376,
+ 13377, 13378, 13379, 13380, 13381, 13382, 13383, 13384, 13385, 13386, 13387,
+ 13388, 13389, 13390, 13391, 13392, 13393, 13394, 13395, 13396, 13397, 13398,
+ 13399, 13400, 13401, 13402, 13403, 13404, 13405, 13406, 13407, 13408, 13409,
+ 13410, 13411, 13412, 13413, 13414, 13415, 13416, 13417, 13418, 224, 225,
+ 13421, 13422, 226, 13424, 13425, 228, 13427, 13428, 13429, 13430, 13431,
+ 13432, 13433, 13434, 13435, 13436, 13437, 13438, 13439, 13440, 13441, 13442,
+ 13443, 13444, 13368, 11909, 13367, 13367, 13362, 13362, 13353, 13354, 13355,
+ 13353, 13354, 13353, 13354, 13355, 13355, 13336, 13336, 13336, 13333, 13333,
+ 13334, 674, 11725, 11725, 674, 12800, 12800, 13326, 13326, 13326, 13285,
+ 13285, 13285, 765, 764, 763, 762, 512, 13274, 13274, 13275, 13265, 13266,
+ 13265, 13265, 13266, 13266, 13240, 13242, 13241, 13240, 13240, 13242, 13241,
+ 13242, 12948, 12821, 12948, 12821, 12946, 12947, 12946, 12947, 12947, 12934,
+ 12935, 12937, 12936, 12938, 12934, 12935, 12937, 12936, 12938, 12937, 12938,
+ 12734, 12734, 12735, 512, 762, 763, 764, 765, 12724, 12724, 12720, 12720,
+ 12714, 12715, 12716, 12714, 12715, 12716, 12568, 12569, 12570, 12571, 12572,
+ 12567, 12569, 12568, 12569, 12570, 12571, 12572, 12570, 12571, 12572, 12162,
+ 12163, 12164, 12165, 12162, 12163, 12164, 12165, 11888, 11889, 11889, 11887,
+ 11891, 11890, 11887, 11887, 11891, 11890, 11891, 11892, 11821, 11821, 11812,
+ 11813, 11814, 11812, 11813, 11814, 11802, 11802, 11800, 11800, 674, 11796,
+ 11796, 11796, 11143, 11143, 11789, 11789, 11768, 11768, 512, 762, 763, 764,
+ 765, 11762, 11762, 11757, 11758, 11757, 11758, 11738, 11738, 11729, 11729,
+ 11728, 11728, 11730, 11731, 11732, 11730, 11731, 11732, 11492, 11492, 11493,
+ 11178, 11493, 11178, 11487, 11488, 11487, 11488, 11474, 11475, 11476, 11477,
+ 11478, 11474, 11475, 11476, 11477, 11478, 11294, 11295, 11296, 11297, 11298,
+ 11294, 11295, 11296, 11297, 11298, 11073, 11073, 11064, 11064, 11063, 11065,
+ 11066, 11063, 11065, 11066, 2830, 2833, 11026, 2624, 2805, 2806, 2807, 2808,
+ 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 2819, 2820, 2821,
+ 2624, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816,
+ 2817, 2818, 2819, 2820, 2821, 690, 2822, 920, 1, 227, 226, 13489, 13490,
+ 13491, 13492, 13493, 13495, 13497, 13499
+};
+
+static unsigned char    label_array[] = {
+ 0xFE, 0xF9, 0xF8, 0xF4, 0xE7, 0xE6, 0xE4, 0xE3, 0xE2, 0xD9, 0xD7, 0xD4, 0xD3,
+ 0xD2, 0xD1, 0xC9, 0xC8, 0xC7, 0xC5, 0xC3, 0xC2, 0xC1, 0xB7, 0xB6, 0xB4, 0xB3,
+ 0xAB, 0xA7, 0xA6, 0xA4, 0xA3, 0xA2, 0x9B, 0x99, 0x97, 0x94, 0x93, 0x92, 0x91,
+ 0x89, 0x88, 0x87, 0x85, 0x83, 0x82, 0x81, 0x78, 0x77, 0x75, 0x74, 0x73, 0x72,
+ 0x71, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63,
+ 0x62, 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A,
+ 0x49, 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x1B, 0x00, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x37, 0x00, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x35, 0x32, 0x31, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x39, 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x35, 0x36, 0x00, 0x00,
+ 0x34, 0x00, 0x30, 0x00, 0x00, 0x47, 0x67, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49,
+ 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00, 0x6E, 0x4E, 0x00,
+ 0x65, 0x45, 0x00, 0x2D, 0x00, 0x64, 0x44, 0x00, 0x72, 0x52, 0x00, 0x61, 0x41,
+ 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x74, 0x54, 0x00,
+ 0x73, 0x53, 0x00, 0x2D, 0x00, 0x65, 0x45, 0x00, 0x62, 0x42, 0x00, 0x6F, 0x4F,
+ 0x00, 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, 0x00, 0x38, 0x36, 0x00, 0x39, 0x00,
+ 0x31, 0x00, 0x2D, 0x00, 0x34, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x78, 0x58, 0x00,
+ 0x5F, 0x00, 0x69, 0x49, 0x00, 0x73, 0x53, 0x00, 0x00, 0x43, 0x63, 0x00, 0x69,
+ 0x49, 0x00, 0x62, 0x42, 0x00, 0x61, 0x41, 0x69, 0x49, 0x00, 0x69, 0x49, 0x38,
+ 0x00, 0x30, 0x00, 0x37, 0x00, 0x2D, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x43, 0x63,
+ 0x6D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E,
+ 0x44, 0x00, 0x00, 0x53, 0x73, 0x00, 0x63, 0x43, 0x00, 0x73, 0x53, 0x00, 0x6B,
+ 0x4B, 0x00, 0x68, 0x48, 0x00, 0x2D, 0x00, 0x35, 0x00, 0x67, 0x47, 0x00, 0x69,
+ 0x49, 0x00, 0x00, 0x38, 0x00, 0x35, 0x00, 0x00, 0x34, 0x00, 0x32, 0x00, 0x00,
+ 0x39, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36,
+ 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x34, 0x00, 0x31, 0x00, 0x00, 0x31,
+ 0x30, 0x00, 0x30, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00, 0x73, 0x53, 0x00,
+ 0x00, 0x45, 0x65, 0x00, 0x73, 0x53, 0x00, 0x65, 0x45, 0x00, 0x6E, 0x4E, 0x00,
+ 0x69, 0x49, 0x00, 0x00, 0x52, 0x72, 0x52, 0x72, 0x53, 0x73, 0x00, 0x00, 0x00,
+ 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x00, 0x00, 0x37, 0x00, 0x33, 0x31, 0x30,
+ 0x00, 0x00, 0x36, 0x00, 0x32, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x38, 0x33,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x37, 0x30, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x37, 0x00, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x30, 0x00, 0x33, 0x32, 0x00, 0x00, 0x30,
+ 0x00, 0x30, 0x00, 0x00, 0x35, 0x00, 0x37, 0x00, 0x00, 0x39, 0x00, 0x00, 0x39,
+ 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x31,
+ 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39,
+ 0x38, 0x37, 0x36, 0x35, 0x31, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x33, 0x00,
+ 0x00, 0x38, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x33, 0x31, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x35, 0x34, 0x33,
+ 0x30, 0x39, 0x32, 0x31, 0x2D, 0x64, 0x44, 0x00, 0x72, 0x52, 0x00, 0x61, 0x41,
+ 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x74, 0x54, 0x00,
+ 0x73, 0x53, 0x00, 0x65, 0x45, 0x00, 0x62, 0x42, 0x00, 0x6F, 0x4F, 0x63, 0x43,
+ 0x00, 0x00, 0x53, 0x73, 0x64, 0x44, 0x35, 0x00, 0x67, 0x47, 0x00, 0x69, 0x49,
+ 0x00, 0x00, 0x52, 0x72, 0x00, 0x00, 0x45, 0x65, 0x00, 0x73, 0x53, 0x00, 0x65,
+ 0x45, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x61, 0x41,
+ 0x00, 0x6A, 0x4A, 0x00, 0x54, 0x74, 0x00, 0x6D, 0x4D, 0x00, 0x66, 0x46, 0x00,
+ 0x64, 0x44, 0x00, 0x6B, 0x4B, 0x00, 0x00, 0x48, 0x68, 0x00, 0x00, 0x00, 0x54,
+ 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x00, 0x63, 0x43, 0x00, 0x75, 0x55, 0x00, 0x00,
+ 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x4B, 0x6B, 0x32, 0x00, 0x62, 0x42, 0x00,
+ 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00,
+ 0x61, 0x41, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x68,
+ 0x48, 0x00, 0x74, 0x54, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00, 0x77, 0x57,
+ 0x00, 0x66, 0x46, 0x00, 0x6C, 0x4C, 0x00, 0x00, 0x38, 0x00, 0x6E, 0x4E, 0x00,
+ 0x61, 0x41, 0x00, 0x6D, 0x4D, 0x00, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x00,
+ 0x50, 0x70, 0x61, 0x41, 0x00, 0x39, 0x00, 0x6D, 0x4D, 0x00, 0x00, 0x37, 0x00,
+ 0x34, 0x32, 0x00, 0x30, 0x00, 0x00, 0x38, 0x37, 0x33, 0x00, 0x39, 0x38, 0x37,
+ 0x32, 0x37, 0x35, 0x31, 0x39, 0x36, 0x35, 0x33, 0x31, 0x30, 0x38, 0x34, 0x00,
+ 0x00, 0x39, 0x38, 0x37, 0x36, 0x35, 0x35, 0x33, 0x00, 0x31, 0x30, 0x00, 0x00,
+ 0x69, 0x49, 0x00, 0x61, 0x41, 0x00, 0x68, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x00, 0x00, 0x6D,
+ 0x62, 0x4D, 0x42, 0x30, 0x00, 0x38, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00,
+ 0x32, 0x00, 0x62, 0x42, 0x00, 0x67, 0x47, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x35, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x72, 0x52, 0x00, 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C,
+ 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x72, 0x52, 0x00, 0x79, 0x59, 0x00,
+ 0x00, 0x4B, 0x6B, 0x00, 0x65, 0x45, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00,
+ 0x00, 0x57, 0x77, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00, 0x62, 0x42, 0x00,
+ 0x45, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x35, 0x34,
+ 0x33, 0x32, 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x00, 0x6E, 0x4E,
+ 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x00, 0x00, 0x6C,
+ 0x4C, 0x38, 0x35, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x73, 0x62, 0x53, 0x42, 0x00,
+ 0x00, 0x72, 0x52, 0x00, 0x38, 0x00, 0x69, 0x49, 0x00, 0x00, 0x37, 0x00, 0x38,
+ 0x00, 0x39, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00,
+ 0x63, 0x43, 0x00, 0x00, 0x73, 0x6F, 0x53, 0x4F, 0x43, 0x63, 0x00, 0x69, 0x49,
+ 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C, 0x00, 0x61, 0x41, 0x00, 0x62, 0x42, 0x00,
+ 0x35, 0x00, 0x37, 0x4C, 0x6C, 0x00, 0x61, 0x41, 0x00, 0x75, 0x55, 0x00, 0x67,
+ 0x47, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49,
+ 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C, 0x00, 0x75, 0x55, 0x00, 0x6D, 0x4D, 0x00,
+ 0x30, 0x57, 0x77, 0x00, 0x65, 0x45, 0x00, 0x72, 0x52, 0x00, 0x62, 0x42, 0x00,
+ 0x65, 0x45, 0x00, 0x68, 0x48, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74,
+ 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x32, 0x00, 0x34, 0x00, 0x65,
+ 0x45, 0x00, 0x67, 0x47, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x65, 0x45,
+ 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x00, 0x63, 0x43, 0x36, 0x35,
+ 0x32, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x00, 0x70, 0x50, 0x38, 0x37, 0x00,
+ 0x63, 0x43, 0x00, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x00, 0x6A, 0x4A, 0x00,
+ 0x54, 0x74, 0x00, 0x66, 0x46, 0x00, 0x69, 0x49, 0x00, 0x68, 0x48, 0x30, 0x00,
+ 0x32, 0x00, 0x36, 0x00, 0x53, 0x73, 0x00, 0x69, 0x49, 0x00, 0x00, 0x45, 0x65,
+ 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00,
+ 0x00, 0x65, 0x45, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x4C, 0x6C, 0x42, 0x62,
+ 0x00, 0x36, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x65, 0x45, 0x00, 0x00, 0x4C,
+ 0x6C, 0x42, 0x62, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x38, 0x33, 0x31, 0x00,
+ 0x66, 0x46, 0x00, 0x00, 0x74, 0x6E, 0x54, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x35, 0x00, 0x32,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x31, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00,
+ 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x31, 0x00, 0x00, 0x31,
+ 0x33, 0x00, 0x73, 0x53, 0x00, 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44,
+ 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68,
+ 0x67, 0x65, 0x62, 0x61, 0x57, 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47,
+ 0x45, 0x42, 0x41, 0x00, 0x00, 0x43, 0x63, 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C,
+ 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x72, 0x52, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50, 0x48, 0x43, 0x31, 0x32,
+ 0x00, 0x72, 0x52, 0x45, 0x65, 0x41, 0x61, 0x48, 0x68, 0x4B, 0x6B, 0x53, 0x73,
+ 0x49, 0x69, 0x52, 0x72, 0x42, 0x62, 0x52, 0x72, 0x45, 0x65, 0x54, 0x74, 0x53,
+ 0x73, 0x4C, 0x6C, 0x4F, 0x6F, 0x45, 0x65, 0x00, 0x63, 0x43, 0x00, 0x65, 0x45,
+ 0x00, 0x6F, 0x4F, 0x45, 0x65, 0x52, 0x72, 0x53, 0x73, 0x54, 0x74, 0x55, 0x75,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72, 0x6E, 0x69, 0x68, 0x67,
+ 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55, 0x54, 0x53, 0x52, 0x4E,
+ 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x00, 0x2D, 0x43, 0x63,
+ 0x00, 0x69, 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00,
+ 0x72, 0x52, 0x00, 0x00, 0x79, 0x70, 0x59, 0x50, 0x4F, 0x6F, 0x00, 0x72, 0x52,
+ 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x33, 0x00, 0x37, 0x00,
+ 0x32, 0x00, 0x2D, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65,
+ 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x00,
+ 0x4B, 0x6B, 0x65, 0x45, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00,
+ 0x65, 0x45, 0x00, 0x2B, 0x00, 0x34, 0x00, 0x38, 0x00, 0x32, 0x00, 0x2D, 0x00,
+ 0x73, 0x53, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45,
+ 0x00, 0x2B, 0x00, 0x38, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2D, 0x4F, 0x6F, 0x00,
+ 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00,
+ 0x39, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x00, 0x49, 0x69, 0x72, 0x52, 0x4F, 0x6F,
+ 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x35,
+ 0x00, 0x38, 0x00, 0x32, 0x00, 0x2D, 0x00, 0x62, 0x42, 0x4F, 0x6F, 0x00, 0x72,
+ 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x30, 0x00, 0x30,
+ 0x00, 0x35, 0x00, 0x2D, 0x00, 0x6C, 0x4C, 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E,
+ 0x00, 0x6F, 0x4F, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00,
+ 0x6E, 0x4E, 0x00, 0x72, 0x52, 0x00, 0x65, 0x45, 0x00, 0x74, 0x54, 0x4F, 0x6F,
+ 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x31,
+ 0x00, 0x37, 0x00, 0x38, 0x00, 0x2D, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75,
+ 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x30, 0x00, 0x38, 0x00, 0x32, 0x00,
+ 0x2D, 0x00, 0x00, 0x00, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x41, 0x61, 0x00,
+ 0x6E, 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x2D, 0x00, 0x70, 0x50,
+ 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2D,
+ 0x00, 0x2D, 0x00, 0x39, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54,
+ 0x00, 0x61, 0x41, 0x6F, 0x4F, 0x65, 0x45, 0x4F, 0x6F, 0x00, 0x72, 0x52, 0x00,
+ 0x75, 0x55, 0x00, 0x65, 0x45, 0x00, 0x2B, 0x00, 0x37, 0x00, 0x33, 0x00, 0x2D,
+ 0x00, 0x73, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55,
+ 0x53, 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x00, 0x00, 0x2D,
+ 0x00, 0x63, 0x43, 0x00, 0x69, 0x49, 0x00, 0x64, 0x44, 0x00, 0x63, 0x43, 0x34,
+ 0x38, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2D, 0x00, 0x61, 0x41, 0x00, 0x6D, 0x4D,
+ 0x38, 0x00, 0x32, 0x00, 0x39, 0x00, 0x5F, 0x00, 0x74, 0x54, 0x00, 0x6F, 0x4F,
+ 0x4E, 0x6E, 0x50, 0x70, 0x3E, 0x00, 0x68, 0x48, 0x00, 0x00, 0x00, 0x74, 0x6B,
+ 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x00, 0x74, 0x54, 0x2D, 0x00, 0x63, 0x43,
+ 0x5F, 0x00, 0x72, 0x52, 0x00, 0x6F, 0x4F, 0x00, 0x66, 0x46, 0x00, 0x5F, 0x00,
+ 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6D, 0x4D, 0x00, 0x72, 0x52, 0x00, 0x6F,
+ 0x4F, 0x00, 0x66, 0x46, 0x00, 0x5F, 0x00, 0x64, 0x44, 0x00, 0x65, 0x45, 0x00,
+ 0x6B, 0x4B, 0x00, 0x63, 0x43, 0x00, 0x61, 0x41, 0x00, 0x70, 0x50, 0x00, 0x5F,
+ 0x00, 0x65, 0x45, 0x00, 0x64, 0x44, 0x00, 0x6F, 0x4F, 0x00, 0x63, 0x43, 0x00,
+ 0x5F, 0x00, 0x78, 0x58, 0x00, 0x69, 0x49, 0x00, 0x6E, 0x4E, 0x00, 0x75, 0x55,
+ 0x00, 0x5F, 0x00, 0x64, 0x44, 0x00, 0x65, 0x45, 0x00, 0x64, 0x44, 0x00, 0x6E,
+ 0x4E, 0x00, 0x65, 0x45, 0x00, 0x74, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+ 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x2D, 0x00, 0x32, 0x00,
+ 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x4B, 0x6B, 0x5F, 0x32, 0x00, 0x38, 0x00,
+ 0x6B, 0x4B, 0x00, 0x65, 0x45, 0x00, 0x65, 0x45, 0x00, 0x00, 0x72, 0x62, 0x52,
+ 0x42, 0x2D, 0x00, 0x70, 0x65, 0x50, 0x45, 0x30, 0x33, 0x34, 0x38, 0x39, 0x00,
+ 0x00, 0x00, 0x39, 0x36, 0x31, 0x30, 0x00, 0x33, 0x31, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x32, 0x37, 0x35, 0x31, 0x30, 0x39, 0x35, 0x34, 0x32, 0x31, 0x31, 0x30,
+ 0x33, 0x36, 0x38, 0x35, 0x34, 0x30, 0x38, 0x37, 0x35, 0x39, 0x33, 0x37, 0x36,
+ 0x35, 0x39, 0x38, 0x30, 0x33, 0x32, 0x31, 0x34, 0x34, 0x32, 0x30, 0x33, 0x31,
+ 0x36, 0x35, 0x37, 0x38, 0x39, 0x30, 0x33, 0x31, 0x32, 0x36, 0x39, 0x37, 0x34,
+ 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32,
+ 0x31, 0x30, 0x31, 0x30, 0x32, 0x00, 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34,
+ 0x33, 0x32, 0x31, 0x30, 0x00, 0x35, 0x00, 0x00, 0x00, 0x32, 0x31, 0x30, 0x00,
+ 0x38, 0x36, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x39, 0x34, 0x37, 0x36, 0x38,
+ 0x35, 0x33, 0x32, 0x31, 0x00, 0x2D, 0x00, 0x61, 0x41, 0x00, 0x6E, 0x4E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x36, 0x37, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x37, 0x36, 0x33, 0x32, 0x31, 0x30, 0x31, 0x00, 0x00, 0x39, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39,
+ 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35,
+ 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x33, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x36, 0x35,
+ 0x34, 0x33, 0x00, 0x00, 0x00, 0x00, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x36, 0x35, 0x33, 0x32, 0x31, 0x31, 0x33, 0x38, 0x33, 0x35, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+ 0x32, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x31, 0x00, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x36, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33,
+ 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x35, 0x33, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x31, 0x00, 0x32, 0x38, 0x00, 0x38, 0x00, 0x00,
+ 0x33, 0x34, 0x00, 0x00, 0x35, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36,
+ 0x38, 0x33, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x39, 0x32, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x00, 0x00, 0x34, 0x00,
+ 0x35, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x31, 0x30,
+ 0x00, 0x00, 0x36, 0x00, 0x34, 0x00, 0x00, 0x00, 0x36, 0x35, 0x00, 0x00, 0x39,
+ 0x00, 0x30, 0x00, 0x35, 0x34, 0x30, 0x37, 0x00, 0x00, 0x39, 0x37, 0x38, 0x35,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x30, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x00,
+ 0x37, 0x36, 0x33, 0x30, 0x00, 0x00, 0x36, 0x00, 0x37, 0x39, 0x00, 0x00, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x32, 0x31, 0x00, 0x00, 0x00, 0x00,
+ 0x35, 0x30, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34,
+ 0x00, 0x00, 0x32, 0x39, 0x33, 0x00, 0x00, 0x36, 0x00, 0x00, 0x35, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x33, 0x32, 0x30,
+ 0x00, 0x00, 0x00, 0x30, 0x35, 0x33, 0x32, 0x00, 0x00, 0x33, 0x00, 0x32, 0x39,
+ 0x38, 0x37, 0x36, 0x34, 0x30, 0x00, 0x00, 0x35, 0x34, 0x38, 0x00, 0x37, 0x00,
+ 0x00, 0x35, 0x00, 0x34, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x34,
+ 0x33, 0x31, 0x30, 0x00, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x00, 0x31,
+ 0x00, 0x00, 0x34, 0x00, 0x00, 0x35, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x33, 0x32, 0x31, 0x00, 0x32, 0x00, 0x00, 0x32, 0x31, 0x00, 0x00, 0x30,
+ 0x00, 0x00, 0x37, 0x00, 0x00, 0x37, 0x33, 0x32, 0x39, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37, 0x36, 0x35, 0x33, 0x37, 0x35, 0x32,
+ 0x31, 0x30, 0x38, 0x00, 0x00, 0x00, 0x32, 0x00, 0x39, 0x36, 0x35, 0x33, 0x32,
+ 0x30, 0x38, 0x34, 0x31, 0x00, 0x00, 0x31, 0x30, 0x34, 0x38, 0x35, 0x00, 0x00,
+ 0x31, 0x37, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x39, 0x37, 0x36,
+ 0x35, 0x33, 0x31, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00,
+ 0x36, 0x00, 0x00, 0x00, 0x34, 0x36, 0x35, 0x33, 0x38, 0x36, 0x34, 0x33, 0x32,
+ 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x31, 0x30,
+ 0x38, 0x37, 0x36, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36,
+ 0x35, 0x34, 0x33, 0x32, 0x30, 0x00, 0x39, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x39, 0x37, 0x36, 0x34, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37,
+ 0x36, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x35, 0x34, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x39,
+ 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x31, 0x30, 0x30, 0x37,
+ 0x00, 0x00, 0x33, 0x30, 0x36, 0x38, 0x37, 0x33, 0x35, 0x34, 0x30, 0x37, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x35, 0x30, 0x31, 0x37, 0x00, 0x00,
+ 0x36, 0x30, 0x34, 0x33, 0x30, 0x37, 0x00, 0x00, 0x33, 0x32, 0x30, 0x00, 0x30,
+ 0x30, 0x37, 0x35, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x39, 0x33, 0x38, 0x33,
+ 0x35, 0x36, 0x37, 0x37, 0x35, 0x32, 0x31, 0x30, 0x38, 0x39, 0x36, 0x35, 0x33,
+ 0x32, 0x31, 0x30, 0x38, 0x34, 0x34, 0x38, 0x31, 0x30, 0x35, 0x30, 0x37, 0x31,
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x35,
+ 0x33, 0x31, 0x34, 0x35, 0x33, 0x35, 0x34, 0x33, 0x32, 0x36, 0x38, 0x30, 0x33,
+ 0x31, 0x34, 0x32, 0x36, 0x37, 0x38, 0x30, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x33, 0x32, 0x34, 0x36, 0x37, 0x39, 0x30, 0x31, 0x36, 0x37, 0x38,
+ 0x39, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37,
+ 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x38, 0x39, 0x30,
+ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x36, 0x35, 0x37, 0x37,
+ 0x30, 0x31, 0x32, 0x33, 0x36, 0x31, 0x39, 0x38, 0x37, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x32, 0x34,
+ 0x35, 0x32, 0x33, 0x39, 0x30, 0x32, 0x33, 0x37, 0x39, 0x38, 0x37, 0x36, 0x35,
+ 0x34, 0x33, 0x32, 0x31, 0x30, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x30, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38,
+ 0x33, 0x31, 0x35, 0x33, 0x30, 0x32, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
+ 0x36, 0x35, 0x30, 0x31, 0x32, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x37,
+ 0x35, 0x33, 0x30, 0x33, 0x34, 0x35, 0x33, 0x36, 0x33, 0x30, 0x31, 0x38, 0x32,
+ 0x39, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x33, 0x32, 0x31, 0x30, 0x36, 0x00, 0x39, 0x38, 0x31, 0x32, 0x33, 0x30, 0x35,
+ 0x31, 0x00, 0x00, 0x00, 0x00, 0x37, 0x36, 0x35, 0x34, 0x00, 0x00, 0x39, 0x33,
+ 0x36, 0x35, 0x30, 0x32, 0x33, 0x34, 0x35, 0x00, 0x00, 0x00, 0x35, 0x33, 0x32,
+ 0x33, 0x00, 0x32, 0x39, 0x38, 0x37, 0x36, 0x34, 0x30, 0x00, 0x00, 0x35, 0x34,
+ 0x38, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x31, 0x30, 0x32, 0x00,
+ 0x31, 0x00, 0x36, 0x30, 0x36, 0x36, 0x00, 0x00, 0x00, 0x36, 0x35, 0x33, 0x39,
+ 0x38, 0x37, 0x00, 0x34, 0x00, 0x00, 0x34, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x39, 0x38, 0x35, 0x34, 0x31, 0x30, 0x38, 0x00, 0x30, 0x00, 0x37, 0x31,
+ 0x34, 0x00, 0x32, 0x38, 0x00, 0x38, 0x00, 0x00, 0x34, 0x31, 0x34, 0x00, 0x35,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x37, 0x33, 0x32, 0x36, 0x00, 0x34, 0x00, 0x35,
+ 0x39, 0x00, 0x30, 0x00, 0x37, 0x00, 0x00, 0x38, 0x35, 0x32, 0x00, 0x32, 0x00,
+ 0x37, 0x00, 0x33, 0x35, 0x00, 0x34, 0x00, 0x33, 0x00, 0x37, 0x32, 0x00, 0x35,
+ 0x00, 0x39, 0x31, 0x34, 0x35, 0x35, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x32,
+ 0x31, 0x00, 0x32, 0x00, 0x00, 0x32, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x00, 0x64, 0x44, 0x00, 0x69, 0x49, 0x00,
+ 0x73, 0x53, 0x00, 0x63, 0x43, 0x00, 0x00, 0x00, 0x63, 0x43, 0x39, 0x38, 0x37,
+ 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D, 0x00, 0x6D, 0x4D, 0x32, 0x00, 0x2D,
+ 0x00, 0x73, 0x53, 0x00, 0x63, 0x43, 0x00, 0x75, 0x55, 0x00, 0x2D, 0x00, 0x36,
+ 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x31, 0x00, 0x2D, 0x00, 0x6E, 0x4E, 0x00,
+ 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C, 0x00, 0x2D,
+ 0x00, 0x31, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x77,
+ 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49,
+ 0x00, 0x77, 0x57, 0x00, 0x00, 0x35, 0x33, 0x2D, 0x32, 0x00, 0x2D, 0x00, 0x6E,
+ 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41, 0x00, 0x6C, 0x4C,
+ 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64,
+ 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x77, 0x57, 0x00, 0x00, 0x2D,
+ 0x00, 0x00, 0x36, 0x37, 0x38, 0x39, 0x34, 0x33, 0x35, 0x32, 0x31, 0x00, 0x2D,
+ 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x30, 0x39, 0x31, 0x30, 0x37, 0x36, 0x38,
+ 0x38, 0x39, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x34, 0x32, 0x31, 0x30,
+ 0x00, 0x36, 0x35, 0x31, 0x00, 0x2D, 0x00, 0x72, 0x52, 0x00, 0x00, 0x00, 0x69,
+ 0x49, 0x38, 0x31, 0x53, 0x73, 0x00, 0x75, 0x55, 0x00, 0x2D, 0x00, 0x36, 0x00,
+ 0x34, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x31, 0x00, 0x3A, 0x00, 0x76, 0x56,
+ 0x00, 0x72, 0x52, 0x00, 0x69, 0x49, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x34, 0x37,
+ 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x35, 0x3A, 0x37, 0x00, 0x38,
+ 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00,
+ 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00,
+ 0x3A, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x37, 0x00,
+ 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x37, 0x00, 0x38, 0x00, 0x39,
+ 0x00, 0x31, 0x00, 0x00, 0x3A, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A,
+ 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33,
+ 0x32, 0x31, 0x00, 0x2D, 0x00, 0x39, 0x00, 0x35, 0x00, 0x38, 0x00, 0x00, 0x38,
+ 0x36, 0x00, 0x00, 0x00, 0x5F, 0x36, 0x2D, 0x00, 0x6F, 0x4F, 0x00, 0x00, 0x00,
+ 0x73, 0x62, 0x61, 0x53, 0x42, 0x41, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x30,
+ 0x00, 0x58, 0x78, 0x00, 0x5F, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x2D, 0x00,
+ 0x38, 0x4E, 0x6E, 0x00, 0x61, 0x41, 0x00, 0x65, 0x45, 0x00, 0x00, 0x72, 0x69,
+ 0x52, 0x49, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x5F, 0x39, 0x37,
+ 0x00, 0x38, 0x00, 0x39, 0x00, 0x31, 0x00, 0x2D, 0x00, 0x31, 0x00, 0x30, 0x00,
+ 0x36, 0x00, 0x35, 0x00, 0x5F, 0x00, 0x63, 0x43, 0x00, 0x00, 0x63, 0x5F, 0x43,
+ 0x00, 0x00, 0x73, 0x6F, 0x53, 0x4F, 0x39, 0x00, 0x31, 0x35, 0x34, 0x33, 0x32,
+ 0x2D, 0x00, 0x6E, 0x4E, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x61, 0x41,
+ 0x35, 0x34, 0x33, 0x32, 0x31, 0x33, 0x49, 0x69, 0x00, 0x6A, 0x4A, 0x00, 0x6E,
+ 0x4E, 0x00, 0x61, 0x41, 0x00, 0x6B, 0x4B, 0x00, 0x00, 0x39, 0x5F, 0x00, 0x73,
+ 0x53, 0x6F, 0x4F, 0x00, 0x72, 0x52, 0x00, 0x75, 0x55, 0x00, 0x65, 0x45, 0x00,
+ 0x2B, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x2D, 0x00, 0x6C, 0x4C, 0x00,
+ 0x61, 0x41, 0x00, 0x75, 0x55, 0x00, 0x67, 0x47, 0x00, 0x6E, 0x4E, 0x00, 0x69,
+ 0x49, 0x00, 0x6C, 0x4C, 0x00, 0x69, 0x49, 0x00, 0x74, 0x54, 0x00, 0x6C, 0x4C,
+ 0x00, 0x75, 0x55, 0x00, 0x6D, 0x4D, 0x00, 0x2D, 0x00, 0x63, 0x43, 0x6F, 0x4F,
+ 0x38, 0x5F, 0x00, 0x74, 0x54, 0x00, 0x66, 0x46, 0x00, 0x69, 0x49, 0x00, 0x68,
+ 0x48, 0x2D, 0x00, 0x73, 0x53, 0x00, 0x69, 0x49, 0x32, 0x2D, 0x00, 0x73, 0x53,
+ 0x73, 0x53, 0x00, 0x61, 0x41, 0x00, 0x00, 0x2D, 0x6C, 0x62, 0x4C, 0x42, 0x2D,
+ 0x00, 0x36, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x00, 0x32, 0x00, 0x00, 0x38, 0x33,
+ 0x31, 0x00, 0x38, 0x33, 0x31, 0x2D, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x74,
+ 0x73, 0x63, 0x54, 0x53, 0x43, 0x39, 0x31, 0x00, 0x2D, 0x00, 0x73, 0x53, 0x00,
+ 0x77, 0x57, 0x00, 0x6F, 0x4F, 0x00, 0x64, 0x44, 0x00, 0x6E, 0x4E, 0x00, 0x69,
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28,
+ 0x30, 0x31, 0x32, 0x35, 0x37, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36,
+ 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x35, 0x36, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B,
+ 0x30, 0x42, 0x28, 0x47, 0x67, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B,
+ 0x69, 0x49, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42,
+ 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x65,
+ 0x45, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B,
+ 0x72, 0x52, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74,
+ 0x54, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B,
+ 0x65, 0x45, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42,
+ 0x28, 0x38, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x36, 0x42, 0x28,
+ 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B,
+ 0x34, 0x42, 0x28, 0x1B, 0x2E, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x78,
+ 0x58, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B,
+ 0x73, 0x53, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x49, 0x69, 0x42,
+ 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28,
+ 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28,
+ 0x1B, 0x1B, 0x43, 0x63, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x52,
+ 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28,
+ 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x6B, 0x4B,
+ 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x35,
+ 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x38,
+ 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28,
+ 0x1B, 0x1B, 0x39, 0x38, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36,
+ 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28,
+ 0x1B, 0x1B, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x64, 0x44,
+ 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x45,
+ 0x65, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28,
+ 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x52, 0x72, 0x42,
+ 0x28, 0x52, 0x72, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x69,
+ 0x67, 0x61, 0x49, 0x47, 0x41, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x33, 0x31,
+ 0x30, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42,
+ 0x28, 0x33, 0x38, 0x42, 0x28, 0x30, 0x34, 0x35, 0x42, 0x28, 0x30, 0x37, 0x42,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B,
+ 0x36, 0x42, 0x28, 0x30, 0x33, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x32, 0x42, 0x28,
+ 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x37, 0x42,
+ 0x28, 0x39, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34,
+ 0x42, 0x28, 0x30, 0x31, 0x42, 0x28, 0x30, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x31, 0x42, 0x28, 0x34,
+ 0x33, 0x35, 0x42, 0x28, 0x38, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x33, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x42,
+ 0x28, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x61, 0x41,
+ 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B,
+ 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42,
+ 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x6F,
+ 0x4F, 0x42, 0x28, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x53, 0x73, 0x64, 0x44,
+ 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x69, 0x49,
+ 0x42, 0x28, 0x52, 0x72, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x73, 0x53,
+ 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B,
+ 0x61, 0x41, 0x42, 0x28, 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42,
+ 0x28, 0x1B, 0x6A, 0x4A, 0x42, 0x28, 0x1B, 0x54, 0x74, 0x42, 0x28, 0x1B, 0x6D,
+ 0x4D, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28,
+ 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x48, 0x68, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x54,
+ 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B,
+ 0x75, 0x55, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33,
+ 0x42, 0x28, 0x1B, 0x4B, 0x6B, 0x32, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28,
+ 0x41, 0x61, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42,
+ 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x74,
+ 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28,
+ 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x64, 0x44,
+ 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B,
+ 0x66, 0x46, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B,
+ 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42,
+ 0x28, 0x1B, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B,
+ 0x50, 0x70, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x6D, 0x4D,
+ 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x34, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42,
+ 0x28, 0x33, 0x38, 0x37, 0x42, 0x28, 0x1B, 0x39, 0x38, 0x37, 0x42, 0x28, 0x32,
+ 0x42, 0x28, 0x31, 0x35, 0x37, 0x42, 0x28, 0x30, 0x31, 0x33, 0x35, 0x36, 0x39,
+ 0x38, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x42, 0x28,
+ 0x33, 0x35, 0x42, 0x28, 0x1B, 0x31, 0x30, 0x42, 0x28, 0x49, 0x69, 0x42, 0x28,
+ 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x42,
+ 0x28, 0x1B, 0x1B, 0x6D, 0x62, 0x4D, 0x42, 0x42, 0x28, 0x30, 0x42, 0x28, 0x1B,
+ 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33,
+ 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x67,
+ 0x47, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x33, 0x35, 0x42, 0x28, 0x1B, 0x31,
+ 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x72, 0x52, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x79, 0x59, 0x42, 0x28,
+ 0x4B, 0x6B, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42,
+ 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x57, 0x77, 0x42, 0x28, 0x1B, 0x65, 0x45,
+ 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B,
+ 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35,
+ 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x42, 0x28, 0x1B, 0x6E, 0x4E,
+ 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B,
+ 0x61, 0x41, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x6C, 0x4C, 0x38, 0x35, 0x42, 0x28,
+ 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x73, 0x62, 0x53, 0x42, 0x42, 0x28,
+ 0x52, 0x72, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31,
+ 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42,
+ 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x73,
+ 0x6F, 0x53, 0x4F, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61,
+ 0x41, 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B,
+ 0x37, 0x42, 0x28, 0x4C, 0x6C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B,
+ 0x75, 0x55, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42,
+ 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x30, 0x42,
+ 0x28, 0x57, 0x77, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x72, 0x52,
+ 0x42, 0x28, 0x1B, 0x62, 0x42, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B,
+ 0x68, 0x48, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6C,
+ 0x4C, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x65,
+ 0x45, 0x42, 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28,
+ 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x64, 0x44,
+ 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x63, 0x43, 0x36,
+ 0x35, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x70, 0x50, 0x38, 0x37, 0x42, 0x28, 0x1B, 0x63, 0x43,
+ 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6A,
+ 0x4A, 0x42, 0x28, 0x1B, 0x54, 0x74, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28,
+ 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x30, 0x42, 0x28,
+ 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x53, 0x73, 0x42, 0x28,
+ 0x1B, 0x69, 0x49, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42,
+ 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B,
+ 0x4C, 0x6C, 0x42, 0x62, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x45, 0x65, 0x42,
+ 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42, 0x62, 0x42, 0x28,
+ 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x42, 0x28, 0x1B, 0x66,
+ 0x46, 0x42, 0x28, 0x1B, 0x1B, 0x74, 0x6E, 0x54, 0x4E, 0x42, 0x28, 0x30, 0x31,
+ 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28,
+ 0x1B, 0x32, 0x42, 0x28, 0x31, 0x32, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28,
+ 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41,
+ 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x1B,
+ 0x31, 0x33, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42,
+ 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E,
+ 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B,
+ 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57, 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49,
+ 0x48, 0x47, 0x45, 0x42, 0x41, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28,
+ 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50, 0x48, 0x43, 0x42,
+ 0x28, 0x31, 0x32, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x45, 0x65, 0x42,
+ 0x28, 0x41, 0x61, 0x48, 0x68, 0x42, 0x28, 0x4B, 0x6B, 0x42, 0x28, 0x53, 0x73,
+ 0x42, 0x28, 0x49, 0x69, 0x52, 0x72, 0x42, 0x28, 0x42, 0x62, 0x52, 0x72, 0x42,
+ 0x28, 0x45, 0x65, 0x42, 0x28, 0x54, 0x74, 0x53, 0x73, 0x42, 0x28, 0x4C, 0x6C,
+ 0x4F, 0x6F, 0x42, 0x28, 0x45, 0x65, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28,
+ 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x45, 0x65, 0x42,
+ 0x28, 0x52, 0x72, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x54, 0x74, 0x42, 0x28,
+ 0x55, 0x75, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72,
+ 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55,
+ 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41,
+ 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x43, 0x63, 0x42, 0x28, 0x1B, 0x69, 0x49,
+ 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B,
+ 0x69, 0x49, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x79, 0x70,
+ 0x59, 0x50, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42,
+ 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42,
+ 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x4B, 0x6B, 0x65, 0x45, 0x42, 0x28, 0x4F,
+ 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28,
+ 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28,
+ 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B,
+ 0x73, 0x53, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42,
+ 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42,
+ 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x49, 0x69, 0x72, 0x52, 0x42, 0x28, 0x4F,
+ 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28,
+ 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28,
+ 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B,
+ 0x62, 0x42, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42,
+ 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28,
+ 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x65, 0x45,
+ 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72,
+ 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28,
+ 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B,
+ 0x38, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72,
+ 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28,
+ 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B,
+ 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x74, 0x73, 0x6E,
+ 0x54, 0x53, 0x4E, 0x42, 0x28, 0x41, 0x61, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42,
+ 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x2D,
+ 0x42, 0x28, 0x1B, 0x70, 0x50, 0x42, 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72,
+ 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B,
+ 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42,
+ 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x6F, 0x4F, 0x42, 0x28, 0x65, 0x45, 0x42,
+ 0x28, 0x4F, 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55,
+ 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x37,
+ 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53,
+ 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, 0x53,
+ 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x28, 0x1B, 0x2D,
+ 0x42, 0x28, 0x00, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x34, 0x38, 0x42,
+ 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28,
+ 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x38, 0x42, 0x28,
+ 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B,
+ 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x4E, 0x6E, 0x42, 0x28,
+ 0x50, 0x70, 0x42, 0x28, 0x3E, 0x42, 0x28, 0x1B, 0x68, 0x48, 0x42, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x42, 0x28, 0x1B,
+ 0x74, 0x54, 0x2D, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x5F, 0x42, 0x28,
+ 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x66, 0x46,
+ 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61,
+ 0x41, 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28,
+ 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x5F, 0x42,
+ 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x6B,
+ 0x4B, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28,
+ 0x1B, 0x70, 0x50, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42,
+ 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x63,
+ 0x43, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x78, 0x58, 0x42, 0x28, 0x1B,
+ 0x69, 0x49, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42,
+ 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x65, 0x45,
+ 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B,
+ 0x65, 0x45, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x78, 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x42, 0x28,
+ 0x2D, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x33,
+ 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x4B, 0x6B, 0x5F, 0x32, 0x42, 0x28,
+ 0x00, 0x1B, 0x6B, 0x4B, 0x42, 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x65,
+ 0x45, 0x42, 0x28, 0x1B, 0x1B, 0x72, 0x62, 0x52, 0x42, 0x42, 0x28, 0x2D, 0x42,
+ 0x28, 0x1B, 0x70, 0x65, 0x50, 0x45, 0x42, 0x28, 0x30, 0x42, 0x28, 0x33, 0x34,
+ 0x38, 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x36, 0x31, 0x30, 0x42, 0x28, 0x33,
+ 0x31, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x38, 0x32, 0x37, 0x35, 0x31, 0x30,
+ 0x42, 0x28, 0x39, 0x35, 0x34, 0x31, 0x32, 0x42, 0x28, 0x31, 0x30, 0x33, 0x36,
+ 0x42, 0x28, 0x38, 0x35, 0x42, 0x28, 0x30, 0x34, 0x35, 0x37, 0x38, 0x39, 0x33,
+ 0x42, 0x28, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x42,
+ 0x28, 0x30, 0x32, 0x34, 0x33, 0x31, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28,
+ 0x30, 0x33, 0x31, 0x32, 0x42, 0x28, 0x36, 0x39, 0x37, 0x34, 0x42, 0x28, 0x30,
+ 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33,
+ 0x32, 0x31, 0x30, 0x42, 0x28, 0x31, 0x30, 0x32, 0x42, 0x28, 0x1B, 0x30, 0x42,
+ 0x28, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28,
+ 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x32, 0x31, 0x30, 0x42, 0x28, 0x38,
+ 0x36, 0x42, 0x28, 0x37, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x1B, 0x1B, 0x39,
+ 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42,
+ 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x38, 0x39,
+ 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x42,
+ 0x28, 0x36, 0x35, 0x37, 0x42, 0x28, 0x37, 0x30, 0x31, 0x32, 0x33, 0x36, 0x42,
+ 0x28, 0x31, 0x42, 0x28, 0x39, 0x38, 0x42, 0x28, 0x37, 0x38, 0x42, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30,
+ 0x42, 0x28, 0x32, 0x34, 0x35, 0x42, 0x28, 0x32, 0x33, 0x39, 0x42, 0x28, 0x30,
+ 0x32, 0x33, 0x37, 0x42, 0x28, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28,
+ 0x30, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x35, 0x33,
+ 0x32, 0x31, 0x42, 0x28, 0x31, 0x33, 0x38, 0x42, 0x28, 0x33, 0x35, 0x42, 0x28,
+ 0x32, 0x30, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x42, 0x28, 0x38, 0x42,
+ 0x28, 0x1B, 0x36, 0x35, 0x30, 0x42, 0x28, 0x30, 0x31, 0x32, 0x33, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x42, 0x28, 0x31,
+ 0x34, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x33, 0x34, 0x42, 0x28, 0x35, 0x33, 0x42, 0x28, 0x36, 0x33, 0x30, 0x31,
+ 0x38, 0x42, 0x28, 0x32, 0x39, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x42, 0x28, 0x34, 0x42, 0x28, 0x1B, 0x35,
+ 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x33,
+ 0x32, 0x31, 0x30, 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B,
+ 0x36, 0x35, 0x42, 0x28, 0x39, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x30,
+ 0x34, 0x35, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x39, 0x37, 0x38, 0x35, 0x42, 0x28,
+ 0x30, 0x31, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x37,
+ 0x42, 0x28, 0x1B, 0x1B, 0x37, 0x36, 0x33, 0x30, 0x42, 0x28, 0x36, 0x42, 0x28,
+ 0x1B, 0x37, 0x39, 0x42, 0x28, 0x38, 0x42, 0x28, 0x31, 0x32, 0x33, 0x42, 0x28,
+ 0x30, 0x35, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36,
+ 0x35, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x32, 0x39, 0x33, 0x42, 0x28, 0x36, 0x42,
+ 0x28, 0x35, 0x42, 0x28, 0x30, 0x32, 0x33, 0x34, 0x35, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x30, 0x35, 0x33, 0x32, 0x42, 0x28, 0x33, 0x42, 0x28, 0x1B, 0x32, 0x42,
+ 0x28, 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x30, 0x34, 0x42, 0x28, 0x1B, 0x1B,
+ 0x35, 0x34, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x35, 0x42,
+ 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x37, 0x34, 0x33, 0x31, 0x30, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x35,
+ 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x31, 0x42, 0x28, 0x34, 0x42, 0x28, 0x35,
+ 0x42, 0x28, 0x35, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x32, 0x31,
+ 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x32, 0x31, 0x42, 0x28, 0x30,
+ 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x42, 0x28, 0x39,
+ 0x33, 0x42, 0x28, 0x38, 0x33, 0x35, 0x36, 0x37, 0x42, 0x28, 0x30, 0x31, 0x32,
+ 0x35, 0x37, 0x38, 0x42, 0x28, 0x32, 0x42, 0x28, 0x00, 0x1B, 0x30, 0x32, 0x33,
+ 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x42, 0x28, 0x30, 0x31, 0x34, 0x38, 0x35,
+ 0x42, 0x28, 0x31, 0x37, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x38, 0x39, 0x37, 0x36, 0x35, 0x33, 0x31, 0x42, 0x28, 0x30, 0x42, 0x28, 0x36,
+ 0x42, 0x28, 0x36, 0x42, 0x28, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x34, 0x36, 0x35,
+ 0x33, 0x42, 0x28, 0x38, 0x32, 0x33, 0x34, 0x36, 0x35, 0x42, 0x28, 0x34, 0x31,
+ 0x33, 0x30, 0x32, 0x36, 0x37, 0x38, 0x42, 0x28, 0x30, 0x32, 0x33, 0x34, 0x35,
+ 0x36, 0x37, 0x38, 0x39, 0x42, 0x28, 0x37, 0x38, 0x39, 0x42, 0x28, 0x1B, 0x00,
+ 0x33, 0x32, 0x36, 0x37, 0x39, 0x34, 0x42, 0x28, 0x30, 0x31, 0x36, 0x37, 0x38,
+ 0x39, 0x42, 0x28, 0x34, 0x35, 0x42, 0x28, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30,
+ 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x30, 0x74,
+ 0x54, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x31,
+ 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x33, 0x30, 0x42, 0x28,
+ 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39,
+ 0x38, 0x37, 0x35, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x36, 0x30,
+ 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x33, 0x32, 0x42, 0x28, 0x42,
+ 0x28, 0x1B, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x37, 0x33, 0x32, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x42, 0x28, 0x42, 0x28, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33,
+ 0x32, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x42, 0x28, 0x42, 0x28, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36,
+ 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x33, 0x32, 0x31, 0x30, 0x42, 0x28, 0x42,
+ 0x28, 0x1B, 0x39, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x39,
+ 0x33, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x35,
+ 0x33, 0x32, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x42, 0x28, 0x42,
+ 0x28, 0x1B, 0x1B, 0x35, 0x34, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x31, 0x30, 0x42, 0x28, 0x42, 0x28, 0x1B,
+ 0x31, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42,
+ 0x28, 0x1B, 0x1B, 0x34, 0x30, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x39, 0x38, 0x35, 0x34, 0x31, 0x30, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x30, 0x42,
+ 0x28, 0x1B, 0x37, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x42, 0x28,
+ 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x1B, 0x34, 0x31, 0x42, 0x28, 0x42, 0x28, 0x1B,
+ 0x35, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x37, 0x33, 0x32,
+ 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x42,
+ 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B, 0x1B, 0x38, 0x35,
+ 0x42, 0x28, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x37, 0x42, 0x28, 0x1B,
+ 0x33, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28,
+ 0x1B, 0x37, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x39, 0x42,
+ 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x32,
+ 0x31, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x32,
+ 0x31, 0x30, 0x42, 0x28, 0x1B, 0x64, 0x44, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D,
+ 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x32, 0x42, 0x28, 0x1B, 0x2D, 0x42,
+ 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28, 0x1B, 0x75,
+ 0x55, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x34,
+ 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x31, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6C,
+ 0x4C, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2E,
+ 0x42, 0x28, 0x1B, 0x33, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53,
+ 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B,
+ 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x33, 0x35, 0x2D, 0x42, 0x28, 0x32,
+ 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28,
+ 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42,
+ 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x64,
+ 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B,
+ 0x36, 0x33, 0x34, 0x39, 0x37, 0x38, 0x35, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D,
+ 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x30, 0x31, 0x39, 0x42, 0x28, 0x30, 0x42, 0x28, 0x37, 0x36, 0x42, 0x28,
+ 0x38, 0x42, 0x28, 0x38, 0x39, 0x34, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x33, 0x34, 0x32, 0x31, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x35, 0x31, 0x42, 0x28,
+ 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x69,
+ 0x49, 0x38, 0x31, 0x42, 0x28, 0x53, 0x73, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42,
+ 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28,
+ 0x31, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31,
+ 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x1B, 0x76, 0x56, 0x42, 0x28, 0x1B, 0x72,
+ 0x52, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x2E, 0x42, 0x28, 0x1B,
+ 0x36, 0x42, 0x28, 0x1B, 0x34, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x35, 0x3A, 0x42,
+ 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B,
+ 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42,
+ 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28,
+ 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31,
+ 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28,
+ 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x37,
+ 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42,
+ 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x37, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B,
+ 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x38, 0x42,
+ 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28,
+ 0x39, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31,
+ 0x42, 0x28, 0x1B, 0x3A, 0x42, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00,
+ 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x39, 0x38,
+ 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28,
+ 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B,
+ 0x1B, 0x38, 0x36, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x5F, 0x36, 0x2D, 0x42, 0x28,
+ 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B, 0x1B, 0x1B, 0x73, 0x62, 0x61, 0x53, 0x42,
+ 0x41, 0x42, 0x28, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x32, 0x42,
+ 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x58, 0x78, 0x42, 0x28, 0x1B, 0x5F, 0x42,
+ 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x2D, 0x42,
+ 0x28, 0x1B, 0x38, 0x42, 0x28, 0x4E, 0x6E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42,
+ 0x28, 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x1B, 0x72, 0x69, 0x52, 0x49, 0x42,
+ 0x28, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x1B,
+ 0x35, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x39, 0x37, 0x42, 0x28, 0x1B, 0x38,
+ 0x42, 0x28, 0x1B, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42,
+ 0x28, 0x1B, 0x31, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28,
+ 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x5F, 0x42, 0x28, 0x1B, 0x63, 0x43, 0x42, 0x28,
+ 0x1B, 0x1B, 0x63, 0x5F, 0x43, 0x42, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F,
+ 0x42, 0x28, 0x39, 0x42, 0x28, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x42,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28, 0x1B, 0x74,
+ 0x54, 0x42, 0x28, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35, 0x61, 0x41, 0x42, 0x28,
+ 0x33, 0x42, 0x28, 0x49, 0x69, 0x42, 0x28, 0x1B, 0x6A, 0x4A, 0x42, 0x28, 0x1B,
+ 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x6B, 0x4B, 0x42,
+ 0x28, 0x1B, 0x1B, 0x39, 0x5F, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28, 0x4F,
+ 0x6F, 0x42, 0x28, 0x1B, 0x72, 0x52, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42, 0x28,
+ 0x1B, 0x65, 0x45, 0x42, 0x28, 0x1B, 0x2B, 0x42, 0x28, 0x1B, 0x30, 0x42, 0x28,
+ 0x1B, 0x35, 0x42, 0x28, 0x1B, 0x38, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B,
+ 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x75, 0x55, 0x42,
+ 0x28, 0x1B, 0x67, 0x47, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69,
+ 0x49, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x1B, 0x74, 0x54, 0x42, 0x28, 0x1B, 0x6C, 0x4C, 0x42, 0x28, 0x1B, 0x75, 0x55,
+ 0x42, 0x28, 0x1B, 0x6D, 0x4D, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x63,
+ 0x43, 0x42, 0x28, 0x38, 0x6F, 0x4F, 0x42, 0x28, 0x5F, 0x42, 0x28, 0x1B, 0x74,
+ 0x54, 0x42, 0x28, 0x1B, 0x66, 0x46, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42, 0x28,
+ 0x1B, 0x68, 0x48, 0x42, 0x28, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42, 0x28,
+ 0x1B, 0x69, 0x49, 0x42, 0x28, 0x32, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53, 0x42,
+ 0x28, 0x73, 0x53, 0x42, 0x28, 0x1B, 0x61, 0x41, 0x42, 0x28, 0x1B, 0x2D, 0x42,
+ 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x42, 0x28, 0x1B, 0x36, 0x42, 0x28, 0x6C,
+ 0x62, 0x4C, 0x42, 0x2D, 0x42, 0x28, 0x1B, 0x32, 0x42, 0x28, 0x1B, 0x1B, 0x38,
+ 0x33, 0x31, 0x42, 0x28, 0x1B, 0x38, 0x33, 0x31, 0x2D, 0x42, 0x28, 0x1B, 0x66,
+ 0x46, 0x42, 0x28, 0x1B, 0x00, 0x1B, 0x1B, 0x74, 0x73, 0x63, 0x54, 0x53, 0x43,
+ 0x42, 0x28, 0x39, 0x31, 0x42, 0x28, 0x1B, 0x2D, 0x42, 0x28, 0x1B, 0x73, 0x53,
+ 0x42, 0x28, 0x1B, 0x77, 0x57, 0x42, 0x28, 0x1B, 0x6F, 0x4F, 0x42, 0x28, 0x1B,
+ 0x64, 0x44, 0x42, 0x28, 0x1B, 0x6E, 0x4E, 0x42, 0x28, 0x1B, 0x69, 0x49, 0x42,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x35, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A,
+ 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x63,
+ 0x43, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28,
+ 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A,
+ 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E,
+ 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28,
+ 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A,
+ 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x36, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x2E,
+ 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x78, 0x58, 0x4A, 0x28, 0x1B, 0x5F,
+ 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x61,
+ 0x41, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x30, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x6F,
+ 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x43, 0x63, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x6B,
+ 0x4B, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B,
+ 0x35, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x39, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x31,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B,
+ 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28,
+ 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32,
+ 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35,
+ 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x33,
+ 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x38, 0x37, 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x4A, 0x28,
+ 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A,
+ 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61,
+ 0x41, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28,
+ 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x6F, 0x4F,
+ 0x4A, 0x28, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x53, 0x73, 0x64, 0x44, 0x4A,
+ 0x28, 0x35, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x65, 0x45,
+ 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B,
+ 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6A, 0x4A, 0x4A,
+ 0x28, 0x1B, 0x54, 0x74, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x66,
+ 0x46, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x54, 0x74, 0x4B, 0x6B, 0x70, 0x50, 0x4A, 0x28,
+ 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x4B, 0x6B, 0x32, 0x4A, 0x28,
+ 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B,
+ 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A,
+ 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B,
+ 0x4B, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28,
+ 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77, 0x57,
+ 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6D,
+ 0x4D, 0x4A, 0x28, 0x1B, 0x4F, 0x6F, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x50, 0x70, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B,
+ 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x32, 0x4A, 0x28, 0x1B, 0x30,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x39, 0x38, 0x37, 0x4A, 0x28, 0x32, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x35, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A,
+ 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x35,
+ 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x6D,
+ 0x62, 0x4D, 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32,
+ 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x32, 0x4A,
+ 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x38,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B,
+ 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C, 0x4C,
+ 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B,
+ 0x79, 0x59, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x65,
+ 0x45, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45,
+ 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B,
+ 0x45, 0x65, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x31, 0x32, 0x33, 0x34, 0x35,
+ 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E,
+ 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B,
+ 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x6C, 0x4C, 0x38, 0x35, 0x4A, 0x28,
+ 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x62, 0x53, 0x42, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35,
+ 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A,
+ 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x62,
+ 0x42, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x67, 0x47,
+ 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B,
+ 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A,
+ 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x6D,
+ 0x4D, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A,
+ 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x62, 0x42, 0x4A, 0x28, 0x1B, 0x65,
+ 0x45, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28,
+ 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41,
+ 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x34,
+ 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B,
+ 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A,
+ 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x63, 0x43, 0x36, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28,
+ 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x70, 0x50, 0x38, 0x37, 0x4A, 0x28,
+ 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B,
+ 0x6A, 0x4A, 0x4A, 0x28, 0x1B, 0x54, 0x74, 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A,
+ 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x53, 0x73, 0x4A, 0x28,
+ 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B,
+ 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42, 0x62, 0x4A, 0x28,
+ 0x1B, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x4C, 0x6C, 0x42,
+ 0x62, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x4A,
+ 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x1B, 0x74, 0x6E, 0x54, 0x4E, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54,
+ 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x1B, 0x31, 0x33, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A,
+ 0x28, 0x1B, 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64,
+ 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x77,
+ 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57, 0x55,
+ 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47, 0x45, 0x42, 0x41, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C,
+ 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53, 0x50,
+ 0x48, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x65, 0x45,
+ 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72,
+ 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55,
+ 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41,
+ 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69, 0x49,
+ 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x1B, 0x79, 0x70, 0x59, 0x50,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A,
+ 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x33, 0x4A,
+ 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B,
+ 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B,
+ 0x37, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x1B,
+ 0x4B, 0x6B, 0x65, 0x45, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28,
+ 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A,
+ 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28,
+ 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72,
+ 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28,
+ 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B,
+ 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A,
+ 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B,
+ 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x32, 0x4A,
+ 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x1B, 0x49, 0x69, 0x72, 0x52, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B,
+ 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B,
+ 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x62,
+ 0x42, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55,
+ 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x30,
+ 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E,
+ 0x4E, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E,
+ 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B,
+ 0x74, 0x54, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75,
+ 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x2D,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A,
+ 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x30, 0x4A,
+ 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6B, 0x4B,
+ 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45,
+ 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x39, 0x4A,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74,
+ 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x6F, 0x4F, 0x4A, 0x28, 0x65,
+ 0x45, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75, 0x55,
+ 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B, 0x37,
+ 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55, 0x53,
+ 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x4A, 0x28, 0x1B, 0x2D,
+ 0x4A, 0x28, 0x00, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x61,
+ 0x41, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A,
+ 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A,
+ 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x68, 0x48, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B,
+ 0x4A, 0x43, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x2D, 0x4A, 0x28, 0x1B, 0x63, 0x43,
+ 0x4A, 0x28, 0x5F, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x6F, 0x4F,
+ 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x74,
+ 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28,
+ 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x66, 0x46,
+ 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x65,
+ 0x45, 0x4A, 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28,
+ 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x70, 0x50, 0x4A, 0x28, 0x1B, 0x5F, 0x4A,
+ 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6F,
+ 0x4F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B,
+ 0x78, 0x58, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A,
+ 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x5F, 0x4A, 0x28, 0x1B, 0x64, 0x44,
+ 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B,
+ 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x78, 0x75, 0x6C, 0x63, 0x62, 0x58, 0x55,
+ 0x4C, 0x43, 0x42, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x4B,
+ 0x6B, 0x5F, 0x32, 0x4A, 0x28, 0x00, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x65,
+ 0x45, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x1B, 0x72, 0x62, 0x52,
+ 0x42, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x70, 0x65, 0x50, 0x45, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x36, 0x31, 0x30, 0x4A, 0x28, 0x4A,
+ 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x38, 0x32, 0x37, 0x35, 0x31, 0x30, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x00, 0x1B, 0x00,
+ 0x1B, 0x1B, 0x1B, 0x39, 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x4A,
+ 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6E, 0x4E,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35,
+ 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x36, 0x35, 0x33, 0x32,
+ 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x36,
+ 0x35, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x37,
+ 0x35, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x34, 0x31, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34,
+ 0x4A, 0x28, 0x1B, 0x36, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28,
+ 0x1B, 0x30, 0x34, 0x35, 0x37, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x37, 0x38, 0x35,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x37, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x37, 0x36, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37,
+ 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x39, 0x33,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x30, 0x35,
+ 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x35, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28,
+ 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x37, 0x34, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35,
+ 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x32,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x37, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x00, 0x1B, 0x30, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x38, 0x39,
+ 0x37, 0x36, 0x35, 0x33, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x34, 0x36, 0x35, 0x33, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x00, 0x33, 0x32, 0x36, 0x37, 0x39,
+ 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x30, 0x74, 0x54,
+ 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x31, 0x30,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x33, 0x30, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38,
+ 0x37, 0x35, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x36, 0x30, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x37, 0x33, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32,
+ 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39,
+ 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x38, 0x37, 0x35, 0x33, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x39, 0x38, 0x37, 0x36, 0x4A,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x33, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x39, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x37, 0x36, 0x35, 0x34, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x33,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x35, 0x33,
+ 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x35, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x34, 0x33, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x31,
+ 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x34, 0x30, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x39,
+ 0x38, 0x35, 0x34, 0x31, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28,
+ 0x1B, 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x38, 0x4A, 0x28, 0x1B, 0x1B, 0x34, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35,
+ 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x37, 0x33, 0x32, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x1B, 0x38, 0x35, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x37, 0x4A, 0x28, 0x1B, 0x33,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x1B, 0x33, 0x4A, 0x28, 0x1B,
+ 0x37, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28,
+ 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x34,
+ 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28, 0x1B, 0x1B, 0x32, 0x31,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x36, 0x35, 0x33, 0x32, 0x31,
+ 0x30, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28,
+ 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B,
+ 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A,
+ 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28,
+ 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74,
+ 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28,
+ 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2E, 0x4A, 0x28, 0x1B,
+ 0x33, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B,
+ 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A,
+ 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77,
+ 0x57, 0x4A, 0x28, 0x1B, 0x33, 0x35, 0x2D, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x2D,
+ 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B,
+ 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A,
+ 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x77, 0x57,
+ 0x4A, 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B,
+ 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x77, 0x57, 0x4A,
+ 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x36, 0x33, 0x34, 0x39,
+ 0x37, 0x38, 0x35, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x39,
+ 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x4A,
+ 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x33,
+ 0x34, 0x32, 0x31, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x35, 0x31, 0x4A, 0x28, 0x1B,
+ 0x2D, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x69, 0x49,
+ 0x38, 0x31, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x2D,
+ 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x39, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A,
+ 0x4A, 0x28, 0x1B, 0x76, 0x56, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B,
+ 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x2E, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B,
+ 0x34, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28,
+ 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x35, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38,
+ 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A,
+ 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31,
+ 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B,
+ 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28,
+ 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B,
+ 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28,
+ 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A,
+ 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28,
+ 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x3A,
+ 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B,
+ 0x31, 0x4A, 0x28, 0x1B, 0x3A, 0x4A, 0x28, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B,
+ 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x00, 0x1B, 0x39,
+ 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x39, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x38, 0x36, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x5F, 0x36, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x6F, 0x4F, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x73, 0x62, 0x61, 0x53,
+ 0x42, 0x41, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x32, 0x4A,
+ 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x58, 0x78, 0x4A, 0x28, 0x1B, 0x5F, 0x4A,
+ 0x28, 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B,
+ 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x1B, 0x72, 0x69, 0x52, 0x49, 0x4A, 0x28, 0x4A,
+ 0x28, 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28,
+ 0x1B, 0x5F, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x39, 0x4A,
+ 0x28, 0x1B, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28, 0x1B, 0x31, 0x4A, 0x28,
+ 0x1B, 0x30, 0x4A, 0x28, 0x1B, 0x36, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B,
+ 0x5F, 0x4A, 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x1B, 0x1B, 0x63, 0x5F, 0x43,
+ 0x4A, 0x28, 0x1B, 0x1B, 0x73, 0x6F, 0x53, 0x4F, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28,
+ 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x31, 0x32,
+ 0x33, 0x34, 0x35, 0x61, 0x41, 0x4A, 0x28, 0x33, 0x4A, 0x28, 0x4A, 0x28, 0x1B,
+ 0x6A, 0x4A, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A,
+ 0x28, 0x1B, 0x6B, 0x4B, 0x4A, 0x28, 0x1B, 0x1B, 0x39, 0x5F, 0x4A, 0x28, 0x1B,
+ 0x73, 0x53, 0x4A, 0x28, 0x4A, 0x28, 0x1B, 0x72, 0x52, 0x4A, 0x28, 0x1B, 0x75,
+ 0x55, 0x4A, 0x28, 0x1B, 0x65, 0x45, 0x4A, 0x28, 0x1B, 0x2B, 0x4A, 0x28, 0x1B,
+ 0x30, 0x4A, 0x28, 0x1B, 0x35, 0x4A, 0x28, 0x1B, 0x38, 0x4A, 0x28, 0x1B, 0x2D,
+ 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28, 0x1B,
+ 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x67, 0x47, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A,
+ 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28, 0x1B, 0x69,
+ 0x49, 0x4A, 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x6C, 0x4C, 0x4A, 0x28,
+ 0x1B, 0x75, 0x55, 0x4A, 0x28, 0x1B, 0x6D, 0x4D, 0x4A, 0x28, 0x1B, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x63, 0x43, 0x4A, 0x28, 0x38, 0x6F, 0x4F, 0x4A, 0x28, 0x5F, 0x4A,
+ 0x28, 0x1B, 0x74, 0x54, 0x4A, 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x69,
+ 0x49, 0x4A, 0x28, 0x1B, 0x68, 0x48, 0x4A, 0x28, 0x2D, 0x4A, 0x28, 0x1B, 0x73,
+ 0x53, 0x4A, 0x28, 0x1B, 0x69, 0x49, 0x4A, 0x28, 0x32, 0x2D, 0x4A, 0x28, 0x1B,
+ 0x73, 0x53, 0x4A, 0x28, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x61, 0x41, 0x4A, 0x28,
+ 0x1B, 0x2D, 0x4A, 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x4A, 0x28, 0x1B, 0x36,
+ 0x4A, 0x28, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x4A, 0x28, 0x1B, 0x32, 0x4A, 0x28,
+ 0x1B, 0x1B, 0x38, 0x33, 0x31, 0x4A, 0x28, 0x1B, 0x38, 0x33, 0x31, 0x2D, 0x4A,
+ 0x28, 0x1B, 0x66, 0x46, 0x4A, 0x28, 0x1B, 0x00, 0x1B, 0x1B, 0x74, 0x73, 0x63,
+ 0x54, 0x53, 0x43, 0x4A, 0x28, 0x39, 0x31, 0x4A, 0x28, 0x1B, 0x2D, 0x4A, 0x28,
+ 0x1B, 0x73, 0x53, 0x4A, 0x28, 0x1B, 0x77, 0x57, 0x4A, 0x28, 0x1B, 0x6F, 0x4F,
+ 0x4A, 0x28, 0x1B, 0x64, 0x44, 0x4A, 0x28, 0x1B, 0x6E, 0x4E, 0x4A, 0x28, 0x1B,
+ 0x69, 0x49, 0x4A, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x78, 0x77, 0x75, 0x74,
+ 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62,
+ 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49,
+ 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x78, 0x77, 0x75, 0x74,
+ 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62,
+ 0x61, 0x58, 0x57, 0x55, 0x54, 0x53, 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49,
+ 0x48, 0x47, 0x45, 0x43, 0x42, 0x41, 0x39, 0x38, 0x34, 0x4A, 0x42, 0x6E, 0x4E,
+ 0x69, 0x49, 0x64, 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x6E, 0x4E, 0x65, 0x45, 0x2D,
+ 0x64, 0x44, 0x72, 0x52, 0x61, 0x41, 0x64, 0x44, 0x6E, 0x4E, 0x61, 0x41, 0x74,
+ 0x54, 0x73, 0x53, 0x2D, 0x65, 0x45, 0x62, 0x42, 0x38, 0x36, 0x39, 0x31, 0x2D,
+ 0x34, 0x2E, 0x33, 0x78, 0x58, 0x5F, 0x69, 0x49, 0x69, 0x49, 0x62, 0x42, 0x30,
+ 0x37, 0x2D, 0x6F, 0x4F, 0x69, 0x49, 0x43, 0x63, 0x6D, 0x4D, 0x61, 0x41, 0x73,
+ 0x53, 0x6F, 0x4F, 0x63, 0x43, 0x73, 0x53, 0x6B, 0x4B, 0x68, 0x48, 0x2D, 0x35,
+ 0x67, 0x47, 0x32, 0x35, 0x34, 0x31, 0x39, 0x38, 0x31, 0x30, 0x30, 0x64, 0x44,
+ 0x69, 0x49, 0x73, 0x53, 0x65, 0x45, 0x6E, 0x4E, 0x32, 0x30, 0x31, 0x33, 0x39,
+ 0x38, 0x37, 0x36, 0x35, 0x31, 0x37, 0x30, 0x33, 0x32, 0x36, 0x38, 0x39, 0x37,
+ 0x30, 0x33, 0x31, 0x30, 0x69, 0x67, 0x61, 0x49, 0x47, 0x41, 0x64, 0x44, 0x72,
+ 0x52, 0x61, 0x41, 0x64, 0x44, 0x6E, 0x4E, 0x61, 0x41, 0x74, 0x54, 0x73, 0x53,
+ 0x65, 0x45, 0x62, 0x42, 0x63, 0x43, 0x6F, 0x4F, 0x35, 0x67, 0x47, 0x73, 0x53,
+ 0x65, 0x45, 0x6E, 0x4E, 0x61, 0x41, 0x70, 0x50, 0x61, 0x41, 0x6A, 0x4A, 0x54,
+ 0x74, 0x6D, 0x4D, 0x66, 0x46, 0x64, 0x44, 0x6B, 0x4B, 0x4B, 0x6B, 0x54, 0x74,
+ 0x70, 0x50, 0x63, 0x43, 0x31, 0x33, 0x4B, 0x6B, 0x32, 0x6E, 0x4E, 0x61, 0x41,
+ 0x6B, 0x4B, 0x61, 0x41, 0x74, 0x54, 0x61, 0x41, 0x6B, 0x4B, 0x68, 0x48, 0x74,
+ 0x54, 0x64, 0x44, 0x69, 0x49, 0x77, 0x57, 0x66, 0x46, 0x6E, 0x4E, 0x61, 0x41,
+ 0x6D, 0x4D, 0x4F, 0x6F, 0x72, 0x52, 0x6C, 0x4C, 0x30, 0x39, 0x34, 0x32, 0x61,
+ 0x41, 0x68, 0x48, 0x31, 0x30, 0x37, 0x38, 0x39, 0x36, 0x35, 0x32, 0x39, 0x38,
+ 0x37, 0x30, 0x35, 0x30, 0x54, 0x74, 0x32, 0x31, 0x39, 0x38, 0x34, 0x6D, 0x4D,
+ 0x38, 0x32, 0x31, 0x33, 0x32, 0x62, 0x42, 0x67, 0x47, 0x31, 0x39, 0x35, 0x69,
+ 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52, 0x65, 0x45, 0x65, 0x45,
+ 0x65, 0x45, 0x72, 0x52, 0x62, 0x42, 0x45, 0x65, 0x72, 0x52, 0x79, 0x59, 0x72,
+ 0x52, 0x31, 0x32, 0x33, 0x34, 0x35, 0x68, 0x67, 0x63, 0x61, 0x48, 0x47, 0x43,
+ 0x41, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x38, 0x38, 0x6C, 0x4C,
+ 0x38, 0x35, 0x6F, 0x4F, 0x6D, 0x62, 0x4D, 0x42, 0x38, 0x38, 0x39, 0x31, 0x31,
+ 0x30, 0x36, 0x35, 0x63, 0x43, 0x69, 0x49, 0x69, 0x49, 0x74, 0x54, 0x6C, 0x4C,
+ 0x61, 0x41, 0x62, 0x42, 0x35, 0x61, 0x41, 0x75, 0x55, 0x67, 0x47, 0x6E, 0x4E,
+ 0x69, 0x49, 0x6C, 0x4C, 0x69, 0x49, 0x74, 0x54, 0x6C, 0x4C, 0x75, 0x55, 0x6D,
+ 0x4D, 0x65, 0x45, 0x72, 0x52, 0x62, 0x42, 0x65, 0x45, 0x68, 0x48, 0x6E, 0x4E,
+ 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C, 0x33, 0x34, 0x65, 0x45, 0x67,
+ 0x47, 0x61, 0x41, 0x70, 0x50, 0x65, 0x45, 0x64, 0x44, 0x6F, 0x4F, 0x32, 0x30,
+ 0x35, 0x38, 0x63, 0x43, 0x36, 0x35, 0x37, 0x70, 0x50, 0x38, 0x37, 0x69, 0x49,
+ 0x6A, 0x4A, 0x54, 0x74, 0x66, 0x46, 0x69, 0x49, 0x32, 0x36, 0x53, 0x73, 0x64,
+ 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x42, 0x62, 0x4C, 0x6C, 0x42, 0x62, 0x4C, 0x6C,
+ 0x32, 0x36, 0x38, 0x33, 0x31, 0x66, 0x46, 0x69, 0x49, 0x35, 0x6E, 0x4E, 0x69,
+ 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C, 0x31, 0x32, 0x31, 0x33, 0x73, 0x53,
+ 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x6E, 0x54,
+ 0x4E, 0x69, 0x49, 0x68, 0x48, 0x63, 0x43, 0x73, 0x6F, 0x53, 0x4F, 0x73, 0x62,
+ 0x53, 0x42, 0x50, 0x70, 0x61, 0x41, 0x62, 0x42, 0x75, 0x55, 0x69, 0x49, 0x53,
+ 0x73, 0x64, 0x44, 0x69, 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52,
+ 0x77, 0x75, 0x74, 0x73, 0x70, 0x6B, 0x69, 0x68, 0x67, 0x65, 0x62, 0x61, 0x57,
+ 0x55, 0x54, 0x53, 0x50, 0x4B, 0x49, 0x48, 0x47, 0x45, 0x42, 0x41, 0x38, 0x37,
+ 0x35, 0x34, 0x33, 0x30, 0x39, 0x32, 0x31, 0x2D, 0x69, 0x49, 0x73, 0x53, 0x63,
+ 0x43, 0x65, 0x45, 0x6F, 0x4F, 0x72, 0x52, 0x79, 0x77, 0x75, 0x74, 0x73, 0x72,
+ 0x6E, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x59, 0x57, 0x55,
+ 0x54, 0x53, 0x52, 0x4E, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41,
+ 0x69, 0x49, 0x6C, 0x4C, 0x6C, 0x4C, 0x69, 0x49, 0x72, 0x52, 0x2D, 0x72, 0x52,
+ 0x75, 0x55, 0x65, 0x45, 0x2B, 0x33, 0x37, 0x32, 0x72, 0x52, 0x75, 0x55, 0x65,
+ 0x45, 0x2B, 0x37, 0x37, 0x32, 0x2D, 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45,
+ 0x2B, 0x34, 0x38, 0x32, 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x38,
+ 0x37, 0x32, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x37, 0x39, 0x32, 0x2D,
+ 0x2D, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x35, 0x38, 0x32, 0x2D, 0x72,
+ 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x30, 0x35, 0x2D, 0x6C, 0x4C, 0x61,
+ 0x41, 0x6E, 0x4E, 0x6F, 0x4F, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6E, 0x4E,
+ 0x72, 0x52, 0x65, 0x45, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x31, 0x37,
+ 0x38, 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x38, 0x32, 0x2D, 0x2D,
+ 0x74, 0x54, 0x6E, 0x4E, 0x61, 0x41, 0x6B, 0x4B, 0x2D, 0x72, 0x52, 0x75, 0x55,
+ 0x65, 0x45, 0x2D, 0x2D, 0x39, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x72, 0x52,
+ 0x75, 0x55, 0x65, 0x45, 0x2B, 0x37, 0x33, 0x2D, 0x73, 0x53, 0x65, 0x45, 0x6F,
+ 0x4F, 0x61, 0x41, 0x70, 0x50, 0x74, 0x73, 0x6E, 0x54, 0x53, 0x4E, 0x62, 0x42,
+ 0x49, 0x69, 0x72, 0x52, 0x73, 0x53, 0x4B, 0x6B, 0x65, 0x45, 0x79, 0x70, 0x59,
+ 0x50, 0x75, 0x73, 0x6E, 0x6C, 0x6A, 0x69, 0x67, 0x66, 0x65, 0x64, 0x63, 0x55,
+ 0x53, 0x4E, 0x4C, 0x4A, 0x49, 0x47, 0x46, 0x45, 0x44, 0x43, 0x00, 0x2D, 0x63,
+ 0x43, 0x69, 0x49, 0x64, 0x44, 0x31, 0x31, 0x2D, 0x61, 0x41, 0x32, 0x39, 0x5F,
+ 0x74, 0x54, 0x68, 0x48, 0x74, 0x6B, 0x6A, 0x63, 0x54, 0x4B, 0x4A, 0x43, 0x74,
+ 0x54, 0x2D, 0x5F, 0x72, 0x52, 0x6F, 0x4F, 0x66, 0x46, 0x5F, 0x74, 0x54, 0x61,
+ 0x41, 0x6D, 0x4D, 0x72, 0x52, 0x6F, 0x4F, 0x66, 0x46, 0x5F, 0x64, 0x44, 0x65,
+ 0x45, 0x6B, 0x4B, 0x63, 0x43, 0x61, 0x41, 0x70, 0x50, 0x5F, 0x65, 0x45, 0x64,
+ 0x44, 0x6F, 0x4F, 0x63, 0x43, 0x5F, 0x78, 0x58, 0x69, 0x49, 0x6E, 0x4E, 0x75,
+ 0x55, 0x5F, 0x64, 0x44, 0x65, 0x45, 0x64, 0x44, 0x6E, 0x4E, 0x65, 0x45, 0x74,
+ 0x54, 0x63, 0x43, 0x6F, 0x4F, 0x6D, 0x4D, 0x63, 0x43, 0x2D, 0x32, 0x31, 0x33,
+ 0x32, 0x00, 0x38, 0x6B, 0x4B, 0x65, 0x45, 0x65, 0x45, 0x4B, 0x6B, 0x5F, 0x32,
+ 0x00, 0xF8, 0x73, 0xD2, 0xC5, 0x66, 0xC5, 0x66, 0x2D, 0x00, 0x33, 0x31, 0x00,
+ 0x39, 0x36, 0x31, 0x30, 0x35, 0x30, 0x39, 0x38, 0x36, 0x35, 0x34, 0x33, 0x32,
+ 0x31, 0x30, 0x00, 0x37, 0x00, 0x38, 0x36, 0x32, 0x31, 0x30, 0x38, 0x32, 0x37,
+ 0x35, 0x31, 0x30, 0x39, 0x34, 0x36, 0x37, 0x38, 0x35, 0x33, 0x32, 0x31, 0x2D,
+ 0x61, 0x41, 0x36, 0x35, 0x30, 0x38, 0x32, 0x35, 0x33, 0x39, 0x38, 0x37, 0x36,
+ 0x34, 0x31, 0x38, 0x37, 0x35, 0x33, 0x30, 0x34, 0x36, 0x35, 0x33, 0x32, 0x31,
+ 0x39, 0x38, 0x35, 0x34, 0x32, 0x31, 0x30, 0x34, 0x30, 0x30, 0x34, 0x35, 0x37,
+ 0x36, 0x35, 0x32, 0x37, 0x37, 0x36, 0x35, 0x34, 0x37, 0x39, 0x34, 0x33, 0x37,
+ 0x35, 0x34, 0x32, 0x30, 0x35, 0x33, 0x32, 0x35, 0x34, 0x33, 0x32, 0x31, 0x32,
+ 0x39, 0x00, 0x32, 0x30, 0x32, 0x33, 0x35, 0x36, 0x39, 0x38, 0x34, 0x31, 0x00,
+ 0x36, 0x00, 0x30, 0x37, 0x38, 0x39, 0x00, 0x33, 0x32, 0x36, 0x37, 0x39, 0x34,
+ 0x34, 0x36, 0x35, 0x33, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x38,
+ 0x39, 0x37, 0x36, 0x35, 0x33, 0x31, 0x37, 0x33, 0x32, 0x32, 0x31, 0x37, 0x34,
+ 0x33, 0x31, 0x30, 0x32, 0x39, 0x33, 0x37, 0x36, 0x33, 0x30, 0x39, 0x37, 0x38,
+ 0x35, 0x37, 0x33, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31,
+ 0x30, 0x39, 0x38, 0x37, 0x36, 0x35, 0x33, 0x31, 0x37, 0x33, 0x32, 0x30, 0x33,
+ 0x32, 0x36, 0x30, 0x39, 0x38, 0x37, 0x35, 0x33, 0x30, 0x39, 0x38, 0x37, 0x36,
+ 0x38, 0x37, 0x35, 0x33, 0x30, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x39, 0x38,
+ 0x35, 0x34, 0x32, 0x31, 0x30, 0x37, 0x36, 0x35, 0x34, 0x39, 0x37, 0x35, 0x34,
+ 0x32, 0x35, 0x33, 0x32, 0x31, 0x34, 0x36, 0x35, 0x33, 0x34, 0x30, 0x36, 0x34,
+ 0x33, 0x31, 0x30, 0x39, 0x33, 0x33, 0x32, 0x31, 0x30, 0x39, 0x38, 0x37, 0x35,
+ 0x34, 0x33, 0x32, 0x30, 0x30, 0x38, 0x32, 0x35, 0x33, 0x34, 0x31, 0x37, 0x34,
+ 0x30, 0x37, 0x35, 0x32, 0x37, 0x34, 0x33, 0x35, 0x34, 0x33, 0x32, 0x31, 0x32,
+ 0x39, 0x32, 0x31, 0x37, 0x33, 0x38, 0x35, 0x37, 0x33, 0x32, 0x39, 0x38, 0x35,
+ 0x34, 0x31, 0x30, 0x36, 0x35, 0x33, 0x32, 0x31, 0x30, 0x64, 0x44, 0x69, 0x49,
+ 0x73, 0x53, 0x63, 0x43, 0x31, 0x30, 0x30, 0x74, 0x54, 0x39, 0x38, 0x37, 0x36,
+ 0x35, 0x34, 0x33, 0x32, 0x31, 0x63, 0x43, 0x39, 0x38, 0x37, 0x35, 0x34, 0x33,
+ 0x32, 0x31, 0x30, 0x2D, 0x2D, 0x73, 0x53, 0x63, 0x43, 0x75, 0x55, 0x2D, 0x36,
+ 0x34, 0x36, 0x2D, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54, 0x61, 0x41, 0x6C, 0x4C,
+ 0x2D, 0x31, 0x2E, 0x33, 0x2D, 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44,
+ 0x6E, 0x4E, 0x69, 0x49, 0x77, 0x57, 0x2D, 0x6E, 0x4E, 0x69, 0x49, 0x74, 0x54,
+ 0x61, 0x41, 0x6C, 0x4C, 0x2D, 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44,
+ 0x6E, 0x4E, 0x69, 0x49, 0x77, 0x57, 0x00, 0x2D, 0x00, 0x33, 0x35, 0x2D, 0x36,
+ 0x33, 0x34, 0x39, 0x37, 0x38, 0x35, 0x32, 0x31, 0x2D, 0x39, 0x35, 0x33, 0x34,
+ 0x32, 0x31, 0x30, 0x36, 0x35, 0x31, 0x2D, 0x72, 0x52, 0x38, 0x30, 0x75, 0x55,
+ 0x2D, 0x36, 0x39, 0x39, 0x31, 0x3A, 0x76, 0x56, 0x72, 0x52, 0x69, 0x49, 0x2E,
+ 0x36, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31,
+ 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38, 0x39, 0x31, 0x38,
+ 0x39, 0x31, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00,
+ 0x3A, 0x00, 0x3A, 0x00, 0x3A, 0x00, 0x35, 0x3A, 0x39, 0x38, 0x37, 0x36, 0x35,
+ 0x34, 0x33, 0x32, 0x31, 0x2D, 0x39, 0x35, 0x38, 0x34, 0x38, 0x36, 0x34, 0x69,
+ 0x49, 0x38, 0x31, 0x5F, 0x36, 0x2D, 0xB6, 0xE6, 0xC5, 0x66, 0xD9, 0x9B, 0xF8,
+ 0xD5, 0x76, 0xC1, 0x62, 0xD4, 0x75, 0x77, 0xD6, 0xD9, 0x9B, 0x60, 0xC2, 0x63,
+ 0x6F, 0x4F, 0x6D, 0x4D, 0x6E, 0x4E, 0x30, 0x32, 0x30, 0x58, 0x78, 0x5F, 0x73,
+ 0x53, 0x2D, 0x61, 0x41, 0x65, 0x45, 0x38, 0x30, 0x36, 0x35, 0x38, 0x39, 0x31,
+ 0x2D, 0x31, 0x30, 0x36, 0x35, 0x5F, 0x63, 0x43, 0x5F, 0x63, 0x5F, 0x43, 0x72,
+ 0x69, 0x52, 0x49, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2D, 0x6E, 0x4E, 0x69, 0x49,
+ 0x74, 0x54, 0x6A, 0x4A, 0x6E, 0x4E, 0x61, 0x41, 0x6B, 0x4B, 0x33, 0x39, 0x5F,
+ 0x72, 0x52, 0x75, 0x55, 0x65, 0x45, 0x2B, 0x30, 0x35, 0x38, 0x2D, 0x6C, 0x4C,
+ 0x61, 0x41, 0x75, 0x55, 0x67, 0x47, 0x6E, 0x4E, 0x69, 0x49, 0x6C, 0x4C, 0x69,
+ 0x49, 0x74, 0x54, 0x6C, 0x4C, 0x75, 0x55, 0x6D, 0x4D, 0x2D, 0xF1, 0xF0, 0xF2,
+ 0xF0, 0xA7, 0xB7, 0xE7, 0x6D, 0xE2, 0xAB, 0xA2, 0x5F, 0x74, 0x54, 0x66, 0x46,
+ 0x69, 0x49, 0x2D, 0x73, 0x53, 0x32, 0x2D, 0x73, 0x53, 0x61, 0x41, 0x6C, 0x62,
+ 0x4C, 0x42, 0x2D, 0x6C, 0x62, 0x4C, 0x42, 0x2D, 0x32, 0x36, 0x38, 0x33, 0x31,
+ 0x38, 0x33, 0x31, 0x2D, 0x66, 0x46, 0x00, 0x2D, 0x73, 0x53, 0x39, 0x31, 0x2D,
+ 0x73, 0x53, 0x77, 0x57, 0x6F, 0x4F, 0x64, 0x44, 0x6E, 0x4E, 0x68, 0xC7, 0xD5,
+ 0x76, 0xC9, 0x71, 0xC4, 0x65, 0xD6, 0x77, 0xC3, 0x64, 0xD5, 0x76, 0xC5, 0x66,
+ 0x60, 0xC4, 0x65, 0xD9, 0x9B, 0xC1, 0x62, 0xC4, 0x65, 0xD5, 0x76, 0xC1, 0x62,
+ 0xE3, 0xB3, 0xE2, 0xAB, 0x60, 0xC5, 0x66, 0xC2, 0x63, 0xF6, 0xF8, 0xF8, 0xF6,
+ 0xF9, 0xF1, 0x60, 0xF4, 0x4B, 0xF3, 0xE7, 0xB7, 0xA7, 0x6D, 0xC9, 0x89, 0x71,
+ 0x87, 0xC7, 0xD5, 0x95, 0xC9, 0x89, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0xD5,
+ 0x95, 0xC5, 0x85, 0x60, 0xC4, 0x84, 0xD9, 0x99, 0xC1, 0x81, 0xC4, 0x84, 0xD5,
+ 0x95, 0xC1, 0x81, 0xE3, 0xA3, 0xE2, 0xA2, 0x60, 0xC5, 0x85, 0xC2, 0x82, 0x83,
+ 0xC3, 0xC9, 0x89, 0xC2, 0x82, 0x64, 0xC3, 0xC9, 0x71, 0xC2, 0x63, 0xC9, 0x89,
+ 0x71, 0xF8, 0xF0, 0xF7, 0x60, 0xD6, 0x96, 0x77, 0xC9, 0x89, 0x71, 0x64, 0x83,
+ 0xC3, 0xD4, 0x94, 0x75, 0xC1, 0x62, 0xC1, 0x81, 0xD6, 0x96, 0xE2, 0xAB, 0xA2,
+ 0xD6, 0x77, 0x66, 0xC5, 0xE2, 0xAB, 0xC5, 0x66, 0xD5, 0x76, 0xAB, 0xE2, 0x9B,
+ 0xD9, 0x9B, 0xD9, 0xF7, 0xF0, 0xF7, 0xF7, 0xF7, 0xF0, 0xF3, 0xF4, 0xF5, 0xF1,
+ 0xF0, 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, 0xF6, 0xF9, 0xF4, 0xF7, 0xF5, 0xF2, 0xF1,
+ 0xF0, 0xF4, 0xF3, 0xF0, 0xF9, 0xF8, 0xF5, 0xF6, 0xF7, 0xF3, 0xF2, 0xF6, 0xF9,
+ 0xF3, 0xC9, 0xC7, 0xC1, 0x71, 0x68, 0x62, 0xC4, 0x65, 0xD9, 0x9B, 0xC1, 0x62,
+ 0xC4, 0x65, 0xD5, 0x76, 0xC1, 0x62, 0xE3, 0xB3, 0xE2, 0xAB, 0xC5, 0x66, 0xC2,
+ 0x63, 0x71, 0xC9, 0xC9, 0x71, 0xC3, 0x64, 0xD6, 0x77, 0xAB, 0xE2, 0xC3, 0x64,
+ 0xE2, 0xAB, 0xD2, 0x73, 0xC8, 0x69, 0xF5, 0xC7, 0x68, 0x66, 0xC5, 0xE2, 0xAB,
+ 0xC5, 0x66, 0xD5, 0x76, 0xC1, 0x62, 0xD7, 0x78, 0xC1, 0x62, 0xD1, 0x72, 0xB3,
+ 0xE3, 0xD4, 0x75, 0xC6, 0x67, 0xC4, 0x65, 0x69, 0xC8, 0xD2, 0x73, 0x9B, 0xD9,
+ 0xE3, 0xD7, 0xD2, 0xB3, 0x78, 0x73, 0xC3, 0x64, 0xF2, 0xF1, 0xF3, 0x73, 0xD2,
+ 0xF2, 0x62, 0xC1, 0xD5, 0x76, 0xC1, 0x62, 0xD2, 0x73, 0xC1, 0x62, 0xE3, 0xB3,
+ 0xC1, 0x62, 0xD2, 0x73, 0xC8, 0x69, 0xE3, 0xB3, 0xC4, 0x65, 0xC9, 0x71, 0xE6,
+ 0xB6, 0xC6, 0x67, 0xD3, 0x74, 0xF4, 0xF0, 0xF9, 0x71, 0xC9, 0xC1, 0x62, 0xF8,
+ 0xF4, 0xF2, 0xF5, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,
+ 0xF4, 0xF1, 0xF9, 0xF8, 0xF7, 0xF6, 0xF4, 0xF2, 0xF0, 0xF4, 0xF5, 0xF3, 0xF8,
+ 0xF7, 0xF0, 0xF0, 0xF1, 0xF0, 0xF1, 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF1,
+ 0xF5, 0xF7, 0xF8, 0xF3, 0xF5, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF0,
+ 0xF2, 0xF9, 0xF8, 0xF7, 0xF0, 0xF3, 0xF1, 0xF0, 0x69, 0xC8, 0xF9, 0xF8, 0xF5,
+ 0xF4, 0xF2, 0xF1, 0xF0, 0xE3, 0xB3, 0x75, 0xD4, 0x64, 0xC3, 0xC9, 0x71, 0xD3,
+ 0x74, 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0x73, 0xD2, 0xC5, 0x66, 0xC5, 0x66,
+ 0xC5, 0x66, 0xD9, 0x9B, 0xE8, 0xB8, 0xD9, 0x9B, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
+ 0xC8, 0xC7, 0xC3, 0xC1, 0x69, 0x68, 0x64, 0x62, 0xD5, 0x76, 0xC9, 0x71, 0xE3,
+ 0xB3, 0xF0, 0xF8, 0xF2, 0xF1, 0xF3, 0xF2, 0x63, 0xC2, 0xC7, 0x68, 0xF3, 0xF5,
+ 0xF1, 0xF9, 0xF5, 0xF8, 0xF8, 0xC1, 0x62, 0xF8, 0xF5, 0xD3, 0x74, 0xD6, 0x77,
+ 0xD4, 0xC2, 0x75, 0x63, 0x9B, 0xD9, 0xF8, 0xF7, 0xF8, 0xF9, 0xF1, 0xF1, 0xF0,
+ 0xF6, 0xF5, 0x64, 0xC3, 0xC9, 0x71, 0xF2, 0xF5, 0x64, 0xC3, 0xC9, 0x71, 0xE3,
+ 0xB3, 0xD3, 0x74, 0xC1, 0x62, 0xC2, 0x63, 0xF5, 0xF3, 0xF4, 0x66, 0xC5, 0xC7,
+ 0x68, 0xC1, 0x62, 0xD7, 0x78, 0xC5, 0x66, 0xC4, 0x65, 0x74, 0xD3, 0xC1, 0x62,
+ 0xE4, 0xB4, 0xC7, 0x68, 0xD5, 0x76, 0xC9, 0x71, 0xD3, 0x74, 0xC9, 0x71, 0xE3,
+ 0xB3, 0xD3, 0x74, 0xE4, 0xB4, 0xD4, 0x75, 0xB6, 0xE6, 0xC5, 0x66, 0xD9, 0x9B,
+ 0xC2, 0x63, 0xC5, 0x66, 0xC8, 0x69, 0xD5, 0x76, 0xC9, 0x71, 0xE3, 0xB3, 0xC1,
+ 0x62, 0xD3, 0x74, 0xF2, 0xF0, 0xD6, 0x77, 0xF6, 0xF5, 0xC3, 0x64, 0xF7, 0xF8,
+ 0x78, 0xD7, 0xF8, 0xF7, 0xAB, 0xE2, 0xC9, 0x71, 0xD1, 0x72, 0xB3, 0xE3, 0xC6,
+ 0x67, 0xC9, 0x71, 0xF0, 0xF2, 0xF6, 0xAB, 0xE2, 0x66, 0xC5, 0xC4, 0x65, 0xD6,
+ 0x77, 0xC3, 0x64, 0x66, 0xC5, 0x66, 0xC5, 0xD3, 0xC2, 0x74, 0x63, 0x66, 0xC5,
+ 0x66, 0xC5, 0xD3, 0xC2, 0x74, 0x63, 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xC6, 0x67,
+ 0xC9, 0x71, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF5, 0xF1,
+ 0xF2, 0x76, 0xD5, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0xF1, 0xF2,
+ 0xF1, 0xF3, 0xE2, 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x76, 0xC9,
+ 0x71, 0xE3, 0xD5, 0xB3, 0x76, 0xC9, 0x71, 0xC8, 0x69, 0xC3, 0x64, 0xE2, 0xD6,
+ 0xAB, 0x77, 0xE2, 0xC2, 0xAB, 0x63, 0xD7, 0xC1, 0x78, 0x62, 0xC2, 0x63, 0xE4,
+ 0xB4, 0xC9, 0x71, 0xE2, 0xC4, 0xAB, 0x65, 0x64, 0xC3, 0xC9, 0x71, 0xD3, 0x74,
+ 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0xE6, 0xE4, 0xE3, 0xE2, 0xD7, 0xD2, 0xC9,
+ 0xC8, 0xC7, 0xC5, 0xC2, 0xC1, 0xB6, 0xB4, 0xB3, 0xAB, 0x78, 0x73, 0x71, 0x69,
+ 0x68, 0x66, 0x63, 0x62, 0xF7, 0xF4, 0xF3, 0xF9, 0xF8, 0xF2, 0xF0, 0x60, 0xC9,
+ 0x71, 0xF1, 0xF2, 0x66, 0xC5, 0xC3, 0x64, 0xC5, 0x66, 0xB4, 0xE4, 0xB3, 0xE3,
+ 0xAB, 0xE2, 0x9B, 0xD9, 0x66, 0xC5, 0xD6, 0x77, 0x74, 0xD3, 0xB3, 0xE3, 0xAB,
+ 0xE2, 0x66, 0xC5, 0x63, 0xC2, 0x9B, 0xD9, 0x71, 0xC9, 0x9B, 0xD9, 0xAB, 0xE2,
+ 0x62, 0xC1, 0x69, 0xC8, 0x66, 0xC5, 0x9B, 0xD9, 0xE8, 0xE6, 0xE4, 0xE3, 0xE2,
+ 0xD9, 0xD5, 0xC9, 0xC8, 0xC7, 0xC6, 0xC5, 0xC3, 0xC2, 0xC1, 0xB8, 0xB6, 0xB4,
+ 0xB3, 0xAB, 0x9B, 0x76, 0x71, 0x69, 0x68, 0x67, 0x66, 0x64, 0x63, 0x62, 0x60,
+ 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF3, 0xF7, 0xF2, 0x77,
+ 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF7, 0xF7, 0xF2, 0x60, 0x60,
+ 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF4, 0xF8, 0xF2, 0x60,
+ 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF8, 0xF7, 0xF2, 0x77,
+ 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF7, 0xF9, 0xF2, 0x60, 0x60,
+ 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF5, 0xF8, 0xF2, 0x60,
+ 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x4E, 0xF0, 0xF0, 0xF5, 0x60,
+ 0xD3, 0x74, 0xC1, 0x62, 0xD5, 0x76, 0xD6, 0x77, 0xC9, 0x71, 0xE3, 0xB3, 0xC1,
+ 0x62, 0xD5, 0x76, 0xD9, 0x9B, 0xC5, 0x66, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4,
+ 0xC5, 0x66, 0x4E, 0xF1, 0xF7, 0xF8, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5,
+ 0x66, 0x4E, 0xF0, 0xF8, 0xF2, 0x60, 0x60, 0xE3, 0xB3, 0x62, 0xC1, 0xD5, 0x76,
+ 0x81, 0xC1, 0xD5, 0x95, 0xC1, 0x81, 0xC1, 0x62, 0xD2, 0x92, 0x73, 0x60, 0x77,
+ 0xD6, 0xD9, 0x9B, 0xE4, 0xB4, 0xC5, 0x66, 0x60, 0x60, 0xF9, 0xD5, 0x76, 0xC9,
+ 0x71, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x60, 0x60, 0xF9, 0xD5,
+ 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xE3, 0xB3, 0x85, 0xC5, 0xC3, 0x83, 0xC5, 0x85,
+ 0xA4, 0xE4, 0xA3, 0xE3, 0xA2, 0xE2, 0x99, 0xD9, 0x85, 0xC5, 0xD6, 0x96, 0xA3,
+ 0xE3, 0xA2, 0xE2, 0x85, 0xC5, 0x82, 0xC2, 0x99, 0xD9, 0x89, 0xC9, 0x99, 0xD9,
+ 0xA2, 0xE2, 0x81, 0xC1, 0x88, 0xC8, 0x85, 0xC5, 0xD9, 0x99, 0x93, 0xD3, 0x77,
+ 0x96, 0xD6, 0x73, 0x92, 0xD2, 0xE8, 0xE6, 0xE4, 0xE3, 0xE2, 0xD9, 0xD5, 0xC9,
+ 0xC8, 0xC7, 0xC6, 0xC5, 0xC4, 0xC3, 0xC2, 0xC1, 0xA8, 0xA6, 0xA4, 0xA3, 0xA2,
+ 0x99, 0x95, 0x89, 0x88, 0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x76, 0x65,
+ 0x83, 0xC3, 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89, 0x64, 0xC3, 0xC9,
+ 0x71, 0xD3, 0x74, 0xD3, 0x74, 0xC9, 0x71, 0xD9, 0x9B, 0xD9, 0x99, 0x60, 0x96,
+ 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF3, 0xF7, 0xF2, 0x96, 0xD6,
+ 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF7, 0xF2, 0x60, 0x60, 0x96,
+ 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF4, 0xF8, 0xF2, 0x60, 0x96,
+ 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF8, 0xF7, 0xF2, 0x96, 0xD6,
+ 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF9, 0xF2, 0x60, 0x60, 0x96,
+ 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF5, 0xF8, 0xF2, 0x60, 0x96,
+ 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF0, 0xF0, 0xF5, 0x60, 0xD3,
+ 0x93, 0xC1, 0x81, 0xD5, 0x95, 0xD6, 0x96, 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81,
+ 0xD5, 0x95, 0xD9, 0x99, 0xC5, 0x85, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5,
+ 0x85, 0x4E, 0xF1, 0xF7, 0xF8, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85,
+ 0x4E, 0xF0, 0xF8, 0xF2, 0x60, 0x60, 0xE3, 0xA3, 0x96, 0xD6, 0xD9, 0x99, 0xE4,
+ 0xA4, 0xC5, 0x85, 0x4E, 0xF7, 0xF3, 0x60, 0x77, 0xD6, 0xD9, 0x9B, 0xE4, 0xB4,
+ 0xC5, 0x66, 0x4E, 0xF7, 0xF3, 0x60, 0xE2, 0xAB, 0xC5, 0x66, 0xE2, 0xA2, 0xC5,
+ 0x85, 0xD6, 0x96, 0xE3, 0xE2, 0xD5, 0xA3, 0xA2, 0x95, 0xC2, 0x82, 0x89, 0xC9,
+ 0xD9, 0x99, 0xE2, 0xA2, 0x92, 0xD2, 0xC5, 0x85, 0xE8, 0xD7, 0xB8, 0xA8, 0x97,
+ 0x78, 0xD6, 0x77, 0xC1, 0x81, 0x62, 0xD7, 0x97, 0x78, 0xE3, 0xE2, 0xD5, 0xB3,
+ 0xAB, 0x76, 0xC2, 0x63, 0x71, 0xC9, 0xD9, 0x9B, 0xE2, 0xAB, 0x73, 0xD2, 0xC5,
+ 0x66, 0xD7, 0x78, 0xE4, 0xE2, 0xD5, 0xD3, 0xD1, 0xC9, 0xC7, 0xC6, 0xC5, 0xC4,
+ 0xC3, 0xB4, 0xAB, 0xA4, 0xA2, 0x95, 0x93, 0x91, 0x89, 0x87, 0x86, 0x85, 0x84,
+ 0x83, 0x76, 0x74, 0x72, 0x71, 0x68, 0x67, 0x66, 0x65, 0x64, 0x00, 0x60, 0xC3,
+ 0x83, 0x64, 0xC9, 0x89, 0x71, 0xC4, 0x84, 0x65, 0xF4, 0xF8, 0xF1, 0xF1, 0x60,
+ 0xC1, 0x81, 0x62, 0xF8, 0xF2, 0xF9, 0x6D, 0xE3, 0xB3, 0xA3, 0x6E, 0xC8, 0x88,
+ 0x69, 0x99, 0x9B, 0xD9, 0x78, 0x97, 0xD7, 0x76, 0x95, 0xD5, 0x69, 0x88, 0xC8,
+ 0xE3, 0xD2, 0xD1, 0xC3, 0xB3, 0xA3, 0x92, 0x91, 0x83, 0x73, 0x72, 0x64, 0xE3,
+ 0xB3, 0xA3, 0x60, 0x85, 0xC5, 0xE2, 0xA2, 0xC5, 0x85, 0xD5, 0x95, 0xC1, 0x81,
+ 0xD7, 0x97, 0xC1, 0x81, 0xD1, 0x91, 0x6D, 0xD9, 0x99, 0xD6, 0x96, 0xC6, 0x86,
+ 0x6D, 0xE3, 0xA3, 0xC1, 0x81, 0xD4, 0x94, 0xD9, 0x99, 0xD6, 0x96, 0xC6, 0x86,
+ 0x6D, 0xC4, 0x84, 0xC5, 0x85, 0xD2, 0x92, 0xC3, 0x83, 0xC1, 0x81, 0xD7, 0x97,
+ 0x6D, 0xC5, 0x85, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0x6D, 0xE7, 0xA7, 0xC9,
+ 0x89, 0xD5, 0x95, 0xE4, 0xA4, 0x6D, 0xC4, 0x84, 0xC5, 0x85, 0xC4, 0x84, 0xD5,
+ 0x95, 0xC5, 0x85, 0x6D, 0xD9, 0x9B, 0xD6, 0x77, 0xC6, 0x67, 0x6D, 0xE3, 0xB3,
+ 0xC1, 0x62, 0xD4, 0x75, 0xD9, 0x9B, 0xD6, 0x77, 0xC6, 0x67, 0x6D, 0xC4, 0x65,
+ 0xC5, 0x66, 0xD2, 0x73, 0xC3, 0x64, 0xC1, 0x62, 0xD7, 0x78, 0x6D, 0xC5, 0x66,
+ 0xC4, 0x65, 0xD6, 0x77, 0xC3, 0x64, 0x6D, 0xE7, 0xB7, 0xC9, 0x71, 0xD5, 0x76,
+ 0xE4, 0xB4, 0x6D, 0xC4, 0x65, 0xC5, 0x66, 0xC4, 0x65, 0xD5, 0x76, 0xC5, 0x66,
+ 0xE3, 0xB3, 0xE3, 0xA3, 0xC3, 0x83, 0x64, 0xD6, 0x96, 0x77, 0xD4, 0x94, 0x75,
+ 0xC3, 0x83, 0x64, 0xF3, 0xF4, 0xF8, 0xF9, 0xF0, 0x00, 0xF3, 0xF1, 0x00, 0xF9,
+ 0xF6, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0,
+ 0xF6, 0xF9, 0xF4, 0xF7, 0xF0, 0xF3, 0xF2, 0xF1, 0xF0, 0xF2, 0xF4, 0xF9, 0xF8,
+ 0xF7, 0xF6, 0xF5, 0xF3, 0xF1, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF4, 0xF3, 0xF2,
+ 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF0, 0xF8, 0xF5, 0xF1, 0xF0,
+ 0xF3, 0xF6, 0xF9, 0xF4, 0xF1, 0xF2, 0xF5, 0xF2, 0xF1, 0xF0, 0xF9, 0xF0, 0xF1,
+ 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF5, 0xF0, 0xF9, 0xF8, 0xF6, 0xF5,
+ 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0x00, 0xF7, 0x00, 0xF6, 0xF8, 0xF2, 0xF1, 0xF0,
+ 0xF2, 0xF7, 0xF5, 0xF8, 0xF1, 0xF0, 0xF9, 0xF4, 0xF6, 0xF7, 0xF8, 0xF5, 0xF3,
+ 0xF2, 0xF1, 0x60, 0x62, 0xC1, 0xF8, 0xF7, 0xF9, 0xF8, 0xF1, 0xF7, 0xF6, 0xF3,
+ 0xF2, 0xF1, 0xF0, 0xF6, 0xF7, 0xF5, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3,
+ 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF4, 0xF0, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3,
+ 0xF7, 0xF3, 0xF2, 0xF0, 0xF9, 0xF3, 0xF2, 0xF5, 0xF4, 0xF2, 0xF8, 0xF3, 0xF2,
+ 0xF1, 0xF0, 0xF6, 0xF5, 0xF0, 0xF2, 0xF0, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3,
+ 0xF1, 0xF3, 0xF5, 0xF1, 0xF3, 0xF8, 0xF4, 0xF1, 0xF8, 0xF9, 0xF2, 0xF6, 0xF3,
+ 0xF8, 0xF1, 0xF0, 0xF5, 0xF3, 0xF3, 0xF4, 0xF8, 0xF2, 0xF4, 0xF5, 0xF3, 0xF9,
+ 0xF8, 0xF7, 0xF6, 0xF4, 0xF1, 0xF8, 0xF7, 0xF5, 0xF3, 0xF0, 0xF4, 0xF6, 0xF5,
+ 0xF3, 0xF2, 0xF1, 0xF9, 0xF8, 0xF5, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF4, 0xF9,
+ 0xF0, 0xF0, 0xF4, 0xF5, 0xF7, 0xF6, 0xF5, 0xF2, 0xF2, 0xF7, 0xF1, 0xF0, 0xF6,
+ 0xF1, 0xF5, 0xF0, 0xF3, 0xF2, 0xF1, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF7, 0xF9,
+ 0xF5, 0xF4, 0xF3, 0xF2, 0xF0, 0xF5, 0xF6, 0xF3, 0xF0, 0xF4, 0xF6, 0xF7, 0xF8,
+ 0xF9, 0xF8, 0xF5, 0xF4, 0xF3, 0xF7, 0xF5, 0xF4, 0xF2, 0xF0, 0xF5, 0xF3, 0xF2,
+ 0xF2, 0xF5, 0xF5, 0xF5, 0xF4, 0xF1, 0xF4, 0xF3, 0xF2, 0xF1, 0xF2, 0xF9, 0xF7,
+ 0xF0, 0x00, 0xF2, 0xF1, 0xF7, 0xF6, 0xF0, 0xF1, 0xF4, 0xF8, 0xF5, 0xF0, 0xF2,
+ 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF1, 0xF0, 0xF1, 0xF2, 0xF5, 0xF7, 0xF8,
+ 0xF8, 0xF7, 0xF6, 0xF5, 0xF3, 0xF9, 0xF3, 0xF6, 0x00, 0xF6, 0x00, 0xF0, 0xF7,
+ 0xF8, 0xF9, 0x00, 0xF0, 0xF5, 0xF4, 0xF9, 0xF8, 0xF7, 0xF6, 0xF1, 0xF0, 0xF3,
+ 0xF9, 0xF7, 0xF6, 0xF4, 0xF2, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2,
+ 0xF0, 0xF4, 0xF1, 0xF3, 0xF0, 0xF8, 0xF7, 0xF6, 0xF2, 0xF8, 0xF2, 0xF3, 0xF4,
+ 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF3, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1,
+ 0xF0, 0xF8, 0xF9, 0xF7, 0xF6, 0xF5, 0xF3, 0xF1, 0xF7, 0xF3, 0xF2, 0xF2, 0xF1,
+ 0xF7, 0xF4, 0xF3, 0xF1, 0xF0, 0xF2, 0xF9, 0xF3, 0xF7, 0xF6, 0xF3, 0xF0, 0xF9,
+ 0xF7, 0xF8, 0xF5, 0xF7, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6,
+ 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0x60, 0xF8, 0xF9, 0xF4, 0xF8, 0xF7, 0xF6, 0xF0,
+ 0xF0, 0xF1, 0xF9, 0xF3, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF5, 0xF1, 0x60, 0x9B,
+ 0xD9, 0xC9, 0x71, 0x60, 0xD6, 0x77, 0xD4, 0x75, 0xD5, 0x76, 0x76, 0xD5, 0xC1,
+ 0x62, 0xC5, 0x66, 0xD9, 0x9B, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xD5, 0x76, 0xC9,
+ 0x71, 0xE3, 0xB3, 0x60, 0xF5, 0xA2, 0xE2, 0xC3, 0x83, 0xE2, 0xA2, 0xD2, 0x92,
+ 0xC8, 0x88, 0x60, 0xF5, 0xC7, 0x87, 0xC7, 0x68, 0xF1, 0xF0, 0xF0, 0xC4, 0x84,
+ 0x65, 0xC9, 0x89, 0x71, 0xA2, 0xE2, 0x99, 0xD9, 0x99, 0xD9, 0xF2, 0xF3, 0xF8,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF5, 0xF6, 0xF9, 0xF8, 0xF4, 0xF9, 0xF6, 0xF4, 0xF3,
+ 0xF5, 0xF1, 0xF3, 0xF0, 0xF5, 0xF9, 0xF8, 0xF7, 0xF6, 0xF1, 0xF9, 0xF8, 0xF7,
+ 0xF0, 0xC9, 0xC7, 0xC1, 0x89, 0x87, 0x81, 0x85, 0xC5, 0xE2, 0xA2, 0xC5, 0x85,
+ 0xD5, 0x95, 0xC4, 0x84, 0xD9, 0x99, 0xC1, 0x81, 0xC4, 0x84, 0xD5, 0x95, 0xC1,
+ 0x81, 0xE3, 0xA3, 0xE2, 0xA2, 0xC5, 0x85, 0xC2, 0x82, 0x89, 0xC9, 0xC9, 0x89,
+ 0xC3, 0x83, 0xD6, 0x96, 0xF5, 0xC7, 0x87, 0xE3, 0xA3, 0xD4, 0x94, 0xC6, 0x86,
+ 0xC4, 0x84, 0x88, 0xC8, 0xD2, 0x92, 0x99, 0xD9, 0xE3, 0xD7, 0xD2, 0xA3, 0x97,
+ 0x92, 0xC3, 0x83, 0x92, 0xD2, 0xF2, 0xC1, 0x81, 0xD5, 0x95, 0xC1, 0x81, 0xD2,
+ 0x92, 0xC1, 0x81, 0xE3, 0xA3, 0xC1, 0x81, 0xD2, 0x92, 0xC8, 0x88, 0xE3, 0xA3,
+ 0xC4, 0x84, 0xC9, 0x89, 0xE6, 0xA6, 0xC6, 0x86, 0x95, 0xD5, 0xC1, 0x81, 0xD4,
+ 0x94, 0x96, 0xD6, 0xD9, 0x99, 0xD3, 0x93, 0x89, 0xC9, 0xC1, 0x81, 0x88, 0xC8,
+ 0xF5, 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF4, 0xE3, 0xA3, 0xD4, 0x94, 0xC3, 0x83,
+ 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89, 0xD9, 0x99, 0x92, 0xD2, 0xC5,
+ 0x85, 0xC5, 0x85, 0xA6, 0xE6, 0xC5, 0x85, 0xD9, 0x99, 0xC2, 0x82, 0x85, 0xC5,
+ 0xD9, 0x99, 0xE8, 0xA8, 0xD9, 0x99, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xC8, 0xC7,
+ 0xC3, 0xC1, 0x88, 0x87, 0x83, 0x81, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC2,
+ 0x82, 0xC7, 0x87, 0xF8, 0xC1, 0x81, 0xF8, 0xF5, 0xD3, 0x93, 0xD6, 0x96, 0xD4,
+ 0xC2, 0x94, 0x82, 0x99, 0xD9, 0xF8, 0xC3, 0x83, 0xC9, 0x89, 0x83, 0xC3, 0xC9,
+ 0x89, 0xE3, 0xA3, 0xD3, 0x93, 0xC1, 0x81, 0xC2, 0x82, 0xF5, 0xC5, 0x85, 0xC7,
+ 0x87, 0xC1, 0x81, 0xD7, 0x97, 0xC5, 0x85, 0xC4, 0x84, 0x93, 0xD3, 0xC1, 0x81,
+ 0xE4, 0xA4, 0xC7, 0x87, 0xD5, 0x95, 0xC9, 0x89, 0xD3, 0x93, 0xC9, 0x89, 0xE3,
+ 0xA3, 0xD3, 0x93, 0xE4, 0xA4, 0xD4, 0x94, 0xA6, 0xE6, 0xC5, 0x85, 0xD9, 0x99,
+ 0xC2, 0x82, 0xC5, 0x85, 0xC8, 0x88, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC1,
+ 0x81, 0xD3, 0x93, 0xF2, 0xF0, 0xD6, 0x96, 0xF6, 0xF5, 0xC3, 0x83, 0xF7, 0xF8,
+ 0xF7, 0xD7, 0x97, 0xE2, 0xA2, 0xC9, 0x89, 0xD1, 0x91, 0xA3, 0xE3, 0xC6, 0x86,
+ 0xC9, 0x89, 0xA2, 0xE2, 0x85, 0xC5, 0xC4, 0x84, 0xD6, 0x96, 0xC3, 0x83, 0x85,
+ 0xC5, 0x85, 0xC5, 0xD3, 0xC2, 0x93, 0x82, 0x85, 0xC5, 0x85, 0xC5, 0xD3, 0xC2,
+ 0x93, 0x82, 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xC6, 0x86, 0xC9, 0x89, 0xD5, 0x95,
+ 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81, 0xD3, 0x93, 0xF1, 0xF1, 0xF3, 0xE2, 0xA2,
+ 0xE6, 0xA6, 0xD6, 0x96, 0xC4, 0x84, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xD5, 0xA3,
+ 0x95, 0xC9, 0x89, 0xC8, 0x88, 0xC3, 0x83, 0xE2, 0xD6, 0xA2, 0x96, 0xE2, 0xC2,
+ 0xA2, 0x82, 0x97, 0xD7, 0xC1, 0x81, 0xC2, 0x82, 0xE4, 0xA4, 0xC9, 0x89, 0xE2,
+ 0xC4, 0xA2, 0x84, 0x83, 0xC3, 0xC9, 0x89, 0xD3, 0x93, 0xD3, 0x93, 0xC9, 0x89,
+ 0xD9, 0x99, 0xE6, 0xE4, 0xE3, 0xE2, 0xD7, 0xD2, 0xC9, 0xC8, 0xC7, 0xC5, 0xC2,
+ 0xC1, 0xA6, 0xA4, 0xA3, 0xA2, 0x97, 0x92, 0x89, 0x88, 0x87, 0x85, 0x82, 0x81,
+ 0xC9, 0x89, 0xF7, 0xF4, 0xF3, 0xF5, 0xF0, 0xF8, 0xF9, 0xF2, 0xF1, 0x60, 0xE2,
+ 0xAB, 0xA2, 0x60, 0xF2, 0xF1, 0xF3, 0xF2, 0xD2, 0x92, 0xC5, 0x85, 0xC5, 0x85,
+ 0x73, 0x92, 0xD2, 0xF2, 0x6D, 0x60, 0xC8, 0x88, 0x69, 0xF7, 0xF0, 0xF7, 0xF0,
+ 0xF5, 0xF4, 0xF0, 0xF8, 0xF7, 0xF3, 0xF6, 0xF7, 0xF0, 0xF1, 0xF7, 0xF4, 0xF3,
+ 0xF0, 0xF0, 0xF5, 0xF7, 0xF0, 0xF7, 0xF1, 0xF6, 0xF0, 0xF4, 0xF8, 0xF1, 0xF0,
+ 0xF5, 0xF9, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1, 0xF0, 0xF8, 0xF4, 0xF7, 0xF5, 0xF2,
+ 0xF1, 0xF0, 0xF8, 0xF8, 0xF3, 0xF5, 0xF6, 0xF7, 0xF9, 0xF3, 0xF0, 0xF4, 0xF5,
+ 0xF0, 0xF1, 0xF6, 0xF7, 0xF8, 0xF9, 0xF3, 0xF2, 0xF4, 0xF6, 0xF7, 0xF9, 0xF0,
+ 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF0, 0xF3, 0xF1, 0xF4, 0xF2,
+ 0xF6, 0xF7, 0xF8, 0xF5, 0xF4, 0xF3, 0xF2, 0xF6, 0xF8, 0xF4, 0xF5, 0xF3, 0xF7,
+ 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF3,
+ 0xF1, 0xF7, 0xF3, 0xF2, 0xF0, 0xF3, 0xF2, 0xF6, 0xF0, 0xF9, 0xF8, 0xF7, 0xF5,
+ 0xF3, 0xF0, 0xF7, 0xF8, 0xF9, 0xF8, 0xF1, 0xF7, 0xF0, 0xF1, 0xF2, 0xF3, 0xF6,
+ 0xF6, 0xF5, 0xF7, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9,
+ 0xF8, 0xF9, 0xF0, 0xF4, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xF8, 0xF7,
+ 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xF0, 0xF2, 0xF3, 0xF7, 0xF2, 0xF3,
+ 0xF9, 0xF2, 0xF4, 0xF5, 0xF0, 0xF1, 0xF2, 0xF3, 0xF6, 0xF5, 0xF0, 0xF2, 0xF1,
+ 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF5, 0xF3, 0xF8, 0xF3, 0xF1, 0xF2, 0xF9,
+ 0xF6, 0xF3, 0xF0, 0xF1, 0xF8, 0xF5, 0xF3, 0xF3, 0xF4, 0xF9, 0xF8, 0xF7, 0xF6,
+ 0xF8, 0xF7, 0xF5, 0xF3, 0xF0, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF9, 0xF8,
+ 0xF5, 0xF4, 0xF2, 0xF1, 0xF0, 0xF6, 0xF1, 0xF0, 0xF5, 0xF1, 0xF2, 0xF3, 0xF8,
+ 0xF7, 0xF6, 0xF5, 0xF4, 0xF9, 0xF0, 0xF2, 0xF3, 0xF4, 0xF5, 0xF5, 0xF6, 0xF3,
+ 0xF4, 0xF0, 0xF9, 0xF8, 0xF7, 0xF6, 0xF8, 0xF7, 0xF5, 0xF4, 0xF2, 0xF5, 0xF3,
+ 0xF2, 0xF2, 0xF1, 0xF6, 0xF6, 0xF0, 0xF9, 0xF8, 0xF7, 0xF4, 0xF6, 0xF5, 0xF3,
+ 0xF4, 0xF0, 0xF6, 0xF4, 0xF3, 0xF1, 0xF0, 0xF9, 0xF3, 0xF3, 0xF2, 0xF1, 0xF0,
+ 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF0, 0xF8, 0xF0, 0xF1, 0xF4, 0xF8,
+ 0xF8, 0xF2, 0xF4, 0xF5, 0xF3, 0xF4, 0xF1, 0xF7, 0xF6, 0xF4, 0xF9, 0xF0, 0xF7,
+ 0xF5, 0xF2, 0xF2, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF5, 0xF5, 0xF5, 0xF4, 0xF1,
+ 0xF4, 0xF3, 0xF2, 0xF1, 0xF2, 0xF9, 0xF2, 0xF1, 0xF7, 0xF3, 0xF8, 0xF5, 0xF7,
+ 0xF3, 0xF2, 0xF9, 0xF8, 0xF5, 0xF4, 0xF1, 0xF0, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1,
+ 0xF0, 0xC4, 0x84, 0x65, 0xC9, 0x89, 0x71, 0xE2, 0xAB, 0xA2, 0xF1, 0xF0, 0xC3,
+ 0x83, 0x64, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xE3,
+ 0xB3, 0xA3, 0xF9, 0xF8, 0xF7, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0, 0xC3, 0x83,
+ 0x64, 0x60, 0xC1, 0x81, 0xF2, 0x60, 0xE2, 0xAB, 0xA2, 0xC3, 0x83, 0x64, 0xE4,
+ 0xB4, 0xA4, 0x60, 0xF6, 0xF4, 0xF6, 0xF1, 0x60, 0x76, 0xD5, 0xC9, 0x71, 0xE3,
+ 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0x60, 0xF1, 0x4B, 0xF3, 0x60, 0xE2, 0xAB, 0xE6,
+ 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xC1, 0x81,
+ 0xD3, 0x93, 0x60, 0xF1, 0x4B, 0xF3, 0x60, 0xE2, 0xA2, 0xE6, 0xA6, 0xD6, 0x96,
+ 0xC4, 0x84, 0xD5, 0x95, 0xD5, 0x76, 0xC9, 0x89, 0x71, 0xE6, 0xB6, 0xA6, 0xF2,
+ 0x60, 0x76, 0xD5, 0xC9, 0x71, 0xE3, 0xB3, 0xC1, 0x62, 0xD3, 0x74, 0x60, 0xE2,
+ 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3,
+ 0xC1, 0x81, 0xD3, 0x93, 0x60, 0xE2, 0xA2, 0xE6, 0xA6, 0xD6, 0x96, 0xC4, 0x84,
+ 0xD5, 0x95, 0xD5, 0x76, 0xC9, 0x89, 0x71, 0xE6, 0xB6, 0xA6, 0x00, 0x60, 0x00,
+ 0xF5, 0xF3, 0x60, 0xF6, 0xF3, 0xF4, 0xF9, 0xF7, 0xF8, 0xF5, 0xF2, 0xF1, 0x60,
+ 0xF9, 0xF5, 0xF8, 0xF0, 0xD9, 0x99, 0xF1, 0xF9, 0xF9, 0xF1, 0x7A, 0xB5, 0xE5,
+ 0xE5, 0xA5, 0xD9, 0x99, 0xD9, 0x9B, 0xC9, 0x89, 0x71, 0x4B, 0xF6, 0xF7, 0xF8,
+ 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1, 0xF8, 0xF8, 0xF9, 0xF1, 0xF8, 0xF8, 0xF9,
+ 0xF1, 0xF8, 0xF8, 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1, 0xF7, 0xF8, 0xF9, 0xF1,
+ 0xF8, 0xF9, 0xF1, 0xF9, 0xF8, 0xF9, 0xF1, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A,
+ 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0xF5, 0x7A,
+ 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0x60, 0xF9, 0xF5, 0xF8,
+ 0xF4, 0xA2, 0xAB, 0xE2, 0xE4, 0xB4, 0xA4, 0x60, 0xF6, 0xF4, 0xF8, 0xF6, 0xF8,
+ 0xF1, 0xC9, 0x89, 0xF6, 0x6D, 0x60, 0xD6, 0x96, 0x77, 0xD5, 0x95, 0xD4, 0x94,
+ 0x75, 0xD9, 0x9B, 0x99, 0x60, 0x95, 0xD5, 0xC1, 0x81, 0xC5, 0x85, 0xF8, 0xF1,
+ 0xF0, 0xF6, 0xF5, 0xF9, 0xF7, 0xF8, 0xF9, 0xF1, 0x60, 0xF1, 0xF0, 0xF6, 0xF5,
+ 0x6D, 0xC3, 0x83, 0x64, 0x6D, 0xC3, 0x83, 0x6D, 0x64, 0xD9, 0xC9, 0x99, 0x89,
+ 0x71, 0xF9, 0x60, 0xD5, 0x76, 0xC9, 0x71, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0x60,
+ 0xD5, 0x95, 0xC9, 0x89, 0xE3, 0xA3, 0xE3, 0xB3, 0x71, 0xC9, 0xD1, 0x72, 0x89,
+ 0xC9, 0xD1, 0x91, 0xD5, 0x95, 0xD5, 0x76, 0xC1, 0x81, 0x62, 0xF3, 0xD2, 0x92,
+ 0x73, 0xF9, 0x6D, 0x96, 0xD6, 0xD9, 0x99, 0xE4, 0xA4, 0xC5, 0x85, 0x4E, 0xF0,
+ 0xF5, 0xF8, 0x60, 0xD3, 0x93, 0xC1, 0x81, 0xE4, 0xA4, 0xC7, 0x87, 0xD5, 0x95,
+ 0xC9, 0x89, 0xD3, 0x93, 0xC9, 0x89, 0xE3, 0xA3, 0xD6, 0x77, 0xD9, 0x9B, 0xE4,
+ 0xB4, 0xC5, 0x66, 0x4E, 0xF0, 0xF5, 0xF8, 0x60, 0xD3, 0x74, 0xC1, 0x62, 0xE4,
+ 0xB4, 0xC7, 0x68, 0xD5, 0x76, 0xC9, 0x71, 0xD3, 0x74, 0xC9, 0x71, 0xE3, 0xB3,
+ 0xD3, 0x74, 0xD3, 0x93, 0xE4, 0xB4, 0xA4, 0xD4, 0x94, 0x75, 0x60, 0x6D, 0xE3,
+ 0xB3, 0xC6, 0x67, 0x6D, 0xE3, 0xA3, 0xC6, 0x86, 0xC9, 0x89, 0xC9, 0x71, 0x60,
+ 0xE2, 0xAB, 0xA2, 0xF2, 0x60, 0xC3, 0x83, 0x64, 0xE2, 0xAB, 0xA2, 0xC1, 0x81,
+ 0x62, 0xC5, 0x85, 0x66, 0xC5, 0x85, 0x66, 0x74, 0x93, 0xD3, 0x63, 0x82, 0xC2,
+ 0xD3, 0xC2, 0x93, 0x82, 0x74, 0x63, 0x60, 0xC5, 0x85, 0x66, 0xC5, 0x85, 0x66,
+ 0x74, 0x93, 0xD3, 0x63, 0x82, 0xC2, 0xD3, 0xC2, 0x93, 0x82, 0x74, 0x63, 0x60,
+ 0xF2, 0xF6, 0xF8, 0xF3, 0xF1, 0xF8, 0xF3, 0xF1, 0x60, 0xC6, 0x86, 0x67, 0x00,
+ 0x60, 0xE2, 0xAB, 0xA2, 0xF9, 0xF1, 0x60, 0xA2, 0xE2, 0xE6, 0xA6, 0xD6, 0x96,
+ 0xC4, 0x84, 0xD5, 0x95, 0xE2, 0xAB, 0xE6, 0xB6, 0xD6, 0x77, 0xC4, 0x65, 0xD5,
+ 0x76, 0xF9, 0xF6, 0xF5, 0xF3, 0xF2, 0xF1, 0xF0, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xF6, 0xF5, 0xC9, 0x71, 0xC9, 0x89,
+ 0xE3, 0xE2, 0xC3, 0xB3, 0xAB, 0xA3, 0xA2, 0x83, 0x64, 0xC9, 0x89, 0x71, 0xC8,
+ 0x88, 0x69, 0xF8, 0xD6, 0x77, 0xF8, 0xD6, 0x96, 0xC3, 0x83, 0x64, 0xE2, 0xAB,
+ 0xA2, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xC1, 0x81, 0x62, 0xE2, 0xD6, 0xAB, 0xA2,
+ 0x96, 0x77, 0xE2, 0xC2, 0xC1, 0xAB, 0xA2, 0x82, 0x81, 0x63, 0xD7, 0xC5, 0x97,
+ 0x85, 0xD9, 0xC2, 0x99, 0x82, 0x63, 0xE8, 0xE2, 0xD7, 0xC8, 0xC3, 0xA8, 0xA2,
+ 0x97, 0x88, 0x83, 0x78, 0x64, 0xC9, 0x89, 0x71, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
+ 0xC1, 0x62, 0xD6, 0x77, 0xE2, 0xC2, 0xC1, 0xAB, 0x63, 0x62, 0xE7, 0xE4, 0xD3,
+ 0xC3, 0xC2, 0xB7, 0xB4, 0xA7, 0xA4, 0x93, 0x83, 0x82, 0x74, 0x64, 0x63, 0xE8,
+ 0xE2, 0xD7, 0xC8, 0xB8, 0xAB, 0x78, 0x69, 0x9B, 0x99, 0xD9, 0xE2, 0xD5, 0xC4,
+ 0xAB, 0xA2, 0x95, 0x84, 0x76, 0x65, 0x69, 0x49, 0x74, 0x73, 0x63, 0x54, 0x53,
+ 0x43, 0x69, 0x49, 0x68, 0x48, 0x38, 0xC9, 0x89, 0x71, 0x6F, 0x4F, 0x63, 0x43,
+ 0x73, 0x53, 0x31, 0x32, 0x33, 0x34, 0x35, 0x61, 0x41, 0x73, 0x6F, 0x53, 0x4F,
+ 0x69, 0x49, 0x66, 0xC5, 0xD7, 0x78, 0x73, 0x62, 0x61, 0x53, 0x42, 0x41, 0xD9,
+ 0x9B, 0x70, 0x65, 0x50, 0x45, 0x72, 0x62, 0x52, 0x42, 0x78, 0x75, 0x6C, 0x63,
+ 0x62, 0x58, 0x55, 0x4C, 0x43, 0x42, 0x79, 0x73, 0x70, 0x68, 0x63, 0x59, 0x53,
+ 0x50, 0x48, 0x43, 0x69, 0x49, 0x52, 0x72, 0x73, 0x6E, 0x64, 0x53, 0x4E, 0x44,
+ 0x35, 0x36, 0x28, 0x78, 0x77, 0x75, 0x74, 0x73, 0x72, 0x70, 0x6D, 0x6C, 0x6B,
+ 0x6A, 0x69, 0x68, 0x67, 0x65, 0x63, 0x62, 0x61, 0x58, 0x57, 0x55, 0x54, 0x53,
+ 0x52, 0x50, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x45, 0x43, 0x42, 0x41,
+ 0x39, 0x38, 0x34, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
+};
diff --git a/os400/iconv/iconv.c b/os400/iconv/iconv.c
new file mode 100644 (file)
index 0000000..c85c268
--- /dev/null
@@ -0,0 +1,154 @@
+/**
+***     iconv_open(), iconv(), iconv_close() wrappers for the OS/400.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "/QIBM/include/iconv.h"        /* Force system definition. */
+
+#define USE_SYSTEM_ICONV
+#include "iconv.h"                      /* Use local definitions. */
+
+
+
+/**
+***     Bring-in the name-->CCSID mapping DFA tables.
+**/
+
+#include "ianatables.c"
+
+
+
+static int
+findEncoding(const unsigned char * * namep)
+
+{
+        t_staterange curstate;
+        t_ccsid ccsid;
+        t_ccsid final;
+        t_transrange l;
+        t_transrange h;
+        const unsigned char * name;
+
+        /**
+        ***     Get the CCSID correspong to the name at *`namep'.
+        ***     If success, update pointer at `namep' to 1st byte after matched
+        ***             name and return the CCSID.
+        ***     If failure, set errno and return -1.
+        **/
+
+        if (!namep || !(name = *namep)) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        curstate = 0;
+        final = 0;
+
+        for (;;) {
+                if (curstate < sizeof final_array / sizeof final_array[0])
+                        if (final_array[curstate]) {
+                                final = final_array[curstate];
+                                *namep = name;
+                                }
+
+                l = trans_array[curstate] - 1;
+                h = trans_array[curstate + 1];
+
+                do {
+                        if (++l >= h) {
+                                if (!final) {
+                                        errno = EINVAL;
+                                        return -1;
+                                        }
+
+                                return final - 1;
+                                }
+                } while (label_array[l] != *name);
+
+                curstate = goto_array[l];
+                name++;
+                }
+
+        /* NOTREACHED. */
+}
+
+
+static void
+makeos400codename(char * buf, unsigned int ccsid)
+
+{
+        ccsid &= 0xFFFF;
+        memset(buf, 0, 32);
+        sprintf(buf, "IBMCCSID%05u0000000", ccsid);
+}
+
+
+Iconv_t
+IconvOpen(const char * tocode, const char * fromcode)
+
+{
+        int toccsid = findEncoding(&tocode);
+        int fromccsid = findEncoding(&fromcode);
+        char fromibmccsid[33];
+        char toibmccsid[33];
+        iconv_t * cd;
+
+        if (toccsid < 0 || fromccsid < 0)
+                return (Iconv_t) -1;
+
+        makeos400codename(fromibmccsid, fromccsid);
+        makeos400codename(toibmccsid, toccsid);
+        memset(toibmccsid + 13, 0, sizeof toibmccsid - 13);
+
+        cd = (iconv_t *) malloc(sizeof *cd);
+
+        if (!cd)
+                return (Iconv_t) -1;
+
+        *cd = iconv_open(toibmccsid, fromibmccsid);
+
+        if (cd->return_value) {
+                free((char *) cd);
+                return (Iconv_t) -1;
+                }
+
+        return (Iconv_t) cd;
+}
+
+
+size_t
+Iconv(Iconv_t cd, char * * inbuf, size_t * inbytesleft,
+                                        char * * outbuf, size_t * outbytesleft)
+
+{
+        if (!cd || cd == (Iconv_t) -1) {
+                errno = EINVAL;
+                return (size_t) -1;
+                }
+
+        return iconv(*(iconv_t *) cd, inbuf, inbytesleft, outbuf, outbytesleft);
+}
+
+
+int
+IconvClose(Iconv_t cd)
+
+{
+        if (!cd || cd == (Iconv_t) -1) {
+                errno = EINVAL;
+                return -1;
+                }
+
+        if (iconv_close(*(iconv_t *) cd))
+                return -1;
+
+        free((char *) cd);
+        return 0;
+}
diff --git a/os400/iconv/iconv.h b/os400/iconv/iconv.h
new file mode 100644 (file)
index 0000000..87a8bbc
--- /dev/null
@@ -0,0 +1,40 @@
+/**
+***     Declarations for the iconv wrappers.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#ifndef __ICONV_H_
+#define __ICONV_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>             /* For size_t. */
+
+
+typedef void *  Iconv_t;
+
+
+Iconv_t         IconvOpen(const char * tocode, const char * fromcode);
+size_t          Iconv(Iconv_t cd, char * * inbuf, size_t * inbytesleft,
+                                        char * * outbuf, size_t * outbytesleft);
+int             IconvClose(Iconv_t cd);
+
+
+#ifndef USE_SYSTEM_ICONV
+#define iconv_t         Iconv_t
+#define iconv_open      IconvOpen
+#define iconv           Iconv
+#define iconv_close     IconvClose
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/os400/initscript.sh b/os400/initscript.sh
new file mode 100644 (file)
index 0000000..fb80507
--- /dev/null
@@ -0,0 +1,290 @@
+#!/bin/sh
+#
+#       Compilation scripts initialization for the OS/400 implementation.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+
+case "${SCRIPTDIR}" in
+/*)     ;;
+*)      SCRIPTDIR="`pwd`/${SCRIPTDIR}"
+esac
+
+while true
+do      case "${SCRIPTDIR}" in
+        */.)    SCRIPTDIR="${SCRIPTDIR%/.}";;
+        *)      break;;
+        esac
+done
+
+#  The script directory is supposed to be in $TOPDIR/os400.
+
+TOPDIR=`dirname "${SCRIPTDIR}"`
+export SCRIPTDIR TOPDIR
+
+
+setenv()
+
+{
+        #       Define and export.
+
+        eval ${1}="${2}"
+        export ${1}
+}
+
+
+################################################################################
+#
+#                       Tunable configuration parameters.
+#
+################################################################################
+
+setenv TARGETLIB        'LIBXML2'       # Target OS/400 program library.
+setenv STATBNDDIR       'LIBXML2_A'     # Static binding directory.
+setenv DYNBNDDIR        'LIBXML2'       # Dynamic binding directory.
+setenv SRVPGM           "LIBXML2"       # Service program.
+setenv TGTCCSID         '500'           # Target CCSID of objects.
+setenv DEBUG            '*ALL'          # Debug level.
+setenv OPTIMIZE         '10'            # Optimisation level.
+setenv OUTPUT           '*NONE'         # Compilation output option.
+setenv TGTRLS           'V5R3M0'        # Target OS release.
+setenv IFSDIR           '/libxml2'      # Installation IFS directory.
+
+
+################################################################################
+#
+#                       Conditional compilation parameters.
+#
+################################################################################
+
+setenv WITH_TRIO                1    # Configure trio support.
+setenv WITH_THREADS             1    # Configure thread support.
+setenv WITH_THREAD_ALLOC        1    # Whether allocation hooks are per-thread.
+setenv WITH_TREE                1    # Compile DOM tree API.
+setenv WITH_OUTPUT              1    # Compile serialization/saving support.
+setenv WITH_PUSH                1    # Compile push parser.
+setenv WITH_READER              1    # Compile parsing interface.
+setenv WITH_PATTERN             1    # Compile pattern node selection interface.
+setenv WITH_WRITER              1    # Compile saving interface.
+setenv WITH_SAX1                1    # Compile SAX version 1 interface.
+setenv WITH_FTP                 1    # Compile FTP support.
+setenv WITH_HTTP                1    # Compile HTTP support.
+setenv WITH_VALID               1    # Compile DTD validation support.
+setenv WITH_HTML                1    # Compile HTML support.
+setenv WITH_LEGACY              1    # Compile deprecated API.
+setenv WITH_C14N                1    # Compile canonicalization support.
+setenv WITH_CATALOG             1    # Compile catalog support.
+setenv WITH_DOCB                1    # Compile SGML Docbook support.
+setenv WITH_XPATH               1    # Compile XPath support.
+setenv WITH_XPTR                1    # Compile XPointer support.
+setenv WITH_XINCLUDE            1    # Compile XInclude support.
+setenv WITH_ICONV               1    # Whether iconv support is available.
+setenv WITH_ICU                 0    # Whether icu support is available.
+setenv WITH_ISO8859X            1    # Compile ISO-8859-* support if no iconv.
+setenv WITH_DEBUG               1    # Compile debugging module.
+setenv WITH_MEM_DEBUG           1    # Compile memory debugging module.
+setenv WITH_RUN_DEBUG           1    # Compile runtime debugging.
+setenv WITH_REGEXPS             1    # Compile regular expression interfaces.
+setenv WITH_SCHEMAS             1    # Compile schema validation interface.
+setenv WITH_SCHEMATRON          1    # Compile schematron validation interface.
+setenv WITH_MODULES             1    # Compile module interfaces.
+setenv WITH_ZLIB                0    # Whether zlib is available.
+setenv WITH_LZMA                0    # Whether LZMA is available.
+
+#       Define ZLIB locations. This is ignored if WITH_ZLIB is 0.
+
+setenv ZLIB_INCLUDE             '/zlib/include' # ZLIB include IFS directory.
+setenv ZLIB_LIB                 'ZLIB'          # ZLIB library.
+setenv ZLIB_BNDDIR              'ZLIB_A'        # ZLIB binding directory.
+
+################################################################################
+#
+#                       OS/400 specific definitions.
+#
+################################################################################
+
+setenv LIBIFSNAME               "/QSYS.LIB/${TARGETLIB}.LIB"
+setenv MODULE_EXTENSION         '.SRVPGM'
+
+
+################################################################################
+#
+#                       Extract version information.
+#
+################################################################################
+
+
+#       Transitional: get file name of configure script.
+
+AUTOCONFSCRIPT="${TOPDIR}/configure.ac"
+
+if [ ! -f "${AUTOCONFSCRIPT}" ]
+then    AUTOCONFSCRIPT="${TOPDIR}/configure.in"
+fi
+
+#       Need to get the version definitions.
+
+eval "`grep '^LIBXML_[A-Z]*_VERSION=' \"${AUTOCONFSCRIPT}\"`"
+eval "`grep '^LIBXML_MICRO_VERSION_SUFFIX=' \"${AUTOCONFSCRIPT}\"`"
+LIBXML_VERSION="${LIBXML_MAJOR_VERSION}.${LIBXML_MINOR_VERSION}"
+LIBXML_VERSION="${LIBXML_VERSION}.${LIBXML_MICRO_VERSION}"
+LIBXML_VERSION="${LIBXML_VERSION}${LIBXML_MICRO_VERSION_SUFFIX}"
+LIBXML_VERSION_NUMBER=`expr "${LIBXML_MAJOR_VERSION}" \* 10000 +        \
+                            "${LIBXML_MINOR_VERSION}" \* 100 +          \
+                            "${LIBXML_MICRO_VERSION}"`
+export LIBXML_MAJOR_VERSION LIBXML_MINOR_VERSION
+export LIBXML_MICRO_VERSION LIBXML_MICROVERSION_SUFFIX
+export LIBXML_VERSION LIBXML_VERSION_NUMBER
+setenv LIBXML_VERSION_EXTRA ''
+setenv VERSION  "${LIBXML_VERSION}"
+
+
+################################################################################
+#
+#                               Procedures.
+#
+################################################################################
+
+#       action_needed dest [src]
+#
+#       dest is an object to build
+#       if specified, src is an object on which dest depends.
+#
+#       exit 0 (succeeds) if some action has to be taken, else 1.
+
+action_needed()
+
+{
+        [ ! -e "${1}" ] && return 0
+        [ "${2}" ] || return 1
+        [ "${1}" -ot "${2}" ] && return 0
+        return 1
+}
+
+
+#       make_module module_name source_name [additional_definitions]
+#
+#       Compile source name into ASCII module if needed.
+#       As side effect, append the module name to variable MODULES.
+#       Set LINK to "YES" if the module has been compiled.
+
+make_module()
+
+{
+        MODULES="${MODULES} ${1}"
+        MODIFSNAME="${LIBIFSNAME}/${1}.MODULE"
+        action_needed "${MODIFSNAME}" "${2}" || return 0;
+
+        #       #pragma convert has to be in the source file itself, i.e.
+        #               putting it in an include file makes it only active
+        #               for that include file.
+        #       Thus we build a temporary file with the pragma prepended to
+        #               the source file and we compile that temporary file.
+
+        rm -f __tmpsrcf.c
+        if [ "${4}" != 'ebcdic' ]
+        then    echo "#line 1 \"${2}\"" >> __tmpsrcf.c
+                echo "#pragma convert(819)" >> __tmpsrcf.c
+                echo '#include "wrappers.h"' >> __tmpsrcf.c
+        fi
+        echo "#line 1 \"${2}\"" >> __tmpsrcf.c
+        cat "${2}" >> __tmpsrcf.c
+        CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')"
+#       CMD="${CMD} OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)"
+        CMD="${CMD} OPTION(*INCDIRFIRST)"
+        CMD="${CMD} SYSIFCOPT(*IFS64IO) LANGLVL(*EXTENDED) LOCALETYPE(*LOCALE)"
+        CMD="${CMD} INCDIR("
+        CMD="${CMD} '${TOPDIR}/os400/iconv'"
+        if [ "${4}" != 'ebcdic' ]
+        then    CMD="${CMD} '/qibm/proddata/qadrt/include'"
+        fi
+        CMD="${CMD} '${TOPDIR}/os400' '${TOPDIR}/os400/dlfcn'"
+        CMD="${CMD} '${IFSDIR}/include/libxml' '${IFSDIR}/include'"
+        if [ "${ZLIB_INCLUDE}" ]
+        then    CMD="${CMD} '${ZLIB_INCLUDE}'"
+        fi
+        CMD="${CMD} '${TOPDIR}' ${INCLUDES})"
+        CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
+        CMD="${CMD} OUTPUT(${OUTPUT})"
+        CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
+        CMD="${CMD} DBGVIEW(${DEBUG})"
+        CMD="${CMD} DEFINE('_REENTRANT' 'TRIO_HAVE_CONFIG_H' 'NDEBUG' ${3})"
+
+        system "${CMD}"
+        rm -f __tmpsrcf.c
+        LINK=YES
+}
+
+
+#       Determine DB2 object name from IFS name.
+
+db2_name()
+
+{
+        if [ "${2}" = 'nomangle' ]
+        then    basename "${1}"                                         |
+                tr 'a-z-' 'A-Z_'                                        |
+                sed -e 's/\..*//'                                       \
+                    -e 's/^\(..........\).*$/\1/'
+        else    basename "${1}"                                         |
+                tr 'a-z-' 'A-Z_'                                        |
+                sed -e 's/\..*//'                                       \
+                    -e 's/^TEST/T/'                                     \
+                    -e 's/^XML/X/'                                      \
+                    -e 's/^\(.\).*\(.........\)$/\1\2/'
+        fi
+}
+
+
+#       Copy IFS file replacing version & configuration info.
+
+versioned_copy()
+
+{
+    sed -e "s/@LIBXML_VERSION@/${LIBXML_VERSION}/g"                     \
+                                                                        \
+        -e "s#@LIBXML_MAJOR_VERSION@#${LIBXML_MAJOR_VERSION}#g"         \
+        -e "s#@LIBXML_MINOR_VERSION@#${LIBXML_MINOR_VERSION}#g"         \
+        -e "s#@LIBXML_MICRO_VERSION@#${LIBXML_MICRO_VERSION}#g"         \
+        -e "s#@LIBXML_MICRO_VERSION_SUFFIX@#${LIBXML_MICRO_VERSION_SUFFIX}#g" \
+        -e "s#@LIBXML_VERSION@#${LIBXML_VERSION}#g"                     \
+        -e "s#@LIBXML_VERSION_NUMBER@#${LIBXML_VERSION_NUMBER}#g"       \
+        -e "s#@LIBXML_VERSION_EXTRA@#${LIBXML_VERSION_EXTRA}#g"         \
+        -e "s#@VERSION@#${VERSION}#g"                                   \
+        -e "s#@WITH_TRIO@#${WITH_TRIO}#g"                               \
+        -e "s#@WITH_THREADS@#${WITH_THREADS}#g"                         \
+        -e "s#@WITH_THREAD_ALLOC@#${WITH_THREAD_ALLOC}#g"               \
+        -e "s#@WITH_TREE@#${WITH_TREE}#g"                               \
+        -e "s#@WITH_OUTPUT@#${WITH_OUTPUT}#g"                           \
+        -e "s#@WITH_PUSH@#${WITH_PUSH}#g"                               \
+        -e "s#@WITH_READER@#${WITH_READER}#g"                           \
+        -e "s#@WITH_PATTERN@#${WITH_PATTERN}#g"                         \
+        -e "s#@WITH_WRITER@#${WITH_WRITER}#g"                           \
+        -e "s#@WITH_SAX1@#${WITH_SAX1}#g"                               \
+        -e "s#@WITH_FTP@#${WITH_FTP}#g"                                 \
+        -e "s#@WITH_HTTP@#${WITH_HTTP}#g"                               \
+        -e "s#@WITH_VALID@#${WITH_VALID}#g"                             \
+        -e "s#@WITH_HTML@#${WITH_HTML}#g"                               \
+        -e "s#@WITH_LEGACY@#${WITH_LEGACY}#g"                           \
+        -e "s#@WITH_C14N@#${WITH_C14N}#g"                               \
+        -e "s#@WITH_CATALOG@#${WITH_CATALOG}#g"                         \
+        -e "s#@WITH_DOCB@#${WITH_DOCB}#g"                               \
+        -e "s#@WITH_XPATH@#${WITH_XPATH}#g"                             \
+        -e "s#@WITH_XPTR@#${WITH_XPTR}#g"                               \
+        -e "s#@WITH_XINCLUDE@#${WITH_XINCLUDE}#g"                       \
+        -e "s#@WITH_ICONV@#${WITH_ICONV}#g"                             \
+        -e "s#@WITH_ICU@#${WITH_ICU}#g"                                 \
+        -e "s#@WITH_ISO8859X@#${WITH_ISO8859X}#g"                       \
+        -e "s#@WITH_DEBUG@#${WITH_DEBUG}#g"                             \
+        -e "s#@WITH_MEM_DEBUG@#${WITH_MEM_DEBUG}#g"                     \
+        -e "s#@WITH_RUN_DEBUG@#${WITH_RUN_DEBUG}#g"                     \
+        -e "s#@WITH_REGEXPS@#${WITH_REGEXPS}#g"                         \
+        -e "s#@WITH_SCHEMAS@#${WITH_SCHEMAS}#g"                         \
+        -e "s#@WITH_SCHEMATRON@#${WITH_SCHEMATRON}#g"                   \
+        -e "s#@WITH_MODULES@#${WITH_MODULES}#g"                         \
+        -e "s#@WITH_ZLIB@#${WITH_ZLIB}#g"                               \
+        -e "s#@WITH_LZMA@#${WITH_LZMA}#g"
+}
diff --git a/os400/libxmlrpg/DOCBparser.rpgle b/os400/libxmlrpg/DOCBparser.rpgle
new file mode 100644 (file)
index 0000000..bf5aaa2
--- /dev/null
@@ -0,0 +1,116 @@
+      * Summary: old DocBook SGML parser
+      * Description: interface for a DocBook SGML non-verifying parser
+      * This code is DEPRECATED, and should not be used anymore.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(DOCB_PARSER_H__)
+      /define DOCB_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_DOCB_ENABLED)
+
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/parserInternals"
+
+      * Most of the back-end structures from XML and SGML are shared.
+
+     d docbParserCtxtPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserCtxtPtr)
+
+     d docbParserCtxt  ds                  based(docbParserCtxtPtr)
+     d                                     likeds(xmlParserCtxt)
+
+     d docbSAXHandlerPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlSAXHandlerPtr)
+
+     d docbSAXHandler  ds                  based(docbSAXHandlerPtr)
+     d                                     likeds(xmlSAXHandler)
+
+     d docbParserInputPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserInputPtr)
+
+     d docbParserInput...
+     d                 ds                  based(docbParserInputPtr)
+     d                                     likeds(xmlParserInput)
+
+     d docbDocPtr      s                   based(######typedef######)
+     d                                     like(xmlDocPtr)
+
+      * There is only few public functions.
+
+     d docbEncodeEntities...
+     d                 pr            10i 0 extproc('docbEncodeEntities')
+     d  out                            *   value options(*string)               unsigned char *
+     d  outlen                         *   value                                int *
+     d  in                             *   value options(*string)               const unsigned char
+     d                                                                          *
+     d  inlen                          *   value                                int *
+     d  quoteChar                    10i 0 value
+
+     d docbSAXParseDoc...
+     d                 pr                  extproc('docbSAXParseDoc')
+     d                                     like(docbDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d docbParseDoc    pr                  extproc('docbParseDoc')
+     d                                     like(docbDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+
+     d docbSAXParseFile...
+     d                 pr                  extproc('docbSAXParseFile')
+     d                                     like(docbDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d docbParseFile   pr                  extproc('docbParseFile')
+     d                                     like(docbDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+      * Interfaces for the Push mode.
+
+     d docbFreeParserCtxt...
+     d                 pr                  extproc('docbFreeParserCtxt')
+     d  ctxt                               value like(docbParserCtxtPtr)
+
+     d docbCreatePushParserCtxt...
+     d                 pr                  extproc('docbCreatePushParserCtxt')
+     d                                     like(docbParserCtxtPtr)
+     d  sax                                value like(docbSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d docbParseChunk  pr            10i 0 extproc('docbParseChunk')
+     d  ctxt                               value like(docbParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+
+     d docbCreateFileParserCtxt...
+     d                 pr                  extproc('docbCreateFileParserCtxt')
+     d                                     like(docbParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d docbParseDocument...
+     d                 pr            10i 0 extproc('docbParseDocument')
+     d  ctxt                               value like(docbParserCtxtPtr)
+
+      /endif                                                                    LIBXML_DOCB_ENABLED
+      /endif                                                                    DOCB_PARSER_H__
diff --git a/os400/libxmlrpg/HTMLparser.rpgle b/os400/libxmlrpg/HTMLparser.rpgle
new file mode 100644 (file)
index 0000000..7b4a626
--- /dev/null
@@ -0,0 +1,403 @@
+      * Summary: interface for an HTML 4.0 non-verifying parser
+      * Description: this module implements an HTML 4.0 non-verifying parser
+      *              with API compatible with the XML parser ones. It should
+      *              be able to parse "real world" HTML, even if severely
+      *              broken from a specification point of view.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(HTML_PARSER_H__)
+      /define HTML_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * Most of the back-end structures from XML and HTML are shared.
+
+     d htmlParserCtxtPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserCtxtPtr)
+
+     d htmlParserCtxt  ds                  based(htmlParserCtxtPtr)
+     d                                     likeds(xmlParserCtxt)
+
+     d htmlParserNodeInfoPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserNodeInfoPtr)
+
+     d htmlParserNodeInfo...
+     d                 ds                  based(htmlParserNodeInfoPtr)
+     d                                     likeds(xmlParserNodeInfo)
+
+     d htmlSAXHandlerPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlSAXHandlerPtr)
+
+     d htmlSAXHandler  ds                  based(htmlSAXHandlerPtr)
+     d                                     likeds(xmlSAXHandler)
+
+     d htmlParserInputPtr...
+     d                 s                   based(######typedef######)
+     d                                     like(xmlParserInputPtr)
+
+     d htmlParserInput...
+     d                 ds                  based(htmlParserInputPtr)
+     d                                     likeds(xmlParserInput)
+
+     d htmlDocPtr      s                   based(######typedef######)
+     d                                     like(xmlDocPtr)
+
+     d htmlNodePtr     s                   based(######typedef######)
+     d                                     like(xmlNodePtr)
+
+      * Internal description of an HTML element, representing HTML 4.01
+      * and XHTML 1.0 (which share the same structure).
+
+     d htmlElemDescPtr...
+     d                 s               *   based(######typedef######)
+
+     d htmlElemDesc    ds                  based(htmlElemDescPtr)
+     d                                     align qualified
+     d  name                           *                                        const char *
+     d  startTag                      3u 0                                      Start tag implied ?
+     d  endTag                        3u 0                                      End tag implied ?
+     d  saveEndTag                    3u 0                                      Save end tag ?
+     d  empty                         3u 0                                      Empty element ?
+     d  depr                          3u 0                                      Deprecated element ?
+     d  dtd                           3u 0                                      Loose DTD/Frameset
+     d  isinline                      3u 0                                      Block 0/inline elem?
+     d  desc                           *                                        const char *
+      *
+      * New fields encapsulating HTML structure
+      *
+      * Bugs:
+      *      This is a very limited representation.  It fails to tell us when
+      *      an element *requires* subelements (we only have whether they're
+      *      allowed or not), and it doesn't tell us where CDATA and PCDATA
+      *      are allowed.  Some element relationships are not fully represented:
+      *      these are flagged with the word MODIFIER
+      *
+     d  subelts                        *                                        const char * *
+     d  defaultsubelt                  *                                        const char *
+     d  attrs_opt                      *                                        const char * *
+     d  attrs_depr                     *                                        const char * *
+     d  attrs_req                      *                                        const char * *
+
+      * Internal description of an HTML entity.
+
+     d htmlEntityDescPtr...
+     d                 s               *   based(######typedef######)
+
+     d htmlEntityDesc...
+     d                 ds                  based(htmlEntityDescPtr)
+     d                                     align qualified
+     d  value                        10u 0                                      Unicode char value
+     d  name                           *                                        const char *
+     d  desc                           *                                        const char *
+
+      * There is only few public functions.
+
+     d htmlTagLookup   pr                  extproc('htmlTagLookup')
+     d                                     like(htmlElemDescPtr)                const
+     d  tag                            *   value options(*string)               const xmlChar *
+
+     d htmlEntityLookup...
+     d                 pr                  extproc('htmlEntityLookup')
+     d                                     like(htmlEntityDescPtr)              const
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d htmlEntityValueLookup...
+     d                 pr                  extproc('htmlEntityValueLookup')
+     d                                     like(htmlEntityDescPtr)              const
+     d  value                        10u 0 value
+
+     d htmlIsAutoClosed...
+     d                 pr            10i 0 extproc('htmlIsAutoClosed')
+     d  doc                                value like(htmlDocPtr)
+     d  elem                               value like(htmlNodePtr)
+
+     d htmlAutoCloseTag...
+     d                 pr            10i 0 extproc('htmlAutoCloseTag')
+     d  doc                                value like(htmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  elem                               value like(htmlNodePtr)
+
+     d htmlParseEntityRef...
+     d                 pr                  extproc('htmlParseEntityRef')
+     d                                     like(htmlEntityDescPtr)              const
+     d  ctxt                               value like(htmlParserCtxtPtr)
+     d  str                            *                                        const xmlChar *(*)
+
+     d htmlParseCharRef...
+     d                 pr            10i 0 extproc('htmlParseCharRef')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlParseElement...
+     d                 pr                  extproc('htmlParseElement')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlNewParserCtxt...
+     d                 pr                  extproc('htmlNewParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+
+     d htmlCreateMemoryParserCtxt...
+     d                 pr                  extproc('htmlCreateMemoryParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d htmlParseDocument...
+     d                 pr            10i 0 extproc('htmlParseDocument')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+     d htmlSAXParseDoc...
+     d                 pr                  extproc('htmlSAXParseDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d htmlParseDoc    pr                  extproc('htmlParseDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlSAXParseFile...
+     d                 pr                  extproc('htmlSAXParseFile')
+     d                                     like(htmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  userData                       *   value                                void *
+
+     d htmlParseFile   pr                  extproc('htmlParseFile')
+     d                                     like(htmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d UTF8ToHtml      pr            10i 0 extproc('UTF8ToHtml')
+     d  out                       65535    options(*varsize)                    unsigned char []
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+     d htmlEncodeEntities...
+     d                 pr            10i 0 extproc('htmlEncodeEntities')
+     d  out                       65535    options(*varsize)                    unsigned char []
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+     d  quoteChar                    10i 0 value
+
+     d htmlIsScriptAttribute...
+     d                 pr            10i 0 extproc('htmlIsScriptAttribute')
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d htmlHandleOmittedElem...
+     d                 pr            10i 0 extproc('htmlHandleOmittedElem')
+     d  val                          10i 0 value
+
+      /if defined(LIBXML_PUSH_ENABLED)
+
+      * Interfaces for the Push mode.
+
+     d htmlCreatePushParserCtxt...
+     d                 pr                  extproc('htmlCreatePushParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d  sax                                value like(htmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d htmlParseChunk  pr            10i 0 extproc('htmlParseChunk')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+      /endif                                                                    LIBXML_PUSH_ENABLED
+
+     d htmlFreeParserCtxt...
+     d                 pr                  extproc('htmlFreeParserCtxt')
+     d  ctxt                               value like(htmlParserCtxtPtr)
+
+      * New set of simpler/more flexible APIs
+
+      * xmlParserOption:
+      *
+      * This is the set of XML parser options that can be passed down
+      * to the xmlReadDoc() and similar calls.
+
+     d htmlParserOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  HTML_PARSE_RECOVER...                                                   Relaxed parsing
+     d                 c                   X'00000001'
+     d  HTML_PARSE_NODEFDTD...                                                  No default doctype
+     d                 c                   X'00000004'
+     d  HTML_PARSE_NOERROR...                                                   No error reports
+     d                 c                   X'00000020'
+     d  HTML_PARSE_NOWARNING...                                                 No warning reports
+     d                 c                   X'00000040'
+     d  HTML_PARSE_PEDANTIC...                                                  Pedantic err reports
+     d                 c                   X'00000080'
+     d  HTML_PARSE_NOBLANKS...                                                  Remove blank nodes
+     d                 c                   X'00000100'
+     d  HTML_PARSE_NONET...                                                     Forbid net access
+     d                 c                   X'00000800'
+     d  HTML_PARSE_NOIMPLIED...                                                 No implied html/body
+     d                 c                   X'00002000'
+     d  HTML_PARSE_COMPACT...                                                   compact small txtnod
+     d                 c                   X'00010000'
+     d  HTML_PARSE_IGNORE_ENC...                                                Ignore encoding hint
+     d                 c                   X'00200000'
+
+     d htmlCtxtReset   pr                  extproc('htmlCtxtReset')
+     d ctxt                                value like(htmlParserCtxtPtr)
+
+     d htmlCtxtUseOptions...
+     d                 pr            10i 0 extproc('htmlCtxtUseOptions')
+     d ctxt                                value like(htmlParserCtxtPtr)
+     d options                       10i 0 value
+
+     d htmlReadDoc     pr                  extproc('htmlReadDoc')
+     d                                     like(htmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadFile    pr                  extproc('htmlReadFile')
+     d                                     like(htmlDocPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadMemory  pr                  extproc('htmlReadMemory')
+     d                                     like(htmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadFd      pr                  extproc('htmlReadFd')
+     d                                     like(htmlDocPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlReadIO      pr                  extproc('htmlReadIO')
+     d                                     like(htmlDocPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadDoc...
+     d                 pr                  extproc('htmlCtxtReadDoc')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadFile...
+     d                 pr                  extproc('htmlCtxtReadFile')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadMemory...
+     d                 pr                  extproc('htmlCtxtReadMemory')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadFd  pr                  extproc('htmlCtxtReadFd')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d htmlCtxtReadIO  pr                  extproc('htmlCtxtReadIO')
+     d                                     like(htmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Further knowledge of HTML structure
+
+     d htmlStatus      s             10i 0 based(######typedef######)           enum
+     d  HTML_NA        c                   X'0000'                              No check at all
+     d  HTML_INVALID   c                   X'0001'
+     d  HTML_DEPRECATED...
+     d                 c                   X'0002'
+     d  HTML_VALID     c                   X'0004'
+     d  HTML_REQUIRED  c                   X'000C'                              HTML_VALID ored-in
+
+      * Using htmlElemDesc rather than name here, to emphasise the fact
+      *  that otherwise there's a lookup overhead
+
+     d htmlAttrAllowed...
+     d                 pr                  extproc('htmlAttrAllowed')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                        *   value options(*string)               const xmlChar *
+     d  #param3                      10i 0 value
+
+     d htmlElementAllowedHere...
+     d                 pr            10i 0 extproc('htmlElementAllowedHere')
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                        *   value options(*string)               const xmlChar *
+
+     d htmlElementStatusHere...
+     d                 pr                  extproc('htmlElementStatusHere')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlElemDescPtr)          const
+     d  #param2                            value like(htmlElemDescPtr)          const
+
+     d htmlNodeStatus  pr                  extproc('htmlNodeStatus')
+     d                                     like(htmlStatus)
+     d  #param1                            value like(htmlNodePtr)
+     d  #param2                      10i 0 value
+
+      * C macros implemented as procedures for ILE/RPG support.
+
+     d htmlDefaultSubelement...
+     d                 pr              *   extproc('__htmlDefaultSubelement')   const char *
+     d  elt                            *   value                                const htmlElemDesc *
+
+     d htmlElementAllowedHereDesc...
+     d                 pr            10i 0 extproc(
+     d                                     '__htmlElementAllowedHereDesc')
+     d  parent                         *   value                                const htmlElemDesc *
+     d  elt                            *   value                                const htmlElemDesc *
+
+     d htmlRequiredAttrs...
+     d                 pr              *   extproc('__htmlRequiredAttrs')        const char * *
+     d  elt                            *   value                                const htmlElemDesc *
+
+      /endif                                                                    LIBXML_HTML_ENABLED
+      /endif                                                                    HTML_PARSER_H__
diff --git a/os400/libxmlrpg/HTMLtree.rpgle b/os400/libxmlrpg/HTMLtree.rpgle
new file mode 100644 (file)
index 0000000..82a11ca
--- /dev/null
@@ -0,0 +1,166 @@
+      * Summary: specific APIs to process HTML tree, especially serialization
+      * Description: this module implements a few function needed to process
+      *              tree in an HTML specific way.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(HTML_TREE_H__)
+      /define HTML_TREE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/HTMLparser"
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * HTML_TEXT_NODE:
+      *
+      * Macro. A text node in a HTML document is really implemented
+      * the same way as a text node in an XML document.
+
+     d HTML_TEXT_NODE  c                   3
+
+      * HTML_ENTITY_REF_NODE:
+      *
+      * Macro. An entity reference in a HTML document is really implemented
+      * the same way as an entity reference in an XML document.
+
+     d HTML_ENTITY_REF_NODE...
+     d                 c                   5
+
+      * HTML_COMMENT_NODE:
+      *
+      * Macro. A comment in a HTML document is really implemented
+      * the same way as a comment in an XML document.
+
+     d HTML_COMMENT_NODE...
+     d                 c                   8
+
+      * HTML_PRESERVE_NODE:
+      *
+      * Macro. A preserved node in a HTML document is really implemented
+      * the same way as a CDATA section in an XML document.
+
+     d HTML_PRESERVE_NODE...
+     d                 c                   4
+
+      * HTML_PI_NODE:
+      *
+      * Macro. A processing instruction in a HTML document is really implemented
+      * the same way as a processing instruction in an XML document.
+
+     d HTML_PI_NODE    c                   7
+
+     d htmlNewDoc      pr                  extproc('htmlNewDoc')
+     d                                     like(htmlDocPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+
+     d htmlNewDocNoDtD...
+     d                 pr                  extproc('htmlNewDocNoDtD')
+     d                                     like(htmlDocPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+
+     d htmlGetMetaEncoding...
+     d                 pr              *   extproc('htmlGetMetaEncoding')       const xmlChar *
+     d  doc                                value like(htmlDocPtr)
+
+     d htmlSetMetaEncoding...
+     d                 pr            10i 0 extproc('htmlSetMetaEncoding')
+     d  doc                                value like(htmlDocPtr)
+     d  encoding                       *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d htmlDocDumpMemory...
+     d                 pr                  extproc('htmlDocDumpMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *   value                                xmlChar * *
+     d  size                         10i 0
+
+     d htmlDocDumpMemoryFormat...
+     d                 pr                  extproc('htmlDocDumpMemoryFormat')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *   value                                xmlChar * *
+     d  size                         10i 0
+     d  format                       10i 0 value
+
+     d htmlDocDump     pr            10i 0 extproc('htmlDocDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+
+     d htmlSaveFile    pr            10i 0 extproc('htmlSaveFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+
+     d htmlNodeDump    pr            10i 0 extproc('htmlNodeDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d htmlNodeDumpFile...
+     d                 pr                  extproc('htmlNodeDumpFile')
+     d  out                            *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d htmlNodeDumpFileFormat...
+     d                 pr            10i 0 extproc('htmlNodeDumpFileFormat')
+     d  out                            *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlSaveFileEnc...
+     d                 pr            10i 0 extproc('htmlSaveFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlSaveFileFormat...
+     d                 pr            10i 0 extproc('htmlSaveFileFormat')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlNodeDumpFormatOutput...
+     d                 pr                  extproc('htmlNodeDumpFormatOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlDocContentDumpOutput...
+     d                 pr                  extproc('htmlDocContentDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d htmlDocContentDumpFormatOutput...
+     d                 pr                  extproc(
+     d                                     'htmlDocContentDumpFormatOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d htmlNodeDumpOutput...
+     d                 pr                  extproc('htmlNodeDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  encoding                       *   value options(*string)               const char *
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d htmlIsBooleanAttr...
+     d                 pr            10i 0 extproc('htmlIsBooleanAttr')
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_HTML_ENABLED
+      /endif                                                                    HTML_TREE_H__
diff --git a/os400/libxmlrpg/SAX.rpgle b/os400/libxmlrpg/SAX.rpgle
new file mode 100644 (file)
index 0000000..18f851d
--- /dev/null
@@ -0,0 +1,207 @@
+      * Summary: Old SAX version 1 handler, deprecated
+      * Description: DEPRECATED set of SAX version 1 interfaces used to
+      *              build the DOM tree.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SAX_H__)
+      /define XML_SAX_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xlink"
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+
+     d getPublicId     pr              *   extproc('getPublicId')               const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d getSystemId     pr              *   extproc('getSystemId')               const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d setDocumentLocator...
+     d                 pr                  extproc('setDocumentLocator')
+     d  ctx                            *   value                                void *
+     d  loc                                value like(xmlSAXLocatorPtr)
+
+     d getLineNumber   pr            10i 0 extproc('getLineNumber')
+     d  ctx                            *   value                                void *
+
+     d getColumnNumber...
+     d                 pr            10i 0 extproc('getColumnNumber')
+     d  ctx                            *   value                                void *
+
+     d isStandalone    pr            10i 0 extproc('isStandalone')
+     d  ctx                            *   value                                void *
+
+     d hasInternalSubset...
+     d                 pr            10i 0 extproc('hasInternalSubset')
+     d  ctx                            *   value                                void *
+
+     d hasExternalSubset...
+     d                 pr            10i 0 extproc('hasExternalSubset')
+     d  ctx                            *   value                                void *
+
+     d internalSubset  pr                  extproc('internalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d externalSubset  pr                  extproc('externalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d getEntity       pr                  extproc('getEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d getParameterEntity...
+     d                 pr                  extproc('getParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d resolveEntity   pr                  extproc('resolveEntity')
+     d                                     like(xmlParserInputPtr)
+     d  ctx                            *   value                                void *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d entityDecl      pr                  extproc('entityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               xmlChar *
+
+     d attributeDecl   pr                  extproc('attributeDecl')
+     d  ctx                            *   value                                void *
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  def                          10i 0 value
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+     d elementDecl     pr                  extproc('elementDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+
+     d notationDecl    pr                  extproc('notationDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d unparsedEntityDecl...
+     d                 pr                  extproc('unparsedEntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  notationName                   *   value options(*string)               const xmlChar *
+
+     d startDocument   pr                  extproc('startDocument')
+     d  ctx                            *   value                                void *
+
+     d endDocument     pr                  extproc('endDocument')
+     d  ctx                            *   value                                void *
+
+     d attribute       pr                  extproc('attribute')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d startElement    pr                  extproc('startElement')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  atts                           *                                        const xmlChar *(*)
+
+     d endElement      pr                  extproc('endElement')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d reference       pr                  extproc('reference')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d characters      pr                  extproc('characters')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d ignorableWhitespace...
+     d                 pr                  extproc('ignorableWhitespace')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d processingInstruction...
+     d                 pr                  extproc('processingInstruction')
+     d  ctx                            *   value                                void *
+     d  target                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               const xmlChar *
+
+     d globalNamespace...
+     d                 pr                  extproc('globalNamespace')
+     d  ctx                            *   value                                void *
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d setNamespace    pr                  extproc('setNamespace')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d getNamespace    pr                  extproc('getNamespace')
+     d                                     like(xmlNsPtr)
+     d  ctx                            *   value                                void *
+
+     d checkNamespace  pr            10i 0 extproc('checkNamespace')
+     d  ctx                            *   value                                void *
+     d  nameSpace                      *   value options(*string)               xmlChar *
+
+     d namespaceDecl   pr                  extproc('namespaceDecl')
+     d  ctx                            *   value                                void *
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d comment         pr                  extproc('comment')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d cdataBlock      pr                  extproc('cdataBlock')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d initxmlDefaultSAXHandler...
+     d                 pr                  extproc('initxmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+     d  warning                      10i 0 value
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d inithtmlDefaultSAXHandler...
+     d                 pr                  extproc('inithtmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+      /endif
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d initdocbDefaultSAXHandler...
+     d                 pr                  extproc('initdocbDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandlerV1)
+      /endif
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif                                                                    XML_SAX_H__
diff --git a/os400/libxmlrpg/SAX2.rpgle b/os400/libxmlrpg/SAX2.rpgle
new file mode 100644 (file)
index 0000000..c9ab9d1
--- /dev/null
@@ -0,0 +1,248 @@
+      * Summary: SAX2 parser interface used to build the DOM tree
+      * Description: those are the default SAX2 interfaces used by
+      *              the library when building DOM tree.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SAX2_H__)
+      /define XML_SAX2_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xlink"
+
+     d xmlSAX2GetPublicId...
+     d                 pr              *   extproc('xmlSAX2getPublicId')        const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2GetSystemId...
+     d                 pr              *   extproc('xmlSAX2getSystemId')        const xmlChar *
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2SetDocumentLocator...
+     d                 pr                  extproc('xmlSAX2SetDocumentLocator')
+     d  ctx                            *   value                                void *
+     d  loc                                value like(xmlSAXLocatorPtr)
+
+     d xmlSAX2GetLineNumber...
+     d                 pr            10i 0 extproc('xmlSAX2GetLineNumber')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2GetColumnNumber...
+     d                 pr            10i 0 extproc('xmlSAX2GetColumnNumber')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2IsStandalone...
+     d                 pr            10i 0 extproc('xmlSAX2IsStandalone')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2HasInternalSubset...
+     d                 pr            10i 0 extproc('xmlSAX2HasInternalSubset')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2HasExternalSubset...
+     d                 pr            10i 0 extproc('xmlSAX2HasExternalSubset')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2InternalSubset...
+     d                 pr                  extproc('xmlSAX2InternalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2ExternalSubset...
+     d                 pr                  extproc('xmlSAX2ExternalSubset')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2GetEntity...
+     d                 pr                  extproc('xmlSAX2GetEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2GetParameterEntity...
+     d                 pr                  extproc('xmlSAX2GetParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2ResolveEntity...
+     d                 pr                  extproc('xmlSAX2ResolveEntity')
+     d                                     like(xmlParserInputPtr)
+     d  ctx                            *   value                                void *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2EntityDecl...
+     d                 pr                  extproc('xmlSAX2EntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               xmlChar *
+
+     d xmlSAX2AttributeDecl...
+     d                 pr                  extproc('xmlSAX2AttributeDecl')
+     d  ctx                            *   value                                void *
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  def                          10i 0 value
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+     d xmlSAX2ElementDecl...
+     d                 pr                  extproc('xmlSAX2ElementDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlSAX2NotationDecl...
+     d                 pr                  extproc('xmlSAX2NotationDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+
+     d xmlSAX2UnparsedEntityDecl...
+     d                 pr                  extproc('xmlSAX2UnparsedEntityDecl')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  publicId                       *   value options(*string)               const xmlChar *
+     d  systemId                       *   value options(*string)               const xmlChar *
+     d  notationName                   *   value options(*string)               xmlChar *
+
+     d xmlSAX2StartDocument...
+     d                 pr                  extproc('xmlSAX2StartDocument')
+     d  ctx                            *   value                                void *
+
+     d xmlSAX2EndDocument...
+     d                 pr                  extproc('xmlSAX2EndDocument')
+     d  ctx                            *   value                                void *
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_SAX1_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DOCB_ENABLED)
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlSAX2StartElement...
+     d                 pr                  extproc('xmlSAX2StartElement')
+     d  ctx                            *   value                                void *
+     d  fullname                       *   value options(*string)               const xmlChar *
+     d  atts                           *                                        const xmlChar *(*)
+
+     d xmlSAX2EndElement...
+     d                 pr                  extproc('xmlSAX2EndElement')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlSAX2StartElementNs...
+     d                 pr                  extproc('xmlSAX2StartElementNs')
+     d  ctx                            *   value                                void *
+     d  localname                      *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  nb_namespaces                10i 0 value
+     d  namespaces                     *   value                                const xmlChar *(*)
+     d  nb_attributes                10i 0 value
+     d  nb_defaulted                 10i 0 value
+     d  attributes                     *                                        const xmlChar *(*)
+
+     d xmlSAX2EndElementNs...
+     d                 pr                  extproc('xmlSAX2EndElementNs')
+     d  ctx                            *   value                                void *
+     d  localname                      *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Reference...
+     d                 pr                  extproc('xmlSAX2Reference')
+     d  ctx                            *   value                                void *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Characters...
+     d                 pr                  extproc('xmlSAX2Characters')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlSAX2IgnorableWhitespace...
+     d                 pr                  extproc('xmlSAX2IgnorableWhitespace')
+     d  ctx                            *   value                                void *
+     d  ch                             *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlSAX2ProcessingInstruction...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2ProcessingInstruction')
+     d  ctx                            *   value                                void *
+     d  target                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               const xmlChar *
+
+     d xmlSAX2Comment...
+     d                 pr                  extproc('xmlSAX2Comment')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSAX2CDataBlock...
+     d                 pr                  extproc('xmlSAX2CDataBlock')
+     d  ctx                            *   value                                void *
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSAXDefaultVersion...
+     d                 pr            10i 0 extproc('xmlSAXDefaultVersion')
+     d  version                      10i 0 value
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlSAXVersion   pr            10i 0 extproc('xmlSAXVersion')
+     d  hdlr                               like(xmlSAXHandler)
+     d  version                      10i 0 value
+
+     d xmlSAX2InitDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+     d  warning                      10i 0 value
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d xmlSAX2InitHtmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitHtmlDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+
+     d htmlDefaultSAXHandlerInit...
+     d                 pr                  extproc('htmlDefaultSAXHandlerInit')
+      /endif
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d xmlSAX2InitDocbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                      'xmlSAX2InitDocbDefaultSAXHandler')
+     d  hdlr                               like(xmlSAXHandler)
+
+     d docbDefaultSAXHandlerInit...
+     d                 pr                  extproc('docbDefaultSAXHandlerInit')
+      /endif
+
+     d xmlDefaultSAXHandlerInit...
+     d                 pr                  extproc('xmlDefaultSAXHandlerInit')
+
+      /endif                                                                    XML_SAX2_H__
diff --git a/os400/libxmlrpg/c14n.rpgle b/os400/libxmlrpg/c14n.rpgle
new file mode 100644 (file)
index 0000000..b64efb2
--- /dev/null
@@ -0,0 +1,119 @@
+      * Summary: Provide Canonical XML and Exclusive XML Canonicalization
+      * Description: the c14n modules provides a
+      *
+      * "Canonical XML" implementation
+      * http://www.w3.org/TR/xml-c14n
+      *
+      * and an
+      *
+      * "Exclusive XML Canonicalization" implementation
+      * http://www.w3.org/TR/xml-exc-c14n
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_C14N_H__)
+      /define XML_C14N_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_C14N_ENABLED)
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xpath"
+
+      * XML Canonicazation
+      * http://www.w3.org/TR/xml-c14n
+      *
+      * Exclusive XML Canonicazation
+      * http://www.w3.org/TR/xml-exc-c14n
+      *
+      * Canonical form of an XML document could be created if and only if
+      *  a) default attributes (if any) are added to all nodes
+      *  b) all character and parsed entity references are resolved
+      * In order to achive this in libxml2 the document MUST be loaded with
+      * following global setings:
+      *
+      *    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS ã XML_COMPLETE_ATTRS;
+      *    xmlSubstituteEntitiesDefault(1);
+      *
+      * or corresponding parser context setting:
+      *    xmlParserCtxtPtr ctxt;
+      *
+      *    ...
+      *    ctxt->loadsubset = XML_DETECT_IDS ã XML_COMPLETE_ATTRS;
+      *    ctxt->replaceEntities = 1;
+      *    ...
+
+      * xmlC14NMode:
+      *
+      * Predefined values for C14N modes
+
+     d xmlBufferAllocationScheme...
+     d xmlC14NMode     s             10i 0 based(######typedef######)           enum
+     d  XML_C14N_1_0   c                   0                                    Original C14N 1.0
+     d  XML_C14N_EXCLUSIVE_1_0...                                               Exclusive C14N 1.0
+     d                 c                   1
+     d  XML_C14N_1_1   c                   2                                    C14N 1.1 spec
+
+     d xmlC14NDocSaveTo...
+     d                 pr            10i 0 extproc('xmlC14NDocSaveTo')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  buf                                value like(xmlOutputBufferPtr)
+
+     d xmlC14NDocDumpMemory...
+     d                 pr            10i 0 extproc('xmlC14NDocDumpMemory')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  doc_txt_ptr                    *                                        xmlChar *(*)
+
+     d xmlC14NDocSave  pr            10i 0 extproc('xmlC14NDocSave')
+     d  doc                                value like(xmlDocPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  compression                  10i 0 value
+
+      * This is the core C14N function
+
+      * xmlC14NIsVisibleCallback:
+      * @user_data: user data
+      * @node: the curent node
+      * @parent: the parent node
+      *
+      * Signature for a C14N callback on visible nodes
+      *
+      * Returns 1 if the node should be included
+
+     d xmlC14NIsVisibleCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlC14NExecute  pr            10i 0 extproc('xmlC14NExecute')
+     d  doc                                value like(xmlDocPtr)
+     d  is_visible_callback...
+     d                                     value like(xmlC14NIsVisibleCallback)
+     d  user_data                      *   value                                void *
+     d  mode                         10i 0 value
+     d  inclusive_ns_prefixes...
+     d                                 *                                        xmlChar *(*)
+     d  with_comments                10i 0 value
+     d  buf                                value like(xmlOutputBufferPtr)
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+      /endif                                                                    LIBXML_C14N_ENABLED
+      /endif                                                                    XML_C14N_H__
diff --git a/os400/libxmlrpg/catalog.rpgle b/os400/libxmlrpg/catalog.rpgle
new file mode 100644 (file)
index 0000000..52baf4e
--- /dev/null
@@ -0,0 +1,235 @@
+      * Summary: interfaces to the Catalog handling system
+      * Description: the catalog module implements the support for
+      * XML Catalogs and SGML catalogs
+      *
+      * SGML Open Technical Resolution TR9401:1997.
+      * http://www.jclark.com/sp/catalog.htm
+      *
+      * XML Catalogs Working Draft 06 August 2001
+      * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CATALOG_H__)
+      /define XML_CATALOG_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_CATALOG_ENABLED)
+
+      * XML_CATALOGS_NAMESPACE:
+      *
+      * The namespace for the XML Catalogs elements.
+
+     d XML_CATALOGS_NAMESPACE...
+     d                 c                   'urn:oasis:names:+
+     d                                      tc:entity:xmlns:xml:catalog'
+
+      * XML_CATALOG_PI:
+      *
+      * The specific XML Catalog Processing Instuction name.
+
+     d XML_CATALOG_PI  c                   'oasis-xml-catalog'
+
+      * The API is voluntarily limited to general cataloging.
+
+     d xmlCatalogPrefer...
+     d                 s             10u 0 based(######typedef######)           enum type
+     d XML_CATA_PREFER_NONE...
+     d                 c                   0
+     d XML_CATA_PREFER_PUBLIC...
+     d                 c                   1
+     d XML_CATA_PREFER_SYSTEM...
+     d                 c                   2
+
+     d xmlCatalogAllow...
+     d                 s             10u 0 based(######typedef######)           enum type
+     d XML_CATA_ALLOW_NONE...
+     d                 c                   0
+     d XML_CATA_ALLOW_GLOBAL...
+     d                 c                   1
+     d XML_CATA_ALLOW_DOCUMENT...
+     d                 c                   2
+     d XML_CATA_ALLOW_ALL...
+     d                 c                   3
+
+     d xmlCatalogPtr   s               *   based(######typedef######)
+
+      * Operations on a given catalog.
+
+     d xmlNewCatalog   pr                  extproc('xmlNewCatalog')
+     d                                     like(xmlCatalogPtr)
+     d  sgml                         10i 0 value
+
+     d xmlLoadACatalog...
+     d                 pr                  extproc('xmlLoadACatalog')
+     d                                     like(xmlCatalogPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlLoadSGMLSuperCatalog...
+     d                 pr                  extproc('xmlLoadSGMLSuperCatalog')
+     d                                     like(xmlCatalogPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlConvertSGMLCatalog...
+     d                 pr            10i 0 extproc('xmlConvertSGMLCatalog')
+     d  catal                              value like(xmlCatalogPtr)
+
+     d xmlACatalogAdd  pr            10i 0 extproc('xmlACatalogAdd')
+     d  catal                              value like(xmlCatalogPtr)
+     d  type                           *   value options(*string)               const xmlChar *
+     d  orig                           *   value options(*string)               const xmlChar *
+     d  replace                        *   value options(*string)               const xmlChar *
+
+     d xmlACatalogRemove...
+     d                 pr            10i 0 extproc('xmlACatalogRemove')
+     d  catal                              value like(xmlCatalogPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolve...
+     d                 pr              *   extproc('xmlACatalogResolve')        xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolveSystem...
+     d                 pr              *   extproc('xmlACatalogResolveSystem')  xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolvePublic...
+     d                 pr              *   extproc('xmlACatalogResolvePublic')  xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+     d xmlACatalogResolveURI...
+     d                 pr              *   extproc('xmlACatalogResolveURI')     xmlChar *
+     d  catal                              value like(xmlCatalogPtr)
+     d  URI                            *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlACatalogDump...
+     d                 pr                  extproc('xmlACatalogDump')
+     d  catal                              value like(xmlCatalogPtr)
+     d  out                            *   value                                FILE *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlFreeCatalog  pr                  extproc('xmlFreeCatalog')
+     d  catal                              value like(xmlCatalogPtr)
+
+     d xmlCatalogIsEmpty...
+     d                 pr            10i 0 extproc('xmlCatalogIsEmpty')
+     d  catal                              value like(xmlCatalogPtr)
+
+      * Global operations.
+
+     d xmlInitializeCatalog...
+     d                 pr                  extproc('xmlInitializeCatalog')
+
+     d xmlLoadCatalog  pr            10i 0 extproc('xmlLoadCatalog')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlLoadCatalogs...
+     d                 pr                  extproc('xmlLoadCatalogs')
+     d  paths                          *   value options(*string)               const char *
+
+     d xmlCatalogCleanup...
+     d                 pr                  extproc('xmlCatalogCleanup')
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlCatalogDump  pr                  extproc('xmlCatalogDump')
+     d  out                            *   value                                FILE *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlCatalogResolve...
+     d                 pr              *   extproc('xmlCatalogResolve')         xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolveSystem...
+     d                 pr              *   extproc('xmlCatalogResolveSystem')   xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolvePublic...
+     d                 pr              *   extproc('xmlCatalogResolvePublic')   xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogResolveURI...
+     d                 pr              *   extproc('xmlCatalogResolveURI')      xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+     d xmlCatalogAdd   pr            10i 0 extproc('xmlCatalogAdd')
+     d  type                           *   value options(*string)               const xmlChar *
+     d  orig                           *   value options(*string)               const xmlChar *
+     d  replace                        *   value options(*string)               const xmlChar *
+
+     d xmlCatalogRemove...
+     d                 pr            10i 0 extproc('xmlCatalogRemove')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlParseCatalogFile...
+     d                 pr                  extproc('xmlParseCatalogFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlCatalogConvert...
+     d                 pr            10i 0 extproc('xmlCatalogConvert')
+
+      * Strictly minimal interfaces for per-document catalogs used
+      * by the parser.
+
+     d xmlCatalogFreeLocal...
+     d                 pr                  extproc('xmlCatalogFreeLocal')
+     d  catalogs                       *   value                                void *
+
+     d xmlCatalogAddLocal...
+     d                 pr              *   extproc('xmlCatalogAddLocal')        void *
+     d  catalogs                       *   value                                void *
+     d  URL                            *   value options(*string)               const xmlChar *
+
+     d xmlCatalogLocalResolve...
+     d                 pr              *   extproc('xmlCatalogLocalResolve')    xmlChar *
+     d  catalogs                       *   value                                void *
+     d  pubID                          *   value options(*string)               const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogLocalResolveURI...
+     d                 pr              *   extproc('xmlCatalogLocalResolveURI') xmlChar *
+     d  catalogs                       *   value                                void *
+     d  URI                            *   value options(*string)               const xmlChar *
+
+      * Preference settings.
+
+     d xmlCatalogSetDebug...
+     d                 pr            10i 0 extproc('xmlCatalogSetDebug')
+     d  level                        10i 0 value
+
+     d xmlCatalogSetDefaultPrefer...
+     d                 pr                  extproc('xmlCatalogSetDefaultPrefer')
+     d                                     like(xmlCatalogPrefer)
+     d  prefer                             value like(xmlCatalogPrefer)
+
+     d xmlCatalogSetDefaults...
+     d                 pr                  extproc('xmlCatalogSetDefaults')
+     d  allow                              value like(xmlCatalogAllow)
+
+     d xmlCatalogGetDefaults...
+     d                 pr                  extproc('xmlCatalogGetDefaults')
+     d                                     like(xmlCatalogAllow)
+
+      * DEPRECATED interfaces
+
+     d xmlCatalogGetSystem...
+     d                 pr              *   extproc('xmlCatalogGetSystem')       const xmlChar *
+     d  sysID                          *   value options(*string)               const xmlChar *
+
+     d xmlCatalogGetPublic...
+     d                 pr              *   extproc('xmlCatalogGetPublic')       const xmlChar *
+     d  pubID                          *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_CATALOG_ENBLD
+      /endif                                                                    XML_CATALOG_H__
diff --git a/os400/libxmlrpg/chvalid.rpgle b/os400/libxmlrpg/chvalid.rpgle
new file mode 100644 (file)
index 0000000..33393f6
--- /dev/null
@@ -0,0 +1,97 @@
+      * Summary: Unicode character range checking
+      * Description: this module exports interfaces for the character
+      *               range validation APIs
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CHVALID_H__)
+      /define XML_CHVALID_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+
+      * Define our typedefs and structures
+
+     d xmlChSRangePtr  s               *   based(######typedef######)
+
+     d xmlChSRange     ds                  based(xmlChSRangePtr)
+     d                                     align qualified
+     d  low                           5u 0
+     d  high                          5u 0
+
+     d xmlChLRangePtr  s               *   based(######typedef######)
+
+     d xmlChLRange     ds                  based(xmlChLRangePtr)
+     d                                     align qualified
+     d  low                          10u 0
+     d  high                         10u 0
+
+     d xmlChRangeGroupPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlChRangeGroup...
+     d                 ds                  based(xmlChRangeGroupPtr)
+     d                                     align qualified
+     d  nbShortRange                 10i 0
+     d  nbLongRange                  10i 0
+     d  shortRange                         like(xmlChSRangePtr)
+     d  longRange                          like(xmlChLRangePtr)
+
+      * Range checking routine
+
+     d xmlCharInRange  pr            10i 0 extproc('xmlCharInRange')
+     d val                           10u 0 value
+     d group                               like(xmlChRangeGroupPtr)             const
+
+     d xmlIsBaseCharGroup...
+     d                 ds                  import('xmlIsBaseCharGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsCharGroup...
+     d                 ds                  import('xmlIsCharGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsCombiningGroup...
+     d                 ds                  import('xmlIsCombiningGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsDigitGroup...
+     d                 ds                  import('xmlIsDigitGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsExtenderGroup...
+     d                 ds                  import('xmlIsExtenderGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsIdeographicGroup...
+     d                 ds                  import('xmlIsIdeographicGroup')
+     d                                     likeds(xmlChRangeGroup)              const
+
+     d xmlIsBaseChar   pr            10i 0 extproc('xmlIsBaseChar')
+     d ch                            10u 0 value
+
+     d xmlIsBlank      pr            10i 0 extproc('xmlIsBlank')
+     d ch                            10u 0 value
+
+     d xmlIsChar       pr            10i 0 extproc('xmlIsChar')
+     d ch                            10u 0 value
+
+     d xmlIsCombining  pr            10i 0 extproc('xmlIsCombining')
+     d ch                            10u 0 value
+
+     d xmlIsDigit      pr            10i 0 extproc('xmlIsDigit')
+     d ch                            10u 0 value
+
+     d xmlIsExtender   pr            10i 0 extproc('xmlIsExtender')
+     d ch                            10u 0 value
+
+     d xmlIsIdeographic...
+     d                 pr            10i 0 extproc('xmlIsIdeographic')
+     d ch                            10u 0 value
+
+     d xmlIsPubidChar  pr            10i 0 extproc('xmlIsPubidChar')
+     d ch                            10u 0 value
+
+      /endif                                                                    XML_CHVALID_H__
diff --git a/os400/libxmlrpg/debugXML.rpgle b/os400/libxmlrpg/debugXML.rpgle
new file mode 100644 (file)
index 0000000..5005a2d
--- /dev/null
@@ -0,0 +1,241 @@
+      * Summary: Tree debugging APIs
+      * Description: Interfaces to a set of routines used for debugging the tree
+      *              produced by the XML parser.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(DEBUG_XML__)
+      /define DEBUG_XML__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_DEBUG_ENABLED)
+
+      /include "libxmlrpg/xpath"
+
+      * The standard Dump routines.
+
+     d xmlDebugDumpString...
+     d                 pr                  extproc('xmlDebugDumpString')
+     d  output                         *   value                                FILE *
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlDebugDumpAttr...
+     d                 pr                  extproc('xmlDebugDumpAttr')
+     d  output                         *   value                                FILE *
+     d  attr                               value like(xmlAttrPtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpAttrList...
+     d                 pr                  extproc('xmlDebugDumpAttrList')
+     d  output                         *   value                                FILE *
+     d  attr                               value like(xmlAttrPtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpOneNode...
+     d                 pr                  extproc('xmlDebugDumpOneNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpNode...
+     d                 pr                  extproc('xmlDebugDumpNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpNodeList...
+     d                 pr                  extproc('xmlDebugDumpNodeList')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+     d  depth                        10i 0 value
+
+     d xmlDebugDumpDocumentHead...
+     d                 pr                  extproc('xmlDebugDumpDocumentHead')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlDebugDumpDocument...
+     d                 pr                  extproc('xmlDebugDumpDocument')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlDebugDumpDTD...
+     d                 pr                  extproc('xmlDebugDumpDTD')
+     d  output                         *   value                                FILE *
+     d  dtd                                value like(xmlDtdPtr)
+
+     d xmlDebugDumpEntities...
+     d                 pr                  extproc('xmlDebugDumpEntities')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+      ****************************************************************
+      *                                                              *
+      *                      Checking routines                       *
+      *                                                              *
+      ****************************************************************
+
+     d xmlDebugCheckDocument...
+     d                 pr            10i 0 extproc('xmlDebugCheckDocument')
+     d  output                         *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+
+      ****************************************************************
+      *                                                              *
+      *                      XML shell helpers                       *
+      *                                                              *
+      ****************************************************************
+
+     d xmlLsOneNode    pr                  extproc('xmlLsOneNode')
+     d  output                         *   value                                FILE *
+     d  node                               value like(xmlNodePtr)
+
+     d xmlLsCountNode  pr            10i 0 extproc('xmlLsCountNode')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlBoolToText   pr              *   extproc('xmlBoolToText')             const char *
+     d  boolval                      10i 0 value
+
+      ****************************************************************
+      *                                                              *
+      *       The XML shell related structures and functions         *
+      *                                                              *
+      ****************************************************************
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      * xmlShellReadlineFunc:
+      * @prompt:  a string prompt
+      *
+      * This is a generic signature for the XML shell input function.
+      *
+      * Returns a string which will be freed by the Shell.
+
+     d xmlShellReadlineFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlShellCtxt:
+      *
+      * A debugging shell context.
+      * TODO: add the defined function tables.
+
+     d xmlShellCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchellCtxt   ds                  based(xmlShellCtxtPtr)
+     d                                     align qualified
+     d  filename                       *                                        char *
+     d  doc                                like(xmlDocPtr)
+     d  node                               like(xmlNodePtr)
+     d  pctxt                              like(xmlXPathContextPtr)
+     d  loaded                       10i 0
+     d  output                         *                                        FILE *
+     d  input                              like(xmlShellReadlineFunc)
+
+      * xmlShellCmd:
+      * @ctxt:  a shell context
+      * @arg:  a string argument
+      * @node:  a first node
+      * @node2:  a second node
+      *
+      * This is a generic signature for the XML shell functions.
+      *
+      * Returns an int, negative returns indicating errors.
+
+     d xmlShellCmd     s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlShellPrintXPathError...
+     d                 pr                  extproc('xmlShellPrintXPathError')
+     d  errorType                    10i 0 value
+     d  arg                            *   value options(*string)               const char *
+
+     d xmlShellPrintXPathResult...
+     d                 pr                  extproc('xmlShellPrintXPathResult')
+     d  list                               value like(xmlXPathObjectPtr)
+
+     d xmlShellList    pr            10i 0 extproc('xmlShellList')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellBase    pr            10i 0 extproc('xmlShellBase')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellDir     pr            10i 0 extproc('xmlShellDir')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellLoad    pr            10i 0 extproc('xmlShellLoad')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlShellPrintNode...
+     d                 pr                  extproc('xmlShellPrintNode')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlShellCat     pr            10i 0 extproc('xmlShellCat')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellWrite   pr            10i 0 extproc('xmlShellWrite')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellSave    pr            10i 0 extproc('xmlShellSave')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  filename                       *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlShellValidate...
+     d                 pr            10i 0 extproc('xmlShellValidate')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  dtd                            *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+     d xmlShellDu      pr            10i 0 extproc('xmlShellDu')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  arg                            *   value options(*string)               char *
+     d  tree                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+     d xmlShellPwd     pr            10i 0 extproc('xmlShellPwd')
+     d  ctxt                               value like(xmlShellCtxtPtr)
+     d  buffer                         *   value options(*string)               char *
+     d  node                               value like(xmlNodePtr)
+     d  node2                              value like(xmlNodePtr)
+
+      * The Shell interface.
+
+     d xmlShell        pr                  extproc('xmlShell')
+     d  doc                                value like(xmlDocPtr)
+     d  filename                       *   value options(*string)               char *
+     d  input                              value like(xmlShellReadlineFunc)
+     d  output                         *   value                                FILE *
+
+      /endif                                                                    LIBXML_XPATH_ENABLED
+      /endif                                                                    LIBXML_DEBUG_ENABLED
+      /endif                                                                    DEBUG_XML__
diff --git a/os400/libxmlrpg/dict.rpgle b/os400/libxmlrpg/dict.rpgle
new file mode 100644 (file)
index 0000000..cd36f50
--- /dev/null
@@ -0,0 +1,78 @@
+      * Summary: string dictionary
+      * Description: dictionary of reusable strings, just used to avoid
+      *         allocation and freeing operations.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_DICT_H__)
+      /define XML_DICT_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * The dictionary.
+
+     d xmlDictPtr      s               *   based(######typedef######)
+
+      * Initializer
+
+     d xmlInitializeDict...
+     d                 pr            10i 0 extproc('xmlInitializeDict')
+
+      * Constructor and destructor.
+
+     d xmlDictCreate   pr                  extproc('xmlDictCreate')
+     d                                     like(xmlDictPtr)
+
+     d xmlDictSetLimit...
+     d                 pr            10u 0 extproc('xmlDictSetLimit')           size_t
+     d  dict                               value like(xmlDictPtr)
+     d  limit                        10u 0 value                                size_t
+
+     d xmlDictGetUsage...
+     d                 pr            10u 0 extproc('xmlDictGetUsage')           size_t
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlDictCreateSub...
+     d                 pr                  extproc('xmlDictCreateSub')
+     d                                     like(xmlDictPtr)
+     d  sub                                value like(xmlDictPtr)
+
+     d xmlDictReference...
+     d                 pr            10i 0 extproc('xmlDictGetReference')
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlDictFree     pr                  extproc('xmlDictFree')
+     d  dict                               value like(xmlDictPtr)
+
+      * Lookup of entry in the dictionary.
+
+     d xmlDictLookup   pr              *   extproc('xmlDictLookup')             const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlDictExists   pr              *   extproc('xmlDictExists')             const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlDictQLookup  pr              *   extproc('xmlDictQLookup')            const xmlChar *
+     d  dict                               value like(xmlDictPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlDictOwns     pr            10i 0 extproc('xmlDictOwns')
+     d  dict                               value like(xmlDictPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlDictSize     pr            10i 0 extproc('xmlDictSize')
+     d  dict                               value like(xmlDictPtr)
+
+      * Cleanup function
+
+     d xmlDictCleanup  pr                  extproc('xmlDictCleanup')
+
+      /endif                                                                    ! XML_DICT_H__
diff --git a/os400/libxmlrpg/encoding.rpgle b/os400/libxmlrpg/encoding.rpgle
new file mode 100644 (file)
index 0000000..80970fb
--- /dev/null
@@ -0,0 +1,274 @@
+      * Summary: interface for the encoding conversion functions
+      * Description: interface for the encoding conversion functions needed for
+      *              XML basic encoding and iconv() support.
+      *
+      * Related specs are
+      * rfc2044        (UTF-8 and UTF-16) F. Yergeau Alis Technologies
+      * [ISO-10646]    UTF-8 and UTF-16 in Annexes
+      * [ISO-8859-1]   ISO Latin-1 characters codes.
+      * [UNICODE]      The Unicode Consortium, "The Unicode Standard --
+      *                Worldwide Character Encoding -- Version 1.0", Addison-
+      *                Wesley, Volume 1, 1991, Volume 2, 1992.  UTF-8 is
+      *                described in Unicode Technical Report #4.
+      * [US-ASCII]     Coded Character Set--7-bit American Standard Code for
+      *                Information Interchange, ANSI X3.4-1986.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_CHAR_ENCODING_H__)
+      /define XML_CHAR_ENCODING_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * xmlCharEncoding:
+      *
+      * Predefined values for some standard encodings.
+      * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
+      * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
+      *
+      * Anything else would have to be translated to UTF8 before being
+      * given to the parser itself. The BOM for UTF16 and the encoding
+      * declaration are looked at and a converter is looked for at that
+      * point. If not found the parser stops here as asked by the XML REC. A
+      * converter can be registered by the user
+      * xmlRegisterCharEncodingHandler but the current form doesn't allow
+      * stateful transcoding (a serious problem agreed !). If iconv has been
+      * found it will be used automatically and allow stateful transcoding,
+      * the simplest is then to be sure to enable iconv and to provide iconv
+      * libs for the encoding support needed.
+      *
+      * Note that the generic "UTF-16" is not a predefined value.  Instead, only
+      * the specific UTF-16LE and UTF-16BE are present.
+
+     d xmlCharEncoding...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_CHAR_ENCODING_ERROR...                                              No encoding detected
+     d                 c                   -1
+     d  XML_CHAR_ENCODING_NONE...                                               No encoding detected
+     d                 c                   0
+     d  XML_CHAR_ENCODING_UTF8...                                               UTF-8
+     d                 c                   1
+     d  XML_CHAR_ENCODING_UTF16LE...                                            UTF-16 little endian
+     d                 c                   2
+     d  XML_CHAR_ENCODING_UTF16BE...                                            UTF-16 big endian
+     d                 c                   3
+     d  XML_CHAR_ENCODING_UCS4LE...                                             UCS-4 little endian
+     d                 c                   4
+     d  XML_CHAR_ENCODING_UCS4BE...                                             UCS-4 big endian
+     d                 c                   5
+     d  XML_CHAR_ENCODING_EBCDIC...                                             EBCDIC uh!
+     d                 c                   6
+     d  XML_CHAR_ENCODING_UCS4_2143...                                          UCS-4 unusual order
+     d                 c                   7
+     d  XML_CHAR_ENCODING_UCS4_3412...                                          UCS-4 unusual order
+     d                 c                   8
+     d  XML_CHAR_ENCODING_UCS2...                                               UCS-2
+     d                 c                   9
+     d  XML_CHAR_ENCODING_8859_1...                                             ISO-8859-1 ISOLatin1
+     d                 c                   10
+     d  XML_CHAR_ENCODING_8859_2...                                             ISO-8859-2 ISOLatin2
+     d                 c                   11
+     d  XML_CHAR_ENCODING_8859_3...                                             ISO-8859-3
+     d                 c                   12
+     d  XML_CHAR_ENCODING_8859_4...                                             ISO-8859-4
+     d                 c                   13
+     d  XML_CHAR_ENCODING_8859_5...                                             ISO-8859-5
+     d                 c                   14
+     d  XML_CHAR_ENCODING_8859_6...                                             ISO-8859-6
+     d                 c                   15
+     d  XML_CHAR_ENCODING_8859_7...                                             ISO-8859-7
+     d                 c                   16
+     d  XML_CHAR_ENCODING_8859_8...                                             ISO-8859-8
+     d                 c                   17
+     d  XML_CHAR_ENCODING_8859_9...                                             ISO-8859-9
+     d                 c                   18
+     d  XML_CHAR_ENCODING_2022_JP...                                            ISO-2022-JP
+     d                 c                   19
+     d  XML_CHAR_ENCODING_SHIFT_JIS...                                          Shift_JIS
+     d                 c                   20
+     d  XML_CHAR_ENCODING_EUC_JP...                                             EUC-JP
+     d                 c                   21
+     d  XML_CHAR_ENCODING_ASCII...                                              Pure ASCII
+     d                 c                   22
+
+      * xmlCharEncodingInputFunc:
+      * @out:  a pointer to an array of bytes to store the UTF-8 result
+      * @outlen:  the length of @out
+      * @in:  a pointer to an array of chars in the original encoding
+      * @inlen:  the length 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 bytes written, -1 if lack of space, or -2
+      *     if the transcoding failed.
+      * The value of @inlen after return is the number of octets consumed
+      *     if the return value is positive, else unpredictiable.
+      * The value of @outlen after return is the number of octets consumed.
+
+     d xmlCharEncodingInputFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlCharEncodingOutputFunc:
+      * @out:  a pointer to an array of bytes to store the result
+      * @outlen:  the length of @out
+      * @in:  a pointer to an array of UTF-8 chars
+      * @inlen:  the length of @in
+      *
+      * Take a block of UTF-8 chars in and try to convert it to another
+      * encoding.
+      * Note: a first call designed to produce heading info is called with
+      * in = NULL. If stateful this should also initialize the encoder state.
+      *
+      * Returns the number of bytes written, -1 if lack of space, or -2
+      *     if the transcoding failed.
+      * The value of @inlen after return is the number of octets consumed
+      *     if the return value is positive, else unpredictiable.
+      * The value of @outlen after return is the number of octets produced.
+
+     d xmlCharEncodingOutputFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Block defining the handlers for non UTF-8 encodings.
+      * If iconv is supported, there are two extra fields.
+
+      /if defined(LIBXML_ICU_ENABLED)
+     d uconv_t         ds                  based(######typedef######)
+     d                                     align qualified
+     d  uconv                          *                                        UConverter *
+     d  utf8                           *                                        UConverter *
+      /endif
+
+     d xmlCharEncodingHandlerPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlCharEncodingHandler...
+     d                 ds                  based(xmlCharEncodingHandlerPtr)
+     d                                     align qualified
+     d  name                           *                                        char *
+     d  input                              like(xmlCharEncodingInputFunc)
+     d  output                             like(xmlCharEncodingOutputFunc)
+      *
+      /if defined(LIBXML_ICONV_ENABLED)
+     d  iconv_in                       *                                        iconv_t
+     d  iconv_out                      *                                        iconv_t
+      /endif                                                                    LIBXML_ICONV_ENABLED
+      *
+      /if defined(LIBXML_ICU_ENABLED)
+     d  uconv_in                       *                                        uconv_t *
+     d  uconv_out                      *                                        uconv_t *
+      /endif                                                                    LIBXML_ICU_ENABLED
+
+      /include "libxmlrpg/tree"
+
+      * Interfaces for encoding handlers.
+
+     d xmlInitCharEncodingHandlers...
+     d                 pr                  extproc(
+     d                                      'xmlInitCharEncodingHandlers')
+
+     d xmlCleanupCharEncodingHandlers...
+     d                 pr                  extproc(
+     d                                      'xmlCleanupCharEncodingHandlers')
+
+     d xmlRegisterCharEncodingHandler...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterCharEncodingHandler')
+     d  handler                            value like(xmlCharEncodingHandlerPtr)
+
+     d xmlGetCharEncodingHandler...
+     d                 pr                  extproc('xmlGetCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlFindCharEncodingHandler...
+     d                 pr                  extproc('xmlFindCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  name                           *   value options(*string)               const char *
+
+     d xmlNewCharEncodingHandler...
+     d                 pr                  extproc('xmlNewCharEncodingHandler')
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  name                           *   value options(*string)               const char *
+     d  input                              value like(xmlCharEncodingInputFunc)
+     d  output                             value like(xmlCharEncodingOutputFunc)
+
+      * Interfaces for encoding names and aliases.
+
+     d xmlAddEncodingAlias...
+     d                 pr            10i 0 extproc('xmlAddEncodingAlias')
+     d  name                           *   value options(*string)               const char *
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlDelEncodingAlias...
+     d                 pr            10i 0 extproc('xmlDelEncodingAlias')
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlGetEncodingAlias...
+     d                 pr              *   extproc('xmlGetEncodingAlias')       const char *
+     d  alias                          *   value options(*string)               const char *
+
+     d xmlCleanupEncodingAliases...
+     d                 pr                  extproc('xmlCleanupEncodingAliases')
+
+     d xmlParseCharEncoding...
+     d                 pr                  extproc('xmlParseCharEncoding')
+     d                                     like(xmlCharEncoding)
+     d  name                           *   value options(*string)               const char *
+
+     d xmlGetCharEncodingName...
+     d                 pr              *   extproc('xmlGetCharEncodingName')    const char *
+     d  enc                                value like(xmlCharEncoding)
+
+      * Interfaces directly used by the parsers.
+
+     d xmlDetectCharEncoding...
+     d                 pr                  extproc('xmlDetectCharEncoding')
+     d                                     like(xmlCharEncoding)
+     d  in                             *   value options(*string)               const unsigned char*
+     d  len                          10i 0 value
+
+     d xmlCharEncOutFunc...
+     d                 pr            10i 0 extproc('xmlCharEncOutFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncInFunc...
+     d                 pr            10i 0 extproc('xmlCharEncInFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncFirstLine...
+     d                 pr            10i 0 extproc('xmlCharEncFirstLine')
+     d  handler                            like(xmlCharEncodingHandler)
+     d  out                                value like(xmlBufferPtr)
+     d  in                                 value like(xmlBufferPtr)
+
+     d xmlCharEncCloseFunc...
+     d                 pr            10i 0 extproc('xmlCharEncCloseFunc')
+     d  handler                            like(xmlCharEncodingHandler)
+
+      * Export a few useful functions
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d UTF8Toisolat1   pr            10i 0 extproc('UTF8Toisolat1')
+     d  out                       65535    options(*varsize)                    unsigned char (*)
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d isolat1ToUTF8   pr            10i 0 extproc('isolat1ToUTF8')
+     d  out                       65535    options(*varsize)                    unsigned char (*)
+     d  outlen                       10i 0
+     d  in                             *   value options(*string)               const unsigned char*
+     d  inlen                        10i 0
+
+      /endif                                                                    XML_CHAR_ENCODING_H
diff --git a/os400/libxmlrpg/entities.rpgle b/os400/libxmlrpg/entities.rpgle
new file mode 100644 (file)
index 0000000..8d97915
--- /dev/null
@@ -0,0 +1,174 @@
+      * Summary: interface for the XML entities handling
+      * Description: this module provides some of the entity API needed
+      *              for the parser and applications.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_ENTITIES_H__)
+      /define XML_ENTITIES_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * The different valid entity types.
+
+     d xmlEntityType   s             10i 0 based(######typedef######)           enum
+     d  XML_INTERNAL_GENERAL_ENTITY...
+     d                 c                   1
+     d  XML_EXTERNAL_GENERAL_PARSED_ENTITY...
+     d                 c                   2
+     d  XML_EXTERNAL_GENERAL_UNPARSED_ENTITY...
+     d                 c                   3
+     d  XML_INTERNAL_PARAMETER_ENTITY...
+     d                 c                   4
+     d  XML_EXTERNAL_PARAMETER_ENTITY...
+     d                 c                   5
+     d  XML_INTERNAL_PREDEFINED_ENTITY...
+     d                 c                   6
+
+      * An unit of storage for an entity, contains the string, the value
+      * and the linkind data needed for the linking in the hash table.
+
+     d xmlEntity       ds                  based(xmlEntityPtr)
+     d                                     align qualified
+     d  #private                       *                                        void *
+     d  type                               like(xmlElementType)                 XML_ENTITY_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     First child link
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     prev sibling link
+     d  doc                                like(xmlDocPtr)                      containing document
+     d  orig                           *                                        xmlChar *
+     d  content                        *                                        xmlChar *
+     d  length                       10i 0                                      content length
+     d  etype                              like(xmlEntityType)                  The entity type
+     d  ExternalID                     *                                        const xmlChar *
+     d  SystemlID                      *                                        const xmlChar *
+     d  nexte                              like(xmlEntityPtr)                   unused
+     d  URI                            *                                        const xmlChar *
+     d  owner                        10i 0                                      Owns children ?
+     d  checked                      10i 0                                      Content checked ?
+
+      * All entities are stored in an hash table.
+      * There is 2 separate hash tables for global and parameter entities.
+
+     d xmlEntitiesTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * External functions:
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlInitializePredefinedEntities...
+     d                 pr                  extproc(
+     d                                      'xmlInitializePredefinedEntities')
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlNewEntity    pr                  extproc('xmlNewEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlAddDocEntity...
+     d                 pr                  extproc('xmlAddDocEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlAddDtdEntity...
+     d                 pr                  extproc('xmlAddDtdEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                         10i 0 value
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlGetPredefinedEntity...
+     d                 pr                  extproc('xmlGetPredefinedEntity')
+     d                                     like(xmlEntityPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDocEntity...
+     d                 pr                  extproc('xmlGetDocEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdEntity...
+     d                 pr                  extproc('xmlGetDtdEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetParameterEntity...
+     d                 pr                  extproc('xmlGetParameterEntity')
+     d                                     like(xmlEntityPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlEncodeEntities...
+     d                 pr              *   extproc('xmlEncodeEntities')         xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlEncodeEntitiesReentrant...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlEncodeEntitiesReentrant')
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+XMLPU
+     d xmlEncodeSpecialChars...
+     d                 pr              *   extproc('xmlSpecialChars')           xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  input                          *   value options(*string)               const xmlChar *
+XMLPU
+     d xmlCreateEntitiesTable...
+     d                 pr                  extproc('xmlCreateEntitiesTable')
+     d                                     like(xmlEntitiesTablePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyEntitiesTable...
+     d                 pr                  extproc('xmlCopyEntitiesTable')
+     d                                     like(xmlEntitiesTablePtr)
+     d  table                              value like(xmlEntitiesTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeEntitiesTable...
+     d                 pr                  extproc('xmlFreeEntitiesTable')
+     d  table                              value like(xmlEntitiesTablePtr)
+XMLPU
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpEntitiesTable...
+     d                 pr                  extproc('xmlDumpEntitiesTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlEntitiesTablePtr)
+XMLPU
+     d xmlDumpEntityDecl...
+     d                 pr                  extproc('xmlDumpEntityDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  ent                                value like(xmlEntityPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlCleanupPredefinedEntities...
+     d                 pr                  extproc(
+XMLPUd                                      'xmlCleanupPredefinedEntities')
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif                                                                    XML_ENTITIES_H__
diff --git a/os400/libxmlrpg/globals.rpgle b/os400/libxmlrpg/globals.rpgle
new file mode 100644 (file)
index 0000000..80dadca
--- /dev/null
@@ -0,0 +1,557 @@
+      * Summary: interface for all global variables of the library
+      * Description: all the global variables and thread handling for
+      *              those variables is handled by this module.
+      *
+      * The bottom of this file is automatically generated by build_glob.py
+      * based on the description file global.data
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_GLOBALS_H)
+      /define XML_GLOBALS_H
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/SAX"
+      /include "libxmlrpg/SAX2"
+      /include "libxmlrpg/xmlmemory"
+
+     d xmlInitGlobals  pr                  extproc('xmlInitGlobals')
+
+     d xmlCleanupGlobals...
+     d                 pr                  extproc('xmlCleanupGlobals')
+
+      * xmlParserInputBufferCreateFilenameFunc:
+      * @URI: the URI to read from
+      * @enc: the requested source encoding
+      *
+      * Signature for the function doing the lookup for a suitable input method
+      * corresponding to an URI.
+      *
+      * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
+      *         method was found.
+
+     d xmlParserInputBufferCreateFilenameFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputBufferCreateFilenameFunc:
+      * @URI: the URI to write to
+      * @enc: the requested target encoding
+      *
+      * Signature for the function doing the lookup for a suitable output method
+      * corresponding to an URI.
+      *
+      * Returns the new xmlOutputBufferPtr in case of success or NULL if no
+      *         method was found.
+
+     d xmlOutputBufferCreateFilenameFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlParserInputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlParserInputBufferCreate+
+     d                                     FilenameDefault')
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+
+     d xmlOutputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlOutputBufferCreate+
+     d                                     FilenameDefault')
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+
+      * xmlRegisterNodeFunc:
+      * @node: the current node
+      *
+      * Signature for the registration callback of a created node
+
+     d xmlRegisterNodeFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlDeregisterNodeFunc:
+      * @node: the current node
+      *
+      * Signature for the deregistration callback of a discarded node
+
+     d xmlDeregisterNodeFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlGlobalStatePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlGlobalState  ds                  based(xmlGlobalStatePtr)
+     d                                     align qualified
+     d  xmlParserVersion...
+     d                                 *                                        const char *
+     d  xmlDefaultSAXLocator...
+     d                                     like(xmlSAXLocator)
+     d  xmlDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  docbDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  htmlDefaultSAXHandler...
+     d                                     like(xmlSAXHandlerV1)
+     d  xmlFree                            like(xmlFreeFunc)
+     d  xmlMalloc                          like(xmlMallocFunc)
+     d  xmlMemStrdup                       like(xmlStrdupFunc)
+     d  xmlRealloc                         like(xmlReallocFunc)
+     d  xmlGenericError...
+     d                                     like(xmlGenericErrorFunc)
+     d  xmlStructuredError...
+     d                                     like(xmlStructuredErrorFunc)
+     d  xmlGenericErrorContext...
+     d                                 *                                        void *
+     d  oldXMLWDcompatibility...
+     d                               10i 0
+     d  xmlBufferAllocScheme...
+     d                                     like(xmlBufferAllocationScheme)
+     d  xmlDefaultBufferSize...
+     d                               10i 0
+     d  xmlSubstituteEntitiesDefaultValue...
+     d                               10i 0
+     d  xmlDoValidityCheckingDefaultValue...
+     d                               10i 0
+     d  xmlGetWarningsDefaultValue...
+     d                               10i 0
+     d  xmlKeepBlanksDefaultValue...
+     d                               10i 0
+     d  xmlLineNumbersDefaultValue...
+     d                               10i 0
+     d  xmlLoadExtDtdDefaultValue...
+     d                               10i 0
+     d  xmlParserDebugEntities...
+     d                               10i 0
+     d  xmlPedanticParserDefaultValue...
+     d                               10i 0
+     d  xmlSaveNoEmptyTags...
+     d                               10i 0
+     d  xmlIndentTreeOutput...
+     d                               10i 0
+     d  xmlTreeIndentString...
+     d                                 *                                        const char *
+     d  xmlRegisterNodeDefaultValue...
+     d                                     like(xmlRegisterNodeFunc)
+     d  xmlDeregisterNodeDefaultValue...
+     d                                     like(xmlDeregisterNodeFunc)
+     d  xmlMallocAtomic...
+     d                                     like(xmlMallocFunc)
+     d  xmlLastError                       like(xmlError)
+     d  xmlParserInputBufferCreateFilenameValue...
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d  xmlOutputBufferCreateFilenameValue...
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d  xmlStructuredErrorContext...
+     d                                 *                                        void *
+
+      /include "libxmlrpg/threads"
+
+     d xmlInitializeGlobalState...
+     d                 pr                  extproc('xmlInitializeGlobalState')
+     d qs                                  value like(xmlGlobalStatePtr)
+
+     d xmlThrDefSetGenericErrorFunc...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefSetGenericErrorFunc')
+     d ctx                             *   value                                void *
+     d handler                             value like(xmlGenericErrorFunc)
+
+     d xmlThrDefSetStructuredErrorFunc...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefSetStructuredErrorFunc')
+     d ctx                             *   value                                void *
+     d handler                             value like(xmlStructuredErrorFunc)
+
+     d xmlRegisterNodeDefault...
+     d                 pr                  extproc('xmlRegisterNodeDefault')
+     d                                     like(xmlRegisterNodeFunc)
+     d func                                value like(xmlRegisterNodeFunc)
+
+     d xmlThrDefRegisterNodeDefault...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefRegisterNodeDefault')
+     d                                     like(xmlRegisterNodeFunc)
+     d func                                value like(xmlRegisterNodeFunc)
+
+     d xmlDeregisterNodeDefault...
+     d                 pr                  extproc('xmlDeregisterNodeDefault')
+     d                                     like(xmlDeregisterNodeFunc)
+     d func                                value like(xmlDeregisterNodeFunc)
+
+     d xmlThrDefDeregisterNodeDefault...
+     d                 pr                  extproc(
+     d                                      'xmlThrDefDeregisterNodeDefault')
+     d                                     like(xmlDeregisterNodeFunc)
+     d func                                value like(xmlDeregisterNodeFunc)
+
+     d xmlThrDefOutputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlThrDefOutputBuffer+
+     d                                     CreateFilenameDefault')
+     d                                     like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlOutputBuffer...
+     d                                     CreateFilenameFunc)
+
+     d xmlThrDefParserInputBufferCreateFilenameDefault...
+     d                 pr                  extproc('xmlThrDefParserInputBuffer+
+     d                                     CreateFilenameDefault')
+     d                                     like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+     d func                                value like(xmlParserInputBuffer...
+     d                                     CreateFilenameFunc)
+
+      /if defined(LIBXML_DOCB_ENABLED)
+     d get_docbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__get_docbDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_docbDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__set_docbDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+      /endif
+
+      /if defined(LIBXML_HTML_ENABLED)
+     d get_htmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__get_htmlDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_htmlDefaultSAXHandler...
+     d                 pr                  extproc(
+     d                                       '__set_htmlDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+      /endif
+
+     d get_xmlLastError...
+     d                 pr                  extproc('__get_xmlLastError')
+     d                                     like(xmlError)
+
+     d set_xmlLastError...
+     d                 pr                  extproc('__set_xmlLastError')
+     d  value                              value like(xmlError)
+
+     d get_oldXMLWDcompatibility...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_oldXMLWDcompatibility')
+
+     d set_oldXMLWDcompatibility...
+     d                 pr                  extproc(
+     d                                       '__set_oldXMLWDcompatibility')
+     d  value                        10i 0 value
+
+     d get_xmlBufferAllocScheme...
+     d                 pr                  extproc('__get_xmlBufferAllocScheme')
+     d                                     like(xmlBufferAllocationScheme)
+
+     d set_xmlBufferAllocScheme...
+     d                 pr                  extproc('__set_xmlBufferAllocScheme')
+     d  value                              value like(xmlBufferAllocationScheme)
+
+     d xmlThrDefBufferAllocScheme...
+     d                 pr                  extproc('xmlThrDefBufferAllocScheme')
+     d                                     like(xmlBufferAllocationScheme)
+     d  v                                  value like(xmlBufferAllocationScheme)
+
+     d get_xmlDefaultBufferSize...
+     d                 pr            10i 0 extproc('__get_xmlDefaultBufferSize')
+
+     d set_xmlDefaultBufferSize...
+     d                 pr                  extproc('__set_xmlDefaultBufferSize')
+     d  value                        10i 0 value
+
+     d xmlThrDefDefaultBufferSize...
+     d                 pr            10i 0 extproc('xmlThrDefDefaultBufferSize')
+     d  v                            10i 0 value
+
+     d get_xmlDefaultSAXHandler...
+     d                 pr                  extproc('__get_xmlDefaultSAXHandler')
+     d                                     like(xmlSAXHandlerV1)
+
+     d set_xmlDefaultSAXHandler...
+     d                 pr                  extproc('__set_xmlDefaultSAXHandler')
+     d  value                              value like(xmlSAXHandlerV1)
+
+     d get_xmlDefaultSAXLocator...
+     d                 pr                  extproc('__get_xmlDefaultSAXLocator')
+     d                                     like(xmlSAXLocator)
+
+     d set_xmlDefaultSAXLocator...
+     d                 pr                  extproc('__set_xmlDefaultSAXLocator')
+     d  value                              value like(xmlSAXLocator)
+
+     d get_xmlDoValidityCheckingDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlDoValidity+
+     d                                       CheckingDefaultValue')
+
+     d set_xmlDoValidityCheckingDefaultValue...
+     d                 pr                  extproc('__set_xmlDoValidity+
+     d                                       CheckingDefaultValue')
+     d  value                        10i 0 value
+    
+     d xmlThrDefDoValidityCheckingDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefDoValidity+
+     d                                       CheckingDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlGenericError...
+     d                 pr                  extproc('__get_xmlGenericError')
+     d                                     like(xmlGenericErrorFunc)
+
+     d set_xmlGenericError...
+     d                 pr                  extproc('__set_xmlGenericError')
+     d  func                               value like(xmlGenericErrorFunc)
+
+     d get_xmlStructuredError...
+     d                 pr                  extproc('__get_xmlStructuredError')
+     d                                     like(xmlStructuredErrorFunc)
+
+     d set_xmlStructuredError...
+     d                 pr                  extproc('__set_xmlStructuredError')
+     d  func                               value like(xmlStructuredErrorFunc)
+
+     d xmlStructuredError...
+     d                 pr                  extproc('__call_xmlStructuredError')
+     d  userData                       *   value options(*string)               void *
+     d  error                              value like(xmlErrorPtr) 
+
+     d get_xmlGenericErrorContext...
+     d                 pr                  extproc(
+     d                                       '__get_xmlGenericErrorContext')
+     d                                 *                                        void *
+
+     d set_xmlGenericErrorContext...
+     d                 pr                  extproc(
+     d                                       '__set_xmlGenericErrorContext')
+     d  value                          *   value options(*string)               void *
+
+     d get_xmlStructuredErrorContext...
+     d                 pr                  extproc(
+     d                                       '__get_xmlStructuredErrorContext')
+     d                                 *                                        void *
+
+     d set_xmlStructuredErrorContext...
+     d                 pr                  extproc(
+     d                                       '__set_xmlStructuredErrorContext')
+     d  value                          *   value options(*string)               void *
+
+     d get_xmlGetWarningsDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlGetWarningsDefaultValue')
+
+     d set_xmlGetWarningsDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlGetWarningsDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefGetWarningsDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefGetWarningsDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlIndentTreeOutput...
+     d                 pr            10i 0 extproc('__get_xmlIndentTreeOutput')
+
+     d set_xmlIndentTreeOutput...
+     d                 pr                   extproc('__set_xmlIndentTreeOutput')
+     d  value                        10i 0 value
+
+     d xmlThrDefIndentTreeOutput...
+     d                 pr            10i 0 extproc('xmlThrDefIndentTreeOutput')
+     d  v                            10i 0 value
+
+     d get_xmlTreeIndentString...
+     d                 pr              *   extproc('__get_xmlTreeIndentString') const char *
+
+     d set_xmlTreeIndentString...
+     d                 pr                  extproc('__set_xmlTreeIndentString')
+     d  value                          *   value options(*string)               const char *
+     d xmlThrDefTreeIndentString...
+     d                 pr              *   extproc('xmlThrDefTreeIndentString') const char *
+     d  v                              *   value options(*string)               const char *
+
+     d get_xmlKeepBlanksDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlKeepBlanksDefaultValue') 
+
+     d set_xmlKeepBlanksDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlKeepBlanksDefaultValue') 
+     d  value                        10i 0 value
+
+     d xmlThrDefKeepBlanksDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefKeepBlanksDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlLineNumbersDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlLineNumbersDefaultValue')
+
+     d set_xmlLineNumbersDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlLineNumbersDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefLineNumbersDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefLineNumbersDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlLoadExtDtdDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlLoadExtDtdDefaultValue')
+
+     d set_xmlLoadExtDtdDefaultValue...
+     d                 pr                  extproc(
+     d                                       '__set_xmlLoadExtDtdDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefLoadExtDtdDefaultValue...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefLoadExtDtdDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlParserDebugEntities...
+     d                 pr            10i 0 extproc(
+     d                                       '__get_xmlParserDebugEntities')
+
+     d set_xmlParserDebugEntities...
+     d                 pr                  extproc(
+     d                                       '__set_xmlParserDebugEntities')
+     d  value                        10i 0 value
+
+     d xmlThrDefParserDebugEntities...
+     d                 pr            10i 0 extproc(
+     d                                       'xmlThrDefParserDebugEntities')
+     d  v                            10i 0 value
+
+     d get_xmlParserVersion...
+     d                 pr              *   extproc('__get_xmlParserVersion')    const char *
+
+     d set_xmlParserVersion...
+     d                 pr                  extproc('__set_xmlParserVersion')
+     d  value                          *   value options(*string)               const char *
+
+     d get_xmlPedanticParserDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlPedantic+
+     d                                       ParserDefaultValue')
+
+     d set_xmlPedanticParserDefaultValue...
+     d                 pr                  extproc('__set_xmlPedantic+
+     d                                       ParserDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefPedanticParserDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefPedantic+
+     d                                       ParserDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlSaveNoEmptyTags...
+     d                 pr            10i 0 extproc('__get_xmlSaveNoEmptyTags')
+
+     d set_xmlSaveNoEmptyTags...
+     d                 pr                  extproc('__set_xmlSaveNoEmptyTags')
+     d  value                        10i 0 value
+
+     d xmlThrDefSaveNoEmptyTags...
+     d                 pr            10i 0 extproc('xmlThrDefSaveNoEmptyTags')
+     d  v                            10i 0 value
+
+     d get_xmlSubstituteEntitiesDefaultValue...
+     d                 pr            10i 0 extproc('__get_xmlSubstitute+
+     d                                       EntitiesDefaultValue')
+
+     d set_xmlSubstituteEntitiesDefaultValue...
+     d                 pr                  extproc('__set_xmlSubstitute+
+     d                                       EntitiesDefaultValue')
+     d  value                        10i 0 value
+
+     d xmlThrDefSubstituteEntitiesDefaultValue...
+     d                 pr            10i 0 extproc('xmlThrDefSubstitute+
+     d                                       EntitiesDefaultValue')
+     d  v                            10i 0 value
+
+     d get_xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__get_xmlRegisterNode+
+     d                                       DefaultValue')
+     d                                     like(xmlRegisterNodeFunc)
+
+     d set_xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__set_xmlRegisterNode+
+     d                                       DefaultValue')
+     d  value                              value like(xmlRegisterNodeFunc)
+
+     d xmlRegisterNodeDefaultValue...
+     d                 pr                  extproc('__call_xmlRegisterNode+
+     d                                       DefaultValue')
+     d  node                               value like(xmlNodePtr)
+
+     d get_xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__get_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d                                     like(xmlDeregisterNodeFunc)
+
+     d set_xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__set_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d  value                              value like(xmlDeregisterNodeFunc)
+
+     d xmlDeregisterNodeDefaultValue...
+     d                 pr                  extproc('__call_xmlDeregisterNode+
+     d                                       DefaultValue')
+     d  node                               value like(xmlNodePtr)
+
+     d get_xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__get_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlParserInputBuffer...
+     d                                       CreateFilenameFunc)
+
+     d set_xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__set_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d  value                              value like(xmlParserInputBuffer...
+     d                                       CreateFilenameFunc)
+
+     d xmlParserInputBufferCreateFilenameValue...
+     d                 pr                  extproc('__call_xmlParserInputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d get_xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__get_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(
+     d                                       xmlOutputBufferCreateFilenameFunc)
+
+     d set_xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__set_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d  value                              value like(
+     d                                       xmlOutputBufferCreateFilenameFunc)
+
+     d xmlOutputBufferCreateFilenameValue...
+     d                 pr                  extproc('__call_xmlOutputBuffer+
+     d                                       CreateFilenameValue')
+     d                                     like(xmlOutputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  encoder                            value like(xmlCharEncodingHandlerPtr)
+     d  compression                  10i 0 value
+
+      /endif                                                                    XML_GLOBALS_H
diff --git a/os400/libxmlrpg/hash.rpgle b/os400/libxmlrpg/hash.rpgle
new file mode 100644 (file)
index 0000000..867f98f
--- /dev/null
@@ -0,0 +1,231 @@
+      * Summary: Chained hash tables
+      * Description: This module implements the hash table support used in
+      *              various places in the library.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_HASH_H__)
+      /define XML_HASH_H__
+
+      * The hash table.
+
+     d xmlHashTablePtr...
+     d                 s               *   based(######typedef######)
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/dict"
+
+      * function types:
+
+      * xmlHashDeallocator:
+      * @payload:  the data in the hash
+      * @name:  the name associated
+      *
+      * Callback to free data from a hash.
+
+     d xmlHashDeallocator...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashCopier:
+      * @payload:  the data in the hash
+      * @name:  the name associated
+      *
+      * Callback to copy data from a hash.
+      *
+      * Returns a copy of the data or NULL in case of error.
+
+     d xmlHashCopier   s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashScanner:
+      * @payload:  the data in the hash
+      * @data:  extra scannner data
+      * @name:  the name associated
+      *
+      * Callback when scanning data in a hash with the simple scanner.
+
+     d xmlHashScanner  s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlHashScannerFull:
+      * @payload:  the data in the hash
+      * @data:  extra scannner data
+      * @name:  the name associated
+      * @name2:  the second name associated
+      * @name3:  the third name associated
+      *
+      * Callback when scanning data in a hash with the full scanner.
+
+     d xmlHashScannerFull...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Constructor and destructor.
+
+     d xmlHashCreate   pr                  extproc('xmlHashCreate')
+     d                                     like(xmlHashTablePtr)
+     d  size                         10i 0 value
+
+     d xmlHashCreateDict...
+     d                 pr                  extproc('xmlHashCreateDict')
+     d                                     like(xmlHashTablePtr)
+     d  size                         10i 0 value
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlHashFree     pr                  extproc('xmlHashFree')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Add a new entry to the hash table.
+
+     d xmlHashAddEntry...
+     d                 pr            10i 0 extproc('xmlHashAddEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashAddEntry2...
+     d                 pr            10i 0 extproc('xmlHashAddEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry2...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashAddEntry3...
+     d                 pr            10i 0 extproc('xmlHashAddEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+
+     d xmlHashUpdateEntry3...
+     d                 pr            10i 0 extproc('xmlHashUpdateEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  userdata                       *   value options(*string)               void *
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Remove an entry from the hash table.
+
+     d xmlHashRemoveEntry...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashRemoveEntry2...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry2')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+     d xmlHashRemoveEntry3...
+     d                 pr            10i 0 extproc('xmlHashRemoveEntry3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashDeallocator)
+
+      * Retrieve the userdata.
+
+     d xmlHashLookup   pr              *   extproc('xmlHashLookup')             void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHashLookup2  pr              *   extproc('xmlHashLookup2')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+
+     d xmlHashLookup3  pr              *   extproc('xmlHashLookup3')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup  pr              *   extproc('xmlHashQLookup')            void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup2...
+     d                 pr              *   extproc('xmlHashQLookup2')           void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  prefix2                        *   value options(*string)               const xmlChar *
+
+     d xmlHashQLookup3...
+     d                 pr              *   extproc('xmlHashQLookup3')           void *
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  prefix2                        *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  prefix3                        *   value options(*string)               const xmlChar *
+
+      * Helpers.
+
+     d xmlHashCopy     pr                  extproc('xmlHashCopy')
+     d                                     like(xmlHashTablePtr)
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashCopier)
+
+     d xmlHashSize     pr            10i 0 extproc('xmlHashSize')
+     d  table                              value like(xmlHashTablePtr)
+
+     d xmlHashScan     pr                  extproc('xmlHashScan')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashScanner)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScan3    pr                  extproc('xmlHashScan3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashScanner)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScanFull...
+     d                 pr                  extproc('xmlHashScanFull')
+     d  table                              value like(xmlHashTablePtr)
+     d  f                                  value like(xmlHashScannerFull)
+     d  data                           *   value options(*string)               void *
+
+     d xmlHashScanFull3...
+     d                 pr                  extproc('xmlHashScanFull3')
+     d  table                              value like(xmlHashTablePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  name2                          *   value options(*string)               const xmlChar *
+     d  name3                          *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlHashScannerFull)
+     d  data                           *   value options(*string)               void *
+
+      /endif                                                                    XML_HASH_H__
diff --git a/os400/libxmlrpg/list.rpgle b/os400/libxmlrpg/list.rpgle
new file mode 100644 (file)
index 0000000..c62fcbd
--- /dev/null
@@ -0,0 +1,168 @@
+      * Summary: lists interfaces
+      * Description: this module implement the list support used in
+      * various place in the library.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_LINK_INCLUDE__)
+      /define XML_LINK_INCLUDE__
+
+      /include "libxmlrpg/xmlversion"
+
+     d xmlLinkPtr      s               *   based(######typedef######)
+
+     d xmlListPtr      s               *   based(######typedef######)
+
+      * xmlListDeallocator:
+      * @lk:  the data to deallocate
+      *
+      * Callback function used to free data from a list.
+
+     d xmlListDeallocator...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlListDataCompare:
+      * @data0: the first data
+      * @data1: the second data
+      *
+      * Callback function used to compare 2 data.
+      *
+      * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
+
+     d xmlListDataCompare...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlListWalker:
+      * @data: the data found in the list
+      * @user: extra user provided data to the walker
+      *
+      * Callback function used when walking a list with xmlListWalk().
+      *
+      * Returns 0 to stop walking the list, 1 otherwise.
+
+     d xmlListWalker   s               *   based(######typedef######)
+     d                                     procptr
+
+      * Creation/Deletion
+
+     d xmlListCreate   pr                  extproc('xmlListCreate')
+     d                                     like(xmlListPtr)
+     d  deallocator                        value like(xmlListDeallocator)
+     d  compare                            value like(xmlListDataCompare)
+
+     d xmlListDelete   pr                  extproc('xmlListDelete')
+     d  l                                  value like(xmlListPtr)
+
+      * Basic Operators
+
+     d xmlListSearch   pr              *   extproc('xmlListSearch')             void *
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListReverseSearch...
+     d                 pr              *   extproc('xmlListReverseSearch')      void *
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListInsert   pr            10i 0 extproc('xmlListInsert')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListAppend   pr            10i 0 extproc('xmlListAppend')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveFirst...
+     d                 pr            10i 0 extproc('xmlListRemoveFirst')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveLast...
+     d                 pr            10i 0 extproc('xmlListRemoveLast')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListRemoveAll...
+     d                 pr            10i 0 extproc('xmlListRemoveAll')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListClear    pr                  extproc('xmlListClear')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListEmpty    pr            10i 0 extproc('xmlListEmpty')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListFront    pr                  extproc('xmlListFront')
+     d                                     like(xmlLinkPtr)
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListEnd      pr                  extproc('xmlListEnd')
+     d                                     like(xmlLinkPtr)
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListSize     pr            10i 0 extproc('xmlListSize')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPopFront...
+     d                 pr                  extproc('xmlListPopFront')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPopBack...
+     d                 pr                  extproc('xmlListPopBack')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListPushFront...
+     d                 pr            10i 0 extproc('xmlListPushFront')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+     d xmlListPushBack...
+     d                 pr            10i 0 extproc('xmlListPushBack')
+     d  l                                  value like(xmlListPtr)
+     d  data                           *   value                                void *
+
+      * Advanced Operators
+
+     d xmlListReverse  pr                  extproc('xmlListReverse')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListSort     pr                  extproc('xmlListSort')
+     d  l                                  value like(xmlListPtr)
+
+     d xmlListWalk     pr                  extproc('xmlListWalk')
+     d  l                                  value like(xmlListPtr)
+     d  walker                             value like(xmlListWalker)
+     d  user                           *   value                                const void *
+
+     d xmlListReverseWalk...
+     d                 pr                  extproc('xmlListReverseWalk')
+     d  l                                  value like(xmlListPtr)
+     d  walker                             value like(xmlListWalker)
+     d  user                           *   value                                const void *
+
+     d xmlListMerge    pr                  extproc('xmlListMerge')
+     d  l1                                 value like(xmlListPtr)
+     d  l2                                 value like(xmlListPtr)
+
+     d xmlListDup      pr                  extproc('xmlListDup')
+     d                                     like(xmlListPtr)
+     d  old                                value like(xmlListPtr)
+
+     d xmlListCopy     pr            10i 0 extproc('xmlListCopy')
+     d  cur                                value like(xmlListPtr)
+     d  old                                value like(xmlListPtr)               const
+
+      * Link operators
+
+     d xmlListGetData  pr              *   extproc('xmlListGetData')            void *
+     d  lk                                 value like(xmlLinkPtr)
+
+      * xmlListUnique()
+      * xmlListSwap
+
+      /endif                                                                    XML_LINK_INCLUDE__
diff --git a/os400/libxmlrpg/nanoftp.rpgle b/os400/libxmlrpg/nanoftp.rpgle
new file mode 100644 (file)
index 0000000..0637562
--- /dev/null
@@ -0,0 +1,156 @@
+      * Summary: minimal FTP implementation
+      * Description: minimal FTP implementation allowing to fetch resources
+      *              like external subset.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(NANO_FTP_H__)
+      /define NANO_FTP_H__
+
+      /include /libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_FTP_ENABLED)
+
+     d INVALID_SOCKET  c                   -1
+
+      * ftpListCallback:
+      * @userData:  user provided data for the callback
+      * @filename:  the file name (including "->" when links are shown)
+      * @attrib:  the attribute string
+      * @owner:  the owner string
+      * @group:  the group string
+      * @size:  the file size
+      * @links:  the link count
+      * @year:  the year
+      * @month:  the month
+      * @day:  the day
+      * @hour:  the hour
+      * @minute:  the minute
+      *
+      * A callback for the xmlNanoFTPList command.
+      * Note that only one of year and day:minute are specified.
+
+     d ftpListCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * ftpDataCallback:
+      * @userData: the user provided context
+      * @data: the data received
+      * @len: its size in bytes
+      *
+      * A callback for the xmlNanoFTPGet command.
+
+     d ftpDataCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Init
+
+     d xmlNanoFTPInit  pr                  extproc('xmlNanoFTPInit')
+
+     d xmlNanoFTPCleanup...
+     d                 pr                  extproc('xmlNanoFTPCleanup')
+
+      * Creating/freeing contexts.
+
+     d xmlNanoFTPNewCtxt...
+     d                 pr              *   extproc('xmlNanoFTPNewCtxt')         void *
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPFreeCtxt...
+     d                 pr                  extproc('xmlNanoFTPFreeCtxt')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPConnectTo...
+     d                 pr              *   extproc('xmlNanoFTPConnectTo')       void *
+     d  server                         *   value options(*string)               const char *
+     d  port                         10i 0 value
+
+      * Opening/closing session connections.
+
+     d xmlNanoFTPOpen  pr              *   extproc('xmlNanoFTPOpen')            void *
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPConnect...
+     d                 pr            10i 0 extproc('xmlNanoFTPConnect')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPClose...
+     d                 pr            10i 0 extproc('xmlNanoFTPClose')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPQuit  pr            10i 0 extproc('xmlNanoFTPQuit')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPScanProxy...
+     d                 pr                  extproc('xmlNanoFTPScanProxy')
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoFTPProxy...
+     d                 pr                  extproc('xmlNanoFTPProxy')
+     d  host                           *   value options(*string)               const char *
+     d  port                         10i 0 value
+     d  user                           *   value options(*string)               const char *
+     d  passwd                         *   value options(*string)               const char *
+     d  type                         10i 0 value
+
+     d xmlNanoFTPUpdateURL...
+     d                 pr            10i 0 extproc('xmlNanoFTPUpdateURL')
+     d  ctx                            *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+
+      * Rather internal commands.
+
+     d xmlNanoFTPGetResponse...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetResponse')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPCheckResponse...
+     d                 pr            10i 0 extproc('xmlNanoFTPCheckResponse')
+     d  ctx                            *   value                                void *
+
+      * CD/DIR/GET handlers.
+
+     d xmlNanoFTPCwd   pr            10i 0 extproc('xmlNanoFTPCwd')
+     d  ctx                            *   value                                void *
+     d  directory                      *   value options(*string)               const char *
+
+     d xmlNanoFTPDele  pr            10i 0 extproc('xmlNanoFTPDele')
+     d  ctx                            *   value                                void *
+     d  file                           *   value options(*string)               const char *
+
+     d xmlNanoFTPGetConnection...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetConnection')   Socket descriptor
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPCloseConnection...
+     d                 pr            10i 0 extproc('xmlNanoFTPCloseConnection')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoFTPList  pr            10i 0 extproc('xmlNanoFTPList')
+     d  ctx                            *   value                                void *
+     d  callback                           value like(ftpListCallback)
+     d  userData                       *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPGetSocket...
+     d                 pr            10i 0 extproc('xmlNanoFTPGetSocket')       Socket descriptor
+     d  ctx                            *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPGet   pr            10i 0 extproc('xmlNanoFTPGet')
+     d  ctx                            *   value                                void *
+     d  callback                           value like(ftpDataCallback)
+     d  userData                       *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoFTPRead  pr            10i 0 extproc('xmlNanoFTPRead')
+     d  ctx                            *   value                                void *
+     d  dest                           *   value                                void *
+     d  len                          10i 0 value
+
+      /endif                                                                    LIBXML_FTP_ENABLED
+      /endif                                                                    NANO_FTP_H__
diff --git a/os400/libxmlrpg/nanohttp.rpgle b/os400/libxmlrpg/nanohttp.rpgle
new file mode 100644 (file)
index 0000000..4a076d2
--- /dev/null
@@ -0,0 +1,103 @@
+      * Summary: minimal HTTP implementation
+      * Description: minimal HTTP implementation allowing to fetch resources
+      *              like external subset.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(NANO_HTTP_H__)
+      /define NANO_HTTP_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_HTTP_ENABLED)
+
+     d xmlNanoHTTPInit...
+     d                 pr                  extproc('xmlNanoHTTPInit')
+
+     d xmlNanoHTTPCleanup...
+     d                 pr                  extproc('xmlNanoHTTPCleanup')
+
+     d xmlNanoHTTPScanProxy...
+     d                 pr                  extproc('xmlNanoHTTPScanProxy')
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlNanoHTTPFetch...
+     d                 pr            10i 0 extproc('xmlNanoHTTPFetch')
+     d  URL                            *   value options(*string)               const char *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlNanoHTTPMethod...
+     d                 pr              *   extproc('xmlNanoHTTPMethod')         void *
+     d  URL                            *   value options(*string)               const char *
+     d  method                         *   value options(*string)               const char *
+     d  input                          *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  headers                        *   value options(*string)               const char *
+     d  ilen                         10i 0 value
+
+     d xmlNanoHTTPMethodRedir...
+     d                 pr              *   extproc('xmlNanoHTTPMethodRedir')    void *
+     d  URL                            *   value options(*string)               const char *
+     d  method                         *   value options(*string)               const char *
+     d  input                          *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  redir                          *   value                                char * *
+     d  headers                        *   value options(*string)               const char *
+     d  ilen                         10i 0 value
+
+     d xmlNanoHTTPOpen...
+     d                 pr              *   extproc('xmlNanoHTTPOpen')           void *
+     d  URL                            *   value options(*string)               const char *
+     d  contentType                    *                                        char *(*)
+
+     d xmlNanoHTTPOpenRedir...
+     d                 pr              *   extproc('xmlNanoHTTPOpenRedir')      void *
+     d  URL                            *   value options(*string)               const char *
+     d  contentType                    *   value                                char * *
+     d  redir                          *   value                                char * *
+
+     d xmlNanoHTTPReturnCode...
+     d                 pr            10i 0 extproc('xmlNanoHTTPReturnCode')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPAuthHeader...
+     d                 pr              *   extproc('xmlNanoHTTPAuthHeader')     const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPRedir...
+     d                 pr              *   extproc('xmlNanoHTTPRedir')          const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPContentLength...
+     d                 pr            10i 0 extproc('xmlNanoHTTPContentLength')
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPEncoding...
+     d                 pr              *   extproc('xmlNanoHTTPEncoding')       const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPMimeType...
+     d                 pr              *   extproc('xmlNanoHTTPMimeType')       const char *
+     d  ctx                            *   value                                void *
+
+     d xmlNanoHTTPRead...
+     d                 pr            10i 0 extproc('xmlNanoHTTPRead')
+     d  ctx                            *   value                                void *
+     d  dest                           *   value                                void *
+     d  len                          10i 0 value
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlNanoHTTPSave...
+     d                 pr            10i 0 extproc('xmlNanoHTTPSave')
+     d  ctxt                           *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlNanoHTTPClose...
+     d                 pr                  extproc('xmlNanoHTTPClose')
+     d  ctx                            *   value                                void *
+
+      /endif                                                                    LIBXML_HTTP_ENABLED
+      /endif                                                                    NANO_HTTP_H__
diff --git a/os400/libxmlrpg/parser.rpgle b/os400/libxmlrpg/parser.rpgle
new file mode 100644 (file)
index 0000000..7f29e31
--- /dev/null
@@ -0,0 +1,1407 @@
+      * Summary: the core parser module
+      * Description: Interfaces, constants and types related to the XML parser
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PARSER_H__)
+      /define XML_PARSER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/valid"
+      /include "libxmlrpg/entities"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/xmlstring"
+
+      * XML_DEFAULT_VERSION:
+      *
+      * The default version of XML used: 1.0
+
+     d XML_DEFAULT_VERSION...
+     d                 c                   '1.0'
+
+      * xmlParserInput:
+      *
+      * An xmlParserInput is an input flow for the XML processor.
+      * Each entity parsed is associated an xmlParserInput (except the
+      * few predefined ones). This is the case both for internal entities
+      * - in which case the flow is already completely in memory - or
+      * external entities - in which case we use the buf structure for
+      * progressive reading and I18N conversions to the internal UTF-8 format.
+
+      * xmlParserInputDeallocate:
+      * @str:  the string to deallocate
+      *
+      * Callback for freeing some parser input allocations.
+
+     d xmlParserInputDeallocate...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Input buffer
+
+     d xmlParserInput  ds                  based(xmlParserInputPtr)
+     d                                     align qualified
+     d  buf                                like(xmlParserInputBufferPtr)        UTF-8 encoded buffer
+     d  filename                       *                                        const char *
+     d  directory                      *                                        const char *
+     d  base                           *                                        const char *
+     d  cur                            *                                        const char *
+     d  end                            *                                        const char *
+     d  length                       10i 0                                      Length if known
+     d  line                         10i 0                                      Current line
+     d  col                          10i 0                                      Current column
+      *
+      * NOTE: consumed is only tested for equality in the parser code,
+      *       so even if there is an overflow this should not give troubles
+      *       for parsing very large instances.
+      *
+     d  consumed                     20u 0                                      # consumed xmlChars
+     d  free                               like(xmlParserInputDeallocate)       base deallocator
+     d  encoding                       *                                        const xmlChar *
+     d  version                        *                                        const xmlChar *
+     d  standalone                   10i 0                                      Standalone entity ?
+     d  id                           10i 0                                      Entity unique ID
+
+      * xmlParserNodeInfo:
+      *
+      * The parser can be asked to collect Node informations, i.e. at what
+      * place in the file they were detected.
+      * NOTE: This is off by default and not very well tested.
+
+     d xmlParserNodeInfoPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserNodeInfo...
+     d                 ds                  based(xmlParserNodeInfoPtr)
+     d                                     align qualified
+     d  node                               like(xmlNodePtr)                     const
+      * Position & line # that text that created the node begins & ends on
+     d  begin_pos                    20u 0
+     d  begin_line                   20u 0
+     d  end_pos                      20u 0
+     d  end_line                     20u 0
+
+     d xmlParserNodeInfoSeqPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserNodeInfoSeq...
+     d                 ds                  based(xmlParserNodeInfoSeqPtr)
+     d                                     align qualified
+     d  maximum                      20u 0
+     d  length                       20u 0
+     d  buffer                             like(xmlParserNodeInfoPtr)
+
+      * xmlParserInputState:
+      *
+      * The parser is now working also as a state based parser.
+      * The recursive one use the state info for entities processing.
+
+     d xmlParserInputState...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_EOF...                                                       Nothing to parse
+     d                 c                   -1
+     d  XML_PARSER_START...                                                     Nothing parsed
+     d                 c                   0
+     d  XML_PARSER_MISC...                                                      Misc* b4 int subset
+     d                 c                   1
+     d  XML_PARSER_PI  c                   2                                    In proc instr
+     d  XML_PARSER_DTD...                                                       In some DTD content
+     d                 c                   3
+     d  XML_PARSER_PROLOG...                                                    Misc* after int sbst
+     d                 c                   4
+     d  XML_PARSER_COMMENT...                                                   Within a comment
+     d                 c                   5
+     d  XML_PARSER_START_TAG...                                                 Within a start tag
+     d                 c                   6
+     d  XML_PARSER_CONTENT...                                                   Within the content
+     d                 c                   7
+     d  XML_PARSER_CDATA_SECTION...                                             Within a CDATA
+     d                 c                   8
+     d  XML_PARSER_END_TAG...                                                   Within a closing tag
+     d                 c                   9
+     d  XML_PARSER_ENTITY_DECL...                                               In an entity decl
+     d                 c                   10
+     d  XML_PARSER_ENTITY_VALUE...                                              In entity decl value
+     d                 c                   11
+     d  XML_PARSER_ATTRIBUTE_VALUE...                                           In attribute value
+     d                 c                   12
+     d  XML_PARSER_SYSTEM_LITERAL...                                            In a SYSTEM value
+     d                 c                   13
+     d  XML_PARSER_EPILOG...                                                    Last end tag Misc*
+     d                 c                   14
+     d  XML_PARSER_IGNORE...                                                    In IGNORED section
+     d                 c                   15
+     d  XML_PARSER_PUBLIC_LITERAL...                                            In a PUBLIC value
+     d                 c                   16
+
+      * XML_DETECT_IDS:
+      *
+      * Bit in the loadsubset context field to tell to do ID/REFs lookups.
+      * Use it to initialize xmlLoadExtDtdDefaultValue.
+
+     d XML_DETECT_IDS  c                   2
+
+      * XML_COMPLETE_ATTRS:
+      *
+      * Bit in the loadsubset context field to tell to do complete the
+      * elements attributes lists with the ones defaulted from the DTDs.
+      * Use it to initialize xmlLoadExtDtdDefaultValue.
+
+     d XML_COMPLETE_ATTRS...
+     d                 c                   4
+
+      * XML_SKIP_IDS:
+      *
+      * Bit in the loadsubset context field to tell to not do ID/REFs
+      *   registration.
+      * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
+
+     d XML_SKIP_IDS    c                   8
+
+      * xmlParserMode:
+      *
+      * A parser can operate in various modes
+
+     d xmlParserMode   s             10i 0 based(######typedef######)           enum
+     d  XML_PARSE_UNKNOWN...
+     d                 c                   0
+     d  XML_PARSE_DOM...
+     d                 c                   1
+     d  XML_PARSE_SAX...
+     d                 c                   2
+     d  XML_PARSE_PUSH_DOM...
+     d                 c                   3
+     d  XML_PARSE_PUSH_SAX...
+     d                 c                   4
+     d  XML_PARSE_READER...
+     d                 c                   5
+
+      * xmlParserCtxt:
+      *
+      * The parser context.
+      * NOTE This doesn't completely define the parser state, the (current ?)
+      *      design of the parser uses recursive function calls since this allow
+      *      and easy mapping from the production rules of the specification
+      *      to the actual code. The drawback is that the actual function call
+      *      also reflect the parser state. However most of the parsing routines
+      *      takes as the only argument the parser context pointer, so migrating
+      *      to a state based parser for progressive parsing shouldn't be too
+      *      hard.
+
+     d xmlParserCtxt   ds                  based(xmlParserCtxtPtr)
+     d                                     align qualified
+     d  sax                                like(xmlSAXHandlerPtr)               The SAX handler
+     d  userData                       *                                        SAX only-4 DOM build
+     d  myDoc                              like(xmlDocPtr)                      Document being built
+     d  wellFormed                   10i 0                                      Well formed doc ?
+     d  replaceEntities...                                                      Replace entities ?
+     d                               10i 0
+     d  version                        *                                        const xmlChar *
+     d  encoding                       *                                        const xmlChar *
+     d  standalone                   10i 0                                      Standalone document
+     d  html                         10i 0                                      HTML state/type
+      *
+      * Input stream stack
+      *
+     d  input                              like(xmlParserInputPtr)              Current input stream
+     d  inputNr                      10i 0                                      # current in streams
+     d  inputMax                     10i 0                                      Max # of in streams
+     d  inputTab                       *                                        xmlParserInputPtr *
+      *
+      * Node analysis stack only used for DOM building
+      *
+     d  node                               like(xmlNodePtr)                     Current parsed node
+     d  nodeNr                       10i 0                                      Parsing stack depth
+     d  nodeMax                      10i 0                                      Max stack depth
+     d  nodeTab                        *                                        xmlNodePtr *
+      *
+     d  record_info                  10i 0                                      Keep node info ?
+     d  node_seq                           like(xmlParserNodeInfoSeq)           Parsed nodes info
+      *
+     d  errNo                        10i 0                                      Error code
+      *
+     d  hasExternalSubset...
+     d                               10i 0
+     d  hashPErefs                   10i 0
+     d  external                     10i 0                                      Parsing ext. entity?
+      *
+     d  valid                        10i 0                                      Valid document ?
+     d  validate                     10i 0                                      Try to validate ?
+     d  vctxt                              like(xmlValidCtxt)                   Validity context
+      *
+     d  instate                            like(xmlParserInputState)            Current input type
+     d  token                        10i 0                                      Next look-ahead char
+      *
+     d  directory                      *                                        char *
+      *
+      * Node name stack
+      *
+     d  name                           *                                        const xmlChar *
+     d  nameNr                       10i 0                                      Parsing stack depth
+     d  nameMax                      10i 0                                      Max stack depth
+     d  nameTab                        *                                        const xmlChar * *
+      *
+     d  nbChars                      20i 0                                      # xmlChars processed
+     d  checkIndex                   20i 0                                      4 progressive parse
+     d  keepBlanks                   10i 0                                      Ugly but ...
+     d  disableSAX                   10i 0                                      Disable SAX cllbacks
+     d  inSubset                     10i 0                                      In int 1/ext 2 sbset
+     d  intSubName                     *                                        const xmlChar *
+     d  extSubURI                      *                                        const xmlChar *
+     d  extSubSytem                    *                                        const xmlChar *
+      *
+      * xml:space values
+      *
+     d  space                          *                                        int *
+     d  spaceNr                      10i 0                                      Parsing stack depth
+     d  spaceMax                     10i 0                                      Max stack depth
+     d  spaceTab                       *                                        int *
+      *
+     d  depth                        10i 0                                      To detect loops
+     d  entity                             like(xmlParserInputPtr)              To check boundaries
+     d  charset                      10i 0                                      In-memory content
+     d  nodelen                      10i 0                                      Speed up parsing
+     d  nodemem                      10i 0                                      Speed up parsing
+     d  pedantic                     10i 0                                      Enb. pedantic warng
+     d  #private                       *                                        void *
+      *
+     d  loadsubset                   10i 0                                      Load ext. subset ?
+     d  linenumbers                  10i 0                                      Set line numbers ?
+     d  catalogs                       *                                        void *
+     d  recovery                     10i 0                                      Run in recovery mode
+     d  progressive                  10i 0                                      Progressive parsing?
+     d  dict                               like(xmlDictPtr)                     Parser dictionary
+     d  atts                           *                                        const xmlChar *
+     d  maxatts                      10i 0                                      Above array size
+     d  docdict                      10i 0                                      Use dictionary ?
+      *
+      * pre-interned strings
+      *
+     d  str_xml                        *                                        const xmlChar *
+     d  str_xmlns                      *                                        const xmlChar *
+     d  str_xml_ms                     *                                        const xmlChar *
+      *
+      * Everything below is used only by the new SAX mode
+      *
+     d  sax2                         10i 0                                      New SAX mode ?
+     d  nsNr                         10i 0                                      # inherited nmspaces
+     d  nsMax                        10i 0                                      Array size
+     d  nsTab                          *                                        const xmlChar *
+     d  attallocs                      *                                        int *
+     d  pushTab                        *                                        void *
+     d  attsDefault                        like(xmlHashTablePtr)                Defaulted attrs
+     d  attsSpecial                        like(xmlHashTablePtr)                non-CDATA attrs
+     d  nsWellFormed                 10i 0                                      Doc namespace OK ?
+     d  options                      10i 0                                      Extra options
+      *
+      * Those fields are needed only for treaming parsing so far
+      *
+     d  dictNames                    10i 0                                      Dict names in tree ?
+     d  freeElemsNr                  10i 0                                      # free element nodes
+     d  freeElems                          like(xmlNodePtr)                     Free elem nodes list
+     d  freeAttrsNr                  10i 0                                      # free attr. nodes
+     d  freeAttrs                          like(xmlAttrPtr)                     Free attr noes list
+      *
+      * the complete error informations for the last error.
+      *
+     d  lastError                          like(xmlError)
+     d  parseMode                          like(xmlParserMode)                  The parser mode
+     d  nbentities                   20u 0                                      # entity references
+     d  sizeentities                 20u 0                                      Parsed entities size
+      *
+      * for use by HTML non-recursive parser
+      *
+     d  nodeInfo                           like(xmlParserNodeInfo)              Current NodeInfo
+     d  nodeInfoNr                   10i 0                                      Parsing stack depth
+     d  nodeInfoMax                  10i 0                                      Max stack depth
+     d  nodeInfoTab                    *                                        xmlParserNodeInfo *
+      *
+     d  input_id                     10i 0                                      Label inputs ?
+     d  sizeentcopy                  20u 0                                      Entity copy volume
+
+      * xmlSAXLocator:
+      *
+      * A SAX Locator.
+
+     d xmlSAXLocator   ds                  based(xmlSAXLocatorPtr)
+     d                                     align qualified
+     d  getPublicId                    *   procptr
+     d  getSystemId                    *   procptr
+     d  getLineNumber                  *   procptr
+     d  getColumnNumber...
+     d                                 *   procptr
+
+      * xmlSAXHandler:
+      *
+      * A SAX handler is bunch of callbacks called by the parser when
+      * processing of the input generate data or structure informations.
+
+      * resolveEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      *
+      * Callback:
+      * The entity loader, to control the loading of external entities,
+      * the application can either:
+      *    - override this resolveEntity() callback in the SAX block
+      *    - or better use the xmlSetExternalEntityLoader() function to
+      *      set up it's own entity resolution routine
+      *
+      * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+
+     d resolveEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * internalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the root element name
+      * @ExternalID:  the external ID
+      * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+      *
+      * Callback on internal subset declaration.
+
+     d internalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * externalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the root element name
+      * @ExternalID:  the external ID
+      * @SystemID:  the SYSTEM ID (e.g. filename or URL)
+      *
+      * Callback on external subset declaration.
+
+     d externalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * getEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The entity name
+      *
+      * Get an entity by name.
+      *
+      * Returns the xmlEntityPtr if found.
+
+     d getEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * getParameterEntitySAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The entity name
+      *
+      * Get a parameter entity by name.
+      *
+      * Returns the xmlEntityPtr if found.
+
+     d getParameterEntitySAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * entityDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the entity name
+      * @type:  the entity type
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      * @content: the entity value (without processing).
+      *
+      * An entity definition has been parsed.
+
+     d entityDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * notationDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The name of the notation
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      *
+      * What to do when a notation declaration has been parsed.
+
+     d notationDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * attributeDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @elem:  the name of the element
+      * @fullname:  the attribute name
+      * @type:  the attribute type
+      * @def:  the type of default value
+      * @defaultValue: the attribute default value
+      * @tree:  the tree of enumerated value set
+      *
+      * An attribute definition has been parsed.
+
+     d attributeDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * elementDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  the element name
+      * @type:  the element type
+      * @content: the element value tree
+      *
+      * An element definition has been parsed.
+
+     d elementDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * unparsedEntityDeclSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name: The name of the entity
+      * @publicId: The public ID of the entity
+      * @systemId: The system ID of the entity
+      * @notationName: the name of the notation
+      *
+      * What to do when an unparsed entity declaration is parsed.
+
+     d unparsedEntityDeclSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * setDocumentLocatorSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @loc: A SAX Locator
+      *
+      * Receive the document locator at startup, actually xmlDefaultSAXLocator.
+      * Everything is available on the context, so this is useless in our case.
+
+     d setDocumentLocatorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * startDocumentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Called when the document start being processed.
+
+     d startDocumentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endDocumentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Called when the document end has been detected.
+
+     d endDocumentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * startElementSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The element name, including namespace prefix
+      * @atts:  An array of name/value attributes pairs, NULL terminated
+      *
+      * Called when an opening tag has been processed.
+
+     d startElementSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endElementSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The element name
+      *
+      * Called when the end of an element has been detected.
+
+     d endElementSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * attributeSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The attribute name, including namespace prefix
+      * @value:  The attribute value
+      *
+      * Handle an attribute that has been read by the parser.
+      * The default handling is to convert the attribute into an
+      * DOM subtree and past it in a new xmlAttr element added to
+      * the element.
+
+     d attributeSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * referenceSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @name:  The entity name
+      *
+      * Called when an entity reference is detected.
+
+     d referenceSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * charactersSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @ch:  a xmlChar string
+      * @len: the number of xmlChar
+      *
+      * Receiving some chars from the parser.
+
+     d charactersSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * ignorableWhitespaceSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @ch:  a xmlChar string
+      * @len: the number of xmlChar
+      *
+      * Receiving some ignorable whitespaces from the parser.
+      * UNUSED: by default the DOM building will use characters.
+
+     d ignorableWhitespaceSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * processingInstructionSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @target:  the target name
+      * @data: the PI data's
+      *
+      * A processing instruction has been parsed.
+
+     d processingInstructionSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * commentSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @value:  the comment content
+      *
+      * A comment has been parsed.
+
+     d commentSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * cdataBlockSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      * @value:  The pcdata content
+      * @len:  the block length
+      *
+      * Called when a pcdata block has been parsed.
+
+     d cdataBlockSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * warningSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format a warning messages, callback.
+
+     d warningSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * errorSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format an error messages, callback.
+
+     d errorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * fatalErrorSAXFunc:
+      * @ctx:  an XML parser context
+      * @msg:  the message to display/transmit
+      * @...:  extra parameters for the message display
+      *
+      * Display and format fatal error messages, callback.
+      * Note: so far fatalError() SAX callbacks are not used, error()
+      *       get all the callbacks for errors.
+
+     d fatalErrorSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * isStandaloneSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Is this document tagged standalone?
+      *
+      * Returns 1 if true
+
+     d isStandaloneSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * hasInternalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Does this document has an internal subset.
+      *
+      * Returns 1 if true
+
+     d hasInternalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * hasExternalSubsetSAXFunc:
+      * @ctx:  the user data (XML parser context)
+      *
+      * Does this document has an external subset?
+      *
+      * Returns 1 if true
+
+     d hasExternalSubsetSAXFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      ************************************************************************
+      *                                                                      *
+      *                      The SAX version 2 API extensions                *
+      *                                                                      *
+      ************************************************************************
+
+      * XML_SAX2_MAGIC:
+      *
+      * Special constant found in SAX2 blocks initialized fields
+
+     d XML_SAX2_MAGIC  c                   X'DEEDBEAF'
+
+      * startElementNsSAX2Func:
+      * @ctx:           the user data (XML parser context)
+      * @localname:     the local name of the element
+      * @prefix:        the element namespace prefix if available
+      * @URI:           the element namespace name if available
+      * @nb_namespaces: number of namespace definitions on that node
+      * @namespaces:    pointer to the array of prefix/URI pairs namespace
+      *                 definitions
+      * @nb_attributes:  the number of attributes on that node
+      * @nb_defaulted:   the number of defaulted attributes. The defaulted
+      *                  ones are at the end of the array
+      * @attributes:     pointer to the array of
+      *                  (localname/prefix/URI/value/end) attribute values.
+      *
+      * SAX2 callback when an element start has been detected by the parser.
+      * It provides the namespace informations for the element, as well as
+      * the new namespace declarations on the element.
+
+     d startElementNsSAX2Func...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * endElementNsSAX2Func:
+      * @ctx:  the user data (XML parser context)
+      * @localname:  the local name of the element
+      * @prefix:  the element namespace prefix if available
+      * @URI:  the element namespace name if available
+      *
+      * SAX2 callback when an element end has been detected by the parser.
+      * It provides the namespace informations for the element.
+
+     d endElementNsSAX2Func...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlSAXHandler   ds                  based(xmlSAXHandlerPtr)
+     d                                     align qualified
+     d  internalSubset...
+     d                                     like(internalSubsetSAXFunc)
+     d  isStandalone                       like(isStandaloneSAXFunc)
+     d  hasInternalSubset...
+     d                                     like(hasInternalSubsetSAXFunc)
+     d  hasExternalSubset...
+     d                                     like(hasExternalSubsetSAXFunc)
+     d  resolveEntity                      like(resolveEntitySAXFunc)
+     d  getEntity                          like(getEntitySAXFunc)
+     d  entityDecl                         like(entityDeclSAXFunc)
+     d  notationDecl                       like(notationDeclSAXFunc)
+     d  attributeDecl                      like(attributeDeclSAXFunc)
+     d  elementDecl                        like(elementDeclSAXFunc)
+     d  unparsedEntityDecl...
+     d                                     like(unparsedEntityDeclSAXFunc)
+     d  setDocumentLocator...
+     d                                     like(setDocumentLocatorSAXFunc)
+     d  startDocument                      like(startDocumentSAXFunc)
+     d  endDocument                        like(endDocumentSAXFunc)
+     d  startElement                       like(startElementSAXFunc)
+     d  endElement                         like(endElementSAXFunc)
+     d  reference                          like(referenceSAXFunc)
+     d  characters                         like(charactersSAXFunc)
+     d  ignorableWhitespace...
+     d                                     like(ignorableWhitespaceSAXFunc)
+     d  processingInstruction...
+     d                                     like(processingInstructionSAXFunc)
+     d  comment                            like(commentSAXFunc)
+     d  warning                            like(warningSAXFunc)
+     d  error                              like(errorSAXFunc)
+     d  fatalError                         like(fatalErrorSAXFunc)
+     d  getParameterEntity...
+     d                                     like(getParameterEntitySAXFunc)
+     d  cdataBlock                         like(cdataBlockSAXFunc)
+     d  externalSubset...
+     d                                     like(externalSubsetSAXFunc)
+     d  initialized                  10u 0
+      *
+      * The following fields are extensions available only on version 2
+      *
+     d  #private                       *                                        void *
+     d  startElementNs...
+     d                                     like(startElementNsSAX2Func)
+     d  endELementNs                       like(endElementNsSAX2Func)
+     d  serror                             like(xmlStructuredErrorFunc)
+
+      * SAX Version 1
+
+     d xmlSAXHandlerV1Ptr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXHandlerV1...
+     d                 ds                  based(xmlSAXHandlerV1Ptr)
+     d                                     align qualified
+     d  internalSubset...
+     d                                     like(internalSubsetSAXFunc)
+     d  isStandalone                       like(isStandaloneSAXFunc)
+     d  hasInternalSubset...
+     d                                     like(hasInternalSubsetSAXFunc)
+     d  hasExternalSubset...
+     d                                     like(hasExternalSubsetSAXFunc)
+     d  resolveEntity                      like(resolveEntitySAXFunc)
+     d  getEntity                          like(getEntitySAXFunc)
+     d  entityDecl                         like(entityDeclSAXFunc)
+     d  notationDecl                       like(notationDeclSAXFunc)
+     d  attributeDecl                      like(attributeDeclSAXFunc)
+     d  elementDecl                        like(elementDeclSAXFunc)
+     d  unparsedEntityDecl...
+     d                                     like(unparsedEntityDeclSAXFunc)
+     d  setDocumentLocator...
+     d                                     like(setDocumentLocatorSAXFunc)
+     d  startDocument                      like(startDocumentSAXFunc)
+     d  endDocument                        like(endDocumentSAXFunc)
+     d  startElement                       like(startElementSAXFunc)
+     d  endElement                         like(endElementSAXFunc)
+     d  reference                          like(referenceSAXFunc)
+     d  characters                         like(charactersSAXFunc)
+     d  ignorableWhitespace...
+     d                                     like(ignorableWhitespaceSAXFunc)
+     d  processingInstruction...
+     d                                     like(processingInstructionSAXFunc)
+     d  comment                            like(commentSAXFunc)
+     d  warning                            like(warningSAXFunc)
+     d  error                              like(errorSAXFunc)
+     d  fatalError                         like(fatalErrorSAXFunc)
+     d  getParameterEntity...
+     d                                     like(getParameterEntitySAXFunc)
+     d  cdataBlock                         like(cdataBlockSAXFunc)
+     d  externalSubset...
+     d                                     like(externalSubsetSAXFunc)
+     d  initialized                  10u 0
+
+      * xmlExternalEntityLoader:
+      * @URL: The System ID of the resource requested
+      * @ID: The Public ID of the resource requested
+      * @context: the XML parser context
+      *
+      * External entity loaders types.
+      *
+      * Returns the entity input parser.
+
+     d xmlExternalEntityLoader...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      /include "libxmlrpg/encoding"
+      /include "libxmlrpg/xmlIO"
+      /include "libxmlrpg/globals"
+
+      * Init/Cleanup
+
+     d xmlInitParser   pr                  extproc('xmlInitParser')
+
+     d xmlCleanupParser...
+     d                 pr                  extproc('xmlCleanupParser')
+
+      * Input functions
+
+     d xmlParserInputRead...
+     d                 pr            10i 0 extproc('xmlParserInputRead')
+     d  in                                 value like(xmlParserInputPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputGrow...
+     d                 pr            10i 0 extproc('xmlParserInputGrow')
+     d  in                                 value like(xmlParserInputPtr)
+     d  len                          10i 0 value
+
+      * Basic parsing Interfaces
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseDoc     pr                  extproc('xmlParseDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlParseFile    pr                  extproc('xmlParseFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseMemory  pr                  extproc('xmlParseMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlSubstituteEntitiesDefault...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlSubstituteEntitiesDefault')
+     d  val                          10i 0 value
+
+     d xmlKeepBlanksDefault...
+     d                 pr            10i 0 extproc('xmlKeepBlanksDefault')
+     d  val                          10i 0 value
+
+     d xmlStopParser   pr                  extproc('xmlStopParser')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlPedanticParserDefault...
+     d                 pr            10i 0 extproc('xmlPedanticParserDefault')
+     d  val                          10i 0 value
+
+     d xmlLineNumbersDefault...
+     d                 pr            10i 0 extproc('xmlLineNumbersDefault')
+     d  val                          10i 0 value
+
+      /if defined(LIBXML_SAX1_ENABLED)
+      * Recovery mode
+
+     d xmlRecoverDoc   pr                  extproc('xmlRecoverDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlRecoverMemory...
+     d                 pr                  extproc('xmlRecoverMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlRecoverFile  pr                  extproc('xmlRecoverFile')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      * Less common routines and SAX interfaces
+
+     d xmlParseDocument...
+     d                 pr            10i 0 extproc('xmlParseDocument')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlParseExtParsedEnt...
+     d                 pr            10i 0 extproc('xmlParseExtParsedEnt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSAXUserParseFile...
+     d                 pr            10i 0 extproc('xmlSAXUserParseFile')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlSAXUserParseMemory...
+     d                 pr            10i 0 extproc('xmlSAXUserParseMemory')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlSAXParseDoc  pr                  extproc('xmlSAXParseDoc')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseMemory...
+     d                 pr                  extproc('xmlSAXParseMemory')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseMemoryWithData...
+     d                 pr                  extproc('xmlSAXParseMemoryWithData')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  recovery                     10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlSAXParseFile...
+     d                 pr                  extproc('xmlSAXParseFile')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  recovery                     10i 0 value
+
+     d xmlSAXParseFileWithData...
+     d                 pr                  extproc('xmlSAXParseFileWithData')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  recovery                     10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlSAXParseEntity...
+     d                 pr                  extproc('xmlSAXParseEntity')
+     d                                     like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseEntity...
+     d                 pr                  extproc('xmlParseEntity')
+     d                                     like(xmlDocPtr)
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlSAXParseDTD  pr                  extproc('xmlSAXParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlParseDTD     pr                  extproc('xmlParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+     d xmlIOParseDTD   pr                  extproc('xmlIOParseDTD')
+     d                                     like(xmlDtdPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseBalancedChunkMemory...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlParseBalancedChunkMemory')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  user_data                      *   value                                void *
+     d  string                         *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseInNodeContext...
+     d                 pr                  extproc('xmlParseInNodeContext')
+     d                                     like(xmlParserErrors)
+     d  node                               value like(xmlNodePtr)
+     d  data                           *   value options(*string)               const char *
+     d  datalen                      10i 0 value
+     d  options                      10i 0 value
+     d  lst                            *   value                                xmlNodePtr *
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseBalancedChunkMemoryRecover...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlParseBalancedChunkMemoryRecover')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  string                         *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+     d  recover                      10i 0 value
+
+     d xmlParseExternalEntity...
+     d                 pr            10i 0 extproc('xmlParseExternalEntity')
+     d  doc                                value like(xmlDocPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  depth                        10i 0 value
+     d  URL                            *   value options(*string)               const xmlChar *
+     d  ID                             *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseCtxtExternalEntity...
+     d                 pr            10i 0 extproc('xmlParseCtxtExternalEntity')
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  URL                            *   value options(*string)               const xmlChar *
+     d  ID                             *   value options(*string)               const xmlChar *
+     d  lst                            *   value                                xmlNodePtr *
+
+      * Parser contexts handling.
+
+     d xmlNewParserCtxt...
+     d                 pr                  extproc('xmlNewParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+
+     d xmlInitParserCtxt...
+     d                 pr            10i 0 extproc('xmlInitParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlClearParserCtxt...
+     d                 pr                  extproc('xmlClearParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlFreeParserCtxt...
+     d                 pr                  extproc('xmlFreeParserCtxt')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlSetupParserForBuffer...
+     d                 pr                  extproc('xmlSetupParserForBuffer')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const xmlChar *
+     d  filename                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlCreateDocParserCtxt...
+     d                 pr                  extproc('xmlCreateDocParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+      * Reading/setting optional parsing features.
+
+     d xmlGetFeaturesList...
+     d                 pr            10i 0 extproc('xmlGetFeaturesList')
+     d  len                          10i 0
+     d  result                         *                                        const char *(*)
+
+     d xmlGetFeature   pr            10i 0 extproc('xmlGetFeature')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *   value                                void *
+
+     d xmlSetFeature   pr            10i 0 extproc('xmlSetFeature')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *   value                                void *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /if defined(LIBXML_PUSH_ENABLED)
+      * Interfaces for the Push mode.
+
+     d xmlCreatePushParserCtxt...
+     d                 pr                  extproc('xmlCreatePushParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlParseChunk   pr            10i 0 extproc('xmlParseChunk')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  terminate                    10i 0 value
+      /endif                                                                    LIBXML_PUSH_ENABLED
+
+      * Special I/O mode.
+
+     d xmlCreateIOParserCtxt...
+     d                 pr                  extproc('xmlCreateIOParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d  sax                                value like(xmlSAXHandlerPtr)
+     d  user_data                      *   value                                void *
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlNewIOInputStream...
+     d                 pr                  extproc('xmlNewIOInputStream')
+     d                                     like(xmlParserInputPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+      * Node infos.
+
+     d xmlParserFindNodeInfo...
+     d                 pr              *   extproc('xmlParserFindNodeInfo')     xmlParserNodeInfo *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  node                               value like(xmlNodePtr)               const
+
+     d xmlInitNodeInfoSeq...
+     d                 pr                  extproc('xmlInitNodeInfoSeq')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+
+     d xmlClearNodeInfoSeq...
+     d                 pr                  extproc('xmlClearNodeInfoSeq')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+
+     d xmlParserFindNodeInfoIndex...
+     d                 pr            20u 0 extproc('xmlParserFindNodeInfoIndex')
+     d  seq                                value like(xmlParserNodeInfoSeqPtr)
+     d  node                               value like(xmlNodePtr)               const
+
+     d xmlParserAddNodeInfo...
+     d                 pr                  extproc('xmlParserAddNodeInfo')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  info                               value like(xmlParserNodeInfoPtr)     const
+
+      * External entities handling actually implemented in xmlIO.
+
+     d xmlSetExternalEntityLoader...
+     d                 pr                  extproc('xmlSetExternalEntityLoader')
+     d  f                                  value like(xmlExternalEntityLoader)
+
+     d xmlGetExternalEntityLoader...
+     d                 pr                  extproc('xmlGetExternalEntityLoader')
+     d                                     like(xmlExternalEntityLoader)
+
+     d xmlLoadExternalEntity...
+     d                 pr                  extproc('xmlLoadExternalEntity')
+     d                                     like(xmlParserInputPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  ID                             *   value options(*string)               const char *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * Index lookup, actually implemented in the encoding module
+
+     d xmlByteConsumed...
+     d                 pr            20i 0 extproc('xmlByteConsumed')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * New set of simpler/more flexible APIs
+
+      * xmlParserOption:
+      *
+      * This is the set of XML parser options that can be passed down
+      * to the xmlReadDoc() and similar calls.
+
+     d xmlParserOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSE_RECOVER...                                                    Recover on errors
+     d                 c                   X'00000001'
+     d  XML_PARSE_NOENT...                                                      Substitute entities
+     d                 c                   X'00000002'
+     d  XML_PARSE_DTDLOAD...                                                    Load external subset
+     d                 c                   X'00000004'
+     d  XML_PARSE_DTDATTR...                                                    Default DTD attrs
+     d                 c                   X'00000008'
+     d  XML_PARSE_DTDVALID...                                                   Validate with DTD
+     d                 c                   X'00000010'
+     d  XML_PARSE_NOERROR...                                                    Suppress err reports
+     d                 c                   X'00000020'
+     d  XML_PARSE_NOWARNING...                                                  Suppr warn reports
+     d                 c                   X'00000040'
+     d  XML_PARSE_PEDANTIC...                                                   Pedantic err report
+     d                 c                   X'00000080'
+     d  XML_PARSE_NOBLANKS...                                                   Remove blank nodes
+     d                 c                   X'00000100'
+     d  XML_PARSE_SAX1...                                                       Use SAX1 internally
+     d                 c                   X'00000200'
+     d  XML_PARSE_XINCLUDE...                                                   Impl XInclude subst
+     d                 c                   X'00000400'
+     d  XML_PARSE_NONET...                                                      Forbid netwrk access
+     d                 c                   X'00000800'
+     d  XML_PARSE_NODICT...                                                     No contxt dict reuse
+     d                 c                   X'00001000'
+     d  XML_PARSE_NSCLEAN...                                                    Rmv redndnt ns decls
+     d                 c                   X'00002000'
+     d  XML_PARSE_NOCDATA...                                                    CDATA as text nodes
+     d                 c                   X'00004000'
+     d  XML_PARSE_NOXINCNODE...                                                 No XINCL START/END
+     d                 c                   X'00008000'
+     d  XML_PARSE_COMPACT...                                                    Compact text nodes
+     d                 c                   X'00010000'
+     d  XML_PARSE_OLD10...                                                      B4 upd5 compatible
+     d                 c                   X'00020000'
+     d  XML_PARSE_NOBASEFIX...                                                  No XINC xml:base fix
+     d                 c                   X'00040000'
+     d  XML_PARSE_HUGE...                                                       No parsing limit
+     d                 c                   X'00080000'
+     d  XML_PARSE_OLDSAX...                                                     Use SAX2 b4 2.7.0
+     d                 c                   X'00100000'
+     d  XML_PARSE_IGNORE_ENC...                                                 No int doc code hint
+     d                 c                   X'00200000'
+     d  XML_PARSE_BIG_LINES...                                                  Big line#-->PSVI fld
+     d                 c                   X'00400000'
+
+     d xmlCtxtReset    pr                  extproc('xmlCtxtReset')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+     d xmlCtxtResetPush...
+     d                 pr            10i 0 extproc('xmlCtxtResetPush')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  chunk                          *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlCtxtUseOptions...
+     d                 pr            10i 0 extproc('xmlCtxtUseOptions')
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlReadDoc      pr                  extproc('xmlReadDoc')
+     d                                     like(xmlDocPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadFile     pr                  extproc('xmlReadFile')
+     d                                     like(xmlDocPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadMemory   pr                  extproc('xmlReadMemory')
+     d                                     like(xmlDocPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadFd       pr                  extproc('xmlReadFd')
+     d                                     like(xmlDocPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReadIO       pr                  extproc('xmlReadIO')
+     d                                     like(xmlDocPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadDoc  pr                  extproc('xmlCtxtReadDoc')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadFile...
+     d                 pr                  extproc('xmlCtxtReadFile')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadMemory...
+     d                 pr                  extproc('xmlCtxtReadMemory')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadFd   pr                  extproc('xmlCtxtReadFd')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlCtxtReadIO   pr                  extproc('xmlCtxtReadIO')
+     d                                     like(xmlDocPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Library wide options
+
+      * xmlFeature:
+      *
+      * Used to examine the existance of features that can be enabled
+      * or disabled at compile-time.
+      * They used to be called XML_FEATURE_xxx but this clashed with Expat
+
+     d xmlFeature      s             10i 0 based(######typedef######)           enum
+     d  XML_WITH_THREAD...
+     d                 c                   1
+     d  XML_WITH_TREE  c                   2
+     d  XML_WITH_OUTPUT...
+     d                 c                   3
+     d  XML_WITH_PUSH  c                   4
+     d  XML_WITH_READER...
+     d                 c                   5
+     d  XML_WITH_PATTERN...
+     d                 c                   6
+     d  XML_WITH_WRITER...
+     d                 c                   7
+     d  XML_WITH_SAX1  c                   8
+     d  XML_WITH_FTP   c                   9
+     d  XML_WITH_HTTP  c                   10
+     d  XML_WITH_VALID...
+     d                 c                   11
+     d  XML_WITH_HTML  c                   12
+     d  XML_WITH_LEGACY...
+     d                 c                   13
+     d  XML_WITH_C14N  c                   14
+     d  XML_WITH_CATALOG...
+     d                 c                   15
+     d  XML_WITH_XPATH...
+     d                 c                   16
+     d  XML_WITH_XPTR  c                   17
+     d  XML_WITH_XINCLUDE...
+     d                 c                   18
+     d  XML_WITH_ICONV...
+     d                 c                   19
+     d  XML_WITH_ISO8859X...
+     d                 c                   20
+     d  XML_WITH_UNICODE...
+     d                 c                   21
+     d  XML_WITH_REGEXP...
+     d                 c                   22
+     d  XML_WITH_AUTOMATA...
+     d                 c                   23
+     d  XML_WITH_EXPR  c                   24
+     d  XML_WITH_SCHEMAS...
+     d                 c                   25
+     d  XML_WITH_SCHEMATRON...
+     d                 c                   26
+     d  XML_WITH_MODULES...
+     d                 c                   27
+     d  XML_WITH_DEBUG...
+     d                 c                   28
+     d  XML_WITH_DEBUG_MEM...
+     d                 c                   29
+     d  XML_WITH_DEBUG_RUN...
+     d                 c                   30
+     d  XML_WITH_ZLIB  c                   31
+     d  XML_WITH_ICU   c                   32
+     d  XML_WITH_LZMA  c                   33
+     d  XML_WITH_NONE  c                   99999
+
+     d xmlHasFeature   pr            10i 0 extproc('xmlHasFeature')
+     d  feature                            value like(xmlFeature)
+
+      /endif                                                                    XML_PARSER_H__
diff --git a/os400/libxmlrpg/parserInternals.rpgle b/os400/libxmlrpg/parserInternals.rpgle
new file mode 100644 (file)
index 0000000..6942b7d
--- /dev/null
@@ -0,0 +1,575 @@
+      * Summary: internals routines and limits exported by the parser.
+      * Description: this module exports a number of internal parsing routines
+      *              they are not really all intended for applications but
+      *              can prove useful doing low level processing.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PARSER_INTERNALS_H__)
+      /define XML_PARSER_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/HTMLparser"
+      /include "libxmlrpg/chvalid"
+
+      * xmlParserMaxDepth:
+      *
+      * arbitrary depth limit for the XML documents that we allow to
+      * process. This is not a limitation of the parser but a safety
+      * boundary feature, use XML_PARSE_HUGE option to override it.
+
+     d xmlParserMaxDepth...
+     d                 s             10u 0 import('xmlParserMaxDepth')
+
+      * XML_MAX_TEXT_LENGTH:
+      *
+      * Maximum size allowed for a single text node when building a tree.
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Introduced in 2.9.0
+
+     d XML_MAX_TEXT_LENGTH...
+     d                 c                   10000000
+
+      * XML_MAX_NAME_LENGTH:
+      *
+      * Maximum size allowed for a markup identitier
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Note that with the use of parsing dictionaries overriding the limit
+      * may result in more runtime memory usage in face of "unfriendly' content
+      * Introduced in 2.9.0
+
+     d XML_MAX_NAME_LENGTH...
+     d                 c                   50000
+
+      * XML_MAX_DICTIONARY_LIMIT:
+      *
+      * Maximum size allowed by the parser for a dictionary by default
+      * This is not a limitation of the parser but a safety boundary feature,
+      * use XML_PARSE_HUGE option to override it.
+      * Introduced in 2.9.0
+
+     d XML_MAX_DICTIONARY_LIMIT...
+     d                 c                   10000000
+
+      * XML_MAX_LOOKUP_LIMIT:
+      *
+      * Maximum size allowed by the parser for ahead lookup
+      * This is an upper boundary enforced by the parser to avoid bad
+      * behaviour on "unfriendly' content
+      * Introduced in 2.9.0
+
+     d XML_MAX_LOOKUP_LIMIT...
+     d                 c                   10000000
+
+      * XML_MAX_NAMELEN:
+      *
+      * Identifiers can be longer, but this will be more costly
+      * at runtime.
+
+     d XML_MAX_NAMELEN...
+     d                 c                   100
+
+      * INPUT_CHUNK:
+      *
+      * The parser tries to always have that amount of input ready.
+      * One of the point is providing context when reporting errors.
+
+     d INPUT_CHUNK     c                   250
+
+      * Global variables used for predefined strings.
+
+     d xmlStringText   s              4    import('xmlStringText')              \0 in 5th byte
+
+     d xmlStringTextNoenc...
+     d                 s              9    import('xmlStringTextNoenc')         \0 in 10th byte
+
+     d xmlStringComment...
+     d                 s              7    import('xmlStringTextComment')       \0 in 8th byte
+
+      * Function to finish the work of the macros where needed.
+
+     d xmlIsLetter     pr            10i 0 extproc('xmlIsLetter')
+     d c                             10i 0 value
+
+      * Parser context.
+
+     d xmlCreateFileParserCtxt...
+     d                 pr                  extproc('xmlCreateFileParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlCreateURLParserCtxt...
+     d                 pr                  extproc('xmlCreateURLParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d options                       10i 0 value
+
+     d xmlCreateMemoryParserCtxt...
+     d                 pr                  extproc('xmlCreateMemoryParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d buffer                          *   value options(*string)               const char *
+     d size                          10i 0 value
+
+     d xmlCreateEntityParserCtxt...
+     d                 pr                  extproc('xmlCreateEntityParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d URL                             *   value options(*string)               const xmlChar *
+     d ID                              *   value options(*string)               const xmlChar *
+     d base                            *   value options(*string)               const xmlChar *
+
+     d xmlSwitchEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d enc                                 value like(xmlCharEncoding)
+
+     d xmlSwitchToEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchToEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d handler                             value like(xmlCharEncodingHandlerPtr)
+
+     d xmlSwitchInputEncoding...
+     d                 pr            10i 0 extproc('xmlSwitchInputEncoding')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d input                               value like(xmlParserInputPtr)
+     d handler                             value like(xmlCharEncodingHandlerPtr)
+
+      * Input Streams.
+
+     d xmlNewStringInputStream...
+     d                 pr                  extproc('xmlNewStringInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d buffer                          *   value options(*string)               const xmlChar *
+
+     d xmlNewEntityInputStream...
+     d                 pr                  extproc('xmlNewEntityInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d entity                              value like(xmlEntityPtr)
+
+     d xmlPushInput    pr            10i 0 extproc('xmlPushInput')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d input                               value like(xmlParserInputPtr)
+
+     d xmlPopInput     pr                  extproc('xmlPopInput')
+     d                                     like(xmlChar)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlFreeInputStream...
+     d                 pr                  extproc('xmlFreeInputStream')
+     d input                               value like(xmlParserInputPtr)
+
+     d xmlNewInputFromFile...
+     d                 pr                  extproc('xmlNewInputFromFile')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlNewInputStream...
+     d                 pr                  extproc('xmlNewInputStream')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+      * Namespaces.
+
+     d xmlSplitQName   pr              *   extproc('xmlSplitQName')             xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d name                            *   value options(*string)               const xmlChar *
+     d prefix                          *                                        xmlChar *(*)
+
+      * Generic production rules.
+
+     d xmlParseName    pr              *   extproc('xmlParseName')              const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNmtoken...
+     d                 pr              *   extproc('xmlParseNmtoken')           xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityValue...
+     d                 pr              *   extproc('xmlParseEntityValue')       xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d orig                            *                                        xmlChar *(*)
+
+     d xmlParseAttValue...
+     d                 pr              *   extproc('xmlParseAttValue')          xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseSystemLiteral...
+     d                 pr              *   extproc('xmlParseSystemLiteral')     xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePubidLiteral...
+     d                 pr              *   extproc('xmlParsePubidLiteral')      xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseCharData...
+     d                 pr                  extproc('xmlParseCharData')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d cdata                         10i 0 value
+
+     d xmlParseExternalID...
+     d                 pr              *   extproc('xmlParseExternalID')        xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d publicID                        *                                        xmlChar *(*)
+     d strict                        10i 0 value
+
+     d xmlParseComment...
+     d                 pr                  extproc('xmlParseComment')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePITarget...
+     d                 pr              *   extproc('xmlParsePITarget')          const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePI      pr                  extproc('xmlParsePI')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNotationDecl...
+     d                 pr                  extproc('xmlParseNotationDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityDecl...
+     d                 pr                  extproc('xmlParseEntityDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseDefaultDecl...
+     d                 pr            10i 0 extproc('xmlParseDefaultDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *                                        xmlChar *(*)
+
+     d xmlParseNotationType...
+     d                 pr                  extproc('xmlParseNotationType')
+     d                                     like(xmlEnumerationPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEnumerationType...
+     d                 pr                  extproc('xmlParseEnumerationType')
+     d                                     like(xmlEnumerationPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEnumeratedType...
+     d                 pr            10i 0 extproc('xmlParseEnumeratedType')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d tree                            *   value                                xmlEnumerationPtr *
+
+     d xmlParseAttributeType...
+     d                 pr            10i 0 extproc('xmlParseAttributeType')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d tree                            *   value                                xmlEnumerationPtr *
+
+     d xmlParseAttributeListDecl...
+     d                 pr                  extproc('xmlParseAttributeListDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseElementMixedContentDecl...
+     d                 pr                  extproc(
+     d                                     'xmlParseElementMixedContentDecl')
+     d                                     like(xmlElementContentPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d inputchk                      10i 0 value
+
+     d xmlParseElementChildrenContentDecl...
+     d                 pr                  extproc(
+     d                                     'xmlParseElementChildrenContentDecl')
+     d                                     like(xmlElementContentPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d inputchk                      10i 0 value
+
+     d xmlParseElementContentDecl...
+     d                 pr            10i 0 extproc('xmlParseElementContentDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d name                            *   value options(*string)               const xmlChar *
+     d result                          *   value                                xmlElementContentPtr
+     d                                                                          *
+
+     d xmlParseElementDecl...
+     d                 pr            10i 0 extproc('xmlParseElementDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseMarkupDecl...
+     d                 pr                  extproc('xmlParseMarkupDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseCharRef...
+     d                 pr            10i 0 extproc('xmlParseCharRef')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEntityRef...
+     d                 pr                  extproc('xmlParseEntityRef')
+     d                                     like(xmlEntityPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseReference...
+     d                 pr                  extproc('xmlParseReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParsePEReference...
+     d                 pr                  extproc('xmlParsePEReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseDocTypeDecl...
+     d                 pr                  extproc('xmlParseDocTypeDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+      /if defined(LIBXML_SAX1_ENABLED)
+     d xmlParseAttribute...
+     d                 pr              *   extproc('xmlParseAttribute')         const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *                                        xmlChar *(*)
+
+     d xmlParseStartTag...
+     d                 pr              *   extproc('xmlParseStartTag')          const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEndTag  pr                  extproc('xmlParseEndTag')
+     d ctxt                                value like(xmlParserCtxtPtr)
+      /endif                                                                    LIBXML_SAX1_ENABLED
+
+     d xmlParseCDSect  pr                  extproc('xmlParseCDSect')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseContent...
+     d                 pr                  extproc('xmlParseContent')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseElement...
+     d                 pr                  extproc('xmlParseElement')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseVersionNum...
+     d                 pr              *   extproc('xmlParseVersionNum')        xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseVersionInfo...
+     d                 pr              *   extproc('xmlParseVersionInfo')       xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEncName...
+     d                 pr              *   extproc('xmlParseEncName')           xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseEncodingDecl...
+     d                 pr              *   extproc('xmlParseEncodingDecl')      const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseSDDecl  pr            10i 0 extproc('xmlParseSDDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseXMLDecl...
+     d                 pr                  extproc('xmlParseXMLDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseTextDecl...
+     d                 pr                  extproc('xmlParseTextDecl')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseMisc    pr                  extproc('xmlParseMisc')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseExternalSubset...
+     d                 pr                  extproc('xmlParseExternalSubset')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d ExternalID                      *   value options(*string)               const xmlChar *
+     d SystemID                        *   value options(*string)               const xmlChar *
+
+      * XML_SUBSTITUTE_NONE:
+      *
+      * If no entities need to be substituted.
+
+     d XML_SUBSTITUTE_NONE...
+     d                 c                   0
+
+      * XML_SUBSTITUTE_REF:
+      *
+      * Whether general entities need to be substituted.
+
+     d XML_SUBSTITUTE_REF...
+     d                 c                   1
+
+      * XML_SUBSTITUTE_PEREF:
+      *
+      * Whether parameter entities need to be substituted.
+
+     d XML_SUBSTITUTE_PEREF...
+     d                 c                   2
+
+      * XML_SUBSTITUTE_BOTH:
+      *
+      * Both general and parameter entities need to be substituted.
+
+     d XML_SUBSTITUTE_BOTH...
+     d                 c                   3
+
+     d xmlStringDecodeEntities...
+     d                 pr              *   extproc('xmlStringDecodeEntities')   xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+     d xmlStringLenDecodeEntities...
+     d                 pr              *   extproc('xmlStringLenDecodeEntities')xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d len                           10i 0 value
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+      * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
+
+     d nodePush        pr            10i 0 extproc('nodePush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                               value like(xmlNodePtr)
+
+     d nodePop         pr                  extproc('nodePop')
+     d                                     like(xmlNodePtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d inputPush       pr            10i 0 extproc('inputPush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                               value like(xmlParserInputPtr)
+
+     d inputPop        pr                  extproc('inputPop')
+     d                                     like(xmlParserInputPtr)
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d namePop         pr              *   extproc('namePop')                   const xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d namePush        pr            10i 0 extproc('namePush')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d value                           *   value options(*string)               const xmlChar *
+
+      * other commodities shared between parser.c and parserInternals.
+
+     d xmlSkipBlankChars...
+     d                 pr            10i 0 extproc('xmlSkipBlankChars')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlStringCurrentChar...
+     d                 pr            10i 0 extproc('xmlStringCurrentChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d cur                             *   value options(*string)               const xmlChar *
+     d len                             *   value                                int *
+
+     d xmlParserHandlePEReference...
+     d                 pr                  extproc('xmlParserHandlePEReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlCheckLanguageID...
+     d                 pr            10i 0 extproc('xmlCheckLanguageID')
+     d lang                            *   value options(*string)               const xmlChar *
+
+      * Really core function shared with HTML parser.
+
+     d xmlCurrentChar  pr            10i 0 extproc('xmlCurrentChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d len                             *   value                                int *
+
+     d xmlCopyCharMultiByte...
+     d                 pr            10i 0 extproc('xmlCopyCharMultiByte')
+     d out                             *   value options(*string)               xmlChar *
+     d val                           10i 0 value
+
+     d xmlCopyChar     pr            10i 0 extproc('xmlCopyChar')
+     d len                           10i 0 value
+     d out                             *   value options(*string)               xmlChar *
+     d val                           10i 0 value
+
+     d xmlNextChar     pr                  extproc('xmlNextChar')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParserInputShrink...
+     d                 pr                  extproc('xmlParserInputShrink')
+     d in                                  value like(xmlParserInputPtr)
+
+      /if defined(LIBXML_HTML_ENABLED)
+
+      * Actually comes from the HTML parser but launched from the init stuff.
+
+     d htmlInitAutoClose...
+     d                 pr                  extproc('htmlInitAutoClose')
+
+     d htmlCreateFileParserCtxt...
+     d                 pr                  extproc('htmlCreateFileParserCtxt')
+     d                                     like(htmlParserCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d encoding                        *   value options(*string)               const char *
+      /endif
+
+      * Specific function to keep track of entities references
+      * and used by the XSLT debugger.
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+      * xmlEntityReferenceFunc:
+      * @ent: the entity
+      * @firstNode:  the fist node in the chunk
+      * @lastNode:  the last nod in the chunk
+      *
+      * Callback function used when one needs to be able to track back the
+      * provenance of a chunk of nodes inherited from an entity replacement.
+
+     d xmlEntityReferenceFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlSetEntityReferenceFunc...
+     d                 pr                  extproc('xmlSetEntityReferenceFunc')
+     d func                                value like(xmlEntityReferenceFunc)
+
+     d xmlParseQuotedString...
+     d                 pr              *   extproc('xmlParseQuotedString')      xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParseNamespace...
+     d                 pr                  extproc('xmlParseNamespace')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseNSDef...
+     d                 pr              *   extproc('xmlNamespaceParseNSDef')    xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlScanName     pr              *   extproc('xmlScanName')               xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseNCName...
+     d                 pr              *   extproc('xmlNamespaceParseNCName')   xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlParserHandleReference...
+     d                 pr                  extproc('xmlParserHandleReference')
+     d ctxt                                value like(xmlParserCtxtPtr)
+
+     d xmlNamespaceParseQName...
+     d                 pr              *   extproc('xmlNamespaceParseQName')    xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d prefix                          *                                        xmlChar *(*)
+
+      * Entities
+
+     d xmlDecodeEntities...
+     d                 pr              *   extproc('xmlDecodeEntities')         xmlChar *
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d len                           10i 0 value
+     d what                          10i 0 value
+     d end                                 value like(xmlChar)
+     d end2                                value like(xmlChar)
+     d end3                                value like(xmlChar)
+
+     d xmlHandleEntity...
+     d                 pr                  extproc('xmlHandleEntity')
+     d ctxt                                value like(xmlParserCtxtPtr)
+     d entity                              value like(xmlEntityPtr)
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+      /endif
diff --git a/os400/libxmlrpg/pattern.rpgle b/os400/libxmlrpg/pattern.rpgle
new file mode 100644 (file)
index 0000000..2e881e5
--- /dev/null
@@ -0,0 +1,117 @@
+      * Summary: pattern expression handling
+      * Description: allows to compile and test pattern expressions for nodes
+      *              either in a tree or based on a parser state.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_PATTERN_H__)
+      /define XML_PATTERN_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+
+      /if defined(LIBXML_PATTERN_ENABLED)
+
+      * xmlPattern:
+      *
+      * A compiled (XPath based) pattern to select nodes
+
+     d xmlPatternPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlPatternFlags:
+      *
+      * This is the set of options affecting the behaviour of pattern
+      * matching with this module
+
+     d xmlPatternFlags...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PATTERN_DEFAULT...                                                  Simple pattern match
+     d                 c                   X'0000'
+     d  XML_PATTERN_XPATH...                                                    Std XPath pattern
+     d                 c                   X'0001'
+     d  XML_PATTERN_XSSEL...                                                    Schm sel XPth subset
+     d                 c                   X'0002'
+     d  XML_PATTERN_XSFIELD...                                                  Schm fld XPth subset
+     d                 c                   X'0004'
+
+     d xmlFreePattern  pr                  extproc('xmlFreePattern')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlFreePatternList...
+     d                 pr                  extproc('xmlFreePatternList')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatterncompile...
+     d                 pr                  extproc('xmlPatterncompile')
+     d                                     like(xmlPatternPtr)
+     d  pattern                        *   value options(*string)               const xmlChar *
+     d  dict                           *   value                                xmlDict *
+     d  flags                        10i 0 value
+     d  namespaces                     *                                        const xmlChar *(*)
+
+     d xmlPatternMatch...
+     d                 pr            10i 0 extproc('xmlPatternMatch')
+     d  comp                               value like(xmlPatternPtr)
+     d  node                               value like(xmlNodePtr)
+
+      * streaming interfaces
+
+     d xmlStreamCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlPatternStreamable...
+     d                 pr            10i 0 extproc('xmlPatternStreamable')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternMaxDepth...
+     d                 pr            10i 0 extproc('xmlPatternMaxDepth')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternMinDepth...
+     d                 pr            10i 0 extproc('xmlPatternMinDepth')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternFromRoot...
+     d                 pr            10i 0 extproc('xmlPatternFromRoot')
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlPatternGetStreamCtxt...
+     d                 pr                  extproc('xmlPatternGetStreamCtxt')
+     d                                     like(xmlStreamCtxtPtr)
+     d  comp                               value like(xmlPatternPtr)
+
+     d xmlFreeStreamCtxt...
+     d                 pr                  extproc('xmlFreeStreamCtxt')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+     d xmlStreamPushNode...
+     d                 pr            10i 0 extproc('xmlStreamPushNode')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+     d  nodeType                     10i 0 value
+
+     d xmlStreamPush   pr            10i 0 extproc('xmlStreamPush')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlStreamPushAttr...
+     d                 pr            10i 0 extproc('xmlStreamPushAttr')
+     d  stream                             value like(xmlStreamCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlStreamPop    pr            10i 0 extproc('xmlStreamPop')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+     d xmlStreamWantsAnyNode...
+     d                 pr            10i 0 extproc('xmlStreamWantsAnyNode')
+     d  stream                             value like(xmlStreamCtxtPtr)
+
+      /endif                                                                    LIBXML_PATTERN_ENBLD
+      /endif                                                                    XML_PATTERN_H__
diff --git a/os400/libxmlrpg/relaxng.rpgle b/os400/libxmlrpg/relaxng.rpgle
new file mode 100644 (file)
index 0000000..af662aa
--- /dev/null
@@ -0,0 +1,297 @@
+      * Summary: implementation of the Relax-NG validation
+      * Description: implementation of the Relax-NG validation
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_RELAX_NG__)
+      /define XML_RELAX_NG__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/xmlstring"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+     d xmlRelaxNGPtr   s               *   based(######typedef######)
+
+      * xmlRelaxNGValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from a Relax-NG validation
+
+     d xmlRelaxNGValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlRelaxNGValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from a Relax-NG validation
+
+     d xmlRelaxNGValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlRelaxNGParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlRelaxNGValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlRelaxNGValidErr:
+      *
+      * List of possible Relax NG validation errors
+
+     d xmlRelaxNGValidErr...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_RELAXNG_OK...
+     d                 c                   0
+     d  XML_RELAXNG_ERR_MEMORY...
+     d                 c                   1
+     d  XML_RELAXNG_ERR_TYPE...
+     d                 c                   2
+     d  XML_RELAXNG_ERR_TYPEVAL...
+     d                 c                   3
+     d  XML_RELAXNG_ERR_DUPID...
+     d                 c                   4
+     d  XML_RELAXNG_ERR_TYPECMP...
+     d                 c                   5
+     d  XML_RELAXNG_ERR_NOSTATE...
+     d                 c                   6
+     d  XML_RELAXNG_ERR_NODEFINE...
+     d                 c                   7
+     d  XML_RELAXNG_ERR_LISTEXTRA...
+     d                 c                   8
+     d  XML_RELAXNG_ERR_LISTEMPTY...
+     d                 c                   9
+     d  XML_RELAXNG_ERR_INTERNODATA...
+     d                 c                   10
+     d  XML_RELAXNG_ERR_INTERSEQ...
+     d                 c                   11
+     d  XML_RELAXNG_ERR_INTEREXTRA...
+     d                 c                   12
+     d  XML_RELAXNG_ERR_ELEMNAME...
+     d                 c                   13
+     d  XML_RELAXNG_ERR_ATTRNAME...
+     d                 c                   14
+     d  XML_RELAXNG_ERR_ELEMNONS...
+     d                 c                   15
+     d  XML_RELAXNG_ERR_ATTRNONS...
+     d                 c                   16
+     d  XML_RELAXNG_ERR_ELEMWRONGNS...
+     d                 c                   17
+     d  XML_RELAXNG_ERR_ATTRWRONGNS...
+     d                 c                   18
+     d  XML_RELAXNG_ERR_ELEMEXTRANS...
+     d                 c                   19
+     d  XML_RELAXNG_ERR_ATTREXTRANS...
+     d                 c                   20
+     d  XML_RELAXNG_ERR_ELEMNOTEMPTY...
+     d                 c                   21
+     d  XML_RELAXNG_ERR_NOELEM...
+     d                 c                   22
+     d  XML_RELAXNG_ERR_NOTELEM...
+     d                 c                   23
+     d  XML_RELAXNG_ERR_ATTRVALID...
+     d                 c                   24
+     d  XML_RELAXNG_ERR_CONTENTVALID...
+     d                 c                   25
+     d  XML_RELAXNG_ERR_EXTRACONTENT...
+     d                 c                   26
+     d  XML_RELAXNG_ERR_INVALIDATTR...
+     d                 c                   27
+     d  XML_RELAXNG_ERR_DATAELEM...
+     d                 c                   28
+     d  XML_RELAXNG_ERR_VALELEM...
+     d                 c                   29
+     d  XML_RELAXNG_ERR_LISTELEM...
+     d                 c                   30
+     d  XML_RELAXNG_ERR_DATATYPE...
+     d                 c                   31
+     d  XML_RELAXNG_ERR_VALUE...
+     d                 c                   32
+     d  XML_RELAXNG_ERR_LIST...
+     d                 c                   33
+     d  XML_RELAXNG_ERR_NOGRAMMAR...
+     d                 c                   34
+     d  XML_RELAXNG_ERR_EXTRADATA...
+     d                 c                   35
+     d  XML_RELAXNG_ERR_LACKDATA...
+     d                 c                   36
+     d  XML_RELAXNG_ERR_INTERNAL...
+     d                 c                   37
+     d  XML_RELAXNG_ERR_ELEMWRONG...
+     d                 c                   38
+     d  XML_RELAXNG_ERR_TEXTWRONG...
+     d                 c                   39
+
+      * xmlRelaxNGParserFlags:
+      *
+      * List of possible Relax NG Parser flags
+
+     d xmlRelaxNGParserFlag...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_RELAXNGP_NONE...
+     d                 c                   0
+     d  XML_RELAXNGP_FREE_DOC...
+     d                 c                   1
+     d  XML_RELAXNGP_CRNG...
+     d                 c                   2
+
+     d xmlRelaxNGInitTypes...
+     d                 pr            10i 0 extproc('xmlRelaxNGInitTypes')
+
+     d xmlRelaxNGCleanupTypes...
+     d                 pr                  extproc('xmlRelaxNGCleanupTypes')
+
+
+      * Interfaces for parsing.
+
+     d xmlRelaxNGNewParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlRelaxNGNewMemParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewMemParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlRelaxNGNewDocParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewDocParserCtxt')
+     d                                     like(xmlRelaxNGParserCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlRelaxParserSetFlag...
+     d                 pr            10i 0 extproc('xmlRelaxParserSetFlag')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  flag                         10i 0 value
+
+     d xmlRelaxNGFreeParserCtxt...
+     d                 pr                  extproc('xmlRelaxNGFreeParserCtxt')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+
+     d xmlRelaxNGSetParserErrors...
+     d                 pr                  extproc('xmlRelaxNGSetParserErrors')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  err                                value
+     d                                     like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               value
+     d                                     like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGGetParserErrors...
+     d                 pr            10i 0 extproc('xmlRelaxNGGetParserErrors')
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  err                                like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlRelaxNGSetParserStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlRelaxNGSetParserStructuredErrors'
+     d                                     )
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGParse...
+     d                 pr                  extproc('xmlRelaxNGParse')
+     d                                     like(xmlRelaxNGPtr)
+     d  ctxt                               value like(xmlRelaxNGParserCtxtPtr)
+
+     d xmlRelaxNGFree  pr                  extproc('xmlRelaxNGFree')
+     d  schema                             value like(xmlRelaxNGPtr)
+
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlRelaxNGDump  pr                  extproc('xmlRelaxNGDump')
+     d  output                         *   value                                FILE *
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlRelaxNGDumpTree...
+     d                 pr                  extproc('xmlRelaxNGDumpTree')
+     d  output                         *   value                                FILE *
+     d  schema                             value like(xmlRelaxNGPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for validating
+
+     d xmlRelaxNGSetValidErrors...
+     d                 pr                  extproc('xmlRelaxNGSetValidErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  err                                value
+     d                                     like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               value
+     d                                     like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGGetValidErrors...
+     d                 pr            10i 0 extproc('xmlRelaxNGGetValidErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  err                                like(xmlRelaxNGValidityErrorFunc)
+     d  warn                               like(xmlRelaxNGValidityWarningFunc)
+     d  ctx                            *   value                                void * *
+
+     d xmlRelaxNGSetValidStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlRelaxNGSetValidStructuredErrors')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlRelaxNGNewValidCtxt...
+     d                 pr                  extproc('xmlRelaxNGNewValidCtxt')
+     d                                     like(xmlRelaxNGValidCtxtPtr)
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlRelaxNGFreeValidCtxt...
+     d                 pr                  extproc('xmlRelaxNGFreeValidCtxt')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+
+     d xmlRelaxNGValidateDoc...
+     d                 pr            10i 0 extproc('xmlRelaxNGValidateDoc')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+      * Interfaces for progressive validation when possible
+
+     d xmlRelaxNGValidatePushElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePushElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlRelaxNGValidatePushCData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePushCData')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  data                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlRelaxNGValidatePopElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidatePopElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlRelaxNGValidateFullElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlRelaxNGValidateFullElement')
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_RELAX_NG__
diff --git a/os400/libxmlrpg/schemasInternals.rpgle b/os400/libxmlrpg/schemasInternals.rpgle
new file mode 100644 (file)
index 0000000..edeea5b
--- /dev/null
@@ -0,0 +1,1137 @@
+      * Summary: internal interfaces for XML Schemas
+      * Description: internal interfaces for the XML Schemas handling
+      *              and schema validity checking
+      *              The Schemas development is a Work In Progress.
+      *              Some of those interfaces are not garanteed to be API or
+      *                ABI stable !
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_INTERNALS_H__)
+      /define XML_SCHEMA_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+      /include "libxmlrpg/xmlregexp"
+      /include "libxmlrpg/hash"
+      /include "libxmlrpg/dict"
+
+     d xmlSchemaValType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMAS_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMAS_STRING...
+     d                 c                   1
+     d  XML_SCHEMAS_NORMSTRING...
+     d                 c                   2
+     d  XML_SCHEMAS_DECIMAL...
+     d                 c                   3
+     d  XML_SCHEMAS_TIME...
+     d                 c                   4
+     d  XML_SCHEMAS_GDAY...
+     d                 c                   5
+     d  XML_SCHEMAS_GMONTH...
+     d                 c                   6
+     d  XML_SCHEMAS_GMONTHDAY...
+     d                 c                   7
+     d  XML_SCHEMAS_GYEAR...
+     d                 c                   8
+     d  XML_SCHEMAS_GYEARMONTH...
+     d                 c                   9
+     d  XML_SCHEMAS_DATE...
+     d                 c                   10
+     d  XML_SCHEMAS_DATETIME...
+     d                 c                   11
+     d  XML_SCHEMAS_DURATION...
+     d                 c                   12
+     d  XML_SCHEMAS_FLOAT...
+     d                 c                   13
+     d  XML_SCHEMAS_DOUBLE...
+     d                 c                   14
+     d  XML_SCHEMAS_BOOLEAN...
+     d                 c                   15
+     d  XML_SCHEMAS_TOKEN...
+     d                 c                   16
+     d  XML_SCHEMAS_LANGUAGE...
+     d                 c                   17
+     d  XML_SCHEMAS_NMTOKEN...
+     d                 c                   18
+     d  XML_SCHEMAS_NMTOKENS...
+     d                 c                   19
+     d  XML_SCHEMAS_NAME...
+     d                 c                   20
+     d  XML_SCHEMAS_QNAME...
+     d                 c                   21
+     d  XML_SCHEMAS_NCNAME...
+     d                 c                   22
+     d  XML_SCHEMAS_ID...
+     d                 c                   23
+     d  XML_SCHEMAS_IDREF...
+     d                 c                   24
+     d  XML_SCHEMAS_IDREFS...
+     d                 c                   25
+     d  XML_SCHEMAS_ENTITY...
+     d                 c                   26
+     d  XML_SCHEMAS_ENTITIES...
+     d                 c                   27
+     d  XML_SCHEMAS_NOTATION...
+     d                 c                   28
+     d  XML_SCHEMAS_ANYURI...
+     d                 c                   29
+     d  XML_SCHEMAS_INTEGER...
+     d                 c                   30
+     d  XML_SCHEMAS_NPINTEGER...
+     d                 c                   31
+     d  XML_SCHEMAS_NINTEGER...
+     d                 c                   32
+     d  XML_SCHEMAS_NNINTEGER...
+     d                 c                   33
+     d  XML_SCHEMAS_PINTEGER...
+     d                 c                   34
+     d  XML_SCHEMAS_INT...
+     d                 c                   35
+     d  XML_SCHEMAS_UINT...
+     d                 c                   36
+     d  XML_SCHEMAS_LONG...
+     d                 c                   37
+     d  XML_SCHEMAS_ULONG...
+     d                 c                   38
+     d  XML_SCHEMAS_SHORT...
+     d                 c                   39
+     d  XML_SCHEMAS_USHORT...
+     d                 c                   40
+     d  XML_SCHEMAS_BYTE...
+     d                 c                   41
+     d  XML_SCHEMAS_UBYTE...
+     d                 c                   42
+     d  XML_SCHEMAS_HEXBINARY...
+     d                 c                   43
+     d  XML_SCHEMAS_BASE64BINARY...
+     d                 c                   44
+     d  XML_SCHEMAS_ANYTYPE...
+     d                 c                   45
+     d  XML_SCHEMAS_ANYSIMPLETYPE...
+     d                 c                   46
+
+      * XML Schemas defines multiple type of types.
+
+     d xmlSchemaTypeType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_TYPE_BASIC...                                                A builtin datatype
+     d                 c                   1
+     d  XML_SCHEMA_TYPE_ANY...
+     d                 c                   2
+     d  XML_SCHEMA_TYPE_FACET...
+     d                 c                   3
+     d  XML_SCHEMA_TYPE_SIMPLE...
+     d                 c                   4
+     d  XML_SCHEMA_TYPE_COMPLEX...
+     d                 c                   5
+     d  XML_SCHEMA_TYPE_SEQUENCE...
+     d                 c                   6
+     d  XML_SCHEMA_TYPE_CHOICE...
+     d                 c                   7
+     d  XML_SCHEMA_TYPE_ALL...
+     d                 c                   8
+     d  XML_SCHEMA_TYPE_SIMPLE_CONTENT...
+     d                 c                   9
+     d  XML_SCHEMA_TYPE_COMPLEX_CONTENT...
+     d                 c                   10
+     d  XML_SCHEMA_TYPE_UR...
+     d                 c                   11
+     d  XML_SCHEMA_TYPE_RESTRICTION...
+     d                 c                   12
+     d  XML_SCHEMA_TYPE_EXTENSION...
+     d                 c                   13
+     d  XML_SCHEMA_TYPE_ELEMENT...
+     d                 c                   14
+     d  XML_SCHEMA_TYPE_ATTRIBUTE...
+     d                 c                   15
+     d  XML_SCHEMA_TYPE_ATTRIBUTEGROUP...
+     d                 c                   16
+     d  XML_SCHEMA_TYPE_GROUP...
+     d                 c                   17
+     d  XML_SCHEMA_TYPE_NOTATION...
+     d                 c                   18
+     d  XML_SCHEMA_TYPE_LIST...
+     d                 c                   19
+     d  XML_SCHEMA_TYPE_UNION...
+     d                 c                   20
+     d  XML_SCHEMA_TYPE_ANY_ATTRIBUTE...
+     d                 c                   21
+     d  XML_SCHEMA_TYPE_IDC_UNIQUE...
+     d                 c                   22
+     d  XML_SCHEMA_TYPE_IDC_KEY...
+     d                 c                   23
+     d  XML_SCHEMA_TYPE_IDC_KEYREF...
+     d                 c                   24
+     d  XML_SCHEMA_TYPE_PARTICLE...
+     d                 c                   25
+     d  XML_SCHEMA_TYPE_ATTRIBUTE_USE...
+     d                 c                   26
+     d  XML_SCHEMA_FACET_MININCLUSIVE...
+     d                 c                   1000
+     d  XML_SCHEMA_FACET_MINEXCLUSIVE...
+     d                 c                   1001
+     d  XML_SCHEMA_FACET_MAXINCLUSIVE...
+     d                 c                   1002
+     d  XML_SCHEMA_FACET_MAXEXCLUSIVE...
+     d                 c                   1003
+     d  XML_SCHEMA_FACET_TOTALDIGITS...
+     d                 c                   1004
+     d  XML_SCHEMA_FACET_FRACTIONDIGITS...
+     d                 c                   1005
+     d  XML_SCHEMA_FACET_PATTERN...
+     d                 c                   1006
+     d  XML_SCHEMA_FACET_ENUMERATION...
+     d                 c                   1007
+     d  XML_SCHEMA_FACET_WHITESPACE...
+     d                 c                   1008
+     d  XML_SCHEMA_FACET_LENGTH...
+     d                 c                   1009
+     d  XML_SCHEMA_FACET_MAXLENGTH...
+     d                 c                   1010
+     d  XML_SCHEMA_FACET_MINLENGTH...
+     d                 c                   1011
+     d  XML_SCHEMA_EXTRA_QNAMEREF...
+     d                 c                   2000
+     d  XML_SCHEMA_EXTRA_ATTR_USE_PROHIB...
+     d                 c                   2001
+
+     d xmlSchemaContentType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_CONTENT_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMA_CONTENT_EMPTY...
+     d                 c                   1
+     d  XML_SCHEMA_CONTENT_ELEMENTS...
+     d                 c                   2
+     d  XML_SCHEMA_CONTENT_MIXED...
+     d                 c                   3
+     d  XML_SCHEMA_CONTENT_SIMPLE...
+     d                 c                   4
+     d  XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS...                                 Obsolete
+     d                 c                   5
+     d  XML_SCHEMA_CONTENT_BASIC...
+     d                 c                   6
+     d  XML_SCHEMA_CONTENT_ANY...
+     d                 c                   7
+
+     d xmlSchemaValPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaTypePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaFacetPtr...
+     d                 s               *   based(######typedef######)
+
+      * Annotation
+
+     d xmlSchemaAnnotPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAnnot  ds                  based(xmlSchemaAnnotPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaAnnotPtr)
+     d  content                            like(xmlNodePtr)                     The annotation
+
+      * XML_SCHEMAS_ANYATTR_SKIP:
+      *
+      * Skip unknown attribute from validation
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_SKIP...
+     d                 c                   1
+
+      * XML_SCHEMAS_ANYATTR_LAX:
+      *
+      * Ignore validation non definition on attributes
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_LAX...
+     d                 c                   2
+
+      * XML_SCHEMAS_ANYATTR_STRICT:
+      *
+      * Apply strict validation rules on attributes
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ANYATTR_STRICT...
+     d                 c                   3
+
+      * XML_SCHEMAS_ANY_SKIP:
+      *
+      * Skip unknown attribute from validation
+
+     d XML_SCHEMAS_ANY_SKIP...
+     d                 c                   1
+
+      * XML_SCHEMAS_ANY_LAX:
+      *
+      * Used by wildcards.
+      * Validate if type found, don't worry if not found
+
+     d XML_SCHEMAS_ANY_LAX...
+     d                 c                   2
+
+      * XML_SCHEMAS_ANY_STRICT:
+      *
+      * Used by wildcards.
+      * Apply strict validation rules
+
+     d XML_SCHEMAS_ANY_STRICT...
+     d                 c                   3
+
+      * XML_SCHEMAS_ATTR_USE_PROHIBITED:
+      *
+      * Used by wildcards.
+      * The attribute is prohibited.
+
+     d XML_SCHEMAS_ATTR_USE_PROHIBITED...
+     d                 c                   0
+
+      * XML_SCHEMAS_ATTR_USE_REQUIRED:
+      *
+      * The attribute is required.
+
+     d XML_SCHEMAS_ATTR_USE_REQUIRED...
+     d                 c                   1
+
+      * XML_SCHEMAS_ATTR_USE_OPTIONAL:
+      *
+      * The attribute is optional.
+
+     d XML_SCHEMAS_ATTR_USE_OPTIONAL...
+     d                 c                   2
+
+      * XML_SCHEMAS_ATTR_GLOBAL:
+      *
+      * allow elements in no namespace
+
+     d XML_SCHEMAS_ATTR_GLOBAL...
+     d                 c                   X'0001'
+
+      * XML_SCHEMAS_ATTR_NSDEFAULT:
+      *
+      * allow elements in no namespace
+
+     d XML_SCHEMAS_ATTR_NSDEFAULT...
+     d                 c                   X'0080'
+
+      * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
+      *
+      * this is set when the "type" and "ref" references
+      * have been resolved.
+
+     d XML_SCHEMAS_ATTR_INTERNAL_RESOLVED...
+     d                 c                   X'0100'
+
+      * XML_SCHEMAS_ATTR_FIXED:
+      *
+      * the attribute has a fixed value
+
+     d XML_SCHEMAS_ATTR_FIXED...
+     d                 c                   X'0200'
+
+      * xmlSchemaAttribute:
+      * An attribute definition.
+
+     d xmlSchemaAttributePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttribute...
+     d                 ds                  based(xmlSchemaAttributePtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)
+     d  next                               like(xmlSchemaAttributePtr)          Next attribute
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  typeName                       *                                        const xmlChar *
+     d  typeNs                         *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+      *
+     d  base                               like(xmlSchemaTypePtr)               Deprecated
+     d  occurs                       10i 0                                      Deprecated
+     d  defValue                       *                                        const xmlChar *
+     d  subtypes                           like(xmlSchemaTypePtr)               The type definition
+     d  node                               like(xmlNodePtr)
+     d  targetNamespace...                                                      const xmlChar *
+     d                                 *
+     d  flags                        10i 0
+     d  refPrefix                      *                                        const xmlChar *
+     d  defVal                             like(xmlSchemaValPtr)                Compiled constraint
+     d  refDecl                            like(xmlSchemaAttributePtr)          Deprecated
+
+      * xmlSchemaAttributeLink:
+      * Used to build a list of attribute uses on complexType definitions.
+      * WARNING: Deprecated; not used.
+
+     d xmlSchemaAttributeLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttributeLink...
+     d                 ds                  based(xmlSchemaAttributeLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaAttributeLinkPtr)      The next link
+     d  attr                               like(xmlSchemaAttributePtr)          The linked attribute
+
+      * XML_SCHEMAS_WILDCARD_COMPLETE:
+      *
+      * If the wildcard is complete.
+
+     d XML_SCHEMAS_WILDCARD_COMPLETE...
+     d                 c                   X'0001'
+
+      * xmlSchemaCharValueLink:
+      * Used to build a list of namespaces on wildcards.
+
+     d xmlSchemaWildcardNsPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaWildcardNs...
+     d                 ds                  based(xmlSchemaWildcardNsPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaWildcardNsPtr)         The next link
+     d  value                          *                                        const xmlChar *
+
+      * xmlSchemaWildcard.
+      * A wildcard.
+
+     d xmlSchemaWildcardPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaWildcard...
+     d                 ds                  based(xmlSchemaWildcardPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  id                             *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+     d  processContents...
+     d                               10i 0
+     d  any                          10i 0                                      Ns constraint ##any?
+     d  nsSet                              like(xmlSchemaWildcardNsPtr)         Allowed namspce list
+     d  negNsSet                           like(xmlSchemaWildcardNsPtr)         Negated namespace
+     d  flags                        10i 0                                      Deprecated; not used
+
+      * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
+      *
+      * The attribute wildcard has been already builded.
+
+     d XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED...
+     d                 c                   X'0001'
+
+      * XML_SCHEMAS_ATTRGROUP_GLOBAL:
+      *
+      * The attribute wildcard has been already builded.
+
+     d XML_SCHEMAS_ATTRGROUP_GLOBAL...
+     d                 c                   X'0002'
+
+      * XML_SCHEMAS_ATTRGROUP_MARKED:
+      *
+      * Marks the attr group as marked; used for circular checks.
+
+     d XML_SCHEMAS_ATTRGROUP_MARKED...
+     d                 c                   X'0004'
+
+      * XML_SCHEMAS_ATTRGROUP_REDEFINED:
+      *
+      * The attr group was redefined.
+
+     d XML_SCHEMAS_ATTRGROUP_REDEFINED...
+     d                 c                   X'0008'
+
+      * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
+      *
+      * Whether this attr. group contains attr. group references.
+
+     d XML_SCHEMAS_ATTRGROUP_HAS_REFS...
+     d                 c                   X'0010'
+
+      * An attribute group definition.
+      *
+      * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
+      * must be kept similar
+
+     d xmlSchemaAttributeGroupPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaAttributeGroup...
+     d                 ds                  based(xmlSchemaAttributeGroupPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaAttributePtr)          Next attribute
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+      *
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  flags                        10i 0
+     d  attributeWildcard...
+     d                                     like(xmlSchemaWildcardPtr)
+     d  refPrefix                      *                                        const xmlChar *
+     d  refItem                            like(xmlSchemaAttributeGroupPtr)     Deprecated; not used
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  attrUses                       *                                        void *
+
+      * xmlSchemaTypeLink:
+      * Used to build a list of types (e.g. member types of
+      * simpleType with variety "union").
+
+     d xmlSchemaTypeLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaTypeLink...
+     d                 ds                  based(xmlSchemaTypeLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaTypeLinkPtr)           Next type link
+     d  type                               like(xmlSchemaTypePtr)               Linked type
+
+      * xmlSchemaFacetLink:
+      * Used to build a list of facets.
+
+     d xmlSchemaFacetLinkPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaFacetLink...
+     d                 ds                  based(xmlSchemaFacetLinkPtr)
+     d                                     align qualified
+     d  next                               like(xmlSchemaFacetLinkPtr)          Next facet link
+     d  facet                              like(xmlSchemaFacetPtr)              Linked facet
+
+      * XML_SCHEMAS_TYPE_MIXED:
+      *
+      * the element content type is mixed
+
+     d XML_SCHEMAS_TYPE_MIXED...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
+      *
+      * the simple or complex type has a derivation method of "extension".
+
+     d XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
+      *
+      * the simple or complex type has a derivation method of "restriction".
+
+     d XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_TYPE_GLOBAL:
+      *
+      * the type is global
+
+     d XML_SCHEMAS_TYPE_GLOBAL...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
+      *
+      * the complexType owns an attribute wildcard, i.e.
+      * it can be freed by the complexType
+
+     d XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD...                                  Obsolete.
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
+      *
+      * the simpleType has a variety of "absent".
+      * TODO: Actually not necessary :-/, since if
+      * none of the variety flags occur then it's
+      * automatically absent.
+
+     d XML_SCHEMAS_TYPE_VARIETY_ABSENT...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_TYPE_VARIETY_LIST:
+      *
+      * the simpleType has a variety of "list".
+
+     d XML_SCHEMAS_TYPE_VARIETY_LIST...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_TYPE_VARIETY_UNION:
+      *
+      * the simpleType has a variety of "union".
+
+     d XML_SCHEMAS_TYPE_VARIETY_UNION...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
+      *
+      * the simpleType has a variety of "union".
+
+     d XML_SCHEMAS_TYPE_VARIETY_ATOMIC...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
+      *
+      * the complexType has a final of "extension".
+
+     d XML_SCHEMAS_TYPE_FINAL_EXTENSION...
+     d                 c                   X'00000200'
+
+      * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
+      *
+      * the simpleType/complexType has a final of "restriction".
+
+     d XML_SCHEMAS_TYPE_FINAL_RESTRICTION...
+     d                 c                   X'00000400'
+
+      * XML_SCHEMAS_TYPE_FINAL_LIST:
+      *
+      * the simpleType has a final of "list".
+
+     d XML_SCHEMAS_TYPE_FINAL_LIST...
+     d                 c                   X'00000800'
+
+      * XML_SCHEMAS_TYPE_FINAL_UNION:
+      *
+      * the simpleType has a final of "union".
+
+     d XML_SCHEMAS_TYPE_FINAL_UNION...
+     d                 c                   X'00001000'
+
+      * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
+      *
+      * the simpleType has a final of "default".
+
+     d XML_SCHEMAS_TYPE_FINAL_DEFAULT...
+     d                 c                   X'00002000'
+
+      * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
+      *
+      * Marks the item as a builtin primitive.
+
+     d XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE...
+     d                 c                   X'00004000'
+
+      * XML_SCHEMAS_TYPE_MARKED:
+      *
+      * Marks the item as marked; used for circular checks.
+
+     d XML_SCHEMAS_TYPE_MARKED...
+     d                 c                   X'00010000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
+      *
+      * the complexType did not specify 'block' so use the default of the
+      * <schema> item.
+
+     d XML_SCHEMAS_TYPE_BLOCK_DEFAULT...
+     d                 c                   X'00020000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
+      *
+      * the complexType has a 'block' of "extension".
+
+     d XML_SCHEMAS_TYPE_BLOCK_EXTENSION...
+     d                 c                   X'00040000'
+
+      * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
+      *
+      * the complexType has a 'block' of "restriction".
+
+     d XML_SCHEMAS_TYPE_BLOCK_RESTRICTION...
+     d                 c                   X'00080000'
+
+      * XML_SCHEMAS_TYPE_ABSTRACT:
+      *
+      * the simple/complexType is abstract.
+
+     d XML_SCHEMAS_TYPE_ABSTRACT...
+     d                 c                   X'00100000'
+
+      * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
+      *
+      * indicates if the facets need a computed value
+
+     d XML_SCHEMAS_TYPE_FACETSNEEDVALUE...
+     d                 c                   X'00200000'
+
+      * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
+      *
+      * indicates that the type was typefixed
+
+     d XML_SCHEMAS_TYPE_INTERNAL_RESOLVED...
+     d                 c                   X'00400000'
+
+      * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
+      *
+      * indicates that the type is invalid
+
+     d XML_SCHEMAS_TYPE_INTERNAL_INVALID...
+     d                 c                   X'00800000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
+      *
+      * a whitespace-facet value of "preserve"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE...
+     d                 c                   X'01000000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
+      *
+      * a whitespace-facet value of "replace"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_REPLACE...
+     d                 c                   X'02000000'
+
+      * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
+      *
+      * a whitespace-facet value of "collapse"
+
+     d XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE...
+     d                 c                   X'04000000'
+
+      * XML_SCHEMAS_TYPE_HAS_FACETS:
+      *
+      * has facets
+
+     d XML_SCHEMAS_TYPE_HAS_FACETS...
+     d                 c                   X'08000000'
+
+      * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
+      *
+      * indicates if the facets (pattern) need a normalized value
+
+     d XML_SCHEMAS_TYPE_NORMVALUENEEDED...
+     d                 c                   X'10000000'
+
+      * XML_SCHEMAS_TYPE_FIXUP_1:
+      *
+      * First stage of fixup was done.
+
+     d XML_SCHEMAS_TYPE_FIXUP_1...
+     d                 c                   X'20000000'
+
+      * XML_SCHEMAS_TYPE_REDEFINED:
+      *
+      * The type was redefined.
+
+     d XML_SCHEMAS_TYPE_REDEFINED...
+     d                 c                   X'40000000'
+
+      /if defined(DISABLED)
+      * XML_SCHEMAS_TYPE_REDEFINING:
+      *
+      * The type redefines an other type.
+
+     d XML_SCHEMAS_TYPE_REDEFINING...
+     d                 c                   X'80000000'
+      /endif
+
+      * _xmlSchemaType:
+      *
+      * Schemas type definition.
+
+     d xmlSchemaType...
+     d                 ds                  based(xmlSchemaTypePtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaTypePtr)               Next type
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  subtypes                           like(xmlSchemaTypePtr)
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+      *
+     d  flags                        10i 0
+     d  contentType                        like(xmlSchemaContentType)
+     d  base                           *                                        const xmlChar *
+     d  baseNs                         *                                        const xmlChar *
+     d  baseType                           like(xmlSchemaTypePtr)               Base type component
+     d  facets                             like(xmlSchemaFacetPtr)              Local facets
+     d  redef                              like(xmlSchemaTypePtr)               Deprecated; not used
+     d  recurse                      10i 0                                      Obsolete
+     d  attributeUses                      like(xmlSchemaAttributeLinkPtr)      Deprecated; not used
+     d  attributeWildcard...
+     d                                     like(xmlSchemaWildcardPtr)
+     d  builtInType                  10i 0                                      Built-in types type
+     d  memberTypes                        like(xmlSchemaTypeLinkPtr)           Union member-types
+     d  facetSet                           like(xmlSchemaFacetLinkPtr)          All facets
+     d  refPrefix                      *                                        const xmlChar *
+     d  contentTypeDef...
+     d                                     like(xmlSchemaTypePtr)
+     d  contModel                          like(xmlRegexpPtr)                   Content model autom.
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  attrUses                       *                                        void *
+
+      * xmlSchemaElement:
+      * An element definition.
+      *
+      * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
+      * structures must be kept similar
+
+      * XML_SCHEMAS_ELEM_NILLABLE:
+      *
+      * the element is nillable
+
+     d XML_SCHEMAS_ELEM_NILLABLE...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_ELEM_GLOBAL:
+      *
+      * the element is global
+
+     d XML_SCHEMAS_ELEM_GLOBAL...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_ELEM_DEFAULT:
+      *
+      * the element has a default value
+
+     d XML_SCHEMAS_ELEM_DEFAULT...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_ELEM_FIXED:
+      *
+      * the element has a fixed value
+
+     d XML_SCHEMAS_ELEM_FIXED...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_ELEM_ABSTRACT:
+      *
+      * the element is abstract
+
+     d XML_SCHEMAS_ELEM_ABSTRACT...
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_ELEM_TOPLEVEL:
+      *
+      * the element is top level
+      * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
+
+     d XML_SCHEMAS_ELEM_TOPLEVEL...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_ELEM_REF:
+      *
+      * the element is a reference to a type
+
+     d XML_SCHEMAS_ELEM_REF...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_ELEM_NSDEFAULT:
+      *
+      * allow elements in no namespace
+      * Obsolete, not used anymore.
+
+     d XML_SCHEMAS_ELEM_NSDEFAULT...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
+      *
+      * this is set when "type", "ref", "substitutionGroup"
+      * references have been resolved.
+
+     d XML_SCHEMAS_ELEM_INTERNAL_RESOLVED...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_ELEM_CIRCULAR:
+      *
+      * a helper flag for the search of circular references.
+
+     d XML_SCHEMAS_ELEM_CIRCULAR...
+     d                 c                   X'00000200'
+
+      * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
+      *
+      * the "block" attribute is absent
+
+     d XML_SCHEMAS_ELEM_BLOCK_ABSENT...
+     d                 c                   X'00000400'
+
+      * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
+      *
+      * disallowed substitutions are absent
+
+     d XML_SCHEMAS_ELEM_BLOCK_EXTENSION...
+     d                 c                   X'00000800'
+
+      * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
+      *
+      * disallowed substitutions: "restriction"
+
+     d XML_SCHEMAS_ELEM_BLOCK_RESTRICTION...
+     d                 c                   X'00001000'
+
+      * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
+      *
+      * disallowed substitutions: "substituion"
+
+     d XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION...
+     d                 c                   X'00002000'
+
+      * XML_SCHEMAS_ELEM_FINAL_ABSENT:
+      *
+      * substitution group exclusions are absent
+
+     d XML_SCHEMAS_ELEM_FINAL_ABSENT...
+     d                 c                   X'00004000'
+
+      * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
+      *
+      * substitution group exclusions: "extension"
+
+     d XML_SCHEMAS_ELEM_FINAL_EXTENSION...
+     d                 c                   X'00008000'
+
+      * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
+      *
+      * substitution group exclusions: "restriction"
+
+     d XML_SCHEMAS_ELEM_FINAL_RESTRICTION...
+     d                 c                   X'00010000'
+
+      * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
+      *
+      * the declaration is a substitution group head
+
+     d XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD...
+     d                 c                   X'00020000'
+
+      * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
+      *
+      * this is set when the elem decl has been checked against
+      * all constraints
+
+     d XML_SCHEMAS_ELEM_INTERNAL_CHECKED...
+     d                 c                   X'00040000'
+
+     d xmlSchemaElementPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaElement...
+     d                 ds                  based(xmlSchemaElementPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaElementPtr)            Not used ?
+     d  name                           *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  ref                            *                                        const xmlChar *
+     d  refNs                          *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  subtypes                           like(xmlSchemaTypePtr)
+     d  attributes                         like(xmlSchemaAttributePtr)          Deprecated; not used
+     d  node                               like(xmlNodePtr)
+     d  minOccurs                    10i 0                                      Deprecated; not used
+     d  maxOccurs                    10i 0                                      Deprecated; not used
+      *
+     d  flags                        10i 0
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  namedType                      *                                        const xmlChar *
+     d  namedTypeNs                    *                                        const xmlChar *
+     d  substGroup                     *                                        const xmlChar *
+     d  substGroupNs                   *                                        const xmlChar *
+     d  scope                          *                                        const xmlChar *
+     d  value                          *                                        const xmlChar *
+     d  refDecl                            like(xmlSchemaElementPtr)
+     d  contModel                          like(xmlRegexpPtr)
+     d  contentType                        like(xmlSchemaContentType)
+     d  refPrefix                      *                                        const xmlChar *
+     d  devVal                             like(xmlSchemaValPtr)                Comp val constraint
+     d  idcs                           *                                        void *
+
+      * XML_SCHEMAS_FACET_UNKNOWN:
+      *
+      * unknown facet handling
+
+     d XML_SCHEMAS_FACET_UNKNOWN...
+     d                 c                   0
+
+      * XML_SCHEMAS_FACET_PRESERVE:
+      *
+      * preserve the type of the facet
+
+     d XML_SCHEMAS_FACET_PRESERVE...
+     d                 c                   1
+
+      * XML_SCHEMAS_FACET_REPLACE:
+      *
+      * replace the type of the facet
+
+     d XML_SCHEMAS_FACET_REPLACE...
+     d                 c                   2
+
+      * XML_SCHEMAS_FACET_COLLAPSE:
+      *
+      * collapse the types of the facet
+
+     d XML_SCHEMAS_FACET_COLLAPSE...
+     d                 c                   3
+
+      * A facet definition.
+
+     d xmlSchemaFacet...
+     d                 ds                  based(xmlSchemaFacetPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  next                               like(xmlSchemaFacetPtr)              Next type in seq.
+     d  value                          *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  node                               like(xmlNodePtr)
+     d  fixed                        10i 0                                      _FACET_PRESERVE, etc
+     d  whitespace                   10i 0
+     d  val                                like(xmlSchemaValPtr)                Compiled value
+     d  regexp                             like(xmlRegexpPtr)                   Regexp for patterns
+
+      * A notation definition.
+
+     d xmlSchemaNotationPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaNotation...
+     d                 ds                  based(xmlSchemaNotationPtr)
+     d                                     align qualified
+     d  type                               like(xmlSchemaTypeType)              Kind of type
+     d  name                           *                                        const xmlChar *
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  identifier                     *                                        const xmlChar *
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+
+      * TODO: Actually all those flags used for the schema should sit
+      * on the schema parser context, since they are used only
+      * during parsing an XML schema document, and not available
+      * on the component level as per spec.
+
+      * XML_SCHEMAS_QUALIF_ELEM:
+      *
+      * Reflects elementFormDefault == qualified in
+      * an XML schema document.
+
+     d XML_SCHEMAS_QUALIF_ELEM...
+     d                 c                   X'00000001'
+
+      * XML_SCHEMAS_QUALIF_ATTR:
+      *
+      * Reflects attributeFormDefault == qualified in
+      * an XML schema document.
+
+     d XML_SCHEMAS_QUALIF_ATTR...
+     d                 c                   X'00000002'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
+      *
+      * the schema has "extension" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_EXTENSION...
+     d                 c                   X'00000004'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
+      *
+      * the schema has "restriction" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION...
+     d                 c                   X'00000008'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_LIST:
+      *
+      * the cshema has "list" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_LIST...
+     d                 c                   X'00000010'
+
+      * XML_SCHEMAS_FINAL_DEFAULT_UNION:
+      *
+      * the schema has "union" in the set of finalDefault.
+
+     d XML_SCHEMAS_FINAL_DEFAULT_UNION...
+     d                 c                   X'00000020'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
+      *
+      * the schema has "extension" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION...
+     d                 c                   X'00000040'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
+      *
+      * the schema has "restriction" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION...
+     d                 c                   X'00000080'
+
+      * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
+      *
+      * the schema has "substitution" in the set of blockDefault.
+
+     d XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION...
+     d                 c                   X'00000100'
+
+      * XML_SCHEMAS_INCLUDING_CONVERT_NS:
+      *
+      * the schema is currently including an other schema with
+      * no target namespace.
+
+     d XML_SCHEMAS_INCLUDING_CONVERT_NS...
+     d                 c                   X'00000200'
+
+      * _xmlSchema:
+      *
+      * A Schemas definition
+
+     d xmlSchema       ds                  based(xmlSchemaPtr)
+     d                                     align qualified
+     d  name                           *                                        const xmlChar *
+     d  targetNamespace...
+     d                                 *                                        const xmlChar *
+     d  version                        *                                        const xmlChar *
+     d  id                             *                                        const xmlChar *
+     d  doc                                like(xmlDocPtr)
+     d  annot                              like(xmlSchemaAnnotPtr)
+     d  flags                        10i 0
+      *
+     d  typeDecl                           like(xmlHashTablePtr)
+     d  attrDecl                           like(xmlHashTablePtr)
+     d  attrGrpDecl                        like(xmlHashTablePtr)
+     d  elemDecl                           like(xmlHashTablePtr)
+     d  notaDecl                           like(xmlHashTablePtr)
+     d  schemasImports...
+     d                                     like(xmlHashTablePtr)
+      *
+     d  #private                       *                                        void *
+     d  groupDecl                          like(xmlHashTablePtr)
+     d  dict                               like(xmlDictPtr)
+     d  includes                       *                                        void *
+     d  preserve                     10i 0                                      Do not free doc ?
+     d  counter                      10i 0                                      For name uniqueness
+     d  idcDef                             like(xmlHashTablePtr)                All id-constr. defs
+     d  volatiles                      *                                        void *
+
+     d xmlSchemaFreeType...
+     d                 pr                  extproc('xmlSchemaFreeType')
+     d type                                value like(xmlSchemaTypePtr)
+
+     d xmlSchemaFreeWildcard...
+     d                 pr                  extproc('xmlSchemaFreeWildcard')
+     d wildcard                            value like(xmlSchemaWildcardPtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    SCHEMA_INTERNALS_H__
diff --git a/os400/libxmlrpg/schematron.rpgle b/os400/libxmlrpg/schematron.rpgle
new file mode 100644 (file)
index 0000000..ff8ea62
--- /dev/null
@@ -0,0 +1,195 @@
+      * Summary: XML Schemastron implementation
+      * Description: interface to the XML Schematron validity checking.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMATRON_H__)
+      /define XML_SCHEMATRON_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMATRON_ENABLED)
+
+      /include "libxmlrpg/tree"
+
+     d xmlSchematronValidOptions...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMATRON_OUT_QUIET...                                             Quiet no report
+     d                 c                   X'0001'
+     d  XML_SCHEMATRON_OUT_TEXT...                                              Build textual report
+     d                 c                   X'0002'
+     d  XML_SCHEMATRON_OUT_XML...                                               Output SVRL
+     d                 c                   X'0004'
+     d  XML_SCHEMATRON_OUT_ERROR...                                             Output to error func
+     d                 c                   X'0008'
+     d  XML_SCHEMATRON_OUT_FILE...                                              Output to file descr
+     d                 c                   X'0100'
+     d  XML_SCHEMATRON_OUT_BUFFER...                                            Output to a buffer
+     d                 c                   X'0200'
+     d  XML_SCHEMATRON_OUT_IO...                                                Output to I/O mech
+     d                 c                   X'0400'
+
+      * The schemas related types are kept internal
+
+     d xmlSchematronPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlSchematronValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from a Schematron validation
+
+     d xmlSchematronValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlSchematronValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from a Schematron validation
+
+     d xmlSchematronValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlSchematronParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchematronValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * Interfaces for parsing.
+
+     d xmlSchematronNewParserCtxt...
+     d                 pr                  extproc('xmlSchematronNewParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  URL                            *   value options(*string)               const char *
+
+     d xmlSchematronNewMemParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronNewMemParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+
+     d xmlSchematronNewDocParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronNewDocParserCtxt')
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSchematronFreeParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronFreeParserCtxt')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+
+      /if defined(DISABLED)
+     d xmlSchematronSetParserErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronSetParserErrors')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  err                                value
+     d                                     like(xmlSchematronValidityErrorFunc)
+     d  warn                               value like(
+     d                                     xmlSchematronValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlSchematronGetParserErrors...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronGetParserErrors')
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+     d  err                                like(xmlSchematronValidityErrorFunc)
+     d  warn                               like(
+     d                                       xmlSchematronValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlSchematronIsValid...
+     d                 pr            10i 0 extproc('xmlSchematronIsValid')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+      /endif
+
+     d xmlSchematronParse...
+     d                 pr                  extproc('xmlSchematronParse')
+     d                                     like(xmlSchematronPtr)
+     d  ctxt                               value
+     d                                     like(xmlSchematronParserCtxtPtr)
+
+     d xmlSchematronFree...
+     d                 pr                  extproc('xmlSchematronFree')
+     d  schema                             value like(xmlSchematronPtr)
+
+      * Interfaces for validating
+
+     d xmlSchematronSetValidStructuredErrors...
+     d                 pr                  extproc('xmlSchematronSetValidStruct-
+     d                                     uredErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  serror                             value like(xmlStructuredErrorFunc)
+     d  ctx                            *   value                                void *
+
+      /if defined(DISABLED)
+     d xmlSchematronSetValidErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchematronSetValidErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  err                                value
+     d                                     like(xmlSchematronValidityErrorFunc)
+     d  warn                               value like(
+     d                                     xmlSchematronValidityWarningFunc)
+     d  ctx                            *   value                                void *
+
+     d xmlSchematronGetValidErrors...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronGetValidErrors')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  err                                like(xmlSchematronValidityErrorFunc)
+     d  warn                               like(
+     d                                       xmlSchematronValidityWarningFunc)
+     d  ctx                            *                                        void *(*)
+
+     d xmlSchematronSetValidOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronSetValidOptions')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlSchematronValidCtxtGetOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronValidCtxtGetOptions')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+
+     d xmlSchematronValidateOneElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchematronValidateOneElement')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  elem                               value like(xmlNodePtr)
+      /endif
+
+     d xmlSchematronNewValidCtxt...
+     d                 pr                  extproc('xmlSchematronNewValidCtxt')
+     d                                     like(xmlSchematronValidCtxtPtr)
+     d  schema                             value like(xmlSchematronPtr)
+     d  options                      10i 0 value
+
+     d xmlSchematronFreeValidCtxt...
+     d                 pr                  extproc('xmlSchematronFreeValidCtxt')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+
+     d xmlSchematronValidateDoc...
+     d                 pr            10i 0 extproc('xmlSchematronValidateDoc')
+     d  ctxt                               value like(xmlSchematronValidCtxtPtr)
+     d  instance                           value like(xmlDocPtr)
+
+      /endif                                                                    _SCHEMATRON_ENABLED
+      /endif                                                                    XML_SCHEMATRON_H__
diff --git a/os400/libxmlrpg/threads.rpgle b/os400/libxmlrpg/threads.rpgle
new file mode 100644 (file)
index 0000000..07d4278
--- /dev/null
@@ -0,0 +1,70 @@
+      * Summary: interfaces for thread handling
+      * Description: set of generic threading related routines
+      *              should work with pthreads, Windows native or TLS threads
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_THREADS_H__)
+      /define XML_THREADS_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * xmlMutex are a simple mutual exception locks.
+
+     d xmlMutexPtr     s               *   based(######typedef######)
+
+      * xmlRMutex are reentrant mutual exception locks.
+
+     d xmlRMutexPtr    s               *   based(######typedef######)
+
+      /include "libxmlrpg/globals"
+
+     d xmlNewMutex     pr                  extproc('xmlNewMutex')
+     d                                     like(xmlMutexPtr)
+
+     d xmlMutexLock    pr                  extproc('xmlMutexLock')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlMutexUnlock  pr                  extproc('xmlMutexUnlock')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlFreeMutex    pr                  extproc('xmlFreeMutex')
+     d  tok                                value like(xmlMutexPtr)
+
+     d xmlNewRMutex    pr                  extproc('xmlNewRMutex')
+     d                                     like(xmlRMutexPtr)
+
+     d xmlRMutexLock   pr                  extproc('xmlRMutexLock')
+     d  tok                                value like(xmlRMutexPtr)
+
+     d xmlRMutexUnlock...
+     d                 pr                  extproc('xmlRMutexUnlock')
+     d  tok                                value like(xmlRMutexPtr)
+
+     d xmlFreeRMutex   pr                  extproc('xmlFreeRMutex')
+     d  tok                                value like(xmlRMutexPtr)
+
+      * Library wide APIs.
+
+     d xmlInitThreads  pr                  extproc('xmlInitThreads')
+
+     d xmlLockLibrary  pr                  extproc('xmlLockLibrary')
+
+     d xmlUnlockLibrary...
+     d                 pr                  extproc('xmlUnlockLibrary')
+
+     d xmlGetThreadId  pr            10i 0 extproc('xmlGetThreadId')
+
+     d xmlIsMainThread...
+     d                 pr            10i 0 extproc('xmlIsMainThread')
+
+     d xmlCleanupThreads...
+     d                 pr                  extproc('xmlCleanupThreads')
+
+     d xmlGetGlobalState...
+     d                 pr                  extproc('xmlGetGlobalState')
+     d                                     like(xmlGlobalStatePtr)
+
+      /endif                                                                    XML_THREADS_H__
diff --git a/os400/libxmlrpg/transcode.rpgle b/os400/libxmlrpg/transcode.rpgle
new file mode 100644 (file)
index 0000000..b96e4e8
--- /dev/null
@@ -0,0 +1,71 @@
+      * Supplementary character code conversion functions for
+      *   EBCDIC environments.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(TRANSCODE_H__)
+      /define TRANSCODE_H__
+
+      /include "libxmlrpg/dict"
+      /include "libxmlrpg/xmlstdarg"
+
+     d xmlZapDict      pr                  extproc('xmlZapDict')
+     d  dict                               like(xmlDictPtr)
+
+     d xmlTranscodeResult...
+     d                 pr              *   extproc('xmlTranscodeResult')        const char *
+     d  s                              *   value options(*string)               const xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  freeproc                       *   value procptr
+
+     d xmlTranscodeString...
+     d                 pr              *   extproc('xmlTranscodeString')        const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTranscodeWString...
+     d                 pr              *   extproc('xmlTranscodeWString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTranscodeHString...
+     d                 pr              *   extproc('xmlTranscodeHString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+      /if not defined(XML_NO_SHORT_NAMES)
+     d xmlTR           pr              *   extproc('xmlTranscodeResult')        const char *
+     d  s                              *   value options(*string)               const xmlChar *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  freeproc                       *   value procptr
+
+     d xmlTS           pr              *   extproc('xmlTranscodeString')        const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTW           pr              *   extproc('xmlTranscodeWString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+
+     d xmlTH           pr              *   extproc('xmlTranscodeHString')       const xmlChar *
+     d  s                              *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  dict                               like(xmlDictPtr) options(*omit)
+      /endif
+
+     d xmlVasprintf    pr              *   extproc('xmlVasprintf')
+     d  dict                               like(xmlDictPtr) options(*omit)
+     d  encoding                       *   value options(*string)               const char *
+     d  fmt                            *   value options(*string)               const xmlChar *
+     d  args                               likeds(xmlVaList)
+
+      /endif
diff --git a/os400/libxmlrpg/tree.rpgle b/os400/libxmlrpg/tree.rpgle
new file mode 100644 (file)
index 0000000..8b4981a
--- /dev/null
@@ -0,0 +1,1628 @@
+      * Summary: interfaces for tree manipulation
+      * Description: this module describes the structures found in an tree
+      *              resulting from an XML or HTML parsing, as well as the API
+      *              provided for various processing on that tree
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_TREE_H__)
+      /define XML_TREE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstring"
+
+
+      * Some of the basic types pointer to structures:
+
+      * xmlIO.h
+
+     d xmlParserInputBufferPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlOutputBufferPtr...
+     d                 s               *   based(######typedef######)
+
+      * parser.h
+
+     d xmlParserInputPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXLocatorPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSAXHandlerPtr...
+     d                 s               *   based(######typedef######)
+
+      * entities.h
+
+     d xmlEntityPtr    s               *   based(######typedef######)
+
+
+      * BASE_BUFFER_SIZE:
+      *
+      * default buffer size 4000.
+
+     d BASE_BUFFER_SIZE...
+     d                 c                   4096
+
+      * LIBXML_NAMESPACE_DICT:
+      *
+      * Defines experimental behaviour:
+      * 1) xmlNs gets an additional field @context (a xmlDoc)
+      * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc.
+
+      /if defined(DO_NOT_COMPILE)
+      /define LIBXML_NAMESPACE_DICT
+      /endif
+
+      * xmlBufferAllocationScheme:
+      *
+      * A buffer allocation scheme can be defined to either match exactly the
+      * need or double it's allocated size each time it is found too small.
+
+     d xmlBufferAllocationScheme...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_BUFFER_ALLOC_DOUBLEIT...
+     d                 c                   0
+     d  XML_BUFFER_ALLOC_EXACT...
+     d                 c                   1
+     d  XML_BUFFER_ALLOC_IMMUTABLE...
+     d                 c                   2
+     d  XML_BUFFER_ALLOC_IO...
+     d                 c                   3
+     d  XML_BUFFER_ALLOC_HYBRID...
+     d                 c                   4
+
+      * xmlBuffer:
+      *
+      * A buffer structure, this old construct is limited to 2GB and
+      * is being deprecated, use API with xmlBuf instead
+
+     d xmlBufferPtr    s               *   based(######typedef######)
+
+     d xmlBuffer       ds                  based(xmlBufferPtr)
+     d                                     align qualified
+     d  content                        *                                        xmlChar *
+     d  use                          10u 0                                      The buffer size used
+     d  size                         10u 0                                      The buffer size
+     d  alloc                              like(xmlBufferAllocationScheme)      The realloc method
+     d  contentIO                      *                                        xmlChar *
+
+      * xmlBufPtr:
+      *
+      * A pointer to a buffer structure, the actual structure internals are not
+      * public
+
+     d xmlBufPtr       s               *   based(######typedef######)
+
+      * A few public routines for xmlBuf. As those are expected to be used
+      * mostly internally the bulk of the routines are internal in buf.h
+
+     d xmlBufContent   pr              *   extproc('xmlBufContent')             xmlChar *
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufEnd       pr              *   extproc('xmlBufEnd')                 xmlChar *
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufUse       pr            10u 0 extproc('xmlBufUse')                 size_t
+     d  buf                                value like(xmlBufPtr)                const
+
+     d xmlBufShrink    pr            10u 0 extproc('xmlBufShrink')              size_t
+     d  buf                                value like(xmlBufPtr)
+     d  len                          10u 0 value                                size_t
+
+      * LIBXML2_NEW_BUFFER:
+      *
+      * Macro used to express that the API use the new buffers for
+      * xmlParserInputBuffer and xmlOutputBuffer. The change was
+      * introduced in 2.9.0.
+
+      /define LIBXML2_NEW_BUFFER
+
+      * XML_XML_NAMESPACE:
+      *
+      * This is the namespace for the special xml: prefix predefined in the
+      * XML Namespace specification.
+
+     d XML_XML_NAMESPACE...
+     d                 c                   'http://www.w3.org/XML/1998/+
+     d                                      namespace'
+
+      * XML_XML_ID:
+      *
+      * This is the name for the special xml:id attribute
+
+     d XML_XML_ID      c                   'xml:id'
+
+      * 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/
+      *
+      * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
+      * be deprecated to use an XML_DTD_NODE.
+
+     d xmlElementType  s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_NODE...
+     d                 c                   1
+     d  XML_ATTRIBUTE_NODE...
+     d                 c                   2
+     d  XML_TEXT_NODE  c                   3
+     d  XML_CDATA_SECTION_NODE...
+     d                 c                   4
+     d  XML_ENTITY_REF_NODE...
+     d                 c                   5
+     d  XML_ENTITY_NODE...
+     d                 c                   6
+     d  XML_PI_NODE    c                   7
+     d  XML_COMMENT_NODE...
+     d                 c                   8
+     d  XML_DOCUMENT_NODE...
+     d                 c                   9
+     d  XML_DOCUMENT_TYPE_NODE...
+     d                 c                   10
+     d  XML_DOCUMENT_FRAG_NODE...
+     d                 c                   11
+     d  XML_NOTATION_NODE...
+     d                 c                   12
+     d  XML_HTML_DOCUMENT_NODE...
+     d                 c                   13
+     d  XML_DTD_NODE   c                   14
+     d  XML_ELEMENT_DECL...
+     d                 c                   15
+     d  XML_ATTRIBUTE_DECL...
+     d                 c                   16
+     d  XML_ENTITY_DECL...
+     d                 c                   17
+     d  XML_NAMESPACE_DECL...
+     d                 c                   18
+     d  XML_LOCAL_NAMESPACE...
+     d                 c                   18                                   Alias
+     d  XML_XINCLUDE_START...
+     d                 c                   19
+     d  XML_XINCLUDE_END...
+     d                 c                   20
+      /if defined(LIBXML_DOCB_ENABLED)
+     d  XML_DOCB_DOCUMENT_NODE...
+     d                 c                   21
+      /endif
+
+      * xmlNotation:
+      *
+      * A DTD Notation definition.
+
+     d xmlNotationPtr  s               *   based(######typedef######)
+
+     d xmlNotation     ds                  based(xmlNotationPtr)
+     d                                     align qualified
+     d  name                           *                                        const xmlChar *
+     d  PublicID                       *                                        const xmlChar *
+     d  SystemID                       *                                        const xmlChar *
+
+      * xmlAttributeType:
+      *
+      * A DTD Attribute type definition.
+
+     d xmlAttributeType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ATTRIBUTE_CDATA...
+     d                 c                   1
+     d  XML_ATTRIBUTE_ID...
+     d                 c                   2
+     d  XML_ATTRIBUTE_IDREF...
+     d                 c                   3
+     d  XML_ATTRIBUTE_IDREFS...
+     d                 c                   4
+     d  XML_ATTRIBUTE_ENTITY...
+     d                 c                   5
+     d  XML_ATTRIBUTE_ENTITIES...
+     d                 c                   6
+     d  XML_ATTRIBUTE_NMTOKEN...
+     d                 c                   7
+     d  XML_ATTRIBUTE_NMTOKENS...
+     d                 c                   8
+     d  XML_ATTRIBUTE_ENUMERATION...
+     d                 c                   9
+     d  XML_ATTRIBUTE_NOTATION...
+     d                 c                   10
+
+      * xmlAttributeDefault:
+      *
+      * A DTD Attribute default definition.
+
+     d xmlAttributeDefault...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ATTRIBUTE_NONE...
+     d                 c                   1
+     d  XML_ATTRIBUTE_REQUIRED...
+     d                 c                   2
+     d  XML_ATTRIBUTE_IMPLIED...
+     d                 c                   3
+     d  XML_ATTRIBUTE_FIXED...
+     d                 c                   4
+
+      * xmlEnumeration:
+      *
+      * List structure used when there is an enumeration in DTDs.
+
+     d xmlEnumerationPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlEnumeration  ds                  based(xmlEnumerationPtr)
+     d                                     align qualified
+     d  next                               like(xmlEnumerationPtr)              Next one
+     d  name                           *                                        const xmlChar *
+
+      * Forward pointer declarations.
+
+     d xmlNodePtr      s               *   based(######typedef######)
+     d xmlDocPtr       s               *   based(######typedef######)
+     d xmlDtdPtr       s               *   based(######typedef######)
+
+      * xmlAttribute:
+      *
+      * An Attribute declaration in a DTD.
+
+     d xmlAttributePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlAttribute    ds                  based(xmlAttributePtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ATTRIBUTE_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     NULL
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  nexth                              like(xmlAttributePtr)                Next in hash table
+     d  atype                              like(xmlAttributeType)               The attribute type
+     d  def                                like(xmlAttributeDefault)            The default
+     d  defaultValue                   *                                        or const xmlChar *
+     d  tree                               like(xmlEnumerationPtr)              or enum tree
+     d  prefix                         *                                        const xmlChar *
+     d  elem                           *                                        const xmlChar *
+
+      * xmlElementContentType:
+      *
+      * Possible definitions of element content types.
+
+     d xmlElementContentType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_CONTENT_PCDATA...
+     d                 c                   1
+     d  XML_ELEMENT_CONTENT_ELEMENT...
+     d                 c                   2
+     d  XML_ELEMENT_CONTENT_SEQ...
+     d                 c                   3
+     d  XML_ELEMENT_CONTENT_OR...
+     d                 c                   4
+
+      * xmlElementContentOccur:
+      *
+      * Possible definitions of element content occurrences.
+
+     d xmlElementContentOccur...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_CONTENT_ONCE...
+     d                 c                   1
+     d  XML_ELEMENT_CONTENT_OPT...
+     d                 c                   2
+     d  XML_ELEMENT_CONTENT_MULT...
+     d                 c                   3
+     d  XML_ELEMENT_CONTENT_PLUS...
+     d                 c                   4
+
+      * xmlElementContent:
+      *
+      * An XML Element content as stored after parsing an element definition
+      * in a DTD.
+
+     d xmlElementContentPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlElementContent...
+     d                 ds                  based(xmlElementContentPtr)
+     d                                     align qualified
+     d  type                               like(xmlElementContentType)
+     d  ocur                               like(xmlElementContentOccur)
+     d  name                           *                                        const xmlChar *
+     d  c1                                 like(xmlElementContentPtr)           First child
+     d  c2                                 like(xmlElementContentPtr)           Second child
+     d  parent                             like(xmlElementContentPtr)           Parent
+     d  prefix                         *                                        const xmlChar *
+
+      * xmlElementTypeVal:
+      *
+      * The different possibilities for an element content type.
+
+     d xmlElementTypeVal...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ELEMENT_TYPE_UNDEFINED...
+     d                 c                   0
+     d  XML_ELEMENT_TYPE_EMPTY...
+     d                 c                   1
+     d  XML_ELEMENT_TYPE_ANY...
+     d                 c                   2
+     d  XML_ELEMENT_TYPE_MIXED...
+     d                 c                   3
+     d  XML_ELEMENT_TYPE_ELEMENT...
+     d                 c                   4
+
+      /include "libxmlrpg/xmlregexp"
+
+      * xmlElement:
+      *
+      * An XML Element declaration from a DTD.
+
+     d xmlElementPtr   s               *   based(######typedef######)
+
+     d xmlElement      ds                  based(xmlElementPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ELEMENT_DECL
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     NULL
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlDtdPtr)                      -> DTD
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  etype                              like(xmlElementTypeVal)              The type
+     d  content                            like(xmlElementContentPtr)           Allowed elem content
+     d  attributes                         like(xmlAttributePtr)                Declared attributes
+     d  prefix                         *                                        const xmlChar *
+      /if defined(LIBXML_REGEXP_ENABLED)
+     d  contModel                          like(xmlRegexpPtr)                   Validating regexp
+      /else
+     d  contModel                      *
+      /endif
+
+      * XML_LOCAL_NAMESPACE:
+      *
+      * A namespace declaration node.
+
+      * xmlNs:
+      *
+      * An XML namespace.
+      * Note that prefix == NULL is valid, it defines the default namespace
+      * within the subtree (until overridden).
+      *
+      * xmlNsType is unified with xmlElementType.
+
+     d xmlNsType       s                   based(######typedef######)           enum
+     d                                     like(xmlElementType)
+
+     d xmlNsPtr        s               *   based(######typedef######)
+
+     d xmlNs           ds                  based(xmlNsPtr)
+     d                                     align qualified
+     d  next                               like(xmlNsPtr)                       next Ns link
+     d  type                               like(xmlNsType)                      Global or local
+     d  href                           *                                        const xmlChar *
+     d  prefix                         *                                        const xmlChar *
+     d  #private                       *                                        Application data
+     d  context                            like(xmlDocPtr)                      normally an xmlDoc
+
+      * xmlDtd:
+      *
+      * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
+      * the internal subset and for the external subset.
+
+     d xmlDtd          ds                  based(xmlDtdPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_DTD_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Property link value
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlDocPtr)                      Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  notations                      *                                        notations hash table
+     d  elements                       *                                        elements hash table
+     d  entities                       *                                        entities hash table
+     d  ExternalID                     *                                        const xmlChar *
+     d  SystemID                       *                                        const xmlChar *
+     d  pentities                      *                                        param. ent. h table
+
+      * xmlAttr:
+      *
+      * An attribute on an XML node.
+
+     d xmlAttrPtr      s               *   based(######typedef######)
+
+     d xmlAttr         ds                  based(xmlAttrPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_ATTRIBUTE_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Property link value
+     d  last                               like(xmlNodePtr)                     NULL
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlAttrPtr)                     next sibling link
+     d  prev                               like(xmlAttrPtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  ns                                 like(xmlNsPtr)                       Associated namespace
+     d  atype                              like(xmlAttributeType)               For validation
+     d  psvi                           *                                        Type/PSVI info
+
+      * xmlID:
+      *
+      * An XML ID instance.
+
+     d xmlIdPtr        s               *   based(######typedef######)
+
+     d xmlID           ds                  based(xmlIdPtr)
+     d                                     align qualified
+     d  next                               like(xmlIdPtr)                       Next ID
+     d  attr                               like(xmlAttrPtr)                     Attribute holding it
+     d  name                           *                                        const xmlChar *
+     d  lineno                       10i 0                                      Line # if not avail
+     d  doc                                like(xmlDocPtr)                      Doc holding ID
+
+      * xmlRef:
+      *
+      * An XML IDREF instance.
+
+     d xmlRefPtr       s               *   based(######typedef######)
+
+     d xmlRef          ds                  based(xmlRefPtr)
+     d                                     align qualified
+     d  next                               like(xmlRefPtr)                      Next Ref
+     d  value                          *                                        const xmlChar *
+     d  attr                               like(xmlAttrPtr)                     Attribute holding it
+     d  name                           *                                        const xmlChar *
+     d  lineno                       10i 0                                      Line # if not avail
+
+      * xmlNode:
+      *
+      * A node in an XML tree.
+
+     d xmlNode         ds                  based(xmlNodePtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     Parent->children lnk
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      The containing doc
+     d  ns                                 like(xmlNsPtr)                       Associated namespace
+     d  content                        *                                        xmlChar *
+     d  properties                         like(xmlAttrPtr)                     Properties list
+     d  nsDef                              like(xmlNsPtr)                       Node ns definitions
+     d  psvi                           *                                        Type/PSVI info
+     d  line                          5u 0                                      Line number
+     d  extra                         5u 0                                      Data for XPath/XSLT
+
+      * xmlDocProperty
+      *
+      * Set of properties of the document as found by the parser
+      * Some of them are linked to similary named xmlParserOption
+
+     d xmlDocProperties...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_DOC_WELLFORMED...
+     d                 c                   X'00000001'
+     d  XML_DOC_NSVALID...
+     d                 c                   X'00000002'
+     d  XML_DOC_OLD10  c                   X'00000004'
+     d  XML_DOC_DTDVALID...
+     d                 c                   X'00000008'
+     d  XML_DOC_XINCLUDE...
+     d                 c                   X'00000010'
+     d  XML_DOC_USERBUILT...
+     d                 c                   X'00000020'
+     d  XML_DOC_INTERNAL...
+     d                 c                   X'00000030'
+     d  XML_DOC_HTML   c                   X'00000080'
+
+      * xmlDoc:
+      *
+      * An XML document.
+
+     d xmlDoc          ds                  based(xmlDocPtr)
+     d                                     align qualified
+     d  #private                       *                                        Application data
+     d  type                               like(xmlElementType)                 XML_DOCUMENT_NODE
+     d  name                           *                                        const xmlChar *
+     d  children                           like(xmlNodePtr)                     The document tree
+     d  last                               like(xmlNodePtr)                     Last child link
+     d  parent                             like(xmlNodePtr)                     Child->parent link
+     d  next                               like(xmlNodePtr)                     next sibling link
+     d  prev                               like(xmlNodePtr)                     previous sibling lnk
+     d  doc                                like(xmlDocPtr)                      Reference to itself
+     d  compression                  10i 0                                      zlib compression lev
+     d  standalone                   10i 0
+     d  intSubset                          like(xmlDtdPtr)                      Internal subset
+     d  extSubset                          like(xmlDtdPtr)                      External subset
+     d  oldns                              like(xmlNsPtr)                       Global namespace
+     d  version                        *                                        const xmlChar *
+     d  encoding                       *                                        const xmlChar *
+     d  ids                            *                                        IDs hash table
+     d  refs                           *                                        IDREFs hash table
+     d  URL                            *                                        const xmlChar *
+     d  charset                      10i 0                                      In-memory encoding
+     d  dict                           *                                        xmlDictPtr for names
+     d  psvi                           *                                        Type/PSVI ino
+     d  parseFlags                   10i 0                                      xmlParserOption's
+     d  properties                   10i 0                                      xmlDocProperties
+
+      * xmlDOMWrapAcquireNsFunction:
+      * @ctxt:  a DOM wrapper context
+      * @node:  the context node (element or attribute)
+      * @nsName:  the requested namespace name
+      * @nsPrefix:  the requested namespace prefix
+      *
+      * A function called to acquire namespaces (xmlNs) from the wrapper.
+      *
+      * Returns an xmlNsPtr or NULL in case of an error.
+
+     d xmlDOMWrapAcquireNsFunction...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlDOMWrapCtxt:
+      *
+      * Context for DOM wrapper-operations.
+
+     d xmlDOMWrapCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlDOMWrapCtxt...
+     d                 ds                  based(xmlDOMWrapCtxtPtr)
+     d                                     align qualified
+     d  #private                       *                                        void *
+     d  type                         10i 0
+     d  namespaceMap                   *                                        void *
+     d  getNsForNodeFunc...
+     d                                     like(xmlDOMWrapAcquireNsFunction)
+
+
+      * Variables.
+
+      * Some helper functions
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DEBUG_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SAX1_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DOCB_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateNCName...
+     d                 pr            10i 0 extproc('xmlValidateNCName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateQName...
+     d                 pr            10i 0 extproc('xmlValidateQName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+     d xmlValidateName...
+     d                 pr            10i 0 extproc('xmlValidateName')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+     d xmlValidateNMToken...
+     d                 pr            10i 0 extproc('xmlValidateNMToken')
+     d  value                          *   value options(*string)               const xmlChar *
+     d  space                        10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlBuildQName   pr              *   extproc('xmlBuildQName')             xmlChar *
+     d  ncname                         *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  memory                    65535    options(*varsize: *omit)             xmlChar[]
+     d  len                          10i 0 value                                memory length
+
+     d xmlSplitQName2  pr              *   extproc('xmlSplitQName2')            xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *                                        xmlChar *
+
+     d xmlSplitQName3  pr              *   extproc('xmlSplitQName3')            const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0
+
+      * Handling Buffers, the old ones see @xmlBuf for the new ones.
+
+     d xmlSetBufferAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlSetBufferAllocationScheme')
+     d  scheme                             value
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlGetBufferAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlGetBufferAllocationScheme')
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlBufferCreate...
+     d                 pr                  extproc('xmlBufferCreate')
+     d                                     like(xmlBufferPtr)
+
+     d xmlBufferCreateSize...
+     d                 pr                  extproc('xmlBufferCreateSize')
+     d                                     like(xmlBufferPtr)
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferCreateStatic...
+     d                 pr                  extproc('xmlBufferCreateStatic')
+     d                                     like(xmlBufferPtr)
+     d  mem                            *   value
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferResize...
+     d                 pr            10i 0 extproc('xmlBufferResize')
+     d  buf                                value like(xmlBufferPtr)
+     d  size                         10u 0 value                                size_t
+
+     d xmlBufferFree   pr                  extproc('xmlBufferFree')
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferDump   pr            10i 0 extproc('xmlBufferDump')
+     d  file                           *   value                                FILE *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferAdd    pr            10i 0 extproc('xmlBufferAdd')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value                                str length
+
+     d xmlBufferAddHead...
+     d                 pr            10i 0 extproc('xmlBufferAddHead')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value                                str length
+
+     d xmlBufferCat    pr            10i 0 extproc('xmlBufferCat')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlBufferCCat   pr            10i 0 extproc('xmlBufferCCat')
+     d  buf                                value like(xmlBufferPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlBufferShrink...
+     d                 pr            10i 0 extproc('xmlBufferShrink')
+     d  buf                                value like(xmlBufferPtr)
+     d  len                          10u 0 value                                str length
+
+     d xmlBufferGrow   pr            10i 0 extproc('xmlBufferGrow')
+     d  buf                                value like(xmlBufferPtr)
+     d  len                          10u 0 value                                str length
+
+     d xmlBufferEmpty  pr                  extproc('xmlBufferEmpty')
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferContent...
+     d                 pr              *   extproc('xmlBufferContent')          const xmlChar *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferDetach...
+     d                 pr              *   extproc('xmlBufferDetach')           xmlChar *
+     d  buf                                value like(xmlBufferPtr)
+
+     d xmlBufferSetAllocationScheme...
+     d                 pr                  extproc(
+     d                                      'xmlBufferSetAllocationScheme')
+     d  buf                                value like(xmlBufferPtr)
+     d  scheme                             value
+     d                                     like(xmlBufferAllocationScheme)
+
+     d xmlBufferLength...
+     d                 pr            10i 0 extproc('xmlBufferLength')
+     d  buf                                value like(xmlBufferPtr)
+
+      * Creating/freeing new structures.
+
+     d xmlCreateIntSubset...
+     d                 pr                  extproc('xmlCreateIntSubset')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemlID                      *   value options(*string)               const xmlChar *
+
+     d xmlNewDtd       pr                  extproc('xmlNewDtd')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ExternalID                     *   value options(*string)               const xmlChar *
+     d  SystemlID                      *   value options(*string)               const xmlChar *
+
+     d xmlGetIntSubset...
+     d                 pr                  extproc('xmlGetIntSubset')
+     d                                     like(xmlDtdPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlFreeDtd      pr                  extproc('xmlFreeDtd')
+     d  cur                                value like(xmlDtdPtr)
+
+      /if defined(LIBXML_LEGACY_ENABLED)
+     d xmlNewGlobalNs  pr                  extproc('xmlNewGlobalNs')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_LEGACY_ENABLD
+
+     d xmlNewNs        pr                  extproc('xmlNewNs')
+     d                                     like(xmlNsPtr)
+     d  node                               value like(xmlNodePtr)
+     d  href                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlFreeNs       pr                  extproc('xmlFreeNs')
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlFreeNsList   pr                  extproc('xmlFreeNsList')
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlNewDoc       pr                  extproc('xmlNewDoc')
+     d                                     like(xmlDocPtr)
+     d  version                        *   value options(*string)               const xmlChar *
+
+     d xmlFreeDoc      pr                  extproc('xmlFreeDoc')
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlNewDocProp   pr                  extproc('xmlNewDocProp')
+     d                                     like(xmlAttrPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNewProp      pr                  extproc('xmlNewProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlNewNsProp    pr                  extproc('xmlNewNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlNewNsPropEatName...
+     d                 pr                  extproc('xmlNewNsPropEatName')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlFreePropList...
+     d                 pr                  extproc('xmlFreePropList')
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlFreeProp     pr                  extproc('xmlFreeProp')
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlCopyProp     pr                  extproc('xmlCopyProp')
+     d                                     like(xmlAttrPtr)
+     d  target                             value like(xmlNodePtr)
+     d  cur                                value like(xmlAttrPtr)
+
+     d xmlCopyPropList...
+     d                 pr                  extproc('xmlCopyPropList')
+     d                                     like(xmlAttrPtr)
+     d  target                             value like(xmlNodePtr)
+     d  cur                                value like(xmlAttrPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyDtd      pr                  extproc('xmlCopyDtd')
+     d                                     like(xmlDtdPtr)
+     d  dtd                                value like(xmlDtdPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlCopyDoc      pr                  extproc('xmlCopyDoc')
+     d                                     like(xmlDocPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  recursive                    10i 0 value
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Creating new nodes.
+
+     d xmlNewDocNode   pr                  extproc('xmlNewDocNode')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocNodeEatName...
+     d                 pr                  extproc('xmlNewDocNodeEatName')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewNode      pr                  extproc('xmlNewNode')
+     d                                     like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlNewNodeEatName...
+     d                 pr                  extproc('xmlNewNodeEatName')
+     d                                     like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value                                xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNewChild     pr                  extproc('xmlNewChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlNewDocText   pr                  extproc('xmlNewDocText')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewText      pr                  extproc('xmlNewText')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocPI     pr                  extproc('xmlNewDocPI')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewPI        pr                  extproc('xmlNewPI')
+     d                                     like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocTextLen...
+     d                 pr                  extproc('xmlNewDocTextLen')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewTextLen   pr                  extproc('xmlNewTextLen')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewDocComment...
+     d                 pr                  extproc('xmlNewDocComment')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewComment   pr                  extproc('xmlNewComment')
+     d                                     like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewCDataBlock...
+     d                 pr                  extproc('xmlNewCDataBlock')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNewCharRef   pr                  extproc('xmlNewCharRef')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlNewReference...
+     d                 pr                  extproc('xmlNewReference')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlCopyNode     pr                  extproc('xmlCopyNode')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+     d  recursive                    10i 0 value
+
+     d xmlDocCopyNode  pr                  extproc('xmlDocCopyNode')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  recursive                    10i 0 value
+
+     d xmlDocCopyNodeList...
+     d                 pr                  extproc('xmlDocCopyNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlCopyNodeList...
+     d                 pr                  extproc('xmlCopyNodeList')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNewTextChild...
+     d                 pr                  extproc('xmlNewTextChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocRawNode...
+     d                 pr                  extproc('xmlNewDocRawNode')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNewDocFragment...
+     d                 pr                  extproc('xmlNewDocFragment')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      * Navigating.
+
+     d xmlNewDocFragment...
+     d xmlGetLineNo    pr            20i 0 extproc('xmlGetLineNo')
+     d  node                               value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_DEBUG_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlGetNodePath  pr              *   extproc('xmlGetNodePath')            xmlChar *
+     d  node                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlDocGetRootElement...
+     d                 pr                  extproc('xmlDocGetRootElement')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlGetLastChild...
+     d                 pr                  extproc('xmlGetLastChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlNodeIsText   pr            10i 0 extproc('xmlNodeIsText')
+     d  node                               value like(xmlNodePtr)
+
+     d xmlIsBlankNode  pr            10i 0 extproc('xmlIsBlankNode')
+     d  node                               value like(xmlNodePtr)
+
+      * Changing the structure.
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlDocSetRootElement...
+     d                 pr                  extproc('xmlDocSetRootElement')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  root                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetName  pr                  extproc('xmlNodeSetName')
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlAddChild     pr                  extproc('xmlAddChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlAddChildList...
+     d                 pr                  extproc('xmlAddChildList')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_WRITER_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlReplaceNode  pr                  extproc('xmlReplaceNode')
+     d                                     like(xmlNodePtr)
+     d  old                                value like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlAddPrevSibling...
+     d                 pr                  extproc('xmlAddPrevSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlAddSibling   pr                  extproc('xmlAddSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlAddNextSibling...
+     d                 pr                  extproc('xmlAddNextSibling')
+     d                                     like(xmlNodePtr)
+     d  cur                                value like(xmlNodePtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlUnlinkNode   pr                  extproc('xmlUnlinkNode')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlTextMerge    pr                  extproc('xmlTextMerge')
+     d                                     like(xmlNodePtr)
+     d  first                              value like(xmlNodePtr)
+     d  second                             value like(xmlNodePtr)
+
+     d xmlTextConcat   pr            10i 0 extproc('xmlTextConcat')
+     d  node                               value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlFreeNodeList...
+     d                 pr                  extproc('xmlFreeNodeList')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlFreeNode     pr                  extproc('xmlFreeNode')
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlSetTreeDoc   pr                  extproc('xmlSetTreeDoc')
+     d  tree                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSetListDoc   pr                  extproc('xmlSetListDoc')
+     d  list                               value like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+
+      * Namespaces.
+
+     d xmlSearchNs     pr                  extproc('xmlSearchNs')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlSearchNsByHref...
+     d                 pr                  extproc('xmlSearchNsByHref')
+     d                                     like(xmlNsPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  href                           *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlGetNsList    pr              *   extproc('xmlGetNsList')              xmlNsPtr *
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlSetNs        pr                  extproc('xmlSetNs')
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+
+     d xmlCopyNamespace...
+     d                 pr                  extproc('xmlCopyNamespace')
+     d                                     like(xmlNsPtr)
+     d  cur                                value like(xmlNsPtr)
+
+     d xmlCopyNamespaceList...
+     d                 pr                  extproc('xmlCopyNamespaceList')
+     d                                     like(xmlNsPtr)
+     d  cur                                value like(xmlNsPtr)
+
+      * Changing the content.
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XINCLUDE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_HTML_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlSetProp      pr                  extproc('xmlSetProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSetNsProp    pr                  extproc('xmlSetNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlGetNoNsProp  pr              *   extproc('xmlGetNoNsProp')            xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetProp      pr              *   extproc('xmlGetProp')                xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHasProp      pr                  extproc('xmlHasProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlHasNsProp    pr                  extproc('xmlHasNsProp')
+     d                                     like(xmlAttrPtr)
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlGetNsProp    pr              *   extproc('xmlGetNsProp')              xmlChar *
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  nameSpace                      *   value options(*string)               const xmlChar *
+
+     d xmlStringGetNodeList...
+     d                 pr                  extproc('xmlStringGetNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlStringLenGetNodeList...
+     d                 pr                  extproc('xmlStringLenGetNodeList')
+     d                                     like(xmlNodePtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNodeListGetString...
+     d                 pr              *   extproc('xmlNodeListGetString')      xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  list                               value like(xmlNodePtr)
+     d  inLine                       10i 0 value
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeListGetRawString...
+     d                 pr              *   extproc('xmlNodeListGetRawString')   xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  list                               value like(xmlNodePtr)
+     d  inLine                       10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeSetContent...
+     d                 pr                  extproc('xmlNodeSetContent')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetContentLen...
+     d                 pr                  extproc('xmlNodeSetContentLen')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeAddContent...
+     d                 pr                  extproc('xmlNodeAddContent')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlNodeAddContentLen...
+     d                 pr                  extproc('xmlNodeAddContentLen')
+     d  cur                                value like(xmlNodePtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlNodeGetContent...
+     d                 pr              *   extproc('xmlNodeGetContent')         xmlChar *
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeBufGetContent...
+     d                 pr            10i 0 extproc('xmlNodeBufGetContent')
+     d  buffer                             value like(xmlBufferPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlBufGetNodeContent...
+     d                 pr            10i 0 extproc('xmlBufGetNodeContent')
+     d  buf                                value like(xmlBufPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeGetLang  pr              *   extproc('xmlNodeGetLang')            xmlChar *
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlNodeGetSpacePreserve...
+     d                 pr            10i 0 extproc('xmlNodeGetSpacePreserve')
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlNodeSetLang  pr                  extproc('xmlNodeSetLang')
+     d  cur                                value like(xmlNodePtr)
+     d  lang                           *   value options(*string)               const xmlChar *
+
+     d xmlNodeSetSpacePreserve...
+     d                 pr                  extproc('xmlNodeSetSpacePreserve')
+     d  cur                                value like(xmlNodePtr)
+     d  val                          10i 0 value
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlNodeGetBase  pr              *   extproc('xmlNodeGetBase')            xmlChar *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_XINCLUDE_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlNodeSetBase  pr                  extproc('xmlNodeSetBase')
+     d  node                               value like(xmlNodePtr)
+     d  uri                            *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Removing content.
+
+     d xmlRemoveProp   pr            10i 0 extproc('xmlRemoveProp')
+     d  cur                                value like(xmlAttrPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlUnsetNsProp  pr            10i 0 extproc('xmlUnsetNsProp')
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlUnsetProp    pr            10i 0 extproc('xmlUnsetProp')
+     d  node                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * Internal, don't use.
+
+     d xmlBufferWriteCharacter...                                               Warning: renamed
+     d                 pr                  extproc('xmlBufferWriteCHAR')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+     d xmlBufferWriteChar...
+     d                 pr                  extproc('xmlBufferWriteChar')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+     d xmlBufferWriteQuotedString...
+     d                 pr                  extproc('xmlBufferWriteQuotedString')
+     d  buf                                value like(xmlBufferPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlAttrSerializeTxtContent...
+     d                 pr                  extproc('xmlAttrSerializeTxtContent')
+     d  buf                                value like(xmlBufferPtr)
+     d  attr                               value like(xmlAttrPtr)
+     d  string                         *   value options(*string)               const xmlChar *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /if defined(LIBXML_TREE_ENABLED)
+
+      * Namespace handling.
+
+     d xmlReconciliateNs...
+     d                 pr            10i 0 extproc('xmlReconciliateNs')
+     d  doc                                value like(xmlDocPtr)
+     d  tree                               value like(xmlNodePtr)
+      /endif
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Saving.
+
+     d xmlDocDumpFormatMemory...
+     d                 pr                  extproc('xmlDocDumpFormatMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *                                        xmlChar * (*)
+     d  size                         10i 0
+     d  format                       10i 0 value
+
+     d xmlDocDumpMemory...
+     d                 pr                  extproc('xmlDocDumpMemory')
+     d  cur                                value like(xmlDocPtr)
+     d  mem                            *                                        xmlChar * (*)
+     d  size                         10i 0
+
+     d xmlDocDumpMemoryEnc...
+     d                 pr                  extproc('xmlDocDumpMemoryEnc')
+     d  out_doc                            value like(xmlDocPtr)
+     d  doc_txt_ptr                    *                                        xmlChar * (*)
+     d  doc_txt_len                  10i 0
+     d  txt_encoding                   *   value options(*string)               const char *
+
+     d xmlDocDumpFormatMemoryEnc...
+     d                 pr                  extproc('xmlDocDumpFormatMemoryEnc')
+     d  out_doc                            value like(xmlDocPtr)
+     d  doc_txt_ptr                    *                                        xmlChar * (*)
+     d  doc_txt_len                  10i 0
+     d  txt_encoding                   *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlDocFormatDump...
+     d                 pr            10i 0 extproc('xmlDocFormatDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+     d  format                       10i 0 value
+
+     d xmlDocDump      pr            10i 0 extproc('xmlDocDump')
+     d  f                              *   value                                FILE *
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlElemDump     pr                  extproc('xmlElemDump')
+     d  f                              *   value                                FILE *
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlSaveFile     pr            10i 0 extproc('xmlSaveFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+
+     d xmlSaveFormatFile...
+     d                 pr            10i 0 extproc('xmlSaveFormatFile')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  format                       10i 0 value
+
+     d xmlBufNodeDump  pr            10u 0 extproc('xmlBufNodeDump')            size_t
+     d  buf                                value like(xmlBufPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+
+     d xmlNodeDump     pr            10i 0 extproc('xmlNodeDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+
+     d xmlSaveFileTo   pr            10i 0 extproc('xmlSaveFileTo')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlSaveFormatFileTo...
+     d                 pr            10i 0 extproc('xmlSaveFormatFileTo')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlNodeDumpOutput...
+     d                 pr                  extproc('xmlNodeDumpOutput')
+     d  buf                                value like(xmlOutputBufferPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlNodePtr)
+     d  level                        10i 0 value
+     d  format                       10i 0 value
+     d  encoding                       *   value options(*string)               const char *
+
+     d xmlSaveFormatFileEnc...
+     d                 pr            10i 0 extproc('xmlSaveFormatFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  format                       10i 0 value
+
+     d xmlSaveFileEnc  pr            10i 0 extproc('xmlSaveFileEnc')
+     d  filename                       *   value options(*string)               const char *
+     d  cur                                value like(xmlDocPtr)
+     d  encoding                       *   value options(*string)               const char *
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * XHTML
+
+     d xmlIsXHTML      pr            10i 0 extproc('xmlIsXHTML')
+     d  systemID                       *   value options(*string)               const xmlChar *
+     d  publicID                       *   value options(*string)               const xmlChar *
+
+      * Compression.
+
+     d xmlGetDocCompressMode...
+     d                 pr            10i 0 extproc('xmlGetDocCompressMode')
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSetDocCompressMode...
+     d                 pr                  extproc('xmlSetDocCompressMode')
+     d  doc                                value like(xmlDocPtr)
+     d  mode                         10i 0 value
+
+     d xmlGetCompressMode...
+     d                 pr            10i 0 extproc('xmlGetCompressMode')
+
+     d xmlSetCompressMode...
+     d                 pr                  extproc('xmlSetCompressMode')
+     d  mode                         10i 0 value
+
+      * DOM-wrapper helper functions.
+
+     d xmlDOMWrapNewCtxt...
+     d                 pr                  extproc('xmlDOMWrapNewCtxt')
+     d                                     like(xmlDOMWrapCtxtPtr)
+
+     d xmlDOMWrapFreeCtxt...
+     d                 pr                  extproc('xmlDOMWrapFreeCtxt')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+
+     d xmlDOMWrapReconcileNamespaces...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlDOMWrapReconcileNamespaces')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapAdoptNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapAdoptNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  sourceDoc                          value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  destDoc                            value like(xmlDocPtr)
+     d  destParent                         value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapRemoveNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapRemoveNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+     d xmlDOMWrapCloneNode...
+     d                 pr            10i 0 extproc('xmlDOMWrapCloneNode')
+     d  ctxt                               value like(xmlDOMWrapCtxtPtr)
+     d  sourceDoc                          value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  clonedNode                         like(xmlNodePtr)
+     d  destDoc                            value like(xmlDocPtr)
+     d  destParent                         value like(xmlNodePtr)
+     d  options                      10i 0 value
+
+      /if defined(LIBXML_TREE_ENABLED)
+
+      * 5 interfaces from DOM ElementTraversal, but different in entities
+      * traversal.
+
+     d xmlChildElementCount...
+     d                 pr            20u 0 extproc('xmlChildElementCount')
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlNextElementSibling...
+     d                 pr                  extproc('xmlNextElementSibling')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlFirstElementChild...
+     d                 pr                  extproc('xmlFirstElementChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlLastElementChild...
+     d                 pr                  extproc('xmlLastElementChild')
+     d                                     like(xmlNodePtr)
+     d  parent                             value like(xmlNodePtr)
+
+     d xmlPreviousElementSibling...
+     d                 pr                  extproc('xmlPreviousElementSibling')
+     d                                     like(xmlNodePtr)
+     d  node                               value like(xmlNodePtr)
+      /endif
+
+      /if not defined(XML_PARSER_H__)
+      /include "libxmlrpg/xmlmemory"
+      /endif
+
+      /endif                                                                    XML_TREE_H__
diff --git a/os400/libxmlrpg/uri.rpgle b/os400/libxmlrpg/uri.rpgle
new file mode 100644 (file)
index 0000000..9a23d80
--- /dev/null
@@ -0,0 +1,100 @@
+      * Summary: library of generic URI related routines
+      * Description: library of generic URI related routines
+      *              Implements RFC 2396
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_URI_H__)
+      /define XML_URI_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      * xmlURI:
+      *
+      * A parsed URI reference. This is a struct containing the various fields
+      * as described in RFC 2396 but separated for further processing.
+      *
+      * Note: query is a deprecated field which is incorrectly unescaped.
+      * query_raw takes precedence over query if the former is set.
+      * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127
+
+     d xmlURIPtr       s               *   based(######typedef######)
+
+     d xmlURI          ds                  based(xmlURIPtr)
+     d                                     align qualified
+     d  scheme                         *                                        char *
+     d  opaque                         *                                        char *
+     d  authority                      *                                        char *
+     d  server                         *                                        char *
+     d  user                           *                                        char *
+     d  port                         10i 0
+     d  path                           *                                        char *
+     d  query                          *                                        char *
+     d  fragment                       *                                        char *
+     d  cleanup                      10i 0
+     d  query_raw                      *                                        char *
+
+     d xmlCreateURI    pr                  extproc('xmlCreateURI')
+     d                                     like(xmlURIPtr)
+
+     d xmlBuildURI     pr              *   extproc('xmlBuildURI')               xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  base                           *   value options(*string)               const xmlChar *
+
+     d xmlBuildRelativeURI...
+     d                 pr              *   extproc('xmlBuildRelativeURI')       xmlChar *
+     d  URI                            *   value options(*string)               const xmlChar *
+     d  base                           *   value options(*string)               const xmlChar *
+
+     d xmlParseURI     pr                  extproc('xmlParseURI')
+     d                                     like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlParseURIRaw  pr                  extproc('xmlParseURIRaw')
+     d                                     like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+     d  raw                          10i 0 value
+
+     d xmlParseURIReference...
+     d                 pr            10i 0 extproc('xmlParseURIReference')
+     d  uri                                value like(xmlURIPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlSaveUri      pr              *   extproc('xmlSaveUri')                xmlChar *
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlPrintURI     pr                  extproc('xmlPrintURI')
+     d  stream                         *   value                                FILE *
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlURIEscapeStr...
+     d                 pr              *   extproc('xmlURIEscapeStr')           xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  list                           *   value options(*string)               const xmlChar *
+
+     d xmlURIUnescapeString...
+     d                 pr              *   extproc('xmlURIUnescapeString')      char *
+     d  str                            *   value options(*string)               const char *
+     d  len                          10i 0 value
+     d  target                         *   value options(*string)               char *
+
+     d xmlNormalizeURIPath...
+     d                 pr            10i 0 extproc('xmlNormalizeURIPath')
+     d  path                           *   value options(*string)               char *
+
+     d xmlURIEscape    pr              *   extproc('xmlURIEscape')              xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlFreeURI      pr                  extproc('xmlFreeURI')
+     d  uri                                value like(xmlURIPtr)
+
+     d xmlCanonicPath  pr              *   extproc('xmlCanonicPath')            xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+     d xmlPathToURI    pr              *   extproc('xmlPathToURI')              xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    XML_URI_H__
diff --git a/os400/libxmlrpg/valid.rpgle b/os400/libxmlrpg/valid.rpgle
new file mode 100644 (file)
index 0000000..722b89d
--- /dev/null
@@ -0,0 +1,575 @@
+      * Summary: The DTD validation
+      * Description: API for the DTD handling and the validity checking
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_VALID_H__)
+      /define XML_VALID_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/list"
+      /include "libxmlrpg/xmlautomata"
+      /include "libxmlrpg/xmlregexp"
+
+      * Validation state added for non-determinist content model.
+
+     d xmlValidStatePtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlValidityErrorFunc:
+      * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+      *        but comes from ctxt->userData (which normally contains such
+      *        a pointer); ctxt->userData can be changed by the user.
+      * @msg:  the string to format *printf like vararg
+      * @...:  remaining arguments to the format
+      *
+      * Callback called when a validity error is found. This is a message
+      * oriented function similar to an *printf function.
+
+     d xmlValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlValidityWarningFunc:
+      * @ctx:  usually an xmlValidCtxtPtr to a validity error context,
+      *        but comes from ctxt->userData (which normally contains such
+      *        a pointer); ctxt->userData can be changed by the user.
+      * @msg:  the string to format *printf like vararg
+      * @...:  remaining arguments to the format
+      *
+      * Callback called when a validity warning is found. This is a message
+      * oriented function similar to an *printf function.
+
+     d xmlValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlValidCtxt:
+      * An xmlValidCtxt is used for error reporting when validating.
+
+     d xmlValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlValidCtxt    ds                  based(xmlValidCtxtPtr)
+     d                                     align qualified
+     d  userdata                       *                                        void *
+     d  error                              like(xmlValidityErrorFunc)           Error callback
+     d  warning                            like(xmlValidityWarningFunc)         Warning callback
+      *
+      * Node analysis stack used when validating within entities
+      *
+     d  node                               like(xmlNodePtr)                     Current parsed Node
+     d  nodeNr                       10i 0                                      Parsing stack depth
+     d  nodeMax                      10i 0                                      Max stack depth
+     d  nodeTab                        *                                        xmlNodePtr *
+      *
+     d  finishDtd                    10u 0                                      Finish validtng DTD?
+     d  doc                                like(xmlDocPtr)                      The document
+     d  valid                        10i 0                                      Temp check result
+      *
+      * state state used for non-determinist content validation
+      *
+     d  vstate                         *                                        xmlValidState *
+     d  vstateNr                     10i 0                                      Validat. stack depth
+     d  vstateMax                    10i 0                                      Max stack depth
+     d  vstateTab                      *                                        xmlValidState *
+      *
+      /if defined(LIBXML_REGEXP_ENABLED)
+     d  am                                 like(xmlAutomataPtr)                 The automata
+     d  state                              like(xmlAutomataStatePtr)            Automata build state
+      /else
+     d  am                             *
+     d  state                          *
+      /endif
+
+      * ALL notation declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlNotationTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL element declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlElementTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL attribute declarations are stored in a table.
+      * There is one table per DTD.
+
+     d xmlAttributeTablePtr...
+     d                 s               *   based(######typedef######)
+
+      * ALL IDs attributes are stored in a table.
+      * There is one table per document.
+
+     d xmlIDTablePtr   s               *   based(######typedef######)
+
+      * ALL Refs attributes are stored in a table.
+      * There is one table per document.
+
+     d xmlRefTablePtr  s               *   based(######typedef######)
+
+      * Notation
+
+     d xmlAddNotationDecl...
+     d                 pr                  extproc('xmlAddNotationDecl')
+     d                                     like(xmlNotationPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  PublicID                       *   value options(*string)               const xmlChar *
+     d  SystemID                       *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyNotationTable...
+     d                 pr                  extproc('xmlCopyNotationTable')
+     d                                     like(xmlNotationPtr)
+     d  table                              value like(xmlNotationTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeNotationTable...
+     d                 pr                  extproc('xmlFreeNotationTable')
+     d  table                              value like(xmlNotationTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpNotationDecl...
+     d                 pr                  extproc('xmlDumpNotationDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  nota                               value like(xmlNotationPtr)
+
+     d xmlDumpNotationTable...
+     d                 pr                  extproc('xmlDumpNotationTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlNotationTablePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Element Content
+      * the non Doc version are being deprecated
+
+     d xmlNewElementContent...
+     d                 pr                  extproc('xmlNewElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  name                           *   value                                const xmlChar *
+     d  type                               value like(xmlElementContentType)
+
+     d xmlCopyElementContent...
+     d                 pr                  extproc('xmlCopyElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlFreeElementContent...
+     d                 pr                  extproc('xmlFreeElementContent')
+     d  cur                                value like(xmlElementContentPtr)
+
+      * the new versions with doc argument
+
+     d xmlNewDocElementContent...
+     d                 pr                  extproc('xmlNewDocElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value                                const xmlChar *
+     d  type                               value like(xmlElementContentType)
+
+     d xmlCopyDocElementContent...
+     d                 pr                  extproc('xmlCopyDocElementContent')
+     d                                     like(xmlElementContentPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  content                            value like(xmlElementContentPtr)
+
+     d xmlFreeDocElementContent...
+     d                 pr                  extproc('xmlFreeDocElementContent')
+     d  doc                                value like(xmlDocPtr)
+     d  cur                                value like(xmlElementContentPtr)
+
+     d xmlSnprintfElementContent...
+     d                 pr                  extproc('xmlSnprintfElementContent')
+     d  buf                       65535    options(*varsize)
+     d  size                         10i 0 value
+     d  content                            value like(xmlElementContentPtr)
+     d  englob                       10i 0 value
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+      * DEPRECATED
+     d xmlSprintfElementContent...
+     d                 pr                  extproc('xmlSprintfElementContent')
+     d  buf                       65535    options(*varsize)
+     d  content                            value like(xmlElementContentPtr)
+     d  englob                       10i 0 value
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * DEPRECATED
+
+      * Element
+
+     d xmlAddElementDecl...
+     d                 pr                  extproc('xmlAddElementDecl')
+     d                                     like(xmlElementPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  type                               value like(xmlElementTypeVal)
+     d  content                            value like(xmlElementContentPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyElementTable...
+     d                 pr                  extproc('xmlCopyElementTable')
+     d                                     like(xmlElementTablePtr)
+     d  table                              value like(xmlElementTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeElementTable...
+     d                 pr                  extproc('xmlFreeElementTable')
+     d  table                              value like(xmlElementTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpElementTable...
+     d                 pr                  extproc('xmlDumpElementTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlElementTablePtr)
+
+     d xmlDumpElementDecl...
+     d                 pr                  extproc('xmlDumpElementDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  elem                               value like(xmlElementPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Enumeration
+
+     d xmlCreateEnumeration...
+     d                 pr                  extproc('xmlCreateEnumeration')
+     d                                     like(xmlEnumerationPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlFreeEnumeration...
+     d                 pr                  extproc('xmlFreeEnumeration')
+     d  cur                                value like(xmlEnumerationPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyEnumeration...
+     d                 pr                  extproc('xmlCopyEnumeration')
+     d                                     like(xmlEnumerationPtr)
+     d  cur                                value like(xmlEnumerationPtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+      * Attribute
+
+     d xmlAddAttributeDecl...
+     d                 pr                  extproc('xmlAddAttributeDecl')
+     d                                     like(xmlAttributePtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+     d  type                               value like(xmlAttributeType)
+     d  def                                value like(xmlAttributeDefault)
+     d  defaultValue                   *   value options(*string)               const xmlChar *
+     d  tree                               value like(xmlEnumerationPtr)
+
+      /if defined(LIBXML_TREE_ENABLED)
+     d xmlCopyAttributeTable...
+     d                 pr                  extproc('xmlCopyAttributeTable')
+     d                                     like(xmlAttributeTablePtr)
+     d  table                              value like(xmlAttributeTablePtr)
+      /endif                                                                    LIBXML_TREE_ENABLED
+
+     d xmlFreeAttributeTable...
+     d                 pr                  extproc('xmlFreeAttributeTable')
+     d  table                              value like(xmlAttributeTablePtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlDumpAttributeTable...
+     d                 pr                  extproc('xmlDumpAttributeTable')
+     d  buf                                value like(xmlBufferPtr)
+     d  table                              value like(xmlAttributeTablePtr)
+
+     d xmlDumpAttributeDecl...
+     d                 pr                  extproc('xmlDumpAttributeDecl')
+     d  buf                                value like(xmlBufferPtr)
+     d  attr                               value like(xmlAttributePtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * IDs
+
+     d xmlAddID        pr                  extproc('xmlAddID')
+     d                                     like(xmlIDPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlFreeIdTable  pr                  extproc('xmlFreeIDTable')
+     d  table                              value like(xmlIDTablePtr)
+
+     d xmlGetID        pr                  extproc('xmlGetID')
+     d                                     like(xmlAttrPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ID                             *   value options(*string)               const xmlChar *
+
+     d xmlIsID         pr            10i 0 extproc('xmlIsID')
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlRemoveID     pr            10i 0 extproc('xmlRemoveID')
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttrPtr)
+
+      * IDREFs
+
+     d xmlAddRef       pr                  extproc('xmlAddRef')
+     d                                     like(xmlRefPtr)
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlFreeRefTable...
+     d                 pr                  extproc('xmlFreeRefTable')
+     d  table                              value like(xmlRefTablePtr)
+
+     d xmlIsRef        pr            10i 0 extproc('xmlIsRef')
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlRemoveRef    pr            10i 0 extproc('xmlRemoveRef')
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttrPtr)
+
+     d xmlGetRefs      pr                  extproc('xmlGetRefs')
+     d                                     like(xmlListPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  ID                             *   value options(*string)               const xmlChar *
+
+      * The public function calls related to validity checking.
+
+      /if defined(LIBXML_VALID_ENABLED)
+      * Allocate/Release Validation Contexts
+
+     d xmlNewValidCtxt...
+     d                 pr                  extproc('xmlNewValidCtxt')
+     d                                     like(xmlValidCtxtPtr)
+
+     d xmlFreeValidCtxt...
+     d                 pr                  extproc('xmlFreeValidCtxt')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+
+     d xmlValidateRoot...
+     d                 pr            10i 0 extproc('xmlValidateRoot')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateElementDecl...
+     d                 pr            10i 0 extproc('xmlValidateElementDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlElementPtr)
+
+     d xmlValidNormalizeAttributeValue...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlValidNormalizeAttributeValue')
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidCtxtNormalizeAttributeValue...
+     d                 pr              *   extproc('xmlValidCtxt+               xmlChar *
+     d                                     NormalizeAttributeValue')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateAttributeDecl...
+     d                 pr            10i 0 extproc('xmlValidateAttributeDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  attr                               value like(xmlAttributePtr)
+
+     d xmlValidateAttributeValue...
+     d                 pr            10i 0 extproc('xmlValidateAttributeValue')
+     d  type                               value like(xmlAttributeType)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNotationDecl...
+     d                 pr            10i 0 extproc('xmlValidateNotationDecl')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  nota                               value like(xmlNotationPtr)
+
+     d xmlValidateDtd  pr            10i 0 extproc('xmlValidateDtd')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  dtd                                value like(xmlDtdPtr)
+
+     d xmlValidateDtdFinal...
+     d                 pr            10i 0 extproc('xmlValidateDtdFinal')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateDocument...
+     d                 pr            10i 0 extproc('xmlValidateDocument')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlValidateElement...
+     d                 pr            10i 0 extproc('xmlValidateElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlValidateOneElement...
+     d                 pr            10i 0 extproc('xmlValidateOneElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+
+     d xmlValidateOneAttribute...
+     d                 pr            10i 0 extproc('xmlValidateOneAttribute')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  attr                               value like(xmlAttrPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateOneNamespace...
+     d                 pr            10i 0 extproc('xmlValidateOneNamespace')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  ns                                 value like(xmlNsPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateDocumentFinal...
+     d                 pr            10i 0 extproc('xmlValidateDocumentFinal')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+      /endif                                                                    LIBXML_VALID_ENABLED
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_VALID_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlValidateNotationUse...
+     d                 pr            10i 0 extproc('xmlValidateNotationUse')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  notationName                   *   value options(*string)               const xmlChar *
+
+      /undefine XML_TESTVAL
+      /endif
+
+     d xmlIsMixedElement...
+     d                 pr            10i 0 extproc('xmlIsMixedElement')
+     d  doc                                value like(xmlDocPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdAttrDesc...
+     d                 pr                  extproc('xmlGetDtdAttrDesc')
+     d                                     like(xmlAttributePtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdQAttrDesc...
+     d                 pr                  extproc('xmlGetDtdQAttrDesc')
+     d                                     like(xmlAttributePtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  elem                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdNotationDesc...
+     d                 pr                  extproc('xmlGetDtdNotationDesc')
+     d                                     like(xmlNotationPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdQElementDesc...
+     d                 pr                  extproc('xmlGetDtdQElementDesc')
+     d                                     like(xmlElementPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlGetDtdElementDesc...
+     d                 pr                  extproc('xmlGetDtdElementDesc')
+     d                                     like(xmlElementPtr)
+     d  dtd                                value like(xmlDtdPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_VALID_ENABLED)
+     d xmlValidGetPotentialChildren...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlValidGetPotentialChildren')
+     d  ctree                          *   value                                xmlElementContent *
+     d  names                          *                                        const xmlChar *(*)
+     d  len                          10i 0
+     d  max                          10i 0 value
+
+     d xmlValidGetValidElements...
+     d                 pr            10i 0 extproc('xmlValidGetValidElements')
+     d  prev                               like(xmlNodePtr)
+     d  next                               like(xmlNodePtr)
+     d  names                          *                                        const xmlChar *(*)
+     d  max                          10i 0 value
+
+     d xmlValidateNameValue...
+     d                 pr            10i 0 extproc('xmlValidateNameValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNamesValue...
+     d                 pr            10i 0 extproc('xmlValidateNamesValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNmtokenValue...
+     d                 pr            10i 0 extproc('xmlValidateNmtokenValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlValidateNmtokensValue...
+     d                 pr            10i 0 extproc('xmlValidateNmtokensValue')
+     d  value                          *   value options(*string)               const xmlChar *
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+      * Validation based on the regexp support
+
+     d xmlValidBuildContentModel...
+     d                 pr            10i 0 extproc('xmlValidBuildContentModel')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  elem                               value like(xmlElementPtr)
+
+     d xmlValidatePushElement...
+     d                 pr            10i 0 extproc('xmlValidatePushElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  qname                          *   value options(*string)               const xmlChar *
+
+     d xmlValidatePushCData...
+     d                 pr            10i 0 extproc('xmlValidatePushCData')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  data                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlValidatePopElement...
+     d                 pr            10i 0 extproc('xmlValidatePopElement')
+     d  ctxt                               value like(xmlValidCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  elem                               value like(xmlNodePtr)
+     d  qname                          *   value options(*string)               const xmlChar *
+
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    LIBXML_VALID_ENABLED
+      /endif                                                                    XML_VALID_H__
diff --git a/os400/libxmlrpg/xinclude.rpgle b/os400/libxmlrpg/xinclude.rpgle
new file mode 100644 (file)
index 0000000..c0b68ff
--- /dev/null
@@ -0,0 +1,147 @@
+      * Summary: implementation of XInclude
+      * Description: API to handle XInclude processing,
+      * implements the
+      * World Wide Web Consortium Last Call Working Draft 10 November 2003
+      * http://www.w3.org/TR/2003/WD-xinclude-20031110
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XINCLUDE_H__)
+      /define XML_XINCLUDE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_XINCLUDE_ENABLED)
+
+      * XINCLUDE_NS:
+      *
+      * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
+
+     d XINCLUDE_NS     c                   'http://www.w3.org/2003/XInclude'
+
+
+      * XINCLUDE_OLD_NS:
+      *
+      * Define the draft Xinclude namespace: http://www.w3.org/2001/XInclude
+
+     d XINCLUDE_OLD_NS...
+     d                 c                   'http://www.w3.org/2001/XInclude'
+
+      * XINCLUDE_NODE:
+      *
+      * Macro defining "include"
+
+     d XINCLUDE_NODE   c                   'include'
+
+      * XINCLUDE_FALLBACK:
+      *
+      * Macro defining "fallback"
+
+     d XINCLUDE_FALLBACK...
+     d                 c                   'fallback'
+
+      * XINCLUDE_HREF:
+      *
+      * Macro defining "href"
+
+     d XINCLUDE_HREF   c                   'href'
+
+      * XINCLUDE_PARSE:
+      *
+      * Macro defining "parse"
+
+     d XINCLUDE_PARSE  c                   'parse'
+
+      * XINCLUDE_PARSE_XML:
+      *
+      * Macro defining "xml"
+
+     d XINCLUDE_PARSE_XML...
+     d                 c                   'xml'
+
+      * XINCLUDE_PARSE_TEXT:
+      *
+      * Macro defining "text"
+
+     d XINCLUDE_PARSE_TEXT...
+     d                 c                   'text'
+
+      * XINCLUDE_PARSE_ENCODING:
+      *
+      * Macro defining "encoding"
+
+     d XINCLUDE_PARSE_ENCODING...
+     d                 c                   'encoding'
+
+      * XINCLUDE_PARSE_XPOINTER:
+      *
+      * Macro defining "xpointer"
+
+     d XINCLUDE_PARSE_XPOINTER...
+     d                 c                   'xpointer'
+
+     d xmlXIncludeCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * standalone processing
+
+     d xmlXIncludeProcess...
+     d                 pr            10i 0 extproc('xmlXIncludeProcess')
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlXIncludeProcessFlags...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessFlags')
+     d  doc                                value like(xmlDocPtr)
+     d  flags                        10i 0 value
+
+     d xmlXIncludeProcessFlagsData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessFlagsData')
+     d  doc                                value like(xmlDocPtr)
+     d  flags                        10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlXIncludeProcessTreeFlagsData...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessTreeFlagsData')
+     d  tree                               value like(xmlNodePtr)
+     d  flags                        10i 0 value
+     d  data                           *   value                                void *
+
+     d xmlXIncludeProcessTree...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessTree')
+     d  tree                               value like(xmlNodePtr)
+
+     d xmlXIncludeProcessTreeFlags...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXIncludeProcessTreeFlags')
+     d  tree                               value like(xmlNodePtr)
+     d  flags                        10i 0 value
+
+
+      * contextual processing
+
+     d xmlXIncludeNewContext...
+     d                 pr                  extproc('xmlXIncludeNewContext')
+     d                                     like(xmlXIncludeCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlXIncludeSetFlags...
+     d                 pr            10i 0 extproc('xmlXIncludeSetFlags')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+     d  flags                        10i 0 value
+
+     d xmlXIncludeFreeContext...
+     d                 pr                  extproc('xmlXIncludeFreeContext')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+
+     d xmlXIncludeProcessNode...
+     d                 pr            10i 0 extproc('xmlXIncludeProcessNode')
+     d  ctxt                               value like(xmlXIncludeCtxtPtr)
+     d  tree                               value like(xmlNodePtr)
+
+      /endif                                                                    XINCLUDE_ENABLED
+      /endif                                                                    XML_XINCLUDE_H__
diff --git a/os400/libxmlrpg/xlink.rpgle b/os400/libxmlrpg/xlink.rpgle
new file mode 100644 (file)
index 0000000..964e605
--- /dev/null
@@ -0,0 +1,164 @@
+      * Summary: unfinished XLink detection module
+      * Description: unfinished XLink detection module
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XLINK_H__)
+      /define XML_XLINK_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_XPTR_ENABLED)
+
+      * Various defines for the various Link properties.
+      *
+      * NOTE: the link detection layer will try to resolve QName expansion
+      *       of namespaces. If "foo" is the prefix for "http://foo.com/"
+      *       then the link detection layer will expand role="foo:myrole"
+      *       to "http://foo.com/:myrole".
+      * NOTE: the link detection layer will expand URI-Refences found on
+      *       href attributes by using the base mechanism if found.
+
+     d xlinkRef        s               *   based(######typedef######)           xmlChar *
+     d xlinkRole       s               *   based(######typedef######)           xmlChar *
+     d xlinkTitle      s               *   based(######typedef######)           xmlChar *
+
+     d xlinkType       s             10i 0 based(######typedef######)           enum
+     d  XLINK_TYPE_NONE...
+     d                 c                   0
+     d  XLINK_TYPE_SIMPLE...
+     d                 c                   1
+     d  XLINK_TYPE_EXTENDED...
+     d                 c                   2
+     d  XLINK_TYPE_EXTENDED_SET...
+     d                 c                   3
+
+     d xlinkShow       s             10i 0 based(######typedef######)           enum
+     d  XLINK_SHOW_NONE...
+     d                 c                   0
+     d  XLINK_SHOW_NEW...
+     d                 c                   1
+     d  XLINK_SHOW_EMBED...
+     d                 c                   2
+     d  XLINK_SHOW_REPLACE...
+     d                 c                   3
+
+     d xlinkActuate    s             10i 0 based(######typedef######)           enum
+     d  XLINK_ACTUATE_NONE...
+     d                 c                   0
+     d  XLINK_ACTUATE_AUTO...
+     d                 c                   1
+     d  XLINK_ACTUATE_ONREQUEST...
+     d                 c                   2
+
+      * xlinkNodeDetectFunc:
+      * @ctx:  user data pointer
+      * @node:  the node to check
+      *
+      * This is the prototype for the link detection routine.
+      * It calls the default link detection callbacks upon link detection.
+
+     d xlinkNodeDetectFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * The link detection module interact with the upper layers using
+      * a set of callback registered at parsing time.
+
+      * xlinkSimpleLinkFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @href:  the target of the link
+      * @role:  the role string
+      * @title:  the link title
+      *
+      * This is the prototype for a simple link detection callback.
+
+     d xlinkSimpleLinkFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xlinkExtendedLinkFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @nbLocators: the number of locators detected on the link
+      * @hrefs:  pointer to the array of locator hrefs
+      * @roles:  pointer to the array of locator roles
+      * @nbArcs: the number of arcs detected on the link
+      * @from:  pointer to the array of source roles found on the arcs
+      * @to:  pointer to the array of target roles found on the arcs
+      * @show:  array of values for the show attributes found on the arcs
+      * @actuate:  array of values for the actuate attributes found on the arcs
+      * @nbTitles: the number of titles detected on the link
+      * @title:  array of titles detected on the link
+      * @langs:  array of xml:lang values for the titles
+      *
+      * This is the prototype for a extended link detection callback.
+
+     d xlinkExtendedLinkFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xlinkExtendedLinkSetFunk:
+      * @ctx:  user data pointer
+      * @node:  the node carrying the link
+      * @nbLocators: the number of locators detected on the link
+      * @hrefs:  pointer to the array of locator hrefs
+      * @roles:  pointer to the array of locator roles
+      * @nbTitles: the number of titles detected on the link
+      * @title:  array of titles detected on the link
+      * @langs:  array of xml:lang values for the titles
+      *
+      * This is the prototype for a extended link set detection callback.
+
+     d xlinkExtendedLinkSetFunk...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * This is the structure containing a set of Links detection callbacks.
+      *
+      * There is no default xlink callbacks, if one want to get link
+      * recognition activated, those call backs must be provided before parsing.
+
+     d xlinkHandlerPtr...
+     d                 s               *   based(######typedef######)           xmlChar *
+
+     d xlinkHandler    ds                  based(xlinkHandlerPtr)
+     d                                     align qualified
+     d  simple                             like(xlinkSimpleLinkFunk)
+     d  extended                           like(xlinkExtendedLinkFunk)
+     d  set                                like(xlinkExtendedLinkSetFunk)
+
+      * The default detection routine, can be overridden, they call the default
+      * detection callbacks.
+
+     d xlinkGetDefaultDetect...
+     d                 pr                  extproc('xlinkGetDefaultDetect')
+     d                                     like(xlinkNodeDetectFunc)
+
+     d xlinkSetDefaultDetect...
+     d                 pr                  extproc('xlinkSetDefaultDetect')
+     d  func                               value like(xlinkNodeDetectFunc)
+
+      * Routines to set/get the default handlers.
+
+     d xlinkGetDefaultHandler...
+     d                 pr                  extproc('xlinkGetDefaultHandler')
+     d                                     like(xlinkHandlerPtr)
+
+     d xlinkSetDefaultHandler...
+     d                 pr                  extproc('xlinkSetDefaultHandler')
+     d  handler                            value like(xlinkHandlerPtr)
+
+      * Link detection module itself.
+
+     d xlinkIsLink     pr                  extproc('xlinkIsLink')
+     d                                     like(xlinkType)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+
+      /endif                                                                    LIBXML_XPTR_ENABLED
+      /endif                                                                    XML_XLINK_H__
diff --git a/os400/libxmlrpg/xmlIO.rpgle b/os400/libxmlrpg/xmlIO.rpgle
new file mode 100644 (file)
index 0000000..72911bc
--- /dev/null
@@ -0,0 +1,441 @@
+      * Summary: interface for the I/O interfaces used by the parser
+      * Description: interface for the I/O interfaces used by the parser
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_IO_H__)
+      /define XML_IO_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * Those are the functions and datatypes for the parser input
+      * I/O structures.
+
+      * xmlInputMatchCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Input API to detect if the current handler
+      * can provide input fonctionnalities for this resource.
+      *
+      * Returns 1 if yes and 0 if another Input module should be used
+
+     d xmlInputMatchCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputOpenCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Input API to open the resource
+      *
+      * Returns an Input context or NULL in case or error
+
+     d xmlInputOpenCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputReadCallback:
+      * @context:  an Input context
+      * @buffer:  the buffer to store data read
+      * @len:  the length of the buffer in bytes
+      *
+      * Callback used in the I/O Input API to read the resource
+      *
+      * Returns the number of bytes read or -1 in case of error
+
+     d xmlInputReadCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlInputCloseCallback:
+      * @context:  an Input context
+      *
+      * Callback used in the I/O Input API to close the resource
+      *
+      * Returns 0 or -1 in case of error
+
+     d xmlInputCloseCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Those are the functions and datatypes for the library output
+      * I/O structures.
+
+      * xmlOutputMatchCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Output API to detect if the current handler
+      * can provide output fonctionnalities for this resource.
+      *
+      * Returns 1 if yes and 0 if another Output module should be used
+
+     d xmlOutputMatchCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputOpenCallback:
+      * @filename: the filename or URI
+      *
+      * Callback used in the I/O Output API to open the resource
+      *
+      * Returns an Output context or NULL in case or error
+
+     d xmlOutputOpenCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputWriteCallback:
+      * @context:  an Output context
+      * @buffer:  the buffer of data to write
+      * @len:  the length of the buffer in bytes
+      *
+      * Callback used in the I/O Output API to write to the resource
+      *
+      * Returns the number of bytes written or -1 in case of error
+
+     d xmlOutputWriteCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlOutputCloseCallback:
+      * @context:  an Output context
+      *
+      * Callback used in the I/O Output API to close the resource
+      *
+      * Returns 0 or -1 in case of error
+
+     d xmlOutputCloseCallback...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      /include "libxmlrpg/globals"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/parser"
+      /include "libxmlrpg/encoding"
+
+     d xmlParserInputBuffer...
+     d                 ds                  based(xmlParserInputBufferPtr)
+     d                                     align qualified
+     d  context                        *                                        void *
+     d  readcallback                       like(xmlInputReadCallback)
+     d  closecallback                      like(xmlInputCloseCallback)
+      *
+     d  encoder                            like(xmlCharEncodingHandlerPtr)      Conversions --> UTF8
+      *
+     d  buffer                             like(xmlBufPtr)                      UTF-8 local buffer
+     d  raw                                like(xmlBufPtr)                      Raw input buffer
+     d  compressed                   10i 0
+     d  error                        10i 0
+     d  rawconsumed                  20u 0
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlOutputBuffer...
+     d                 ds                  based(xmlOutputBufferPtr)
+     d                                     align qualified
+     d  context                        *                                        void *
+     d  writecallback                      like(xmlOutputWriteCallback)
+     d  closecallback                      like(xmlOutputCloseCallback)
+      *
+     d  encoder                            like(xmlCharEncodingHandlerPtr)      Conversions --> UTF8
+      *
+     d  buffer                             like(xmlBufPtr)                      UTF-8/ISOLatin local
+     d  conv                               like(xmlBufPtr)                      Buffer for output
+     d  written                      10i 0                                      Total # byte written
+     d  error                        10i 0
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for input
+
+     d xmlCleanupInputCallbacks...
+     d                 pr                  extproc('xmlCleanupInputCallbacks')
+
+     d xmlPopInputCallbacks...
+     d                 pr            10i 0 extproc('xmlPopInputCallbacks')
+
+     d xmlRegisterDefaultInputCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterDefaultInputCallbacks')
+
+     d xmlAllocParserInputBuffer...
+     d                 pr                  extproc('xmlAllocParserInputBuffer')
+     d                                     like(xmlParserInputBufferPtr)
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFilename...
+     d                 pr                  extproc(
+     d                                     'xmlParserInputBufferCreateFilename')
+     d                                     like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFile...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateFile')
+     d                                     like(xmlParserInputBufferPtr)
+     d  file                           *   value                                FILE *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateFd...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateFd')
+     d                                     like(xmlParserInputBufferPtr)
+     d  fd                           10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateMem...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateMem')
+     d                                     like(xmlParserInputBufferPtr)
+     d  mem                            *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateStatic...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateStatic')
+     d                                     like(xmlParserInputBufferPtr)
+     d  mem                            *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferCreateIO...
+     d                 pr                  extproc(
+     d                                      'xmlParserInputBufferCreateIO')
+     d                                     like(xmlParserInputBufferPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  enc                                value like(xmlCharEncoding)
+
+     d xmlParserInputBufferRead...
+     d                 pr            10i 0 extproc('xmlParserInputBufferRead')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputBufferGrow...
+     d                 pr            10i 0 extproc('xmlParserInputBufferGrow')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+
+     d xmlParserInputBufferPush...
+     d                 pr            10i 0 extproc('xmlParserInputBufferPush')
+     d  in                                 value like(xmlParserInputBufferPtr)
+     d  len                          10i 0 value
+     d  buf                            *   value options(*string)               const char *
+
+     d xmlFreeParserInputBuffer...
+     d                 pr                  extproc('xmlFreeParserInputBuffer')
+     d  in                                 value like(xmlParserInputBufferPtr)
+
+     d xmlParserGetDirectory...
+     d                 pr              *   extproc('xmlParserGetDirectory')     char *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlRegisterInputCallbacks...
+     d                 pr            10i 0 extproc('xmlRegisterInputCallbacks')
+     d  matchFunc                          value like(xmlInputMatchCallback)
+     d  openFunc                           value like(xmlInputOpenCallback)
+     d  readFunc                           value like(xmlInputReadCallback)
+     d  closeFunc                          value like(xmlInputCloseCallback)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * Interfaces for output
+
+     d xmlCleanupOutputCallbacks...
+     d                 pr                  extproc('xmlCleanupOutputCallbacks')
+
+     d xmlRegisterDefaultOutputCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterDefaultOuputCallbacks')
+
+     d xmlAllocOutputBuffer...
+     d                 pr                  extproc('xmlAllocOutputBuffer')
+     d                                     like(xmlOutputBufferPtr)
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateFilename...
+     d                 pr                  extproc(
+     d                                      'xmlOutputBufferCreateFilename')
+     d                                     like(xmlOutputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+     d  compression                  10i 0 value
+
+     d xmlOutputBufferCreateFile...
+     d                 pr                  extproc('xmlOutputBufferCreateFile')
+     d                                     like(xmlOutputBufferPtr)
+     d  file                           *   value                                FILE *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateBuffer...
+     d                 pr                  extproc(
+     d                                      'xmlOutputBufferCreateBuffer')
+     d                                     like(xmlOutputBufferPtr)
+     d  buffer                             value like(xmlBufferPtr)
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateFd...
+     d                 pr                  extproc('xmlOutputBufferCreateFd')
+     d                                     like(xmlOutputBufferPtr)
+     d  fd                           10i 0 value
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+     d xmlOutputBufferCreateIO...
+     d                 pr                  extproc('xmlOutputBufferCreateIO')
+     d                                     like(xmlOutputBufferPtr)
+     d  iowrite                            value like(xmlOutputWriteCallback)
+     d  ioclose                            value like(xmlOutputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  encoder                            value
+     d                                     like(xmlCharEncodingHandlerPtr)
+
+      * Couple of APIs to get the output without digging into the buffers
+
+     d xmlOutputBufferGetContent...
+     d                 pr              *   extproc('xmlOutputBufferGetContent') const xmlChar *
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferGetSize...
+     d                 pr            10u 0 extproc('xmlOutputBufferGetSize')    size_t
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferWrite...
+     d                 pr            10i 0 extproc('xmlOutputBufferWrite')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  len                          10i 0 value
+     d  buf                            *   value options(*string)               const char *
+
+     d xmlOutputBufferWriteString...
+     d                 pr            10i 0 extproc('xmlOutputBufferWriteString')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  str                            *   value options(*string)               const char *
+
+     d xmlOutputBufferWriteEscape...
+     d                 pr            10i 0 extproc('xmlOutputBufferWriteEscape')
+     d  out                                value like(xmlOutputBufferPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  escaping                           value like(xmlCharEncodingOutputFunc)
+
+     d xmlOutputBufferFlush...
+     d                 pr            10i 0 extproc('xmlOutputBufferFlush')
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlOutputBufferClose...
+     d                 pr            10i 0 extproc('xmlOutputBufferClose')
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlRegisterOutputCallbacks...
+     d                 pr            10i 0 extproc('xmlRegisterOutputCallbacks')
+     d  matchFunc                          value like(xmlOutputMatchCallback)
+     d  openFunc                           value like(xmlOutputOpenCallback)
+     d  writeFunc                          value like(xmlOutputWriteCallback)
+     d  closeFunc                          value like(xmlOutputCloseCallback)
+
+      /if defined(LIBXML_HTTP_ENABLED)
+
+      *  This function only exists if HTTP support built into the library
+
+     d xmlRegisterHTTPPostCallbacks...
+     d                 pr                  extproc(
+     d                                      'xmlRegisterHTTPPostCallbacks')
+
+      /endif                                                                    LIBXML_HTTP_ENABLED
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlCheckHTTPInput...
+     d                 pr                  extproc('xmlCheckHTTPInput')
+     d                                     like(xmlParserInputPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  ret                                value like(xmlParserInputPtr)
+
+      * A predefined entity loader disabling network accesses
+
+     d xmlNoNetExternalEntityLoader...
+     d                 pr                  extproc(
+     d                                      'xmlNoNetExternalEntityLoader')
+     d                                     like(xmlParserInputPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  ID                             *   value options(*string)               const char *
+     d  ctxt                               value like(xmlParserCtxtPtr)
+
+      * xmlNormalizeWindowsPath is obsolete, don't use it.
+      * Check xmlCanonicPath in uri.h for a better alternative.
+
+     d xmlNormalizeWindowsPath...
+     d                 pr              *   extproc('xmlNormalizeWindowsPath')   xmlChar *
+     d  path                           *   value options(*string)               const xmlChar *
+
+     d xmlCheckFilename...
+     d                 pr            10i 0 extproc('xmlCheckFilename')
+     d  path                           *   value options(*string)               const char *
+
+      * Default 'file://' protocol callbacks
+
+     d xmlFileMatch    pr            10i 0 extproc('xmlFileMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlFileOpen     pr              *   extproc('xmlFileOpen')               void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlFileRead     pr            10i 0 extproc('xmlFileRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlFileClose    pr            10i 0 extproc('xmlFileClose')
+     d  context                        *   value                                void *
+
+      * Default 'http://' protocol callbacks
+
+      /if defined(LIBXML_HTTP_ENABLED)
+     d xmlIOHTTPMatch  pr            10i 0 extproc('xmlIOHTTPMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOHTTPOpen   pr              *   extproc('xmlIOHTTPOpen')             void *
+     d  filename                       *   value options(*string)               const char *
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlIOHTTPOpenW  pr              *   extproc('xmlIOHTTPOpenW')            void *
+     d  post_uri                       *   value options(*string)               const char *
+     d  compression                  10i 0 value
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+     d xmlIOHTTPRead   pr            10i 0 extproc('xmlIOHTTPRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlIOHTTPClose  pr            10i 0 extproc('xmlIOHTTPClose')
+     d  context                        *   value                                void *
+      /endif                                                                    LIBXML_HTTP_ENABLED
+
+      * Default 'ftp://' protocol callbacks
+
+      /if defined(LIBXML_FTP_ENABLED)
+     d xmlIOFTPMatch   pr            10i 0 extproc('xmlIOFTPMatch')
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOFTPOpen    pr              *   extproc('xmlIOFTPOpen')              void *
+     d  filename                       *   value options(*string)               const char *
+
+     d xmlIOFTPRead    pr            10i 0 extproc('xmlIOFTPRead')
+     d  context                        *   value                                void *
+     d  buffer                    65535    options(*varsize)
+     d  len                          10i 0 value
+
+     d xmlIOFTPClose   pr            10i 0 extproc('xmlIOFTPClose')
+     d  context                        *   value                                void *
+      /endif                                                                    LIBXML_FTP_ENABLED
+
+      /endif                                                                    XML_IO_H__
diff --git a/os400/libxmlrpg/xmlautomata.rpgle b/os400/libxmlrpg/xmlautomata.rpgle
new file mode 100644 (file)
index 0000000..4979725
--- /dev/null
@@ -0,0 +1,179 @@
+      * Summary: API to build regexp automata
+      * Description: the API to build regexp automata
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_AUTOMATA_H__)
+      /define XML_AUTOMATA_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+      /if defined(LIBXML_AUTOMATA_ENABLED)
+
+      /include "libxmlrpg/xmlregexp"
+
+      * xmlAutomataPtr:
+      *
+      * A libxml automata description, It can be compiled into a regexp
+
+     d xmlAutomataPtr  s               *   based(######typedef######)
+
+      * xmlAutomataStatePtr:
+      *
+      * A state int the automata description,
+
+     d xmlAutomataStatePtr...
+     d                 s               *   based(######typedef######)
+
+      * Building API
+
+     d xmlNewAutomata  pr                  extproc('xmlNewAutomata')
+     d                                     like(xmlAutomataPtr)
+
+     d xmlFreeAutomata...
+     d                 pr                  extproc('xmlFreeAutomata')
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataGetInitState...
+     d                 pr                  extproc('xmlAutomataGetInitState')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataSetFinalState...
+     d                 pr            10i 0 extproc('xmlAutomataSetFinalState')
+     d  am                                 value like(xmlAutomataPtr)
+     d  state                              value like(xmlAutomataStatePtr)
+
+     d xmlAutomataNewState...
+     d                 pr                  extproc('xmlAutomataNewState')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataNewTransition...
+     d                 pr                  extproc('xmlAutomataNewTransition')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewTransition2...
+     d                 pr                  extproc('xmlAutomataNewTransition2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewNegTrans...
+     d                 pr                  extproc('xmlAutomataNewNegTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewCountTrans...
+     d                 pr                  extproc('xmlAutomataNewCountTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewCountTrans2...
+     d                 pr                  extproc('xmlAutomataNewCountTrans2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewOnceTrans...
+     d                 pr                  extproc('xmlAutomataNewOnceTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewOnceTrans2...
+     d                 pr                  extproc('xmlAutomataNewOnceTrans2')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  token                          *   value options(*string)               const xmlChar *
+     d  token2                         *   value options(*string)               const xmlChar *
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+     d  data                           *   value options(*string)               void *
+
+     d xmlAutomataNewAllTrans...
+     d                 pr                  extproc('xmlAutomataNewAllTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  lax                          10i 0 value
+
+     d xmlAutomataNewEpsilon...
+     d                 pr                  extproc('xmlAutomataNewEpsilon')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+
+     d xmlAutomataNewCountedTrans...
+     d                 pr                  extproc('xmlAutomataNewCountedTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  counter                      10i 0 value
+
+     d xmlAutomataNewCounterTrans...
+     d                 pr                  extproc('xmlAutomataNewCounterTrans')
+     d                                     like(xmlAutomataStatePtr)
+     d  am                                 value like(xmlAutomataPtr)
+     d  from                               value like(xmlAutomataStatePtr)
+     d  to                                 value like(xmlAutomataStatePtr)
+     d  counter                      10i 0 value
+
+     d xmlAutomataNewCounter...
+     d                 pr            10i 0 extproc('xmlAutomataNewCounter')
+     d  am                                 value like(xmlAutomataPtr)
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+
+     d xmlAutomataCompile...
+     d                 pr                  extproc('xmlAutomataCompile')
+     d                                     like(xmlRegexpPtr)
+     d  am                                 value like(xmlAutomataPtr)
+
+     d xmlAutomataIsDeterminist...
+     d                 pr            10i 0 extproc('xmlAutomataIsDeterminist')
+     d  am                                 value like(xmlAutomataPtr)
+
+      /endif                                                                    AUTOMATA_ENABLED
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    XML_AUTOMATA_H__
diff --git a/os400/libxmlrpg/xmlerror.rpgle b/os400/libxmlrpg/xmlerror.rpgle
new file mode 100644 (file)
index 0000000..b77caad
--- /dev/null
@@ -0,0 +1,1681 @@
+      * Summary: error handling
+      * Description: the API used to report errors
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /include "libxmlrpg/parser"
+
+      /if not defined(XML_ERROR_H__)
+      /define XML_ERROR_H__
+
+      * xmlErrorLevel:
+      *
+      * Indicates the level of an error
+
+     d xmlErrorLevel   s             10i 0 based(######typedef######)           enum
+     d  XML_ERR_NONE   c                   0
+     d  XML_ERR_WARNING...                                                      A simple warning
+     d                 c                   1
+     d  XML_ERR_ERROR  c                   2                                    A recoverable error
+     d  XML_ERR_FATAL  c                   3                                    A fatal error
+
+      * xmlErrorDomain:
+      *
+      * Indicates where an error may have come from
+
+     d xmlErrorDomain  s             10i 0 based(######typedef######)           enum
+     d  XML_FROM_NONE  c                   0
+     d  XML_FROM_PARSER...                                                      XML parser
+     d                 c                   1
+     d  XML_FROM_TREE  c                   2                                    Tree module
+     d  XML_FROM_NAMESPACE...                                                   XML Namespace module
+     d                 c                   3
+     d  XML_FROM_DTD   c                   4                                    DTD validation
+     d  XML_FROM_HTML  c                   5                                    HTML parser
+     d  XML_FROM_MEMORY...                                                      Memory allocator
+     d                 c                   6
+     d  XML_FROM_OUTPUT...                                                      serialization code
+     d                 c                   7
+     d  XML_FROM_IO    c                   8                                    Input/Output stack
+     d  XML_FROM_FTP   c                   9                                    FTP module
+     d  XML_FROM_HTTP  c                   10                                   HTTP module
+     d  XML_FROM_XINCLUDE...                                                    XInclude processing
+     d                 c                   11
+     d  XML_FROM_XPATH...                                                       XPath module
+     d                 c                   12
+     d  XML_FROM_XPOINTER...                                                    XPointer module
+     d                 c                   13
+     d  XML_FROM_REGEXP...                                                      Regexp module
+     d                 c                   14
+     d  XML_FROM_DATATYPE...                                                    W3C XML Schm Dtatype
+     d                 c                   15
+     d  XML_FROM_SCHEMASP...                                                    W3C XML Schm parser
+     d                 c                   16
+     d  XML_FROM_SCHEMASV...                                                    W3C XML Schm valid.
+     d                 c                   17
+     d  XML_FROM_RELAXNGP...                                                    Relax-NG parser
+     d                 c                   18
+     d  XML_FROM_RELAXNGV...                                                    Relax-NG validator
+     d                 c                   19
+     d  XML_FROM_CATALOG...                                                     Catalog module
+     d                 c                   20
+     d  XML_FROM_C14N  c                   21                                   Canonicalization
+     d  XML_FROM_XSLT  c                   22                                   Engine from libxslt
+     d  XML_FROM_VALID...                                                       DTD valid. w/ ctxt
+     d                 c                   23
+     d  XML_FROM_CHECK...                                                       Error check module
+     d                 c                   24
+     d  XML_FROM_WRITER...                                                      xmlwriter module
+     d                 c                   25
+     d  XML_FROM_MODULE...                                                      Dyn. loaded module
+     d                 c                   26
+     d  XML_FROM_I18N  c                   27                                   Mod hdlg char conv
+     d  XML_FROM_SCHEMATRONV...                                                 Schematron valid
+     d                 c                   28
+     d  XML_FROM_BUFFER...                                                      Buffers module
+     d                 c                   29
+     d  XML_FROM_URI   c                   30                                   URI module
+
+      * xmlError:
+      *
+      * An XML Error instance.
+
+     d xmlErrorPtr     s               *   based(######typedef######)
+
+     d xmlError        ds                  based(xmlErrorPtr)
+     d                                     align qualified
+     d  domain                       10i 0                                      Libpart raising err
+     d  code                         10i 0                                      Error code
+     d  message                        *                                        char *
+     d  level                              like(xmlErrorLevel)                  Error severity
+     d  file                           *                                        File name
+     d  line                         10i 0                                      Line number
+     d  str1                           *                                        char *
+     d  str2                           *                                        char *
+     d  str3                           *                                        char *
+     d  int1                         10i 0                                      Extra number info
+     d  int2                         10i 0                                      Error column
+     d  ctxt                           *                                        void *
+     d  node                           *                                        void *
+
+      * xmlParserError:
+      *
+      * This is an error that the XML (or HTML) parser can generate
+
+     d xmlParserErrors...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_ERR_OK     c                   0
+     d  XML_ERR_INTERNAL_ERROR...
+     d                 c                   1
+     d  XML_ERR_NO_MEMORY...
+     d                 c                   2
+     d  XML_ERR_DOCUMENT_START...
+     d                 c                   3
+     d  XML_ERR_DOCUMENT_EMPTY...
+     d                 c                   4
+     d  XML_ERR_DOCUMENT_END...
+     d                 c                   5
+     d  XML_ERR_INVALID_HEX_CHARREF...
+     d                 c                   6
+     d  XML_ERR_INVALID_DEC_CHARREF...
+     d                 c                   7
+     d  XML_ERR_INVALID_CHARREF...
+     d                 c                   8
+     d  XML_ERR_INVALID_CHAR...
+     d                 c                   9
+     d  XML_ERR_CHARREF_AT_EOF...
+     d                 c                   10
+     d  XML_ERR_CHARREF_IN_PROLOG...
+     d                 c                   11
+     d  XML_ERR_CHARREF_IN_EPILOG...
+     d                 c                   12
+     d  XML_ERR_CHARREF_IN_DTD...
+     d                 c                   13
+     d  XML_ERR_ENTITYREF_AT_EOF...
+     d                 c                   14
+     d  XML_ERR_ENTITYREF_IN_PROLOG...
+     d                 c                   15
+     d  XML_ERR_ENTITYREF_IN_EPILOG...
+     d                 c                   16
+     d  XML_ERR_ENTITYREF_IN_DTD...
+     d                 c                   17
+     d  XML_ERR_PEREF_AT_EOF...
+     d                 c                   18
+     d  XML_ERR_PEREF_IN_PROLOG...
+     d                 c                   19
+     d  XML_ERR_PEREF_IN_EPILOG...
+     d                 c                   20
+     d  XML_ERR_PEREF_IN_INT_SUBSET...
+     d                 c                   21
+     d  XML_ERR_ENTITYREF_NO_NAME...
+     d                 c                   22
+     d  XML_ERR_ENTITYREF_SEMICOL_MISSING...
+     d                 c                   23
+     d  XML_ERR_PEREF_NO_NAME...
+     d                 c                   24
+     d  XML_ERR_PEREF_SEMICOL_MISSING...
+     d                 c                   25
+     d  XML_ERR_UNDECLARED_ENTITY...
+     d                 c                   26
+     d  XML_WAR_UNDECLARED_ENTITY...
+     d                 c                   27
+     d  XML_ERR_UNPARSED_ENTITY...
+     d                 c                   28
+     d  XML_ERR_ENTITY_IS_EXTERNAL...
+     d                 c                   29
+     d  XML_ERR_ENTITY_IS_PARAMETER...
+     d                 c                   30
+     d  XML_ERR_UNKNOWN_ENCODING...
+     d                 c                   31
+     d  XML_ERR_UNSUPPORTED_ENCODING...
+     d                 c                   32
+     d  XML_ERR_STRING_NOT_STARTED...
+     d                 c                   33
+     d  XML_ERR_STRING_NOT_CLOSED...
+     d                 c                   34
+     d  XML_ERR_NS_DECL_ERROR...
+     d                 c                   35
+     d  XML_ERR_ENTITY_NOT_STARTED...
+     d                 c                   36
+     d  XML_ERR_ENTITY_NOT_FINISHED...
+     d                 c                   37
+     d  XML_ERR_LT_IN_ATTRIBUTE...
+     d                 c                   38
+     d  XML_ERR_ATTRIBUTE_NOT_STARTED...
+     d                 c                   39
+     d  XML_ERR_ATTRIBUTE_NOT_FINISHED...
+     d                 c                   40
+     d  XML_ERR_ATTRIBUTE_WITHOUT_VALUE...
+     d                 c                   41
+     d  XML_ERR_ATTRIBUTE_REDEFINED...
+     d                 c                   42
+     d  XML_ERR_LITERAL_NOT_STARTED...
+     d                 c                   43
+     d  XML_ERR_LITERAL_NOT_FINISHED...
+     d                 c                   44
+     d  XML_ERR_COMMENT_NOT_FINISHED...
+     d                 c                   45
+     d  XML_ERR_PI_NOT_STARTED...
+     d                 c                   46
+     d  XML_ERR_PI_NOT_FINISHED...
+     d                 c                   47
+     d  XML_ERR_NOTATION_NOT_STARTED...
+     d                 c                   48
+     d  XML_ERR_NOTATION_NOT_FINISHED...
+     d                 c                   49
+     d  XML_ERR_ATTLIST_NOT_STARTED...
+     d                 c                   50
+     d  XML_ERR_ATTLIST_NOT_FINISHED...
+     d                 c                   51
+     d  XML_ERR_MIXED_NOT_STARTED...
+     d                 c                   52
+     d  XML_ERR_MIXED_NOT_FINISHED...
+     d                 c                   53
+     d  XML_ERR_ELEMCONTENT_NOT_STARTED...
+     d                 c                   54
+     d  XML_ERR_ELEMCONTENT_NOT_FINISHED...
+     d                 c                   55
+     d  XML_ERR_XMLDECL_NOT_STARTED...
+     d                 c                   56
+     d  XML_ERR_XMLDECL_NOT_FINISHED...
+     d                 c                   57
+     d  XML_ERR_CONDSEC_NOT_STARTED...
+     d                 c                   58
+     d  XML_ERR_CONDSEC_NOT_FINISHED...
+     d                 c                   59
+     d  XML_ERR_EXT_SUBSET_NOT_FINISHED...
+     d                 c                   60
+     d  XML_ERR_DOCTYPE_NOT_FINISHED...
+     d                 c                   61
+     d  XML_ERR_MISPLACED_CDATA_END...
+     d                 c                   62
+     d  XML_ERR_CDATA_NOT_FINISHED...
+     d                 c                   63
+     d  XML_ERR_RESERVED_XML_NAME...
+     d                 c                   64
+     d  XML_ERR_SPACE_REQUIRED...
+     d                 c                   65
+     d  XML_ERR_SEPARATOR_REQUIRED...
+     d                 c                   66
+     d  XML_ERR_NMTOKEN_REQUIRED...
+     d                 c                   67
+     d  XML_ERR_NAME_REQUIRED...
+     d                 c                   68
+     d  XML_ERR_PCDATA_REQUIRED...
+     d                 c                   69
+     d  XML_ERR_URI_REQUIRED...
+     d                 c                   70
+     d  XML_ERR_PUBID_REQUIRED...
+     d                 c                   71
+     d  XML_ERR_LT_REQUIRED...
+     d                 c                   72
+     d  XML_ERR_GT_REQUIRED...
+     d                 c                   73
+     d  XML_ERR_LTSLASH_REQUIRED...
+     d                 c                   74
+     d  XML_ERR_EQUAL_REQUIRED...
+     d                 c                   75
+     d  XML_ERR_TAG_NAME_MISMATCH...
+     d                 c                   76
+     d  XML_ERR_TAG_NOT_FINISHED...
+     d                 c                   77
+     d  XML_ERR_STANDALONE_VALUE...
+     d                 c                   78
+     d  XML_ERR_ENCODING_NAME...
+     d                 c                   79
+     d  XML_ERR_HYPHEN_IN_COMMENT...
+     d                 c                   80
+     d  XML_ERR_INVALID_ENCODING...
+     d                 c                   81
+     d  XML_ERR_EXT_ENTITY_STANDALONE...
+     d                 c                   82
+     d  XML_ERR_CONDSEC_INVALID...
+     d                 c                   83
+     d  XML_ERR_VALUE_REQUIRED...
+     d                 c                   84
+     d  XML_ERR_NOT_WELL_BALANCED...
+     d                 c                   85
+     d  XML_ERR_EXTRA_CONTENT...
+     d                 c                   86
+     d  XML_ERR_ENTITY_CHAR_ERROR...
+     d                 c                   87
+     d  XML_ERR_ENTITY_PE_INTERNAL...
+     d                 c                   88
+     d  XML_ERR_ENTITY_LOOP...
+     d                 c                   89
+     d  XML_ERR_ENTITY_BOUNDARY...
+     d                 c                   90
+     d  XML_ERR_INVALID_URI...
+     d                 c                   91
+     d  XML_ERR_URI_FRAGMENT...
+     d                 c                   92
+     d  XML_WAR_CATALOG_PI...
+     d                 c                   93
+     d  XML_ERR_NO_DTD...
+     d                 c                   94
+     d  XML_ERR_CONDSEC_INVALID_KEYWORD...
+     d                 c                   95
+     d  XML_ERR_VERSION_MISSING...
+     d                 c                   96
+     d  XML_WAR_UNKNOWN_VERSION...
+     d                 c                   97
+     d  XML_WAR_LANG_VALUE...
+     d                 c                   98
+     d  XML_WAR_NS_URI...
+     d                 c                   99
+     d  XML_WAR_NS_URI_RELATIVE...
+     d                 c                   100
+     d  XML_ERR_MISSING_ENCODING...
+     d                 c                   101
+     d  XML_WAR_SPACE_VALUE...
+     d                 c                   102
+     d  XML_ERR_NOT_STANDALONE...
+     d                 c                   103
+     d  XML_ERR_ENTITY_PROCESSING...
+     d                 c                   104
+     d  XML_ERR_NOTATION_PROCESSING...
+     d                 c                   105
+     d  XML_WAR_NS_COLUMN...
+     d                 c                   106
+     d  XML_WAR_ENTITY_REDEFINED...
+     d                 c                   107
+     d  XML_ERR_UNKNOWN_VERSION...
+     d                 c                   108
+     d  XML_ERR_VERSION_MISMATCH...
+     d                 c                   109
+     d  XML_ERR_NAME_TOO_LONG...
+     d                 c                   110
+     d  XML_ERR_USER_STOP...
+     d                 c                   111
+     d  XML_NS_ERR_XML_NAMESPACE...
+     d                 c                   200
+     d  XML_NS_ERR_UNDEFINED_NAMESPACE...
+     d                 c                   201
+     d  XML_NS_ERR_QNAME...
+     d                 c                   202
+     d  XML_NS_ERR_ATTRIBUTE_REDEFINED...
+     d                 c                   203
+     d  XML_NS_ERR_EMPTY...
+     d                 c                   204
+     d  XML_NS_ERR_COLON...
+     d                 c                   205
+     d  XML_DTD_ATTRIBUTE_DEFAULT...
+     d                 c                   500
+     d  XML_DTD_ATTRIBUTE_REDEFINED...
+     d                 c                   501
+     d  XML_DTD_ATTRIBUTE_VALUE...
+     d                 c                   502
+     d  XML_DTD_CONTENT_ERROR...
+     d                 c                   503
+     d  XML_DTD_CONTENT_MODEL...
+     d                 c                   504
+     d  XML_DTD_CONTENT_NOT_DETERMINIST...
+     d                 c                   505
+     d  XML_DTD_DIFFERENT_PREFIX...
+     d                 c                   506
+     d  XML_DTD_ELEM_DEFAULT_NAMESPACE...
+     d                 c                   507
+     d  XML_DTD_ELEM_NAMESPACE...
+     d                 c                   508
+     d  XML_DTD_ELEM_REDEFINED...
+     d                 c                   509
+     d  XML_DTD_EMPTY_NOTATION...
+     d                 c                   510
+     d  XML_DTD_ENTITY_TYPE...
+     d                 c                   511
+     d  XML_DTD_ID_FIXED...
+     d                 c                   512
+     d  XML_DTD_ID_REDEFINED...
+     d                 c                   513
+     d  XML_DTD_ID_SUBSET...
+     d                 c                   514
+     d  XML_DTD_INVALID_CHILD...
+     d                 c                   515
+     d  XML_DTD_INVALID_DEFAULT...
+     d                 c                   516
+     d  XML_DTD_LOAD_ERROR...
+     d                 c                   517
+     d  XML_DTD_MISSING_ATTRIBUTE...
+     d                 c                   518
+     d  XML_DTD_MIXED_CORRUPT...
+     d                 c                   519
+     d  XML_DTD_MULTIPLE_ID...
+     d                 c                   520
+     d  XML_DTD_NO_DOC...
+     d                 c                   521
+     d  XML_DTD_NO_DTD...
+     d                 c                   522
+     d  XML_DTD_NO_ELEM_NAME...
+     d                 c                   523
+     d  XML_DTD_NO_PREFIX...
+     d                 c                   524
+     d  XML_DTD_NO_ROOT...
+     d                 c                   525
+     d  XML_DTD_NOTATION_REDEFINED...
+     d                 c                   526
+     d  XML_DTD_NOTATION_VALUE...
+     d                 c                   527
+     d  XML_DTD_NOT_EMPTY...
+     d                 c                   528
+     d  XML_DTD_NOT_PCDATA...
+     d                 c                   529
+     d  XML_DTD_NOT_STANDALONE...
+     d                 c                   530
+     d  XML_DTD_ROOT_NAME...
+     d                 c                   531
+     d  XML_DTD_STANDALONE_WHITE_SPACE...
+     d                 c                   532
+     d  XML_DTD_UNKNOWN_ATTRIBUTE...
+     d                 c                   533
+     d  XML_DTD_UNKNOWN_ELEM...
+     d                 c                   534
+     d  XML_DTD_UNKNOWN_ENTITY...
+     d                 c                   535
+     d  XML_DTD_UNKNOWN_ID...
+     d                 c                   536
+     d  XML_DTD_UNKNOWN_NOTATION...
+     d                 c                   537
+     d  XML_DTD_STANDALONE_DEFAULTED...
+     d                 c                   538
+     d  XML_DTD_XMLID_VALUE...
+     d                 c                   539
+     d  XML_DTD_XMLID_TYPE...
+     d                 c                   540
+     d  XML_DTD_DUP_TOKEN...
+     d                 c                   541
+     d  XML_HTML_STRUCURE_ERROR...
+     d                 c                   800
+     d  XML_HTML_UNKNOWN_TAG...
+     d                 c                   801
+     d  XML_RNGP_ANYNAME_ATTR_ANCESTOR...
+     d                 c                   1000
+     d  XML_RNGP_ATTR_CONFLICT...
+     d                 c                   1001
+     d  XML_RNGP_ATTRIBUTE_CHILDREN...
+     d                 c                   1002
+     d  XML_RNGP_ATTRIBUTE_CONTENT...
+     d                 c                   1003
+     d  XML_RNGP_ATTRIBUTE_EMPTY...
+     d                 c                   1004
+     d  XML_RNGP_ATTRIBUTE_NOOP...
+     d                 c                   1005
+     d  XML_RNGP_CHOICE_CONTENT...
+     d                 c                   1006
+     d  XML_RNGP_CHOICE_EMPTY...
+     d                 c                   1007
+     d  XML_RNGP_CREATE_FAILURE...
+     d                 c                   1008
+     d  XML_RNGP_DATA_CONTENT...
+     d                 c                   1009
+     d  XML_RNGP_DEF_CHOICE_AND_INTERLEAVE...
+     d                 c                   1010
+     d  XML_RNGP_DEFINE_CREATE_FAILED...
+     d                 c                   1011
+     d  XML_RNGP_DEFINE_EMPTY...
+     d                 c                   1012
+     d  XML_RNGP_DEFINE_MISSING...
+     d                 c                   1013
+     d  XML_RNGP_DEFINE_NAME_MISSING...
+     d                 c                   1014
+     d  XML_RNGP_ELEM_CONTENT_EMPTY...
+     d                 c                   1015
+     d  XML_RNGP_ELEM_CONTENT_ERROR...
+     d                 c                   1016
+     d  XML_RNGP_ELEMENT_EMPTY...
+     d                 c                   1017
+     d  XML_RNGP_ELEMENT_CONTENT...
+     d                 c                   1018
+     d  XML_RNGP_ELEMENT_NAME...
+     d                 c                   1019
+     d  XML_RNGP_ELEMENT_NO_CONTENT...
+     d                 c                   1020
+     d  XML_RNGP_ELEM_TEXT_CONFLICT...
+     d                 c                   1021
+     d  XML_RNGP_EMPTY...
+     d                 c                   1022
+     d  XML_RNGP_EMPTY_CONSTRUCT...
+     d                 c                   1023
+     d  XML_RNGP_EMPTY_CONTENT...
+     d                 c                   1024
+     d  XML_RNGP_EMPTY_NOT_EMPTY...
+     d                 c                   1025
+     d  XML_RNGP_ERROR_TYPE_LIB...
+     d                 c                   1026
+     d  XML_RNGP_EXCEPT_EMPTY...
+     d                 c                   1027
+     d  XML_RNGP_EXCEPT_MISSING...
+     d                 c                   1028
+     d  XML_RNGP_EXCEPT_MULTIPLE...
+     d                 c                   1029
+     d  XML_RNGP_EXCEPT_NO_CONTENT...
+     d                 c                   1030
+     d  XML_RNGP_EXTERNALREF_EMTPY...
+     d                 c                   1031
+     d  XML_RNGP_EXTERNAL_REF_FAILURE...
+     d                 c                   1032
+     d  XML_RNGP_EXTERNALREF_RECURSE...
+     d                 c                   1033
+     d  XML_RNGP_FORBIDDEN_ATTRIBUTE...
+     d                 c                   1034
+     d  XML_RNGP_FOREIGN_ELEMENT...
+     d                 c                   1035
+     d  XML_RNGP_GRAMMAR_CONTENT...
+     d                 c                   1036
+     d  XML_RNGP_GRAMMAR_EMPTY...
+     d                 c                   1037
+     d  XML_RNGP_GRAMMAR_MISSING...
+     d                 c                   1038
+     d  XML_RNGP_GRAMMAR_NO_START...
+     d                 c                   1039
+     d  XML_RNGP_GROUP_ATTR_CONFLICT...
+     d                 c                   1040
+     d  XML_RNGP_HREF_ERROR...
+     d                 c                   1041
+     d  XML_RNGP_INCLUDE_EMPTY...
+     d                 c                   1042
+     d  XML_RNGP_INCLUDE_FAILURE...
+     d                 c                   1043
+     d  XML_RNGP_INCLUDE_RECURSE...
+     d                 c                   1044
+     d  XML_RNGP_INTERLEAVE_ADD...
+     d                 c                   1045
+     d  XML_RNGP_INTERLEAVE_CREATE_FAILED...
+     d                 c                   1046
+     d  XML_RNGP_INTERLEAVE_EMPTY...
+     d                 c                   1047
+     d  XML_RNGP_INTERLEAVE_NO_CONTENT...
+     d                 c                   1048
+     d  XML_RNGP_INVALID_DEFINE_NAME...
+     d                 c                   1049
+     d  XML_RNGP_INVALID_URI...
+     d                 c                   1050
+     d  XML_RNGP_INVALID_VALUE...
+     d                 c                   1051
+     d  XML_RNGP_MISSING_HREF...
+     d                 c                   1052
+     d  XML_RNGP_NAME_MISSING...
+     d                 c                   1053
+     d  XML_RNGP_NEED_COMBINE...
+     d                 c                   1054
+     d  XML_RNGP_NOTALLOWED_NOT_EMPTY...
+     d                 c                   1055
+     d  XML_RNGP_NSNAME_ATTR_ANCESTOR...
+     d                 c                   1056
+     d  XML_RNGP_NSNAME_NO_NS...
+     d                 c                   1057
+     d  XML_RNGP_PARAM_FORBIDDEN...
+     d                 c                   1058
+     d  XML_RNGP_PARAM_NAME_MISSING...
+     d                 c                   1059
+     d  XML_RNGP_PARENTREF_CREATE_FAILED...
+     d                 c                   1060
+     d  XML_RNGP_PARENTREF_NAME_INVALID...
+     d                 c                   1061
+     d  XML_RNGP_PARENTREF_NO_NAME...
+     d                 c                   1062
+     d  XML_RNGP_PARENTREF_NO_PARENT...
+     d                 c                   1063
+     d  XML_RNGP_PARENTREF_NOT_EMPTY...
+     d                 c                   1064
+     d  XML_RNGP_PARSE_ERROR...
+     d                 c                   1065
+     d  XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME...
+     d                 c                   1066
+     d  XML_RNGP_PAT_ATTR_ATTR...
+     d                 c                   1067
+     d  XML_RNGP_PAT_ATTR_ELEM...
+     d                 c                   1068
+     d  XML_RNGP_PAT_DATA_EXCEPT_ATTR...
+     d                 c                   1069
+     d  XML_RNGP_PAT_DATA_EXCEPT_ELEM...
+     d                 c                   1070
+     d  XML_RNGP_PAT_DATA_EXCEPT_EMPTY...
+     d                 c                   1071
+     d  XML_RNGP_PAT_DATA_EXCEPT_GROUP...
+     d                 c                   1072
+     d  XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE...
+     d                 c                   1073
+     d  XML_RNGP_PAT_DATA_EXCEPT_LIST...
+     d                 c                   1074
+     d  XML_RNGP_PAT_DATA_EXCEPT_ONEMORE...
+     d                 c                   1075
+     d  XML_RNGP_PAT_DATA_EXCEPT_REF...
+     d                 c                   1076
+     d  XML_RNGP_PAT_DATA_EXCEPT_TEXT...
+     d                 c                   1077
+     d  XML_RNGP_PAT_LIST_ATTR...
+     d                 c                   1078
+     d  XML_RNGP_PAT_LIST_ELEM...
+     d                 c                   1079
+     d  XML_RNGP_PAT_LIST_INTERLEAVE...
+     d                 c                   1080
+     d  XML_RNGP_PAT_LIST_LIST...
+     d                 c                   1081
+     d  XML_RNGP_PAT_LIST_REF...
+     d                 c                   1082
+     d  XML_RNGP_PAT_LIST_TEXT...
+     d                 c                   1083
+     d  XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME...
+     d                 c                   1084
+     d  XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME...
+     d                 c                   1085
+     d  XML_RNGP_PAT_ONEMORE_GROUP_ATTR...
+     d                 c                   1086
+     d  XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR...
+     d                 c                   1087
+     d  XML_RNGP_PAT_START_ATTR...
+     d                 c                   1088
+     d  XML_RNGP_PAT_START_DATA...
+     d                 c                   1089
+     d  XML_RNGP_PAT_START_EMPTY...
+     d                 c                   1090
+     d  XML_RNGP_PAT_START_GROUP...
+     d                 c                   1091
+     d  XML_RNGP_PAT_START_INTERLEAVE...
+     d                 c                   1092
+     d  XML_RNGP_PAT_START_LIST...
+     d                 c                   1093
+     d  XML_RNGP_PAT_START_ONEMORE...
+     d                 c                   1094
+     d  XML_RNGP_PAT_START_TEXT...
+     d                 c                   1095
+     d  XML_RNGP_PAT_START_VALUE...
+     d                 c                   1096
+     d  XML_RNGP_PREFIX_UNDEFINED...
+     d                 c                   1097
+     d  XML_RNGP_REF_CREATE_FAILED...
+     d                 c                   1098
+     d  XML_RNGP_REF_CYCLE...
+     d                 c                   1099
+     d  XML_RNGP_REF_NAME_INVALID...
+     d                 c                   1100
+     d  XML_RNGP_REF_NO_DEF...
+     d                 c                   1101
+     d  XML_RNGP_REF_NO_NAME...
+     d                 c                   1102
+     d  XML_RNGP_REF_NOT_EMPTY...
+     d                 c                   1103
+     d  XML_RNGP_START_CHOICE_AND_INTERLEAVE...
+     d                 c                   1104
+     d  XML_RNGP_START_CONTENT...
+     d                 c                   1105
+     d  XML_RNGP_START_EMPTY...
+     d                 c                   1106
+     d  XML_RNGP_START_MISSING...
+     d                 c                   1107
+     d  XML_RNGP_TEXT_EXPECTED...
+     d                 c                   1108
+     d  XML_RNGP_TEXT_HAS_CHILD...
+     d                 c                   1109
+     d  XML_RNGP_TYPE_MISSING...
+     d                 c                   1110
+     d  XML_RNGP_TYPE_NOT_FOUND...
+     d                 c                   1111
+     d  XML_RNGP_TYPE_VALUE...
+     d                 c                   1112
+     d  XML_RNGP_UNKNOWN_ATTRIBUTE...
+     d                 c                   1113
+     d  XML_RNGP_UNKNOWN_COMBINE...
+     d                 c                   1114
+     d  XML_RNGP_UNKNOWN_CONSTRUCT...
+     d                 c                   1115
+     d  XML_RNGP_UNKNOWN_TYPE_LIB...
+     d                 c                   1116
+     d  XML_RNGP_URI_FRAGMENT...
+     d                 c                   1117
+     d  XML_RNGP_URI_NOT_ABSOLUTE...
+     d                 c                   1118
+     d  XML_RNGP_VALUE_EMPTY...
+     d                 c                   1119
+     d  XML_RNGP_VALUE_NO_CONTENT...
+     d                 c                   1120
+     d  XML_RNGP_XMLNS_NAME...
+     d                 c                   1121
+     d  XML_RNGP_XML_NS...
+     d                 c                   1122
+     d  XML_XPATH_EXPRESSION_OK...
+     d                 c                   1200
+     d  XML_XPATH_NUMBER_ERROR...
+     d                 c                   1201
+     d  XML_XPATH_UNFINISHED_LITERAL_ERROR...
+     d                 c                   1202
+     d  XML_XPATH_START_LITERAL_ERROR...
+     d                 c                   1203
+     d  XML_XPATH_VARIABLE_REF_ERROR...
+     d                 c                   1204
+     d  XML_XPATH_UNDEF_VARIABLE_ERROR...
+     d                 c                   1205
+     d  XML_XPATH_INVALID_PREDICATE_ERROR...
+     d                 c                   1206
+     d  XML_XPATH_EXPR_ERROR...
+     d                 c                   1207
+     d  XML_XPATH_UNCLOSED_ERROR...
+     d                 c                   1208
+     d  XML_XPATH_UNKNOWN_FUNC_ERROR...
+     d                 c                   1209
+     d  XML_XPATH_INVALID_OPERAND...
+     d                 c                   1210
+     d  XML_XPATH_INVALID_TYPE...
+     d                 c                   1211
+     d  XML_XPATH_INVALID_ARITY...
+     d                 c                   1212
+     d  XML_XPATH_INVALID_CTXT_SIZE...
+     d                 c                   1213
+     d  XML_XPATH_INVALID_CTXT_POSITION...
+     d                 c                   1214
+     d  XML_XPATH_MEMORY_ERROR...
+     d                 c                   1215
+     d  XML_XPTR_SYNTAX_ERROR...
+     d                 c                   1216
+     d  XML_XPTR_RESOURCE_ERROR...
+     d                 c                   1217
+     d  XML_XPTR_SUB_RESOURCE_ERROR...
+     d                 c                   1218
+     d  XML_XPATH_UNDEF_PREFIX_ERROR...
+     d                 c                   1219
+     d  XML_XPATH_ENCODING_ERROR...
+     d                 c                   1220
+     d  XML_XPATH_INVALID_CHAR_ERROR...
+     d                 c                   1231
+     d  XML_TREE_INVALID_HEX...
+     d                 c                   1300
+     d  XML_TREE_INVALID_DEC...
+     d                 c                   1301
+     d  XML_TREE_UNTERMINATED_ENTITY...
+     d                 c                   1302
+     d  XML_TREE_NOT_UTF8...
+     d                 c                   1303
+     d  XML_SAVE_NOT_UTF8...
+     d                 c                   1400
+     d  XML_SAVE_CHAR_INVALID...
+     d                 c                   1401
+     d  XML_SAVE_NO_DOCTYPE...
+     d                 c                   1402
+     d  XML_SAVE_UNKNOWN_ENCODING...
+     d                 c                   1403
+     d  XML_REGEXP_COMPILE_ERROR...
+     d                 c                   1403
+     d  XML_IO_UNKNOWN...
+     d                 c                   1500
+     d  XML_IO_EACCES  c                   1501
+     d  XML_IO_EAGAIN  c                   1502
+     d  XML_IO_EBADF   c                   1503
+     d  XML_IO_EBADMSG...
+     d                 c                   1504
+     d  XML_IO_EBUSY   c                   1505
+     d  XML_IO_ECANCELED...
+     d                 c                   1506
+     d  XML_IO_ECHILD  c                   1507
+     d  XML_IO_EDEADLK...
+     d                 c                   1508
+     d  XML_IO_EDOM    c                   1509
+     d  XML_IO_EEXIST  c                   1510
+     d  XML_IO_EFAULT  c                   1511
+     d  XML_IO_EFBIG   c                   1512
+     d  XML_IO_EINPROGRESS...
+     d                 c                   1513
+     d  XML_IO_EINTR   c                   1514
+     d  XML_IO_EINVAL  c                   1515
+     d  XML_IO_EIO     c                   1516
+     d  XML_IO_EISDIR  c                   1517
+     d  XML_IO_EMFILE  c                   1518
+     d  XML_IO_EMLINK  c                   1519
+     d  XML_IO_EMSGSIZE...
+     d                 c                   1520
+     d  XML_IO_ENAMETOOLONG...
+     d                 c                   1521
+     d  XML_IO_ENFILE  c                   1522
+     d  XML_IO_ENODEV  c                   1523
+     d  XML_IO_ENOENT  c                   1524
+     d  XML_IO_ENOEXEC...
+     d                 c                   1525
+     d  XML_IO_ENOLCK  c                   1526
+     d  XML_IO_ENOMEM  c                   1527
+     d  XML_IO_ENOSPC  c                   1528
+     d  XML_IO_ENOSYS  c                   1529
+     d  XML_IO_ENOTDIR...
+     d                 c                   1530
+     d  XML_IO_ENOTEMPTY...
+     d                 c                   1531
+     d  XML_IO_ENOTSUP...
+     d                 c                   1532
+     d  XML_IO_ENOTTY  c                   1533
+     d  XML_IO_ENXIO   c                   1534
+     d  XML_IO_EPERM   c                   1535
+     d  XML_IO_EPIPE   c                   1536
+     d  XML_IO_ERANGE  c                   1537
+     d  XML_IO_EROFS   c                   1538
+     d  XML_IO_ESPIPE  c                   1539
+     d  XML_IO_ESRCH   c                   1540
+     d  XML_IO_ETIMEDOUT...
+     d                 c                   1541
+     d  XML_IO_EXDEV   c                   1542
+     d  XML_IO_NETWORK_ATTEMPT...
+     d                 c                   1543
+     d  XML_IO_ENCODER...
+     d                 c                   1544
+     d  XML_IO_FLUSH   c                   1545
+     d  XML_IO_WRITE   c                   1546
+     d  XML_IO_NO_INPUT...
+     d                 c                   1547
+     d  XML_IO_BUFFER_FULL...
+     d                 c                   1548
+     d  XML_IO_LOAD_ERROR...
+     d                 c                   1549
+     d  XML_IO_ENOTSOCK...
+     d                 c                   1550
+     d  XML_IO_EISCONN...
+     d                 c                   1551
+     d  XML_IO_ECONNREFUSED...
+     d                 c                   1552
+     d  XML_IO_ENETUNREACH...
+     d                 c                   1553
+     d  XML_IO_EADDRINUSE...
+     d                 c                   1554
+     d  XML_IO_EALREADY...
+     d                 c                   1555
+     d  XML_IO_EAFNOSUPPORT...
+     d                 c                   1556
+     d  XML_XINCLUDE_RECURSION...
+     d                 c                   1600
+     d  XML_XINCLUDE_PARSE_VALUE...
+     d                 c                   1601
+     d  XML_XINCLUDE_ENTITY_DEF_MISMATCH...
+     d                 c                   1602
+     d  XML_XINCLUDE_NO_HREF...
+     d                 c                   1603
+     d  XML_XINCLUDE_NO_FALLBACK...
+     d                 c                   1604
+     d  XML_XINCLUDE_HREF_URI...
+     d                 c                   1605
+     d  XML_XINCLUDE_TEXT_FRAGMENT...
+     d                 c                   1606
+     d  XML_XINCLUDE_TEXT_DOCUMENT...
+     d                 c                   1607
+     d  XML_XINCLUDE_INVALID_CHAR...
+     d                 c                   1608
+     d  XML_XINCLUDE_BUILD_FAILED...
+     d                 c                   1609
+     d  XML_XINCLUDE_UNKNOWN_ENCODING...
+     d                 c                   1610
+     d  XML_XINCLUDE_MULTIPLE_ROOT...
+     d                 c                   1611
+     d  XML_XINCLUDE_XPTR_FAILED...
+     d                 c                   1612
+     d  XML_XINCLUDE_XPTR_RESULT...
+     d                 c                   1613
+     d  XML_XINCLUDE_INCLUDE_IN_INCLUDE...
+     d                 c                   1614
+     d  XML_XINCLUDE_FALLBACKS_IN_INCLUDE...
+     d                 c                   1615
+     d  XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE...
+     d                 c                   1616
+     d  XML_XINCLUDE_DEPRECATED_NS...
+     d                 c                   1617
+     d  XML_XINCLUDE_FRAGMENT_ID...
+     d                 c                   1618
+     d  XML_CATALOG_MISSING_ATTR...
+     d                 c                   1650
+     d  XML_CATALOG_ENTRY_BROKEN...
+     d                 c                   1651
+     d  XML_CATALOG_PREFER_VALUE...
+     d                 c                   1652
+     d  XML_CATALOG_NOT_CATALOG...
+     d                 c                   1653
+     d  XML_CATALOG_RECURSION...
+     d                 c                   1654
+     d  XML_SCHEMAP_PREFIX_UNDEFINED...
+     d                 c                   1700
+     d  XML_SCHEMAP_ATTRFORMDEFAULT_VALUE...
+     d                 c                   1701
+     d  XML_SCHEMAP_ATTRGRP_NONAME_NOREF...
+     d                 c                   1702
+     d  XML_SCHEMAP_ATTR_NONAME_NOREF...
+     d                 c                   1703
+     d  XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF...
+     d                 c                   1704
+     d  XML_SCHEMAP_ELEMFORMDEFAULT_VALUE...
+     d                 c                   1705
+     d  XML_SCHEMAP_ELEM_NONAME_NOREF...
+     d                 c                   1706
+     d  XML_SCHEMAP_EXTENSION_NO_BASE...
+     d                 c                   1707
+     d  XML_SCHEMAP_FACET_NO_VALUE...
+     d                 c                   1708
+     d  XML_SCHEMAP_FAILED_BUILD_IMPORT...
+     d                 c                   1709
+     d  XML_SCHEMAP_GROUP_NONAME_NOREF...
+     d                 c                   1710
+     d  XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI...
+     d                 c                   1711
+     d  XML_SCHEMAP_IMPORT_REDEFINE_NSNAME...
+     d                 c                   1712
+     d  XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI...
+     d                 c                   1713
+     d  XML_SCHEMAP_INVALID_BOOLEAN...
+     d                 c                   1714
+     d  XML_SCHEMAP_INVALID_ENUM...
+     d                 c                   1715
+     d  XML_SCHEMAP_INVALID_FACET...
+     d                 c                   1716
+     d  XML_SCHEMAP_INVALID_FACET_VALUE...
+     d                 c                   1717
+     d  XML_SCHEMAP_INVALID_MAXOCCURS...
+     d                 c                   1718
+     d  XML_SCHEMAP_INVALID_MINOCCURS...
+     d                 c                   1719
+     d  XML_SCHEMAP_INVALID_REF_AND_SUBTYPE...
+     d                 c                   1720
+     d  XML_SCHEMAP_INVALID_WHITE_SPACE...
+     d                 c                   1721
+     d  XML_SCHEMAP_NOATTR_NOREF...
+     d                 c                   1722
+     d  XML_SCHEMAP_NOTATION_NO_NAME...
+     d                 c                   1723
+     d  XML_SCHEMAP_NOTYPE_NOREF...
+     d                 c                   1724
+     d  XML_SCHEMAP_REF_AND_SUBTYPE...
+     d                 c                   1725
+     d  XML_SCHEMAP_RESTRICTION_NONAME_NOREF...
+     d                 c                   1726
+     d  XML_SCHEMAP_SIMPLETYPE_NONAME...
+     d                 c                   1727
+     d  XML_SCHEMAP_TYPE_AND_SUBTYPE...
+     d                 c                   1728
+     d  XML_SCHEMAP_UNKNOWN_ALL_CHILD...
+     d                 c                   1729
+     d  XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD...
+     d                 c                   1730
+     d  XML_SCHEMAP_UNKNOWN_ATTR_CHILD...
+     d                 c                   1731
+     d  XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD...
+     d                 c                   1732
+     d  XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP...
+     d                 c                   1733
+     d  XML_SCHEMAP_UNKNOWN_BASE_TYPE...
+     d                 c                   1734
+     d  XML_SCHEMAP_UNKNOWN_CHOICE_CHILD...
+     d                 c                   1735
+     d  XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD...
+     d                 c                   1736
+     d  XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD...
+     d                 c                   1737
+     d  XML_SCHEMAP_UNKNOWN_ELEM_CHILD...
+     d                 c                   1738
+     d  XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD...
+     d                 c                   1739
+     d  XML_SCHEMAP_UNKNOWN_FACET_CHILD...
+     d                 c                   1740
+     d  XML_SCHEMAP_UNKNOWN_FACET_TYPE...
+     d                 c                   1741
+     d  XML_SCHEMAP_UNKNOWN_GROUP_CHILD...
+     d                 c                   1742
+     d  XML_SCHEMAP_UNKNOWN_IMPORT_CHILD...
+     d                 c                   1743
+     d  XML_SCHEMAP_UNKNOWN_LIST_CHILD...
+     d                 c                   1744
+     d  XML_SCHEMAP_UNKNOWN_NOTATION_CHILD...
+     d                 c                   1745
+     d  XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD...
+     d                 c                   1746
+     d  XML_SCHEMAP_UNKNOWN_REF...
+     d                 c                   1747
+     d  XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD...
+     d                 c                   1748
+     d  XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD...
+     d                 c                   1749
+     d  XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD...
+     d                 c                   1750
+     d  XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD...
+     d                 c                   1751
+     d  XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD...
+     d                 c                   1752
+     d  XML_SCHEMAP_UNKNOWN_TYPE...
+     d                 c                   1753
+     d  XML_SCHEMAP_UNKNOWN_UNION_CHILD...
+     d                 c                   1754
+     d  XML_SCHEMAP_ELEM_DEFAULT_FIXED...
+     d                 c                   1755
+     d  XML_SCHEMAP_REGEXP_INVALID...
+     d                 c                   1756
+     d  XML_SCHEMAP_FAILED_LOAD...
+     d                 c                   1757
+     d  XML_SCHEMAP_NOTHING_TO_PARSE...
+     d                 c                   1758
+     d  XML_SCHEMAP_NOROOT...
+     d                 c                   1759
+     d  XML_SCHEMAP_REDEFINED_GROUP...
+     d                 c                   1760
+     d  XML_SCHEMAP_REDEFINED_TYPE...
+     d                 c                   1761
+     d  XML_SCHEMAP_REDEFINED_ELEMENT...
+     d                 c                   1762
+     d  XML_SCHEMAP_REDEFINED_ATTRGROUP...
+     d                 c                   1763
+     d  XML_SCHEMAP_REDEFINED_ATTR...
+     d                 c                   1764
+     d  XML_SCHEMAP_REDEFINED_NOTATION...
+     d                 c                   1765
+     d  XML_SCHEMAP_FAILED_PARSE...
+     d                 c                   1766
+     d  XML_SCHEMAP_UNKNOWN_PREFIX...
+     d                 c                   1767
+     d  XML_SCHEMAP_DEF_AND_PREFIX...
+     d                 c                   1768
+     d  XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD...
+     d                 c                   1769
+     d  XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI...
+     d                 c                   1770
+     d  XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI...
+     d                 c                   1771
+     d  XML_SCHEMAP_NOT_SCHEMA...
+     d                 c                   1772
+     d  XML_SCHEMAP_UNKNOWN_MEMBER_TYPE...
+     d                 c                   1773
+     d  XML_SCHEMAP_INVALID_ATTR_USE...
+     d                 c                   1774
+     d  XML_SCHEMAP_RECURSIVE...
+     d                 c                   1775
+     d  XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE...
+     d                 c                   1776
+     d  XML_SCHEMAP_INVALID_ATTR_COMBINATION...
+     d                 c                   1777
+     d  XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION...
+     d                 c                   1778
+     d  XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD...
+     d                 c                   1779
+     d  XML_SCHEMAP_INVALID_ATTR_NAME...
+     d                 c                   1780
+     d  XML_SCHEMAP_REF_AND_CONTENT...
+     d                 c                   1781
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_1...
+     d                 c                   1782
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_2...
+     d                 c                   1783
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_3...
+     d                 c                   1784
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_4...
+     d                 c                   1785
+     d  XML_SCHEMAP_CT_PROPS_CORRECT_5...
+     d                 c                   1786
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1...
+     d                 c                   1787
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1...
+     d                 c                   1788
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2...
+     d                 c                   1789
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2...
+     d                 c                   1790
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3...
+     d                 c                   1791
+     d  XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER...
+     d                 c                   1792
+     d  XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE...
+     d                 c                   1793
+     d  XML_SCHEMAP_UNION_NOT_EXPRESSIBLE...
+     d                 c                   1794
+     d  XML_SCHEMAP_SRC_IMPORT_3_1...
+     d                 c                   1795
+     d  XML_SCHEMAP_SRC_IMPORT_3_2...
+     d                 c                   1796
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1...
+     d                 c                   1797
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2...
+     d                 c                   1798
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3...
+     d                 c                   1799
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_3...
+     d                 c                   1800
+     d  XML_SCHEMAV_NOROOT...
+     d                 c                   1801
+     d  XML_SCHEMAV_UNDECLAREDELEM...
+     d                 c                   1802
+     d  XML_SCHEMAV_NOTTOPLEVEL...
+     d                 c                   1803
+     d  XML_SCHEMAV_MISSING...
+     d                 c                   1804
+     d  XML_SCHEMAV_WRONGELEM...
+     d                 c                   1805
+     d  XML_SCHEMAV_NOTYPE...
+     d                 c                   1806
+     d  XML_SCHEMAV_NOROLLBACK...
+     d                 c                   1807
+     d  XML_SCHEMAV_ISABSTRACT...
+     d                 c                   1808
+     d  XML_SCHEMAV_NOTEMPTY...
+     d                 c                   1809
+     d  XML_SCHEMAV_ELEMCONT...
+     d                 c                   1810
+     d  XML_SCHEMAV_HAVEDEFAULT...
+     d                 c                   1811
+     d  XML_SCHEMAV_NOTNILLABLE...
+     d                 c                   1812
+     d  XML_SCHEMAV_EXTRACONTENT...
+     d                 c                   1813
+     d  XML_SCHEMAV_INVALIDATTR...
+     d                 c                   1814
+     d  XML_SCHEMAV_INVALIDELEM...
+     d                 c                   1815
+     d  XML_SCHEMAV_NOTDETERMINIST...
+     d                 c                   1816
+     d  XML_SCHEMAV_CONSTRUCT...
+     d                 c                   1817
+     d  XML_SCHEMAV_INTERNAL...
+     d                 c                   1818
+     d  XML_SCHEMAV_NOTSIMPLE...
+     d                 c                   1819
+     d  XML_SCHEMAV_ATTRUNKNOWN...
+     d                 c                   1820
+     d  XML_SCHEMAV_ATTRINVALID...
+     d                 c                   1821
+     d  XML_SCHEMAV_VALUE...
+     d                 c                   1822
+     d  XML_SCHEMAV_FACET...
+     d                 c                   1823
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1...
+     d                 c                   1824
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2...
+     d                 c                   1825
+     d  XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3...
+     d                 c                   1826
+     d  XML_SCHEMAV_CVC_TYPE_3_1_1...
+     d                 c                   1827
+     d  XML_SCHEMAV_CVC_TYPE_3_1_2...
+     d                 c                   1828
+     d  XML_SCHEMAV_CVC_FACET_VALID...
+     d                 c                   1829
+     d  XML_SCHEMAV_CVC_LENGTH_VALID...
+     d                 c                   1830
+     d  XML_SCHEMAV_CVC_MINLENGTH_VALID...
+     d                 c                   1831
+     d  XML_SCHEMAV_CVC_MAXLENGTH_VALID...
+     d                 c                   1832
+     d  XML_SCHEMAV_CVC_MININCLUSIVE_VALID...
+     d                 c                   1833
+     d  XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID...
+     d                 c                   1834
+     d  XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID...
+     d                 c                   1835
+     d  XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID...
+     d                 c                   1836
+     d  XML_SCHEMAV_CVC_TOTALDIGITS_VALID...
+     d                 c                   1837
+     d  XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID...
+     d                 c                   1838
+     d  XML_SCHEMAV_CVC_PATTERN_VALID...
+     d                 c                   1839
+     d  XML_SCHEMAV_CVC_ENUMERATION_VALID...
+     d                 c                   1840
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1...
+     d                 c                   1841
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2...
+     d                 c                   1842
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3...
+     d                 c                   1843
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4...
+     d                 c                   1844
+     d  XML_SCHEMAV_CVC_ELT_1...
+     d                 c                   1845
+     d  XML_SCHEMAV_CVC_ELT_2...
+     d                 c                   1846
+     d  XML_SCHEMAV_CVC_ELT_3_1...
+     d                 c                   1847
+     d  XML_SCHEMAV_CVC_ELT_3_2_1...
+     d                 c                   1848
+     d  XML_SCHEMAV_CVC_ELT_3_2_2...
+     d                 c                   1849
+     d  XML_SCHEMAV_CVC_ELT_4_1...
+     d                 c                   1850
+     d  XML_SCHEMAV_CVC_ELT_4_2...
+     d                 c                   1851
+     d  XML_SCHEMAV_CVC_ELT_4_3...
+     d                 c                   1852
+     d  XML_SCHEMAV_CVC_ELT_5_1_1...
+     d                 c                   1853
+     d  XML_SCHEMAV_CVC_ELT_5_1_2...
+     d                 c                   1854
+     d  XML_SCHEMAV_CVC_ELT_5_2_1...
+     d                 c                   1855
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_1...
+     d                 c                   1856
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_2_1...
+     d                 c                   1857
+     d  XML_SCHEMAV_CVC_ELT_5_2_2_2_2...
+     d                 c                   1858
+     d  XML_SCHEMAV_CVC_ELT_6...
+     d                 c                   1859
+     d  XML_SCHEMAV_CVC_ELT_7...
+     d                 c                   1860
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_1...
+     d                 c                   1861
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_2...
+     d                 c                   1862
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_3...
+     d                 c                   1863
+     d  XML_SCHEMAV_CVC_ATTRIBUTE_4...
+     d                 c                   1864
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1...
+     d                 c                   1865
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1...
+     d                 c                   1866
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2...
+     d                 c                   1867
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_4...
+     d                 c                   1868
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1...
+     d                 c                   1869
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2...
+     d                 c                   1870
+     d  XML_SCHEMAV_ELEMENT_CONTENT...
+     d                 c                   1871
+     d  XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING...
+     d                 c                   1872
+     d  XML_SCHEMAV_CVC_COMPLEX_TYPE_1...
+     d                 c                   1873
+     d  XML_SCHEMAV_CVC_AU...
+     d                 c                   1874
+     d  XML_SCHEMAV_CVC_TYPE_1...
+     d                 c                   1875
+     d  XML_SCHEMAV_CVC_TYPE_2...
+     d                 c                   1876
+     d  XML_SCHEMAV_CVC_IDC...
+     d                 c                   1877
+     d  XML_SCHEMAV_CVC_WILDCARD...
+     d                 c                   1878
+     d  XML_SCHEMAV_MISC...
+     d                 c                   1879
+     d  XML_XPTR_UNKNOWN_SCHEME...
+     d                 c                   1900
+     d  XML_XPTR_CHILDSEQ_START...
+     d                 c                   1901
+     d  XML_XPTR_EVAL_FAILED...
+     d                 c                   1902
+     d  XML_XPTR_EXTRA_OBJECTS...
+     d                 c                   1903
+     d  XML_C14N_CREATE_CTXT...
+     d                 c                   1950
+     d  XML_C14N_REQUIRES_UTF8...
+     d                 c                   1951
+     d  XML_C14N_CREATE_STACK...
+     d                 c                   1952
+     d  XML_C14N_INVALID_NODE...
+     d                 c                   1953
+     d  XML_C14N_UNKNOW_NODE...
+     d                 c                   1954
+     d  XML_C14N_RELATIVE_NAMESPACE...
+     d                 c                   1955
+     d  XML_FTP_PASV_ANSWER...
+     d                 c                   2000
+     d  XML_FTP_EPSV_ANSWER...
+     d                 c                   2001
+     d  XML_FTP_ACCNT...
+     d                 c                   2002
+     d  XML_FTP_URL_SYNTAX...
+     d                 c                   2003
+     d  XML_HTTP_URL_SYNTAX...
+     d                 c                   2020
+     d  XML_HTTP_USE_IP...
+     d                 c                   2021
+     d  XML_HTTP_UNKNOWN_HOST...
+     d                 c                   2022
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_1...
+     d                 c                   3000
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_2...
+     d                 c                   3001
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_3...
+     d                 c                   3002
+     d  XML_SCHEMAP_SRC_SIMPLE_TYPE_4...
+     d                 c                   3003
+     d  XML_SCHEMAP_SRC_RESOLVE...
+     d                 c                   3004
+     d  XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE...
+     d                 c                   3005
+     d  XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE...
+     d                 c                   3006
+     d  XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES...
+     d                 c                   3007
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_1...
+     d                 c                   3008
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_2...
+     d                 c                   3009
+     d  XML_SCHEMAP_ST_PROPS_CORRECT_3...
+     d                 c                   3010
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_1...
+     d                 c                   3011
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_2...
+     d                 c                   3012
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1...
+     d                 c                   3013
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2...
+     d                 c                   3014
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_1...
+     d                 c                   3015
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1...
+     d                 c                   3016
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2...
+     d                 c                   3017
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1...
+     d                 c                   3018
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2...
+     d                 c                   3019
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3...
+     d                 c                   3020
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4...
+     d                 c                   3021
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5...
+     d                 c                   3022
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_1...
+     d                 c                   3023
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1...
+     d                 c                   3024
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2...
+     d                 c                   3025
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2...
+     d                 c                   3026
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1...
+     d                 c                   3027
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3...
+     d                 c                   3028
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4...
+     d                 c                   3029
+     d  XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5...
+     d                 c                   3030
+     d  XML_SCHEMAP_COS_ST_DERIVED_OK_2_1...
+     d                 c                   3031
+     d  XML_SCHEMAP_COS_ST_DERIVED_OK_2_2...
+     d                 c                   3032
+     d  XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED...
+     d                 c                   3033
+     d  XML_SCHEMAP_S4S_ELEM_MISSING...
+     d                 c                   3034
+     d  XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED...
+     d                 c                   3035
+     d  XML_SCHEMAP_S4S_ATTR_MISSING...
+     d                 c                   3036
+     d  XML_SCHEMAP_S4S_ATTR_INVALID_VALUE...
+     d                 c                   3037
+     d  XML_SCHEMAP_SRC_ELEMENT_1...
+     d                 c                   3038
+     d  XML_SCHEMAP_SRC_ELEMENT_2_1...
+     d                 c                   3039
+     d  XML_SCHEMAP_SRC_ELEMENT_2_2...
+     d                 c                   3040
+     d  XML_SCHEMAP_SRC_ELEMENT_3...
+     d                 c                   3041
+     d  XML_SCHEMAP_P_PROPS_CORRECT_1...
+     d                 c                   3042
+     d  XML_SCHEMAP_P_PROPS_CORRECT_2_1...
+     d                 c                   3043
+     d  XML_SCHEMAP_P_PROPS_CORRECT_2_2...
+     d                 c                   3044
+     d  XML_SCHEMAP_E_PROPS_CORRECT_2...
+     d                 c                   3045
+     d  XML_SCHEMAP_E_PROPS_CORRECT_3...
+     d                 c                   3046
+     d  XML_SCHEMAP_E_PROPS_CORRECT_4...
+     d                 c                   3047
+     d  XML_SCHEMAP_E_PROPS_CORRECT_5...
+     d                 c                   3048
+     d  XML_SCHEMAP_E_PROPS_CORRECT_6...
+     d                 c                   3049
+     d  XML_SCHEMAP_SRC_INCLUDE...
+     d                 c                   3050
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_1...
+     d                 c                   3051
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_2...
+     d                 c                   3052
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_3_1...
+     d                 c                   3053
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_3_2...
+     d                 c                   3054
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_4...
+     d                 c                   3055
+     d  XML_SCHEMAP_NO_XMLNS...
+     d                 c                   3056
+     d  XML_SCHEMAP_NO_XSI...
+     d                 c                   3057
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_1...
+     d                 c                   3058
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_1...
+     d                 c                   3059
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1...
+     d                 c                   3060
+     d  XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2...
+     d                 c                   3061
+     d  XML_SCHEMAP_CVC_SIMPLE_TYPE...
+     d                 c                   3062
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_1...
+     d                 c                   3063
+     d  XML_SCHEMAP_SRC_IMPORT_1_1...
+     d                 c                   3064
+     d  XML_SCHEMAP_SRC_IMPORT_1_2...
+     d                 c                   3065
+     d  XML_SCHEMAP_SRC_IMPORT_2...
+     d                 c                   3066
+     d  XML_SCHEMAP_SRC_IMPORT_2_1...
+     d                 c                   3067
+     d  XML_SCHEMAP_SRC_IMPORT_2_2...
+     d                 c                   3068
+     d  XML_SCHEMAP_INTERNAL...                                                 Non W3C
+     d                 c                   3069
+     d  XML_SCHEMAP_NOT_DETERMINISTIC...
+     d                 c                   3070
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1...
+     d                 c                   3071
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2...
+     d                 c                   3072
+     d  XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3...
+     d                 c                   3073
+     d  XML_SCHEMAP_MG_PROPS_CORRECT_1...
+     d                 c                   3074
+     d  XML_SCHEMAP_MG_PROPS_CORRECT_2...
+     d                 c                   3075
+     d  XML_SCHEMAP_SRC_CT_1...
+     d                 c                   3076
+     d  XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3...
+     d                 c                   3077
+     d  XML_SCHEMAP_AU_PROPS_CORRECT_2...
+     d                 c                   3078
+     d  XML_SCHEMAP_A_PROPS_CORRECT_2...
+     d                 c                   3079
+     d  XML_SCHEMAP_C_PROPS_CORRECT...
+     d                 c                   3080
+     d  XML_SCHEMAP_SRC_REDEFINE...
+     d                 c                   3081
+     d  XML_SCHEMAP_SRC_IMPORT...
+     d                 c                   3082
+     d  XML_SCHEMAP_WARN_SKIP_SCHEMA...
+     d                 c                   3083
+     d  XML_SCHEMAP_WARN_UNLOCATED_SCHEMA...
+     d                 c                   3084
+     d  XML_SCHEMAP_WARN_ATTR_REDECL_PROH...
+     d                 c                   3085
+     d  XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH...
+     d                 c                   3086
+     d  XML_SCHEMAP_AG_PROPS_CORRECT...
+     d                 c                   3087
+     d  XML_SCHEMAP_COS_CT_EXTENDS_1_2...
+     d                 c                   3088
+     d  XML_SCHEMAP_AU_PROPS_CORRECT...
+     d                 c                   3089
+     d  XML_SCHEMAP_A_PROPS_CORRECT_3...
+     d                 c                   3090
+     d  XML_SCHEMAP_COS_ALL_LIMITED...
+     d                 c                   3091
+     d  XML_SCHEMATRONV_ASSERT...
+     d                 c                   4000
+     d  XML_SCHEMATRONV_REPORT...
+     d                 c                   4001
+     d  XML_MODULE_OPEN...
+     d                 c                   4900
+     d  XML_MODULE_CLOSE...
+     d                 c                   4901
+     d  XML_CHECK_FOUND_ELEMENT...
+     d                 c                   5000
+     d  XML_CHECK_FOUND_ATTRIBUTE...
+     d                 c                   5001
+     d  XML_CHECK_FOUND_TEXT...
+     d                 c                   5002
+     d  XML_CHECK_FOUND_CDATA...
+     d                 c                   5003
+     d  XML_CHECK_FOUND_ENTITYREF...
+     d                 c                   5004
+     d  XML_CHECK_FOUND_ENTITY...
+     d                 c                   5005
+     d  XML_CHECK_FOUND_PI...
+     d                 c                   5006
+     d  XML_CHECK_FOUND_COMMENT...
+     d                 c                   5007
+     d  XML_CHECK_FOUND_DOCTYPE...
+     d                 c                   5008
+     d  XML_CHECK_FOUND_FRAGMENT...
+     d                 c                   5009
+     d  XML_CHECK_FOUND_NOTATION...
+     d                 c                   5010
+     d  XML_CHECK_UNKNOWN_NODE...
+     d                 c                   5011
+     d  XML_CHECK_ENTITY_TYPE...
+     d                 c                   5012
+     d  XML_CHECK_NO_PARENT...
+     d                 c                   5013
+     d  XML_CHECK_NO_DOC...
+     d                 c                   5014
+     d  XML_CHECK_NO_NAME...
+     d                 c                   5015
+     d  XML_CHECK_NO_ELEM...
+     d                 c                   5016
+     d  XML_CHECK_WRONG_DOC...
+     d                 c                   5017
+     d  XML_CHECK_NO_PREV...
+     d                 c                   5018
+     d  XML_CHECK_WRONG_PREV...
+     d                 c                   5019
+     d  XML_CHECK_NO_NEXT...
+     d                 c                   5020
+     d  XML_CHECK_WRONG_NEXT...
+     d                 c                   5021
+     d  XML_CHECK_NOT_DTD...
+     d                 c                   5022
+     d  XML_CHECK_NOT_ATTR...
+     d                 c                   5023
+     d  XML_CHECK_NOT_ATTR_DECL...
+     d                 c                   5024
+     d  XML_CHECK_NOT_ELEM_DECL...
+     d                 c                   5025
+     d  XML_CHECK_NOT_ENTITY_DECL...
+     d                 c                   5026
+     d  XML_CHECK_NOT_NS_DECL...
+     d                 c                   5027
+     d  XML_CHECK_NO_HREF...
+     d                 c                   5028
+     d  XML_CHECK_WRONG_PARENT...
+     d                 c                   5029
+     d  XML_CHECK_NS_SCOPE...
+     d                 c                   5030
+     d  XML_CHECK_NS_ANCESTOR...
+     d                 c                   5031
+     d  XML_CHECK_NOT_UTF8...
+     d                 c                   5032
+     d  XML_CHECK_NO_DICT...
+     d                 c                   5033
+     d  XML_CHECK_NOT_NCNAME...
+     d                 c                   5034
+     d  XML_CHECK_OUTSIDE_DICT...
+     d                 c                   5035
+     d  XML_CHECK_WRONG_NAME...
+     d                 c                   5036
+     d  XML_CHECK_NAME_NOT_NULL...
+     d                 c                   5037
+     d  XML_I18N_NO_NAME...
+     d                 c                   6000
+     d  XML_I18N_NO_HANDLER...
+     d                 c                   6001
+     d  XML_I18N_EXCESS_HANDLER...
+     d                 c                   6002
+     d  XML_I18N_CONV_FAILED...
+     d                 c                   6003
+     d  XML_I18N_NO_OUTPUT...
+     d                 c                   6004
+     d  XML_BUF_OVERFLOW...
+     d                 c                   7000
+
+      * xmlGenericErrorFunc:
+      * @ctx:  a parsing context
+      * @msg:  the message
+      * @...:  the extra arguments of the varags to format the message
+      *
+      * Signature of the function to use when there is an error and
+      * no parsing or validity context available .
+
+     d xmlGenericErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlStructuredErrorFunc:
+      * @userData:  user provided data for the error callback
+      * @error:  the error being raised.
+      *
+      * Signature of the function to use when there is an error and
+      * the module handles the new error reporting mechanism.
+
+     d xmlStructuredErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Use the following function to reset the two global variables
+      * xmlGenericError and xmlGenericErrorContext.
+
+     d xmlSetGenericErrorFunc...
+     d                 pr                  extproc('xmlSetGenericErrorFunc')
+     d  ctx                            *   value                                void *
+     d  handler                            value like(xmlGenericErrorFunc)
+
+     d initGenericErrorDefaultFunc...
+     d                 pr                  extproc(
+     d                                      'initGenericErrorDefaultFunc')
+     d  handler                            like(xmlGenericErrorFunc)
+
+     d xmlSetStructuredErrorFunc...
+     d                 pr                  extproc('xmlSetStructuredErrorFunc')
+     d  ctx                            *   value                                void *
+     d  handler                            value like(xmlGenericErrorFunc)
+
+      * Default message routines used by SAX and Valid context for error
+      * and warning reporting.
+      *
+      * These are vararg functions.
+      * The following prototypes support up to 8 pointer arguments.
+      * Other argument signature can be achieved by defining alternate
+      *   prototypes redirected to the same function.
+
+     d xmlParserError  pr                  extproc('xmlParserError')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserWarning...
+     d                 pr                  extproc('xmlParserWarning')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserValidityError...
+     d                 pr                  extproc('xmlParserValidityError')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserValidityWarning...
+     d                 pr                  extproc('xmlParserValidityWarning')
+     d  ctx                            *   value                                void *
+     d  msg                            *   value options(*string)               const char *
+     d  handler                            value like(xmlGenericErrorFunc)
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlParserPrintFileInfo...
+     d                 pr                  extproc('xmlParserPrintFileInfo')
+     d  input                              value like(xmlParserInputPtr)
+
+     d xmlParserPrintFileContext...
+     d                 pr                  extproc('xmlParserPrintFileContext')
+     d  input                              value like(xmlParserInputPtr)
+
+      * Extended error information routines
+
+     d xmlGetLastError...
+     d                 pr                  extproc('xmlGetLastError')
+     d                                     like(xmlErrorPtr)
+
+     d xmlResetLastError...
+     d                 pr                  extproc('xmlResetLastError')
+
+     d xmlCtxtGetLastError...
+     d                 pr                  extproc('xmlCtxtGetLastError')
+     d                                     like(xmlErrorPtr)
+     d  ctx                            *   value                                void *
+
+     d xmlCtxtResetLastError...
+     d                 pr                  extproc('xmlCtxtResetLastError')
+     d  ctx                            *   value                                void *
+
+     d xmlResetError   pr                  extproc('xmlResetError')
+     d  err                                value like(xmlErrorPtr)
+
+     d xmlCopyError    pr            10i 0 extproc('xmlCopyError')
+     d  from                               value like(xmlErrorPtr)
+     d  to                                 value like(xmlErrorPtr)
+
+      /endif                                                                    XML_ERROR_H__
diff --git a/os400/libxmlrpg/xmlexports.rpgle b/os400/libxmlrpg/xmlexports.rpgle
new file mode 100644 (file)
index 0000000..9a6fd10
--- /dev/null
@@ -0,0 +1,15 @@
+      * Summary: macros for marking symbols as exportable/importable.
+      * Description: macros for marking symbols as exportable/importable.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_EXPORTS_H__)
+      /define XML_EXPORTS_H__
+
+      * The definition in the original C header file are not appliable to
+      * ILE/RPG.
+      * Therefore this file is intentionally empty.
+
+      /endif                                                                    XML_EXPORTS_H__
diff --git a/os400/libxmlrpg/xmlmemory.rpgle b/os400/libxmlrpg/xmlmemory.rpgle
new file mode 100644 (file)
index 0000000..165eaca
--- /dev/null
@@ -0,0 +1,239 @@
+      * Summary: interface for the memory allocator
+      * Description: provides interfaces for the memory allocator,
+      *              including debugging capabilities.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(DEBUG_MEMORY_ALLOC__)
+      /define DEBUG_MEMORY_ALLOC__
+
+      /include "libxmlrpg/xmlversion"
+
+      * DEBUG_MEMORY:
+      *
+      * DEBUG_MEMORY replaces the allocator with a collect and debug
+      * shell to the libc allocator.
+      * DEBUG_MEMORY should only be activated when debugging
+      * libxml i.e. if libxml has been configured with --with-debug-mem too.
+
+      * /define DEBUG_MEMORY_FREED
+      * /define DEBUG_MEMORY_LOCATION
+
+      /if defined(DEBUG)
+      /if not defined(DEBUG_MEMORY)
+      /define DEBUG_MEMORY
+      /endif
+      /endif
+
+      * DEBUG_MEMORY_LOCATION:
+      *
+      * DEBUG_MEMORY_LOCATION should be activated only when debugging
+      * libxml i.e. if libxml has been configured with --with-debug-mem too.
+
+      /if defined(DEBUG_MEMORY_LOCATION)
+      /endif
+
+      * The XML memory wrapper support 4 basic overloadable functions.
+
+      * xmlFreeFunc:
+      * @mem: an already allocated block of memory
+      *
+      * Signature for a free() implementation.
+
+     d xmlFreeFunc     s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlMallocFunc:
+      * @size:  the size requested in bytes
+      *
+      * Signature for a malloc() implementation.
+      *
+      * Returns a pointer to the newly allocated block or NULL in case of error.
+
+     d xmlMallocFunc   s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlReallocFunc:
+      * @mem: an already allocated block of memory
+      * @size:  the new size requested in bytes
+      *
+      * Signature for a realloc() implementation.
+      *
+      * Returns a pointer to the newly reallocated block or NULL in case of error.
+
+     d xmlReallocFunc  s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlStrdupFunc:
+      * @str: a zero terminated string
+      *
+      * Signature for an strdup() implementation.
+      *
+      * Returns the copy of the string or NULL in case of error.
+
+     d xmlStrdupFunc   s               *   based(######typedef######)
+     d                                     procptr
+
+      * The 5 interfaces used for all memory handling within libxml.
+      * Since indirect calls are only supported via a based prototype,
+      *   storage is accessed via functions.
+
+     d get_xmlFree     pr                  extproc('__get_xmlFree')
+     d                                     like(xmlFreeFunc)
+
+     d set_xmlFree     pr                  extproc('__set_xmlFree')
+     d  func                               value like(xmlFreeFunc)
+
+     d xmlFree         pr                  extproc('__call_xmlFree')
+     d  mem                            *   value                                void *
+
+     d get_xmlMalloc   pr                  extproc('__get_xmlMalloc')
+     d                                     like(xmlMallocFunc)
+
+     d set_xmlMalloc   pr                  extproc('__set_xmlMalloc')
+     d  func                               value like(xmlMallocFunc)
+
+     d xmlMalloc       pr              *   extproc('__call_xmlMalloc')          void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlMallocAtomic...
+     d                 pr                  extproc('__get_xmlMallocAtomic')
+     d                                     like(xmlMallocFunc)
+
+     d set_xmlMallocAtomic...
+     d                 pr                  extproc('__set_xmlMallocAtomic')
+     d  func                               value like(xmlMallocFunc)
+
+     d xmlMallocAtomic...
+     d                 pr              *   extproc('__call_xmlMallocAtomic')    void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlRealloc  pr                  extproc('__get_xmlRealloc')
+     d                                     like(xmlReallocFunc)
+
+     d set_xmlRealloc  pr                  extproc('__set_xmlRealloc')
+     d  func                               value like(xmlReallocFunc)
+
+     d xmlRealloc      pr              *   extproc('__call_xmlRealloc')         void *
+     d  mem                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+
+     d get_xmlMemStrdup...
+     d                 pr                  extproc('__get_xmlMemStrdup')
+     d                                     like(xmlStrdupFunc)
+
+     d set_xmlMemStrdup...
+     d                 pr                  extproc('__set_xmlMemstrdup')
+     d  func                               value like(xmlStrdupFunc)
+
+     d xmlMemStrdup    pr              *   extproc('__call_xmlMemStrdup')          void *
+     d  str                            *   value options(*string)               const char *
+
+      * The way to overload the existing functions.
+      * The xmlGc function have an extra entry for atomic block
+      * allocations useful for garbage collected memory allocators
+
+     d xmlMemSetup     pr            10i 0 extproc('xmlMemSetup')
+     d  freeFunc                           value like(xmlFreeFunc)
+     d  mallocFunc                         value like(xmlMallocFunc)
+     d  reallocFunc                        value like(xmlReallocFunc)
+     d  strdupFunc                         value like(xmlStrdupFunc)
+
+     d xmlMemGet       pr            10i 0 extproc('xmlMemGet')
+     d  freeFunc                           like(xmlFreeFunc)
+     d  mallocFunc                         like(xmlMallocFunc)
+     d  reallocFunc                        like(xmlReallocFunc)
+     d  strdupFunc                         like(xmlStrdupFunc)
+
+     d xmlGcMemSetup   pr            10i 0 extproc('xmlGcMemSetup')
+     d  freeFunc                           value like(xmlFreeFunc)
+     d  mallocFunc                         value like(xmlMallocFunc)
+     d  mallocAtomicFunc...
+     d                                     value like(xmlMallocFunc)
+     d  reallocFunc                        value like(xmlReallocFunc)
+     d  strdupFunc                         value like(xmlStrdupFunc)
+
+     d xmlGcMemGet     pr            10i 0 extproc('xmlGcMemGet')
+     d  freeFunc                           like(xmlFreeFunc)
+     d  mallocFunc                         like(xmlMallocFunc)
+     d  mallocAtomicFunc...
+     d                                     like(xmlMallocFunc)
+     d  reallocFunc                        like(xmlReallocFunc)
+     d  strdupFunc                         like(xmlStrdupFunc)
+
+      * Initialization of the memory layer.
+
+     d xmlInitMemory   pr            10i 0 extproc('xmlInitMemory')
+
+      * Cleanup of the memory layer.
+
+     d xmlCleanupMemory...
+     d                 pr                  extproc('xmlCleanupMemory')
+
+      * These are specific to the XML debug memory wrapper.
+
+     d xmlMemUsed      pr            10i 0 extproc('xmlMemUsed')
+
+     d xmlMemBlocks    pr            10i 0 extproc('xmlMemBlocks')
+
+     d xmlMemDisplay   pr                  extproc('xmlMemDisplay')
+     d  fp                             *   value                                FILE *
+
+     d xmlMmDisplayLast...
+     d                 pr                  extproc('xmlMemDisplayLast')
+     d  fp                             *   value                                FILE *
+     d  nbBytes                      20i 0 value
+
+     d xmlMemShow      pr                  extproc('xmlMemShow')
+     d  fp                             *   value                                FILE *
+     d  nr                           10i 0 value
+
+     d xmlMemoryDump   pr                  extproc('xmlMemoryDump')
+
+     d xmlMemMalloc    pr              *   extproc('xmlMemMalloc')              void *
+     d  size                         10u 0 value                                size_t
+
+     d xmlMemRealloc   pr              *   extproc('xmlMemRealloc')             void *
+     d  ptr                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+
+     d xmlMemFree      pr                  extproc('xmlMemFree')
+     d  ptr                            *   value                                void *
+
+     d xmlMemoryStrdup...
+     d                 pr              *   extproc('xmlMemoryStrdup')           char *
+     d  str                            *   value options(*string)               const char *
+
+     d xmlMallocLoc    pr              *   extproc('xmlMallocLoc')              void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlReallocLoc   pr              *   extproc('xmlReallocLoc')              void *
+     d  ptr                            *   value                                void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlMallocAtomicLoc...
+     d                 pr              *   extproc('xmlMallocAtomicLoc')        void *
+     d  size                         10u 0 value                                size_t
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+     d xmlMemStrdupLoc...
+     d                 pr              *   extproc('xmlMemStrdupLoc')           char *
+     d  str                            *   value options(*string)               const char *
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+
+      /if not defined(XML_GLOBALS_H)
+      /if not defined(XML_THREADS_H__)
+      /include "libxmlrpg/threads"
+      /include "libxmlrpg/globals"
+      /endif
+      /endif
+
+      /endif                                                                    DEBUG_MEMORY_ALLOC__
diff --git a/os400/libxmlrpg/xmlmodule.rpgle b/os400/libxmlrpg/xmlmodule.rpgle
new file mode 100644 (file)
index 0000000..09592a6
--- /dev/null
@@ -0,0 +1,51 @@
+      * Summary: dynamic module loading
+      * Description: basic API for dynamic module loading, used by
+      *              libexslt added in 2.6.17
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_MODULE_H__)
+      /define XML_MODULE_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_MODULES_ENABLED)
+
+      * xmlModulePtr:
+      *
+      * A handle to a dynamically loaded module
+
+     d xmlModulePtr    s               *   based(######typedef######)
+
+      * xmlModuleOption:
+      *
+      * enumeration of options that can be passed down to xmlModuleOpen()
+
+     d xmlModuleOption...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_MODULE_LAZY...                                                      Lazy binding
+     d                 c                   1
+     d  XML_MODULE_LOCAL...                                                     Local binding
+     d                 c                   2
+
+     d xmlModuleOpen   pr                  extproc('xmlModuleOpen')
+     d                                     like(xmlModulePtr)
+     d  filename                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlModuleSymbol...
+     d                 pr            10i 0 extproc('xmlModuleSymbol')
+     d  module                             value like(xmlModulePtr)
+     d  name                           *   value options(*string)               const char *
+     d  result                         *                                        void *(*)
+
+     d xmlModuleClose  pr            10i 0 extproc('xmlModuleClose')
+     d  module                             value like(xmlModulePtr)
+
+     d xmlModuleFree   pr            10i 0 extproc('xmlModuleFree')
+     d  module                             value like(xmlModulePtr)
+
+      /endif                                                                    LIBXML_MODULES_ENBLD
+      /endif                                                                    XML_MODULE_H__
diff --git a/os400/libxmlrpg/xmlreader.rpgle b/os400/libxmlrpg/xmlreader.rpgle
new file mode 100644 (file)
index 0000000..eccd37c
--- /dev/null
@@ -0,0 +1,619 @@
+      * Summary: the XMLReader implementation
+      * Description: API of the XML streaming API based on C# interfaces.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLREADER_H__)
+      /define XML_XMLREADER_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xmlIO"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+      /include "libxmlrpg/relaxng"
+      /include "libxmlrpg/xmlschemas"
+      /endif
+
+      * xmlParserSeverities:
+      *
+      * How severe an error callback is when the per-reader error callback API
+      * is used.
+
+     d xmlParserSeverities...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_SEVERITY_VALIDITY_WARNING...
+     d                 c                   1
+     d  XML_PARSER_SEVERITY_VALIDITY_ERROR...
+     d                 c                   2
+     d  XML_PARSER_SEVERITY_WARNING...
+     d                 c                   3
+     d  XML_PARSER_SEVERITY_ERROR...
+     d                 c                   4
+
+      /if defined(LIBXML_READER_ENABLED)
+
+      * xmlTextReaderMode:
+      *
+      * Internal state values for the reader.
+
+     d xmlTextReaderMode...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_TEXTREADER_MODE_INITIAL...
+     d                 c                   0
+     d  XML_TEXTREADER_MODE_INTERACTIVE...
+     d                 c                   1
+     d  XML_TEXTREADER_MODE_ERROR...
+     d                 c                   2
+     d  XML_TEXTREADER_MODE_EOF...
+     d                 c                   3
+     d  XML_TEXTREADER_MODE_CLOSED...
+     d                 c                   4
+     d  XML_TEXTREADER_MODE_READING...
+     d                 c                   5
+
+      * xmlParserProperties:
+      *
+      * Some common options to use with xmlTextReaderSetParserProp, but it
+      * is better to use xmlParserOption and the xmlReaderNewxxx and
+      * xmlReaderForxxx APIs now.
+
+     d xmlParserProperties...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_PARSER_LOADDTD...
+     d                 c                   1
+     d  XML_PARSER_DEFAULTATTRS...
+     d                 c                   2
+     d  XML_PARSER_VALIDATE...
+     d                 c                   3
+     d  XML_PARSER_SUBST_ENTITIES...
+     d                 c                   4
+
+      * xmlReaderTypes:
+      *
+      * Predefined constants for the different types of nodes.
+
+     d xmlReaderTypes  s             10i 0 based(######typedef######)           enum
+     d  XML_READER_TYPE_NONE...
+     d                 c                   0
+     d  XML_READER_TYPE_ELEMENT...
+     d                 c                   1
+     d  XML_READER_TYPE_ATTRIBUTE...
+     d                 c                   2
+     d  XML_READER_TYPE_TEXT...
+     d                 c                   3
+     d  XML_READER_TYPE_CDATA...
+     d                 c                   4
+     d  XML_READER_TYPE_ENTITY_REFERENCE...
+     d                 c                   5
+     d  XML_READER_TYPE_ENTITY...
+     d                 c                   6
+     d  XML_READER_TYPE_PROCESSING_INSTRUCTION...
+     d                 c                   7
+     d  XML_READER_TYPE_COMMENT...
+     d                 c                   8
+     d  XML_READER_TYPE_DOCUMENT...
+     d                 c                   9
+     d  XML_READER_TYPE_DOCUMENT_TYPE...
+     d                 c                   10
+     d  XML_READER_TYPE_DOCUMENT_FRAGMENT...
+     d                 c                   11
+     d  XML_READER_TYPE_NOTATION...
+     d                 c                   12
+     d  XML_READER_TYPE_WHITESPACE...
+     d                 c                   13
+     d  XML_READER_TYPE_SIGNIFICANT_WHITESPACE...
+     d                 c                   14
+     d  XML_READER_TYPE_END_ELEMENT...
+     d                 c                   15
+     d  XML_READER_TYPE_END_ENTITY...
+     d                 c                   16
+     d  XML_READER_TYPE_XML_DECLARATION...
+     d                 c                   17
+
+      * xmlTextReaderPtr:
+      *
+      * Pointer to an xmlReader context.
+
+     d xmlTextReaderPtr...
+     d                 s               *   based(######typedef######)
+
+      * Constructors & Destructor
+
+     d xmlNewTextReader...
+     d                 pr                  extproc('xmlNewTextReader')
+     d                                     like(xmlTextReaderPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  URI                            *   value options(*string)               const char *
+
+     d xmlNewTextReaderFilename...
+     d                 pr                  extproc('xmlNewTextReaderFilename')
+     d                                     like(xmlTextReaderPtr)
+     d  URI                            *   value options(*string)               const char *
+
+     d xmlFreeTextReader...
+     d                 pr                  extproc('xmlFreeTextReader')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderSetup...
+     d                 pr            10i 0 extproc('xmlTextReaderSetup')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  input                              value like(xmlParserInputBufferPtr)
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Iterators
+
+     d xmlTextReaderRead...
+     d                 pr            10i 0 extproc('xmlTextReaderRead')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_WRITER_ENABLED)
+     d xmlTextReaderReadInnerXml...
+     d                 pr              *   extproc('xmlTextReaderReadInnerXml') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadOuterXml...
+     d                 pr              *   extproc('xmlTextReaderReadOuterXml') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+      /endif
+
+     d xmlTextReaderReadString...
+     d                 pr              *   extproc('xmlTextReaderReadString')   xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadAttributeValue...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderReadAttributeValue')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Attributes of the node
+
+     d xmlTextReaderAttributeCount...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderAttributeCount')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderDepth...
+     d                 pr            10i 0 extproc('xmlTextReaderDepth')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderHasAttributes...
+     d                 pr            10i 0 extproc('xmlTextReaderHasAttributes')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderHasValue...
+     d                 pr            10i 0 extproc('xmlTextReaderHasValue')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsDefault...
+     d                 pr            10i 0 extproc('xmlTextReaderIsDefault')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsEmptyElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderIsEmptyElement')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNodeType...
+     d                 pr            10i 0 extproc('xmlTextReaderNodeType')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderQuoteChar...
+     d                 pr            10i 0 extproc('xmlTextReaderQuoteChar')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderReadState...
+     d                 pr            10i 0 extproc('xmlTextReaderReadState')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsNamespaceDecl...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderIsNamespaceDecl')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstBaseUri...
+     d                 pr              *   extproc('xmlTextReaderConstBaseUri') const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstLocalName...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstLocalName')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstName...
+     d                 pr              *   extproc('xmlTextReaderConstName')    const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstNamespaceUri...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstNamespaceUri')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstPrefix...
+     d                 pr              *   extproc('xmlTextReaderConstPrefix')  const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstXmlLang...
+     d                 pr              *   extproc('xmlTextReaderConstXmlLang') const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstString...
+     d                 pr              *   extproc('xmlTextReaderConstString')  const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderConstValue...
+     d                 pr              *   extproc('xmlTextReaderConstValue')   const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * use the Const version of the routine for
+      * better performance and simpler code
+
+     d xmlTextReaderBaseUri...
+     d                 pr              *   extproc('xmlTextReaderBaseUri')      xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderLocalName...
+     d                 pr              *   extproc('xmlTextReaderLocalName')    xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderName...
+     d                 pr              *   extproc('xmlTextReaderName')         xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNamespaceUri...
+     d                 pr              *   extproc('xmlTextReaderNamespaceUri') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderPrefix...
+     d                 pr              *   extproc('xmlTextReaderPrefix')       xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderXmlLang...
+     d                 pr              *   extproc('xmlTextReaderXmlLang')      xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderValue...
+     d                 pr              *   extproc('xmlTextReaderValue')        xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Methods of the XmlTextReader
+
+     d xmlTextReaderClose...
+     d                 pr            10i 0 extproc('xmlTextReaderClose')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetAttributeNo...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderGetAttributeNo')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  no                           10i 0 value
+
+     d xmlTextReaderGetAttribute...
+     d                 pr              *   extproc('xmlTextReaderGetAttribute') xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderGetAttributeNs...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderGetAttributeNs')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  localName                      *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderGetRemainder...
+     d                 pr                  extproc('xmlTextReaderGetRemainder')
+     d                                     like(xmlParserInputBufferPtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderLookupNamespace...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderLookupNamespace')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToAttributeNo...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttributeNo')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  no                           10i 0 value
+
+     d xmlTextReaderMoveToAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToAttributeNs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToAttributeNs')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  localName                      *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextReaderMoveToFirstAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToFirstAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderMoveToNextAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderMoveToNextAttribute')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderMoveToElement...
+     d                 pr            10i 0 extproc('xmlTextReaderMoveToElement')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNormalization...
+     d                 pr            10i 0 extproc('xmlTextReaderNormalization')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderConstEncoding...
+     d                 pr              *   extproc('xmlTextReaderConstEncoding')const xmlChar *
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Extensions
+
+     d xmlTextReaderSetParserProp...
+     d                 pr            10i 0 extproc('xmlTextReaderSetParserProp')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prop                         10i 0 value
+     d  value                        10i 0 value
+
+     d xmlTextReaderGetParserProp...
+     d                 pr            10i 0 extproc('xmlTextReaderGetParserProp')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  prop                         10i 0 value
+
+     d xmlTextReaderCurrentNode...
+     d                 pr                  extproc('xmlTextReaderCurrentNode')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetParserLineNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderGetParserLineNumber')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderGetParserColumnNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderGetParserColumnNumber')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderPreserve...
+     d                 pr                  extproc('xmlTextReaderPreserve')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_PATTERN_ENABLED)
+     d xmlTextReaderPreservePattern...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderPreservePattern')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  pattern                        *   value options(*string)               const xmlChar *
+     d  namespaces                     *                                        const xmlChar *(*)
+      /endif                                                                    LIBXML_PATTERN_ENBLD
+
+     d xmlTextReaderCurrentDoc...
+     d                 pr                  extproc('xmlTextReaderCurrentDoc')
+     d                                     like(xmlDocPtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderExpand...
+     d                 pr                  extproc('xmlTextReaderExpand')
+     d                                     like(xmlNodePtr)
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNext...
+     d                 pr            10i 0 extproc('xmlTextReaderNext')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderNextSibling...
+     d                 pr            10i 0 extproc('xmlTextReaderNextSibling')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderIsValid...
+     d                 pr            10i 0 extproc('xmlTextReaderIsValid')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+     d xmlTextReaderRelaxNGValidate...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGValidate')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  rng                            *   value options(*string)               const char *
+
+     d xmlTextReaderRelaxNGValidateCtxt...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGValidateCtxt')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ctxt                               value like(xmlRelaxNGValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlTextReaderRelaxNGSetSchema...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderRelaxNGSetSchema')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  schema                             value like(xmlRelaxNGPtr)
+
+     d xmlTextReaderSchemaValidate...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderSchemaValidate')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  xsd                            *   value options(*string)               const char *
+
+     d xmlTextReaderSchemaValidateCtxt...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderSchemaValidateCtxt')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ctxt                               value like(xmlSchemaValidCtxtPtr)
+     d  options                      10i 0 value
+
+     d xmlTextReaderSetSchema...
+     d                 pr            10i 0 extproc('xmlTextReaderSetSchema')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  schema                             value like(xmlSchemaPtr)
+      /endif
+
+     d xmlTextReaderConstXmlVersion...
+     d                 pr              *   extproc(                             const xmlChar *
+     d                                     'xmlTextReaderConstXmlVersion')
+     d  reader                             value like(xmlTextReaderPtr)
+
+     d xmlTextReaderStandalone...
+     d                 pr            10i 0 extproc('xmlTextReaderStandalone')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * Index lookup
+
+     d xmlTextReaderByteConsumed...
+     d                 pr            20i 0 extproc('xmlTextReaderByteConsumed')
+     d  reader                             value like(xmlTextReaderPtr)
+
+      * New more complete APIs for simpler creation and reuse of readers
+
+     d xmlReaderWalker...
+     d                 pr                  extproc('xmlReaderWalker')
+     d                                     like(xmlTextReaderPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlReaderForDoc...
+     d                 pr                  extproc('xmlReaderForDoc')
+     d                                     like(xmlTextReaderPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForFile...
+     d                 pr                  extproc('xmlReaderForFile')
+     d                                     like(xmlTextReaderPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForMemory...
+     d                 pr                  extproc('xmlReaderForMemory')
+     d                                     like(xmlTextReaderPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForFd  pr                  extproc('xmlReaderForFd')
+     d                                     like(xmlTextReaderPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderForIO  pr                  extproc('xmlReaderForIO')
+     d                                     like(xmlTextReaderPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewWalker...
+     d                 pr            10i 0 extproc('xmlReaderNewWalker')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlReaderNewDoc...
+     d                 pr            10i 0 extproc('xmlReaderNewDoc')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewFile...
+     d                 pr            10i 0 extproc('xmlReaderNewFile')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewMemory...
+     d                 pr            10i 0 extproc('xmlReaderNewMemory')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  buffer                         *   value options(*string)               const char *
+     d  size                         10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewFd  pr            10i 0 extproc('xmlReaderNewFd')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  fd                           10i 0 value
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlReaderNewIO  pr            10i 0 extproc('xmlReaderNewIO')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  ioread                             value like(xmlInputReadCallback)
+     d  ioclose                            value like(xmlInputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  URL                            *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+      * Error handling extensions
+
+     d xmlTextReaderLocatorPtr...
+     d                 s               *   based(######typedef######)           void *
+
+      * xmlTextReaderErrorFunc:
+      * @arg: the user argument
+      * @msg: the message
+      * @severity: the severity of the error
+      * @locator: a locator indicating where the error occured
+      *
+      * Signature of an error callback from a reader parser
+
+     d xmlTextReaderErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+     d xmlTextReaderLocatorLineNumber...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextReaderLocatorLineNumber')
+     d  locator                            value like(xmlTextReaderLocatorPtr)
+
+     d xmlTextReaderLocatorBaseURI...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                     'xmlTextReaderLocatorBaseURI')
+     d  locator                            value like(xmlTextReaderLocatorPtr)
+
+     d xmlTextReaderSetErrorHandler...
+     d                 pr                  extproc(
+     d                                     'xmlTextReaderSetErrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  value like(xmlTextReaderErrorFunc)
+     d  arg                            *   value                                void *
+
+     d xmlTextReaderSetStructuredErrorHandler...
+     d                 pr                  extproc('xmlTextReaderSetStructuredE-
+     d                                     rrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  value like(xmlStructuredErrorFunc)
+     d  arg                            *   value                                void *
+
+     d xmlTextReaderGetErrorHandler...
+     d                 pr                  extproc(
+     d                                     'xmlTextReaderGetErrorHandler')
+     d  reader                             value like(xmlTextReaderPtr)
+     d  f                                  like(xmlTextReaderErrorFunc)
+     d  arg                            *                                        void *(*)
+
+      /endif                                                                    LIBXML_READER_ENABLD
+      /endif                                                                    XML_XMLREADER_H__
diff --git a/os400/libxmlrpg/xmlregexp.rpgle b/os400/libxmlrpg/xmlregexp.rpgle
new file mode 100644 (file)
index 0000000..65c2d07
--- /dev/null
@@ -0,0 +1,246 @@
+      * Summary: regular expressions handling
+      * Description: basic API for libxml regular expressions handling used
+      *              for XML Schemas and validation.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_REGEXP_H__)
+      /define XML_REGEXP_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_REGEXP_ENABLED)
+
+      * xmlRegexpPtr:
+      *
+      * A libxml regular expression, they can actually be far more complex
+      * thank the POSIX regex expressions.
+
+     d xmlRegexpPtr    s               *   based(######typedef######)
+
+      * xmlRegExecCtxtPtr:
+      *
+      * A libxml progressive regular expression evaluation context
+
+     d xmlRegExecCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/dict"
+
+      * The POSIX like API
+
+     d xmlRegexpCompile...
+     d                 pr                  extproc('xmlRegexpCompile')
+     d                                     like(xmlRegexpPtr)
+     d  regexp                         *   value options(*string)               const xmlChar *
+
+     d xmlRegFreeRegexp...
+     d                 pr                  extproc('xmlRegFreeRegexp')
+     d  regexp                             value like(xmlRegexpPtr)
+
+     d xmlRegexpExec   pr            10i 0 extproc('xmlRegexpExec')
+     d  comp                               value like(xmlRegexpPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlRegexpPrint  pr                  extproc('xmlRegexpPrint')
+     d  output                         *   value                                FILE *
+     d  regexp                             value like(xmlRegexpPtr)
+
+     d xmlRegexpIsDeterminist...
+     d                 pr            10i 0 extproc('xmlRegexpIsDeterminist')
+     d  comp                               value like(xmlRegexpPtr)
+
+      * xmlRegExecCallbacks:
+      * @exec: the regular expression context
+      * @token: the current token string
+      * @transdata: transition data
+      * @inputdata: input data
+      *
+      * Callback function when doing a transition in the automata
+
+     d xmlRegExecCallbacks...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * The progressive API
+
+     d xmlRegNewExecCtxt...
+     d                 pr                  extproc('xmlRegNewExecCtxt')
+     d                                     like(xmlRegExecCtxtPtr)
+     d  comp                               value like(xmlRegexpPtr)
+     d  callback                           value like(xmlRegExecCallbacks)
+     d  data                           *   value                                void *
+
+     d xmlRegFreeExecCtxt...
+     d                 pr                  extproc('xmlRegFreeExecCtxt')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+
+     d xmlRegExecPushString...
+     d                 pr            10i 0 extproc('xmlRegExecPushString')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  data                           *   value                                void *
+
+     d xmlRegExecPushString2...
+     d                 pr            10i 0 extproc('xmlRegExecPushString2')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  value2                         *   value options(*string)               const xmlChar *
+     d  data                           *   value                                void *
+
+     d xmlRegExecNextValues...
+     d                 pr            10i 0 extproc('xmlRegExecNextValues')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  nbval                        10i 0
+     d  nbneg                        10i 0
+     d  values                         *                                        xmlChar * (*)
+     d  terminal                     10i 0
+
+     d xmlRegExecErrInfo...
+     d                 pr            10i 0 extproc('xmlRegExecErrInfo')
+     d  exec                               value like(xmlRegExecCtxtPtr)
+     d  string                         *                                        const xmlChar * (*)
+     d  nbval                        10i 0
+     d  nbneg                        10i 0
+     d  values                         *                                        xmlChar * (*)
+     d  terminal                     10i 0
+
+      /if defined(LIBXML_EXPR_ENABLED)
+
+      * Formal regular expression handling
+      * Its goal is to do some formal work on content models
+
+      * expressions are used within a context
+
+     d xmlExpCtxtPtr   s               *   based(######typedef######)
+
+     d xmlExpFreeCtxt  pr                  extproc('xmlExpFreeCtxt')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+     d xmlExpNewCtxt   pr                  extproc('xmlExpNewCtxt')
+     d                                     like(xmlExpCtxtPtr)
+     d  maxNodes                     10i 0 value
+     d  dict                               value like(xmlDictPtr)
+
+     d xmlExpCtxtNbNodes...
+     d                 pr            10i 0 extproc('xmlExpCtxtNbNodes')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+     d xmlExpCtxtNbCons...
+     d                 pr            10i 0 extproc('xmlExpCtxtNbCons')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+
+      * Expressions are trees but the tree is opaque
+
+     d xmlExpNodePtr   s               *   based(######typedef######)
+
+     d xmlExpNodeType  s             10i 0 based(######typedef######)           enum
+     d  XML_EXP_EMPTY  c                   0
+     d  XML_EXP_FORBID...
+     d                 c                   1
+     d  XML_EXP_ATOM   c                   2
+     d  XML_EXP_SEQ    c                   3
+     d  XML_EXP_OR     c                   4
+     d  XML_EXP_COUNT  c                   5
+
+      * 2 core expressions shared by all for the empty language set
+      * and for the set with just the empty token
+
+     d forbiddenExp    s                   import('forbiddenExp')
+     d                                     like(xmlExpNodePtr)
+
+     d emptyExp        s                   import('emptyExp')
+     d                                     like(xmlExpNodePtr)
+
+
+      * Expressions are reference counted internally
+
+     d xmlExpFree      pr                  extproc('xmlExpFree')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpRef       pr                  extproc('xmlExpRef')
+     d  expr                               value like(xmlExpNodePtr)
+
+      * constructors can be either manual or from a string
+
+     d xmlExpParse     pr                  extproc('xmlExpParse')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                           *   value options(*string)               const char *
+
+     d xmlExpNewAtom   pr                  extproc('xmlExpNewAtom')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlExpNewOr     pr                  extproc('xmlExpNewOr')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  left                               value like(xmlExpNodePtr)
+     d  right                              value like(xmlExpNodePtr)
+
+     d xmlExpNewSeq    pr                  extproc('xmlExpNewSeq')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  left                               value like(xmlExpNodePtr)
+     d  right                              value like(xmlExpNodePtr)
+
+     d xmlExpNewRange  pr                  extproc('xmlExpNewRange')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  subset                             value like(xmlExpNodePtr)
+     d  min                          10i 0 value
+     d  max                          10i 0 value
+
+      * The really interesting APIs
+
+     d xmlExpIsNillable...
+     d                 pr            10i 0 extproc('xmlExpIsNillable')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpMaxToken  pr            10i 0 extproc('xmlExpMaxToken')
+     d  expr                               value like(xmlExpNodePtr)
+
+     d xmlExpGetLanguage...
+     d                 pr            10i 0 extproc('xmlExpGetLanguage')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  langList                       *                                        const xmlChar *(*)
+     d  len                          10i 0 value
+
+     d xmlExpGetStart  pr            10i 0 extproc('xmlExpGetStart')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  tokList                        *                                        const xmlChar *(*)
+     d  len                          10i 0 value
+
+     d xmlExpStringDerive...
+     d                 pr                  extproc('xmlExpStringDerive')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlExpExpDerive...
+     d                 pr                  extproc('xmlExpExpDerive')
+     d                                     like(xmlExpNodePtr)
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  sub                                value like(xmlExpNodePtr)
+
+     d xmlExpSubsume   pr            10i 0 extproc('xmlExpSubsume')
+     d  ctxt                               value like(xmlExpCtxtPtr)
+     d  expr                               value like(xmlExpNodePtr)
+     d  sub                                value like(xmlExpNodePtr)
+
+     d xmlExpDump      pr                  extproc('xmlExpDump')
+     d  buf                                value like(xmlBufferPtr)
+     d  expr                               value like(xmlExpNodePtr)
+      /endif                                                                    LIBXML_EXPR_ENABLED
+      /endif                                                                    LIBXML_REGEXP_ENABLD
+      /endif                                                                    XML_REGEXP_H__
diff --git a/os400/libxmlrpg/xmlsave.rpgle b/os400/libxmlrpg/xmlsave.rpgle
new file mode 100644 (file)
index 0000000..efcb09f
--- /dev/null
@@ -0,0 +1,96 @@
+      * Summary: the XML document serializer
+      * Description: API to save document or subtree of document
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLSAVE_H__)
+      /define XML_XMLSAVE_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/encoding"
+      /include "libxmlrpg/xmlIO"
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+
+      * xmlSaveOption:
+      *
+      * This is the set of XML save options that can be passed down
+      * to the xmlSaveToFd() and similar calls.
+
+     d xmlSaveOption   s             10i 0 based(######typedef######)           enum
+     d  XML_SAVE_FORMAT...                                                      Format save output
+     d                 c                   X'0001'
+     d  XML_SAVE_NO_DECL...                                                     Drop xml declaration
+     d                 c                   X'0002'
+     d  XML_SAVE_NO_EMPTY...                                                    No empty tags
+     d                 c                   X'0004'
+     d  XML_SAVE_NO_XHTML...                                                    No XHTML1 specific
+     d                 c                   X'0008'
+     d  XML_SAVE_XHTML...                                                       Frce XHTML1 specific
+     d                 c                   X'0010'
+     d  XML_SAVE_AS_XML...                                                      Frce XML on HTML doc
+     d                 c                   X'0020'
+     d  XML_SAVE_AS_HTML...                                                     Frce HTML on XML doc
+     d                 c                   X'0040'
+     d  XML_SAVE_WSNONSIG...                                                    Fmt w/ non-sig space
+     d                 c                   X'0080'
+
+     d xmlSaveCtxtPtr  s               *   based(######typedef######)
+
+     d xmlSaveToFd     pr                  extproc('xmlSaveToFd')
+     d                                     like(xmlSaveCtxtPtr)
+     d  fd                           10i 0 value
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToFilename...
+     d                 pr                  extproc('xmlSaveToFilename')
+     d                                     like(xmlSaveCtxtPtr)
+     d  filename                       *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToBuffer...
+     d                 pr                  extproc('xmlSaveToBuffer')
+     d                                     like(xmlSaveCtxtPtr)
+     d  buffer                             value like(xmlBufferPtr)
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveToIO     pr                  extproc('xmlSaveToIO')
+     d                                     like(xmlSaveCtxtPtr)
+     d  iowrite                            value like(xmlOutputWriteCallback)
+     d  ioclose                            value like(xmlOutputCloseCallback)
+     d  ioctx                          *   value                                void *
+     d  encoding                       *   value options(*string)               const char *
+     d  options                      10i 0 value
+
+     d xmlSaveDoc      pr            20i 0 extproc('xmlSaveDoc')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  doc                                value like(xmlDocPtr)
+
+     d xmlSaveTree     pr            20i 0 extproc('xmlSaveTree')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSaveFlush    pr            10i 0 extproc('xmlSaveFlush')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+
+     d xmlSaveClose    pr            10i 0 extproc('xmlSaveClose')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+
+     d xmlSaveSetEscape...
+     d                 pr            10i 0 extproc('xmlSaveSetEscape')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  escape                             value like(xmlCharEncodingOutputFunc)
+
+     d xmlSaveSetAttrEscape...
+     d                 pr            10i 0 extproc('xmlSaveSetAttrEscape')
+     d  ctxt                               value like(xmlSaveCtxtPtr)
+     d  escape                             value like(xmlCharEncodingOutputFunc)
+
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+      /endif                                                                    XML_XMLSAVE_H__
diff --git a/os400/libxmlrpg/xmlschemas.rpgle b/os400/libxmlrpg/xmlschemas.rpgle
new file mode 100644 (file)
index 0000000..865dd26
--- /dev/null
@@ -0,0 +1,318 @@
+      * Summary: incomplete XML Schemas structure implementation
+      * Description: interface to the XML Schemas handling and schema validity
+      *              checking, it is incomplete right now.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_H__)
+      /define XML_SCHEMA_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+      /include "libxmlrpg/tree"
+
+      * This error codes are obsolete; not used any more.
+
+     d xmlSchemaValidError...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMAS_ERR_OK...
+     d                 c                   0
+     d  XML_SCHEMAS_ERR_NOROOT...
+     d                 c                   1
+     d  XML_SCHEMAS_ERR_UNDECLAREDELEM...
+     d                 c                   2
+     d  XML_SCHEMAS_ERR_NOTTOPLEVEL...
+     d                 c                   3
+     d  XML_SCHEMAS_ERR_MISSING...
+     d                 c                   4
+     d  XML_SCHEMAS_ERR_WRONGELEM...
+     d                 c                   5
+     d  XML_SCHEMAS_ERR_NOTYPE...
+     d                 c                   6
+     d  XML_SCHEMAS_ERR_NOROLLBACK...
+     d                 c                   7
+     d  XML_SCHEMAS_ERR_ISABSTRACT...
+     d                 c                   8
+     d  XML_SCHEMAS_ERR_NOTEMPTY...
+     d                 c                   9
+     d  XML_SCHEMAS_ERR_ELEMCONT...
+     d                 c                   10
+     d  XML_SCHEMAS_ERR_HAVEDEFAULT...
+     d                 c                   11
+     d  XML_SCHEMAS_ERR_NOTNILLABLE...
+     d                 c                   12
+     d  XML_SCHEMAS_ERR_EXTRACONTENT...
+     d                 c                   13
+     d  XML_SCHEMAS_ERR_INVALIDATTR...
+     d                 c                   14
+     d  XML_SCHEMAS_ERR_INVALIDELEM...
+     d                 c                   15
+     d  XML_SCHEMAS_ERR_NOTDETERMINIST...
+     d                 c                   16
+     d  XML_SCHEMAS_ERR_CONSTRUCT...
+     d                 c                   17
+     d  XML_SCHEMAS_ERR_INTERNAL...
+     d                 c                   18
+     d  XML_SCHEMAS_ERR_NOTSIMPLE...
+     d                 c                   19
+     d  XML_SCHEMAS_ERR_ATTRUNKNOWN...
+     d                 c                   20
+     d  XML_SCHEMAS_ERR_ATTRINVALID...
+     d                 c                   21
+     d  XML_SCHEMAS_ERR_VALUE...
+     d                 c                   22
+     d  XML_SCHEMAS_ERR_FACET...
+     d                 c                   23
+     d  XML_SCHEMAS_ERR_...
+     d                 c                   24
+     d  XML_SCHEMAS_ERR_XXX...
+     d                 c                   25
+
+      * ATTENTION: Change xmlSchemaSetValidOptions's check
+      * for invalid values, if adding to the validation
+      * options below.
+
+      * xmlSchemaValidOption:
+      *
+      * This is the set of XML Schema validation options.
+
+     d xmlSchemaValidOption...
+     d                 s             10i 0 based(######typedef######)           enum
+      *
+      * Default/fixed: create an attribute node
+      * or an element's text node on the instance.
+      *
+     d  XML_SCHEMA_VAL_VC_I_CREATE...
+     d                 c                   X'0001'
+      /if defined(DISABLED)
+      *
+      * assemble schemata using
+      * xsi:schemaLocation and
+      * xsi:noNamespaceSchemaLocation
+      *
+     d  XML_SCHEMA_VAL_XSI_ASSEMBLE...
+     d                 c                   X'0002'
+      /endif
+
+      * The schemas related types are kept internal
+
+     d xmlSchemaPtr    s               *   based(######typedef######)
+
+      * xmlSchemaValidityErrorFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of an error callback from an XSD validation
+
+     d xmlSchemaValidityErrorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlSchemaValidityWarningFunc:
+      * @ctx: the validation context
+      * @msg: the message
+      * @...: extra arguments
+      *
+      * Signature of a warning callback from an XSD validation
+
+     d xmlSchemaValidityWarningFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * A schemas validation context
+
+     d xmlSchemaParserCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaValidCtxtPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlSchemaValidityLocatorFunc:
+      * @ctx: user provided context
+      * @file: returned file information
+      * @line: returned line information
+      *
+      * A schemas validation locator, a callback called by the validator.
+      * This is used when file or node informations are not available
+      * to find out what file and line number are affected
+      *
+      * Returns: 0 in case of success and -1 in case of error
+
+     d xmlSchemaValidityLocatorFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Interfaces for parsing.
+
+     d xmlSchemaNewParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d URL                             *   value options(*string)               const char *
+
+     d xmlSchemaNewMemParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewMemParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d buffer                          *   value options(*string)               const char *
+     d size                          10i 0 value
+
+     d xmlSchemaNewDocParserCtxt...
+     d                 pr                  extproc('xmlSchemaNewDocParserCtxt')
+     d                                     like(xmlSchemaParserCtxtPtr)
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlSchemaFreeParserCtxt...
+     d                 pr                  extproc('xmlSchemaFreeParserCtxt')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+
+     d xmlSchemaSetParserErrors...
+     d                 pr                  extproc('xmlSchemaSetParserErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d err                                 value
+     d                                     like(xmlSchemaValidityErrorFunc)
+     d warn                                value
+     d                                     like(xmlSchemaValidityWarningFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaSetParserStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaSetParserStructuredErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d serror                              value like(xmlStructuredErrorFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaGetParserErrors...
+     d                 pr            10i 0 extproc('xmlSchemaGetParserErrors')
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+     d err                                 like(xmlSchemaValidityErrorFunc)
+     d warn                                like(xmlSchemaValidityWarningFunc)
+     d ctx                             *                                        void *(*)
+
+     d xmlSchemaIsValid...
+     d                 pr            10i 0 extproc('xmlSchemaIsValid')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaParse  pr                  extproc('xmlSchemaParse')
+     d                                     like(xmlSchemaPtr)
+     d ctxt                                value like(xmlSchemaParserCtxtPtr)
+
+     d xmlSchemaFree   pr                  extproc('xmlSchemaFree')
+     d schema                              value like(xmlSchemaPtr)
+
+      /if defined(LIBXML_OUTPUT_ENABLED)
+     d xmlSchemaDump   pr                  extproc('xmlSchemaDump')
+     d output                          *   value                                FILE *
+     d schema                              value like(xmlSchemaPtr)
+      /endif                                                                    LIBXML_OUTPUT_ENABLD
+
+      * Interfaces for validating
+
+     d xmlSchemaSetValidErrors...
+     d                 pr                  extproc('xmlSchemaSetValidErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d err                                 value
+     d                                     like(xmlSchemaValidityErrorFunc)
+     d warn                                value
+     d                                     like(xmlSchemaValidityWarningFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaSetValidStructuredErrors...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaSetValidStructuredErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d serror                              value like(xmlStructuredErrorFunc)
+     d ctx                             *   value                                void *
+
+     d xmlSchemaGetValidErrors...
+     d                 pr            10i 0 extproc('xmlSchemaGetValidErrors')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d err                                 like(xmlSchemaValidityErrorFunc)
+     d warn                                like(xmlSchemaValidityWarningFunc)
+     d ctx                             *                                        void *(*)
+
+     d xmlSchemaSetValidOptions...
+     d                 pr            10i 0 extproc('xmlSchemaSetValidOptions')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d options                       10i 0 value
+
+     d xmlSchemaValidateSetFilename...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidateSetFilename')
+     d vctxt                               value like(xmlSchemaValidCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+
+     d xmlSchemaValidCtxtGetOptions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidCtxtGetOptions')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaNewValidCtxt...
+     d                 pr                  extproc('xmlSchemaNewValidCtxt')
+     d                                     like(xmlSchemaValidCtxtPtr)
+     d schema                              value like(xmlSchemaPtr)
+
+     d xmlSchemaFreeValidCtxt...
+     d                 pr                  extproc('xmlSchemaFreeValidCtxt')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+     d xmlSchemaValidateDoc...
+     d                 pr            10i 0 extproc('xmlSchemaValidateDoc')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d instance                            value like(xmlDocPtr)
+
+     d xmlSchemaValidateOneElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateOneElement')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d elem                                value like(xmlNodePtr)
+
+     d xmlSchemaValidateStream...
+     d                 pr            10i 0 extproc('xmlSchemaValidateStream')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d input                               value like(xmlParserInputBufferPtr)
+     d enc                                 value like(xmlCharEncoding)
+     d sax                                 value like(xmlSAXHandlerPtr)
+     d user_data                       *   value                                void *
+
+     d xmlSchemaValidateFile...
+     d                 pr            10i 0 extproc('xmlSchemaValidateFile')
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d filename                        *   value options(*string)               const char *
+     d options                       10i 0 value
+
+     d xmlSchemaValidCtxtGetParserCtxt...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidCtxtGetParserCtxt')
+     d                                     like(xmlParserCtxtPtr)
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+
+      * Interface to insert Schemas SAX validation in a SAX stream
+
+     d xmlSchemaSAXPlugPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlSchemaSAXPlug...
+     d                 pr                  extproc('xmlSchemaSAXPlug')
+     d                                     like(xmlSchemaSAXPlugPtr)
+     d ctxt                                value like(xmlSchemaValidCtxtPtr)
+     d sax                                 like(xmlSAXHandlerPtr)
+     d user_data                       *                                        void *(*)
+
+     d xmlSchemaSAXUnplug...
+     d                 pr            10i 0 extproc('xmlSchemaSAXUnplug')
+     d plug                                value like(xmlSchemaSAXPlugPtr)
+
+     d xmlSchemaValidateSetLocator...
+     d                 pr                  extproc(
+     d                                     'xmlSchemaValidateSetLocator')
+     d vctxt                               value like(xmlSchemaValidCtxtPtr)
+     d f                                   value
+     d                                     like(xmlSchemaValidityLocatorFunc)
+     d ctxt                            *   value                                void *
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_SCHEMA_H__
diff --git a/os400/libxmlrpg/xmlschemastypes.rpgle b/os400/libxmlrpg/xmlschemastypes.rpgle
new file mode 100644 (file)
index 0000000..6433c32
--- /dev/null
@@ -0,0 +1,235 @@
+      * Summary: implementation of XML Schema Datatypes
+      * Description: module providing the XML Schema Datatypes implementation
+      *              both definition and validity checking
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_SCHEMA_TYPES_H__)
+      /define XML_SCHEMA_TYPES_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_SCHEMAS_ENABLED)
+
+      /include "libxmlrpg/schemasInternals"
+      /include "libxmlrpg/xmlschemas"
+
+     d xmlSchemaWhitespaceValueType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XML_SCHEMA_WHITESPACE_UNKNOWN...
+     d                 c                   0
+     d  XML_SCHEMA_WHITESPACE_PRESERVE...
+     d                 c                   1
+     d  XML_SCHEMA_WHITESPACE_REPLACE...
+     d                 c                   2
+     d  XML_SCHEMA_WHITESPACE_COLLAPSE...
+     d                 c                   3
+
+     d xmlSchemaInitTypes...
+     d                 pr                  extproc('xmlSchemaInitTypes')
+
+     d xmlSchemaCleanupTypes...
+     d                 pr                  extproc('xmlSchemaCleanupTypes')
+
+     d xmlSchemaGetPredefinedType...
+     d                 pr                  extproc('xmlSchemaGetPredefinedType')
+     d                                     like(xmlSchemaTypePtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlSchemaValidatePredefinedType...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidatePredefinedType')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                            *   value                                xmlSchemaValPtr *
+
+     d xmlSchemaValPredefTypeNode...
+     d                 pr            10i 0 extproc('xmlSchemaValPredefTypeNode')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                            *   value                                xmlSchemaValPtr *
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSchemaValidateFacet...
+     d                 pr            10i 0 extproc('xmlSchemaValidateFacet')
+     d  base                               value like(xmlSchemaTypePtr)
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValidateFacetWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateFacetWhtsp')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  fws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+     d  valType                            value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaFreeValue...
+     d                 pr                  extproc('xmlSchemaFreeValue')
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaNewFacet...
+     d                 pr                  extproc('xmlSchemaNewFacet')
+     d                                     like(xmlSchemaFacetPtr)
+
+     d xmlSchemaCheckFacet...
+     d                 pr            10i 0 extproc('xmlSchemaCheckFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  typeDecl                           value like(xmlSchemaTypePtr)
+     d  ctxt                               value like(xmlSchemaParserCtxtPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlSchemaFreeFacet...
+     d                 pr                  extproc('xmlSchemaFreeFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+
+     d xmlSchemaCompareValues...
+     d                 pr            10i 0 extproc('xmlSchemaCompareValues')
+     d  x                                  value like(xmlSchemaValPtr)
+     d  y                                  value like(xmlSchemaValPtr)
+
+     d xmlSchemaGetBuiltInListSimpleTypeItemType...
+     d                 pr                  extproc('xmlSchemaGetBuiltInListSimp-
+     d                                     leTypeItemType')
+     d                                     like(xmlSchemaTypePtr)
+     d  type                               value like(xmlSchemaTypePtr)
+
+     d xmlSchemaValidateListSimpleTypeFacet...
+     d                 pr            10i 0 extproc('xmlSchemaValidateListSimple-
+     d                                     TypeFacet')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  actualLen                    20u 0 value
+     d  expectedLen                    *   value                                unsigned long *
+
+     d xmlSchemaGetBuiltInType...
+     d                 pr                  extproc('xmlSchemaGetBuiltInType')
+     d                                     like(xmlSchemaTypePtr)
+     d  type                               value like(xmlSchemaValType)
+
+     d xmlSchemaIsBuiltInTypeFacet...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaIsBuiltInTypeFacet')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  facetType                    10i 0 value
+
+     d xmlSchemaCollapseString...
+     d                 pr              *   extproc('xmlSchemaCollapseString')   xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaWhiteSpaceReplace...
+     d                 pr              *   extproc('xmlSchemaWhiteSpaceReplace')xmlChar *
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaGetFacetValueAsULong...
+     d                 pr            20u 0 extproc(
+     d                                     'xmlSchemaGetFacetValueAsULong')
+     d  facet                              value like(xmlSchemaFacetPtr)
+
+     d xmlSchemaValidateLengthFacet...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateLengthFacet')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  length                       20u 0
+
+     d xmlSchemaValidateLengthFacetWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValidateLengthFacetWhtsp')
+     d  facet                              value like(xmlSchemaFacetPtr)
+     d  valType                            value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+     d  length                       20u 0
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaValPredefTypeNodeNoNorm...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaValPredefTypeNodeNoNorm')
+     d  type                               value like(xmlSchemaTypePtr)
+     d  value                          *   value options(*string)               const xmlChar *
+     d  val                                like(xmlSchemaValPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlSchemaGetCanonValue...
+     d                 pr            10i 0 extproc('xmlSchemaGetCanonValue')
+     d  val                                value like(xmlSchemaValPtr)
+     d  retValue                       *   value                                const xmlChar * *
+
+     d xmlSchemaGetCanonValueWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaGetCanonValueWhtsp')
+     d  val                                value like(xmlSchemaValPtr)
+     d  retValue                       *   value                                const xmlChar * *
+     d  ws                                 value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaValueAppend...
+     d                 pr            10i 0 extproc('xmlSchemaValueAppend')
+     d  prev                               value like(xmlSchemaValPtr)
+     d  cur                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetNext...
+     d                 pr                  extproc('xmlSchemaValueGetNext')
+     d                                     like(xmlSchemaValPtr)
+     d  cur                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetAsString...
+     d                 pr              *   extproc('xmlSchemaValueGetAsString') const xmlChar *
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaValueGetAsBoolean...
+     d                 pr            10i 0 extproc('xmlSchemaValueGetAsBoolean')
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaNewStringValue...
+     d                 pr                  extproc('xmlSchemaNewStringValue')
+     d                                     like(xmlSchemaValPtr)
+     d  type                               value like(xmlSchemaValType)
+     d  value                          *   value options(*string)               const xmlChar *
+
+     d xmlSchemaNewNOTATIONValue...
+     d                 pr                  extproc('xmlSchemaNewNOTATIONValue')
+     d                                     like(xmlSchemaValPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns                             *   value options(*string)               const xmlChar *
+
+     d xmlSchemaNewQNameValue...
+     d                 pr                  extproc('xmlSchemaNewQNameValue')
+     d                                     like(xmlSchemaValPtr)
+     d  namespaceName                  *   value options(*string)               const xmlChar *
+     d  localName                      *   value options(*string)               const xmlChar *
+
+     d xmlSchemaCompareValuesWhtsp...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlSchemaCompareValuesWhtsp')
+     d  x                                  value like(xmlSchemaValPtr)
+     d  xws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+     d  y                                  value like(xmlSchemaValPtr)
+     d  yws                                value
+     d                                     like(xmlSchemaWhitespaceValueType)
+
+     d xmlSchemaCopyValue...
+     d                 pr                  extproc('xmlSchemaCopyValue')
+     d                                     like(xmlSchemaValPtr)
+     d  val                                value like(xmlSchemaValPtr)
+
+     d xmlSchemaGetValType...
+     d                 pr                  extproc('xmlSchemaGetValType')
+     d                                     like(xmlSchemaValType)
+     d  val                                value like(xmlSchemaValPtr)
+
+      /endif                                                                    LIBXML_SCHEMAS_ENBLD
+      /endif                                                                    XML_SCHEMA_TYPES_H__
diff --git a/os400/libxmlrpg/xmlstdarg.rpgle b/os400/libxmlrpg/xmlstdarg.rpgle
new file mode 100644 (file)
index 0000000..4e6f121
--- /dev/null
@@ -0,0 +1,34 @@
+      * Summary: va_list support for ILE/RPG.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_STDARG_H__)
+      /define XML_STDARG_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      * The va_list object.
+
+     d xmlVaList       ds                  based(######typedef######)
+     d                                     align qualified
+     d  current                        *
+     d  next                           *
+
+      * Procedures.
+
+     d xmlVaStart      pr                  extproc('__xmlVaStart')
+     d  list                               like(xmlVaList)
+     d  lastargaddr                    *   value
+     d  lastargsize                  10u 0 value
+
+     d xmlVaArg        pr              *   extproc('__xmlVaArg')
+     d  list                               like(xmlVaList)
+     d  dest                           *   value
+     d  argsize                      10i 0 value
+
+     d xmlVaEnd        pr                  extproc('__xmlVaEnd')
+     d  list                               like(xmlVaList)
+
+      /endif                                                                    XML_STDARG_H__
diff --git a/os400/libxmlrpg/xmlstring.rpgle b/os400/libxmlrpg/xmlstring.rpgle
new file mode 100644 (file)
index 0000000..41e9eb5
--- /dev/null
@@ -0,0 +1,162 @@
+      * Summary: set of routines to process strings
+      * Description: type and interfaces needed for the internal string
+      *              handling of the library, especially UTF8 processing.
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_STRING_H__)
+      /define XML_STRING_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xmlstdarg"
+
+      * xmlChar:
+      *
+      * This is a basic byte in an UTF-8 encoded string.
+      * It's unsigned allowing to pinpoint case where char * are assigned
+      * to xmlChar * (possibly making serialization back impossible).
+
+     d xmlChar         s              3u 0 based(######typedef######)
+
+      * xmlChar handling
+
+     d xmlStrdup       pr              *   extproc('xmlStrdup')                 xmlChar *
+     d  cur                            *   value options(*string)               const xmlChar *
+
+     d xmlStrndup      pr              *   extproc('xmlStrndup')                xmlChar *
+     d  cur                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlCharStrndup  pr              *   extproc('xmlCharStrndup')            xmlChar *
+     d  cur                            *   value options(*string)               const char *
+     d  len                          10i 0 value
+
+     d xmlCharStrdup   pr              *   extproc('xmlCharStrdup')             xmlChar *
+     d  cur                            *   value options(*string)               const char *
+
+     d xmlStrsub       pr              *   extproc('xmlStrsub')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlStrchr       pr              *   extproc('xmlStrchr')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                                value like(xmlChar)
+
+     d xmlStrstr       pr              *   extproc('xmlStrstr')                 const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcasestr   pr              *   extproc('xmlStrcasestr')             const xmlChar *
+     d  str                            *   value options(*string)               const xmlChar *
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcmp       pr            10i 0 extproc('xmlStrcmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrncmp      pr            10i 0 extproc('xmlStrncmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrcasecmp   pr            10i 0 extproc('xmlStrcasecmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrncasecmp  pr            10i 0 extproc('xmlStrncasecmp')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrEqual     pr            10i 0 extproc('xmlStrEqual')
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+
+     d xmlStrQEqual    pr            10i 0 extproc('xmlStrQEqual')
+     d  pref                           *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  stre                           *   value options(*string)               const xmlChar *
+
+     d xmlStrlen       pr            10i 0 extproc('xmlStrlen')
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlStrcat       pr              *   extproc('xmlStrcat')                 xmlChar *
+     d  cur                            *   value options(*string)               xmlChar *
+     d  add                            *   value options(*string)               const xmlChar *
+
+     d xmlStrncat      pr              *   extproc('xmlStrncat')                xmlChar *
+     d  cur                            *   value options(*string)               xmlChar *
+     d  add                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlStrncatNew   pr              *   extproc('xmlStrncatNew')             xmlChar *
+     d  str1                           *   value options(*string)               const xmlChar *
+     d  str2                           *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+      * xmlStrPrintf() is a vararg function.
+      * The following prototype supports up to 8 pointer arguments.
+      * Other argument signature can be achieved by defining alternate
+      *   prototypes redirected to the same function.
+
+     d xmlStrPrintf    pr            10i 0 extproc('xmlStrPrintf')
+     d  buf                            *   value options(*string)               xmlChar *
+     d  len                          10i 0 value
+     d  msg                            *   value options(*string)               const xmlChar *
+     d  arg1                           *   value options(*string: *nopass)
+     d  arg2                           *   value options(*string: *nopass)
+     d  arg3                           *   value options(*string: *nopass)
+     d  arg4                           *   value options(*string: *nopass)
+     d  arg5                           *   value options(*string: *nopass)
+     d  arg6                           *   value options(*string: *nopass)
+     d  arg7                           *   value options(*string: *nopass)
+     d  arg8                           *   value options(*string: *nopass)
+
+     d xmlStrVPrintf   pr            10i 0 extproc('xmlStrVPrintf')
+     d  buf                            *   value options(*string)               xmlChar *
+     d  len                          10i 0 value
+     d  msg                            *   value options(*string)               const xmlChar *
+     d  ap                                 likeds(xmlVaList)
+
+     d xmlGetUTF8Char  pr            10i 0 extproc('xmlGetUTF8Char')
+     d  utf                            *   value options(*string)               const uns. char *
+     d  len                          10i 0
+
+     d xmlCheckUTF8    pr            10i 0 extproc('xmlCheckUTF8')
+     d  utf                            *   value options(*string)               const uns. char *
+
+     d xmlUTF8Strsize  pr            10i 0 extproc('xmlUTF8Strsize')
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlUTF8Strndup  pr              *   extproc('xmlUTF8Strndup')            xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlUTF8Strpos   pr              *   extproc('xmlUTF8Strpos')             const xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  pos                          10i 0 value
+
+     d xmlUTF8Strloc   pr            10i 0 extproc('xmlUTF8Strloc')
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  utfchar                        *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Strsub   pr              *   extproc('xmlUTF8Strsub')             xmlChar *
+     d  utf                            *   value options(*string)               const xmlChar *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlUTF8Strlen   pr            10i 0 extproc('xmlUTF8Strlen')
+     d  utf                            *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Size     pr            10i 0 extproc('xmlUTF8Size')
+     d  utf                            *   value options(*string)               const xmlChar *
+
+     d xmlUTF8Charcmp  pr            10i 0 extproc('xmlUTF8Charcmp')
+     d  utf1                           *   value options(*string)               const xmlChar *
+     d  utf2                           *   value options(*string)               const xmlChar *
+
+      /endif                                                                    XML_STRING_H__
diff --git a/os400/libxmlrpg/xmlunicode.rpgle b/os400/libxmlrpg/xmlunicode.rpgle
new file mode 100644 (file)
index 0000000..64f7abf
--- /dev/null
@@ -0,0 +1,668 @@
+      * Summary: Unicode character APIs
+      * Description: API for the Unicode character APIs
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_UNICODE_H__)
+      /define XML_UNICODE_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_UNICODE_ENABLED)
+
+     d xmlUCSIsAegeanNumbers...
+     d                 pr            10i 0 extproc('xmlUCSIsAegeanNumbers')
+     d  code                         10i 0 value
+
+     d xmlUCSIsAlphabeticPresentationForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsAlphabeticPresentationForms'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabic  pr            10i 0 extproc('xmlUCSIsArabic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabicPresentationFormsA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsArabicPresentationFormsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArabicPresentationFormsB...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsArabicPresentationFormsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArmenian...
+     d                 pr            10i 0 extproc('xmlUCSIsArmenian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsArrows  pr            10i 0 extproc('xmlUCSIsArrows')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBasicLatin...
+     d                 pr            10i 0 extproc('xmlUCSIsBasicLatin')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBengali...
+     d                 pr            10i 0 extproc('xmlUCSIsBengali')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBlockElements...
+     d                 pr            10i 0 extproc('xmlUCSIsBlockElements')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBopomofo...
+     d                 pr            10i 0 extproc('xmlUCSIsBopomofo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBopomofoExtended...
+     d                 pr            10i 0 extproc('xmlUCSIsBopomofoExtended')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBoxDrawing...
+     d                 pr            10i 0 extproc('xmlUCSIsBoxDrawing')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBraillePatterns...
+     d                 pr            10i 0 extproc('xmlUCSIsBraillePatterns')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBuhid   pr            10i 0 extproc('xmlUCSIsBuhid')
+     d  code                         10i 0 value
+
+     d xmlUCSIsByzantineMusicalSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsByzantineMusicalSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibility...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKCompatibility')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKCompatibilityForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityIdeographs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKCompatibilityIdeographs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKCompatibilityIdeographsSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKCompatibilityIde-
+     d                                     ographsSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKRadicalsSupplement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKRadicalsSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKSymbolsandPunctuation...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKSymbolsandPunctuation')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographs...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCJKUnifiedIdeographs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographsExtensionA...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKUnifiedIdeograph-
+     d                                     sExtensionA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCJKUnifiedIdeographsExtensionB...
+     d                 pr            10i 0 extproc('xmlUCSIsCJKUnifiedIdeograph-
+     d                                     sExtensionB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCherokee...
+     d                 pr            10i 0 extproc('xmlUCSIsCherokee')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningDiacriticalMarks...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCombiningDiacriticalMarks')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningDiacriticalMarksforSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsCombiningDiacritica-
+     d                                     lMarksforSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningHalfMarks...
+     d                 pr            10i 0 extproc('xmlUCSIsCombiningHalfMarks')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCombiningMarksforSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsCombiningMarksforSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsControlPictures...
+     d                 pr            10i 0 extproc('xmlUCSIsControlPictures')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCurrencySymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsCurrencySymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCypriotSyllabary...
+     d                 pr            10i 0 extproc('xmlUCSIsCypriotSyllabary')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCyrillic...
+     d                 pr            10i 0 extproc('xmlUCSIsCyrillic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCyrillicSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsCyrillicSupplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDeseret...
+     d                 pr            10i 0 extproc('xmlUCSIsDeseret')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDevanagari...
+     d                 pr            10i 0 extproc('xmlUCSIsDevanagari')
+     d  code                         10i 0 value
+
+     d xmlUCSIsDingbats...
+     d                 pr            10i 0 extproc('xmlUCSIsDingbats')
+     d  code                         10i 0 value
+
+     d xmlUCSIsEnclosedAlphanumerics...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsEnclosedAlphanumerics')
+     d  code                         10i 0 value
+
+     d xmlUCSIsEnclosedCJKLettersandMonths...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsEnclosedCJKLettersandMonths'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsEthiopic...
+     d                 pr            10i 0 extproc('xmlUCSIsEthiopic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeneralPunctuation...
+     d                 pr            10i 0 extproc('xmlUCSIsGeneralPunctuation')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeometricShapes...
+     d                 pr            10i 0 extproc('xmlUCSIsGeometricShapes')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGeorgian...
+     d                 pr            10i 0 extproc('xmlUCSIsGeorgian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGothic  pr            10i 0 extproc('xmlUCSIsGothic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreek   pr            10i 0 extproc('xmlUCSIsGreek')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreekExtended...
+     d                 pr            10i 0 extproc('xmlUCSIsGreekExtended')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGreekandCoptic...
+     d                 pr            10i 0 extproc('xmlUCSIsGreekandCoptic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGujarati...
+     d                 pr            10i 0 extproc('xmlUCSIsGujarati')
+     d  code                         10i 0 value
+
+     d xmlUCSIsGurmukhi...
+     d                 pr            10i 0 extproc('xmlUCSIsGurmukhi')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHalfwidthandFullwidthForms...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHalfwidthandFullwidthForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulCompatibilityJamo...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHangulCompatibilityJamo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulJamo...
+     d                 pr            10i 0 extproc('xmlUCSIsHangulJamo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHangulSyllables...
+     d                 pr            10i 0 extproc('xmlUCSIsHangulSyllables')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHanunoo...
+     d                 pr            10i 0 extproc('xmlUCSIsHanunoo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHebrew  pr            10i 0 extproc('xmlUCSIsHebrew')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHighPrivateUseSurrogates...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsHighPrivateUseSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHighSurrogates...
+     d                 pr            10i 0 extproc('xmlUCSIsHighSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsHiragana...
+     d                 pr            10i 0 extproc('xmlUCSIsHiragana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsIPAExtensions...
+     d                 pr            10i 0 extproc('xmlUCSIsIPAExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsIdeographicDescriptionCharacters...
+     d                 pr            10i 0 extproc('xmlUCSIsIdeographicDescript-
+     d                                     ionCharacters')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKanbun  pr            10i 0 extproc('xmlUCSIsKanbun')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKangxiRadicals...
+     d                 pr            10i 0 extproc('xmlUCSIsKangxiRadicals')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKannada...
+     d                 pr            10i 0 extproc('xmlUCSIsKannada')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKatakana...
+     d                 pr            10i 0 extproc('xmlUCSIsKatakana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKatakanaPhoneticExtensions...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsKatakanaPhoneticExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKhmer   pr            10i 0 extproc('xmlUCSIsKhmer')
+     d  code                         10i 0 value
+
+     d xmlUCSIsKhmerSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsKhmerSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLao     pr            10i 0 extproc('xmlUCSIsLao')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatin1Supplement...
+     d                 pr            10i 0 extproc('xmlUCSIsLatin1Supplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedA...
+     d                 pr            10i 0 extproc('xmlUCSIsLatinExtendedA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedB...
+     d                 pr            10i 0 extproc('xmlUCSIsLatinExtendedB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLatinExtendedAdditional...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsLatinExtendedAdditional')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLetterlikeSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsLetterlikeSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLimbu   pr            10i 0 extproc('xmlUCSIsLimbu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLinearBIdeograms...
+     d                 pr            10i 0 extproc('xmlUCSIsLinearBIdeograms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLinearBSyllabary...
+     d                 pr            10i 0 extproc('xmlUCSIsLinearBSyllabary')
+     d  code                         10i 0 value
+
+     d xmlUCSIsLowSurrogates...
+     d                 pr            10i 0 extproc('xmlUCSIsLowSurrogates')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMalayalam...
+     d                 pr            10i 0 extproc('xmlUCSIsMalayalam')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMathematicalAlphanumericSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsMathematicalAlphanu-
+     d                                     mericSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMathematicalOperators...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMathematicalOperators')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousMathematicalSymbolsA...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousMathem-
+     d                                     aticalSymbolsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousMathematicalSymbolsB...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousMathem-
+     d                                     aticalSymbolsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMiscellaneousSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousSymbolsandArrows...
+     d                 pr            10i 0 extproc('xmlUCSIsMiscellaneousSymbol-
+     d                                     sandArrows')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMiscellaneousTechnical...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsMiscellaneousTechnical')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMongolian...
+     d                 pr            10i 0 extproc('xmlUCSIsMongolian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMusicalSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsMusicalSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsMyanmar...
+     d                 pr            10i 0 extproc('xmlUCSIsMyanmar')
+     d  code                         10i 0 value
+
+     d xmlUCSIsNumberForms...
+     d                 pr            10i 0 extproc('xmlUCSIsNumberForms')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOgham   pr            10i 0 extproc('xmlUCSIsOgham')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOldItalic...
+     d                 pr            10i 0 extproc('xmlUCSIsOldItalic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOpticalCharacterRecognition...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsOpticalCharacterRecognition'
+     d                                     )
+     d  code                         10i 0 value
+
+     d xmlUCSIsOriya   pr            10i 0 extproc('xmlUCSIsOriya')
+     d  code                         10i 0 value
+
+     d xmlUCSIsOsmanya...
+     d                 pr            10i 0 extproc('xmlUCSIsOsmanya')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPhoneticExtensions...
+     d                 pr            10i 0 extproc('xmlUCSIsPhoneticExtensions')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPrivateUse...
+     d                 pr            10i 0 extproc('xmlUCSIsPrivateUse')
+     d  code                         10i 0 value
+
+     d xmlUCSIsPrivateUseArea...
+     d                 pr            10i 0 extproc('xmlUCSIsPrivateUseArea')
+     d  code                         10i 0 value
+
+     d xmlUCSIsRunic   pr            10i 0 extproc('xmlUCSIsRunic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsShavian...
+     d                 pr            10i 0 extproc('xmlUCSIsShavian')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSinhala...
+     d                 pr            10i 0 extproc('xmlUCSIsSinhala')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSmallFormVariants...
+     d                 pr            10i 0 extproc('xmlUCSIsSmallFormVariants')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSpacingModifierLetters...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSpacingModifierLetters')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSpecials...
+     d                 pr            10i 0 extproc('xmlUCSIsSpecials')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSuperscriptsandSubscripts...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSuperscriptsandSubscripts')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalArrowsA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSupplementalArrowsA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalArrowsB...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsSupplementalArrowsB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementalMathematicalOperators...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementalMathema-
+     d                                     ticalOperators')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementaryPrivateUseAreaA...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementaryPrivat-
+     d                                     eUseAreaA')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSupplementaryPrivateUseAreaB...
+     d                 pr            10i 0 extproc('xmlUCSIsSupplementaryPrivat-
+     d                                     eUseAreaB')
+     d  code                         10i 0 value
+
+     d xmlUCSIsSyriac  pr            10i 0 extproc('xmlUCSIsSyriac')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTagalog...
+     d                 pr            10i 0 extproc('xmlUCSIsTagalog')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTagbanwa...
+     d                 pr            10i 0 extproc('xmlUCSIsTagbanwa')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTags    pr            10i 0 extproc('xmlUCSIsTags')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTaiLe   pr            10i 0 extproc('xmlUCSIsTaiLe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTaiXuanJingSymbols...
+     d                 pr            10i 0 extproc('xmlUCSIsTaiXuanJingSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTamil   pr            10i 0 extproc('xmlUCSIsTamil')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTelugu  pr            10i 0 extproc('xmlUCSIsTelugu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsThaana  pr            10i 0 extproc('xmlUCSIsThaana')
+     d  code                         10i 0 value
+
+     d xmlUCSIsThai    pr            10i 0 extproc('xmlUCSIsThai')
+     d  code                         10i 0 value
+
+     d xmlUCSIsTibetan...
+     d                 pr            10i 0 extproc('xmlUCSIsTibetan')
+     d  code                         10i 0 value
+
+     d xmlUCSIsUgaritic...
+     d                 pr            10i 0 extproc('xmlUCSIsUgaritic')
+     d  code                         10i 0 value
+
+     d xmlUCSIsUnifiedCanadianAboriginalSyllabics...
+     d                 pr            10i 0 extproc('xmlUCSIsUnifiedCanadianAbor-
+     d                                     iginalSyllabics')
+     d  code                         10i 0 value
+
+     d xmlUCSIsVariationSelectors...
+     d                 pr            10i 0 extproc('xmlUCSIsVariationSelectors')
+     d  code                         10i 0 value
+
+     d xmlUCSIsVariationSelectorsSupplement...
+     d                 pr            10i 0 extproc('xmlUCSIsVariationSelectorsS-
+     d                                     upplement')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYiRadicals...
+     d                 pr            10i 0 extproc('xmlUCSIsYiRadicals')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYiSyllables...
+     d                 pr            10i 0 extproc('xmlUCSIsYiSyllables')
+     d  code                         10i 0 value
+
+     d xmlUCSIsYijingHexagramSymbols...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlUCSIsYijingHexagramSymbols')
+     d  code                         10i 0 value
+
+     d xmlUCSIsBlock   pr            10i 0 extproc('xmlUCSIsBlock')
+     d  code                         10i 0 value
+     d  block                          *   value options(*string)               const char *
+
+     d xmlUCSIsCatC    pr            10i 0 extproc('xmlUCSIsCatC')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCc   pr            10i 0 extproc('xmlUCSIsCatCc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCf   pr            10i 0 extproc('xmlUCSIsCatCf')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCo   pr            10i 0 extproc('xmlUCSIsCatCo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatCs   pr            10i 0 extproc('xmlUCSIsCatCs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatL    pr            10i 0 extproc('xmlUCSIsCatL')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLl   pr            10i 0 extproc('xmlUCSIsCatLl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLm   pr            10i 0 extproc('xmlUCSIsCatLm')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLo   pr            10i 0 extproc('xmlUCSIsCatLo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLt   pr            10i 0 extproc('xmlUCSIsCatLt')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatLu   pr            10i 0 extproc('xmlUCSIsCatLu')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatM    pr            10i 0 extproc('xmlUCSIsCatM')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMc   pr            10i 0 extproc('xmlUCSIsCatMc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMe   pr            10i 0 extproc('xmlUCSIsCatMe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatMn   pr            10i 0 extproc('xmlUCSIsCatMn')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatN    pr            10i 0 extproc('xmlUCSIsCatN')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNd   pr            10i 0 extproc('xmlUCSIsCatNd')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNl   pr            10i 0 extproc('xmlUCSIsCatNl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatNo   pr            10i 0 extproc('xmlUCSIsCatNo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatP    pr            10i 0 extproc('xmlUCSIsCatP')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPc   pr            10i 0 extproc('xmlUCSIsCatPc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPd   pr            10i 0 extproc('xmlUCSIsCatPd')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPe   pr            10i 0 extproc('xmlUCSIsCatPe')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPf   pr            10i 0 extproc('xmlUCSIsCatPf')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPi   pr            10i 0 extproc('xmlUCSIsCatPi')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPo   pr            10i 0 extproc('xmlUCSIsCatPo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatPs   pr            10i 0 extproc('xmlUCSIsCatPs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatS    pr            10i 0 extproc('xmlUCSIsCatS')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSc   pr            10i 0 extproc('xmlUCSIsCatSc')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSk   pr            10i 0 extproc('xmlUCSIsCatSk')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSm   pr            10i 0 extproc('xmlUCSIsCatSm')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatSo   pr            10i 0 extproc('xmlUCSIsCatSo')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZ    pr            10i 0 extproc('xmlUCSIsCatZ')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZl   pr            10i 0 extproc('xmlUCSIsCatZl')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZp   pr            10i 0 extproc('xmlUCSIsCatZp')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCatZs   pr            10i 0 extproc('xmlUCSIsCatZs')
+     d  code                         10i 0 value
+
+     d xmlUCSIsCat     pr            10i 0 extproc('xmlUCSIsCat')
+     d  code                         10i 0 value
+     d  cat                            *   value options(*string)               const char *
+
+      /endif                                                                    LIBXML_UNICODE_ENBLD
+      /endif                                                                    XML_UNICODE_H__
diff --git a/os400/libxmlrpg/xmlversion.rpgle.in b/os400/libxmlrpg/xmlversion.rpgle.in
new file mode 100644 (file)
index 0000000..81676be
--- /dev/null
@@ -0,0 +1,352 @@
+      * Summary: compile-time version informations
+      * Description: compile-time version informations for the XML library
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_VERSION_H__)
+      /define XML_VERSION_H__
+
+      /include "libxmlrpg/xmlexports"
+
+      * use those to be sure nothing nasty will happen if
+      * your library and includes mismatch
+
+
+     d xmlCheckVersion...
+     d                 pr                  extproc('xmlCheckVersion')
+     d  version                      10i 0 value
+
+      * LIBXML_DOTTED_VERSION:
+      *
+      * the version string like "1.2.3"
+
+     d LIBXML_DOTTED_VERSION...
+     d                 c                   '@VERSION@'
+
+      * LIBXML_VERSION:
+      *
+      * the version number: 1.2.3 value is 10203
+
+     d LIBXML_VERSION  c                   @LIBXML_VERSION_NUMBER@
+
+      * LIBXML_VERSION_STRING:
+      *
+      * the version number string, 1.2.3 value is "10203"
+
+     d LIBXML_VERSION_STRING...
+     d                 c                   '@LIBXML_VERSION_NUMBER@'
+
+      * LIBXML_VERSION_EXTRA:
+      *
+      * extra version information, used to show a CVS compilation
+
+     d LIBXML_VERSION_EXTRA...
+     d                 c                   '@LIBXML_VERSION_EXTRA@'
+
+      * For conditional compilation
+      /define   DEFINED_1
+      /undefine DEFINED_0
+
+      /if defined(DEFINED_@WITH_TRIO@)
+      * WITH_TRIO:
+      *
+      * defined if the trio support need to be configured in
+
+      /define WITH_TRIO
+      /else
+      * WITHOUT_TRIO:
+      *
+      * defined if the trio support should not be configured in
+
+      /define WITHOUT_TRIO
+      /endif
+
+      * LIBXML_THREAD_ENABLED:
+      *
+      * Whether the thread support is configured in
+
+      /if defined(DEFINED_@WITH_THREADS@)
+      /define LIBXML_THREAD_ENABLED
+      /endif
+
+      * LIBXML_THREAD_ALLOC_ENABLED:
+      *
+      * Whether the allocation hooks are per-thread
+
+      /if defined(DEFINED_@WITH_THREAD_ALLOC@)
+      /define LIBXML_THREAD_ALLOC_ENABLED
+      /endif
+
+      * LIBXML_TREE_ENABLED:
+      *
+      * Whether the DOM like tree manipulation API support is configured in
+
+      /if defined(DEFINED_@WITH_TREE@)
+      /define LIBXML_TREE_ENABLED
+      /endif
+
+      * LIBXML_OUTPUT_ENABLED:
+      *
+      * Whether the serialization/saving support is configured in
+
+      /if defined(DEFINED_@WITH_OUTPUT@)
+      /define LIBXML_OUTPUT_ENABLED
+      /endif
+
+      * LIBXML_PUSH_ENABLED:
+      *
+      * Whether the push parsing interfaces are configured in
+
+      /if defined(DEFINED_@WITH_PUSH@)
+      /define LIBXML_PUSH_ENABLED
+      /endif
+
+      * LIBXML_READER_ENABLED:
+      *
+      * Whether the xmlReader parsing interface is configured in
+
+      /if defined(DEFINED_@WITH_READER@)
+      /define LIBXML_READER_ENABLED
+      /endif
+
+      * LIBXML_PATTERN_ENABLED:
+      *
+      * Whether the xmlPattern node selection interface is configured in
+
+      /if defined(DEFINED_@WITH_PATTERN@)
+      /define LIBXML_PATTERN_ENABLED
+      /endif
+
+      * LIBXML_WRITER_ENABLED:
+      *
+      * Whether the xmlWriter saving interface is configured in
+
+      /if defined(DEFINED_@WITH_WRITER@)
+      /define LIBXML_WRITER_ENABLED
+      /endif
+
+      * LIBXML_SAX1_ENABLED:
+      *
+      * Whether the older SAX1 interface is configured in
+
+      /if defined(DEFINED_@WITH_SAX1@)
+      /define LIBXML_SAX1_ENABLED
+      /endif
+
+      * LIBXML_FTP_ENABLED:
+      *
+      * Whether the FTP support is configured in
+
+      /if defined(DEFINED_@WITH_FTP@)
+      /define LIBXML_FTP_ENABLED
+      /endif
+
+      * LIBXML_HTTP_ENABLED:
+      *
+      * Whether the HTTP support is configured in
+
+      /if defined(DEFINED_@WITH_HTTP@)
+      /define LIBXML_HTTP_ENABLED
+      /endif
+
+      * LIBXML_VALID_ENABLED:
+      *
+      * Whether the DTD validation support is configured in
+
+      /if defined(DEFINED_@WITH_VALID@)
+      /define LIBXML_VALID_ENABLED
+      /endif
+
+      * LIBXML_HTML_ENABLED:
+      *
+      * Whether the HTML support is configured in
+
+      /if defined(DEFINED_@WITH_HTML@)
+      /define LIBXML_HTML_ENABLED
+      /endif
+
+      * LIBXML_LEGACY_ENABLED:
+      *
+      * Whether the deprecated APIs are compiled in for compatibility
+
+      /if defined(DEFINED_@WITH_LEGACY@)
+      /define LIBXML_LEGACY_ENABLED
+      /endif
+
+      * LIBXML_C14N_ENABLED:
+      *
+      * Whether the Canonicalization support is configured in
+
+      /if defined(DEFINED_@WITH_C14N@)
+      /define LIBXML_C14N_ENABLED
+      /endif
+
+      * LIBXML_CATALOG_ENABLED:
+      *
+      * Whether the Catalog support is configured in
+
+      /if defined(DEFINED_@WITH_CATALOG@)
+      /define LIBXML_CATALOG_ENABLED
+      /endif
+
+      * LIBXML_DOCB_ENABLED:
+      *
+      * Whether the SGML Docbook support is configured in
+
+      /if defined(DEFINED_@WITH_DOCB@)
+      /define LIBXML_DOCB_ENABLED
+      /endif
+
+      * LIBXML_XPATH_ENABLED:
+      *
+      * Whether XPath is configured in
+
+      /if defined(DEFINED_@WITH_XPATH@)
+      /define LIBXML_XPATH_ENABLED
+      /endif
+
+      * LIBXML_XPTR_ENABLED:
+      *
+      * Whether XPointer is configured in
+
+      /if defined(DEFINED_@WITH_XPTR@)
+      /define LIBXML_XPTR_ENABLED
+      /endif
+
+      * LIBXML_XINCLUDE_ENABLED:
+      *
+      * Whether XInclude is configured in
+
+      /if defined(DEFINED_@WITH_XINCLUDE@)
+      /define LIBXML_XINCLUDE_ENABLED
+      /endif
+
+      * LIBXML_ICONV_ENABLED:
+      *
+      * Whether iconv support is available
+
+      /if defined(DEFINED_@WITH_ICONV@)
+      /define LIBXML_ICONV_ENABLED
+      /endif
+
+      * LIBXML_ICU_ENABLED:
+      *
+      * Whether icu support is available
+
+      /if defined(DEFINED_@WITH_ICU@)
+      /define LIBXML_ICU_ENABLED
+      /endif
+
+      * LIBXML_ISO8859X_ENABLED:
+      *
+      * Whether ISO-8859-* support is made available in case iconv is not
+
+      /if defined(DEFINED_@WITH_ISO8859X@)
+      /define LIBXML_ISO8859X_ENABLED
+      /endif
+
+      * LIBXML_DEBUG_ENABLED:
+      *
+      * Whether Debugging module is configured in
+
+      /if defined(DEFINED_@WITH_DEBUG@)
+      /define LIBXML_DEBUG_ENABLED
+      /endif
+
+      * DEBUG_MEMORY_LOCATION:
+      *
+      * Whether the memory debugging is configured in
+
+      /if defined(DEFINED_@WITH_MEM_DEBUG@)
+      /define DEBUG_MEMORY_LOCATION
+      /endif
+
+      * LIBXML_DEBUG_RUNTIME:
+      *
+      * Whether the runtime debugging is configured in
+
+      /if defined(DEFINED_@WITH_RUN_DEBUG@)
+      /define LIBXML_DEBUG_RUNTIME
+      /endif
+
+      * LIBXML_UNICODE_ENABLED:
+      *
+      * Whether the Unicode related interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_REGEXPS@)
+      /define LIBXML_UNICODE_ENABLED
+      /endif
+
+      * LIBXML_REGEXP_ENABLED:
+      *
+      * Whether the regular expressions interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_REGEXPS@)
+      /define LIBXML_REGEXP_ENABLED
+      /endif
+
+      * LIBXML_AUTOMATA_ENABLED:
+      *
+      * Whether the automata interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_REGEXPS@)
+      /define LIBXML_AUTOMATA_ENABLED
+      /endif
+
+      * LIBXML_EXPR_ENABLED:
+      *
+      * Whether the formal expressions interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_SCHEMAS@)
+      /define LIBXML_EXPR_ENABLED
+      /endif
+
+      * LIBXML_SCHEMAS_ENABLED:
+      *
+      * Whether the Schemas validation interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_SCHEMAS@)
+      /define LIBXML_SCHEMAS_ENABLED
+      /endif
+
+      * LIBXML_SCHEMATRON_ENABLED:
+      *
+      * Whether the Schematron validation interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_SCHEMATRON@)
+      /define LIBXML_SCHEMATRON_ENABLED
+      /endif
+
+      * LIBXML_MODULES_ENABLED:
+      *
+      * Whether the module interfaces are compiled in
+
+      /if defined(DEFINED_@WITH_MODULES@)
+      /define LIBXML_MODULES_ENABLED
+
+      * LIBXML_MODULE_EXTENSION:
+      *
+      * the string suffix used by dynamic modules (usually shared libraries)
+
+     d LIBXML_MODULE_EXTENSION...
+     d                 c                   '.SRVPGM'
+      /endif
+
+      * LIBXML_ZLIB_ENABLED:
+      *
+      * Whether the Zlib support is compiled in
+
+      /if defined(DEFINED_@WITH_ZLIB@)
+      /define LIBXML_ZLIB_ENABLED
+      /endif
+
+      * LIBXML_LZMA_ENABLED:
+      *
+      * Whether the Lzma support is compiled in
+
+      /if defined(DEFINED_@WITH_LZMA@)
+      /define LIBXML_LZMA_ENABLED
+      /endif
+      /endif
diff --git a/os400/libxmlrpg/xmlwriter.rpgle b/os400/libxmlrpg/xmlwriter.rpgle
new file mode 100644 (file)
index 0000000..f2d3d30
--- /dev/null
@@ -0,0 +1,725 @@
+      * Summary: text writing API for XML
+      * Description: text writing API for XML
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XMLWRITER_H__)
+      /define XML_XMLWRITER_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_WRITER_ENABLED)
+
+      /include "libxmlrpg/xmlstdarg"
+      /include "libxmlrpg/xmlIO"
+      /include "libxmlrpg/list"
+      /include "libxmlrpg/xmlstring"
+
+     d xmlTextWriterPtr...
+     d                 s               *   based(######typedef######)
+
+      * Constructors & Destructor
+
+     d xmlNewTextWriter...
+     d                 pr                  extproc('xmlNewTextWriter')
+     d                                     like(xmlTextWriterPtr)
+     d  out                                value like(xmlOutputBufferPtr)
+
+     d xmlNewTextWriterFilename...
+     d                 pr                  extproc('xmlNewTextWriterFilename')
+     d                                     like(xmlTextWriterPtr)
+     d  uri                            *   value options(*string)               const char *
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterMemory...
+     d                 pr                  extproc('xmlNewTextWriterMemory')
+     d                                     like(xmlTextWriterPtr)
+     d  buf                                value like(xmlBufferPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterPushParser...
+     d                 pr                  extproc('xmlNewTextWriterPushParser')
+     d                                     like(xmlTextWriterPtr)
+     d  ctxt                               value like(xmlParserCtxtPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterDoc...
+     d                 pr                  extproc('xmlNewTextWriterDoc')
+     d                                     like(xmlTextWriterPtr)
+     d  doc                                like(xmlDocPtr)
+     d  compression                  10i 0 value
+
+     d xmlNewTextWriterTree...
+     d                 pr                  extproc('xmlNewTextWriterTree')
+     d                                     like(xmlTextWriterPtr)
+     d  doc                                value like(xmlDocPtr)
+     d  node                               value like(xmlNodePtr)
+     d  compression                  10i 0 value
+
+     d xmlFreeTextWriter...
+     d                 pr                  extproc('xmlFreeTextWriter')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Functions
+
+      * Document
+
+     d xmlTextWriterStartDocument...
+     d                 pr            10i 0 extproc('xmlTextWriterStartDocument')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  version                        *   value options(*string)               const char *
+     d  encoding                       *   value options(*string)               const char *
+     d  standalone                     *   value options(*string)               const char *
+
+     d xmlTextWriterEndDocument...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDocument')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Comments
+
+     d xmlTextWriterStartComment...
+     d                 pr            10i 0 extproc('xmlTextWriterStartComment')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterEndComment...
+     d                 pr            10i 0 extproc('xmlTextWriterEndComment')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterWriteFormatComment...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string: *nopass)      const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatComment...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteComment...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteComment')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * Elements
+
+     d xmlTextWriterStartElement...
+     d                 pr            10i 0 extproc('xmlTextWriterStartElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterStartElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndElement...
+     d                 pr            10i 0 extproc('xmlTextWriterEndElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterFullEndElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterFullEndElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Elements conveniency functions
+
+     d xmlTextWriterWriteFormatElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteElement...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteElementNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteElementNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * Text
+
+     d xmlTextWriterWriteFormatRaw...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatRaw...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteRawLen...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteRawLen')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+     d  len                          10i 0 value
+
+     d xmlTextWriterWriteRaw...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteRaw')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteString...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteBase64...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteBase64')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  data                           *   value options(*string)               const char *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+     d xmlTextWriterWriteBinHex...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteBinHex')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  data                           *   value options(*string)               const char *
+     d  start                        10i 0 value
+     d  len                          10i 0 value
+
+      * Attributes
+
+     d xmlTextWriterStartAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterStartAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartAttributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndAttribute...
+     d                 pr            10i 0 extproc('xmlTextWriterEndAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * Attributes conveniency functions
+
+     d xmlTextWriterWriteFormatAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteAttribute...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteAttribute')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteFormatAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatAttributeNS'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatAttributeNS...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteVFormatAt-
+     d                                     tributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteAttributeNS...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteAttributeNS')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  name                           *   value options(*string)               const xmlChar *
+     d  namespaceURI                   *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * PI's
+
+     d xmlTextWriterStartPI...
+     d                 pr            10i 0 extproc('xmlTextWriterStartPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndPI...
+     d                 pr            10i 0 extproc('xmlTextWriterEndPI')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * PI conveniency functions
+
+     d xmlTextWriterWriteFormatPI...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteFormatPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatPI...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatPI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWritePI...
+     d                 pr            10i 0 extproc('xmlTextWriterWritePI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * xmlTextWriterWriteProcessingInstruction:
+      *
+      * This macro maps to xmlTextWriterWritePI
+
+     d xmlTextWriterWriteProcessingInstruction...
+     d                 pr            10i 0 extproc('xmlTextWriterWritePI')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  target                         *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * CDATA
+
+     d xmlTextWriterStartCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterStartCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+
+     d xmlTextWriterEndCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterEndCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * CDATA conveniency functions
+
+     d xmlTextWriterWriteFormatCDATA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatCDATA...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteCDATA...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteCDATA')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD
+
+     d xmlTextWriterStartDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterStartDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD conveniency functions
+
+     d xmlTextWriterWriteFormatDTD...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTD...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTD...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  subset                         *   value options(*string)               const xmlChar *
+
+      * xmlTextWriterWriteDocType:
+      *
+      * this macro maps to xmlTextWriterWriteDTD
+
+     d xmlTextWriterWriteDocType...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTD')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  subset                         *   value options(*string)               const xmlChar *
+
+      * DTD element definition
+
+     d xmlTextWriterStartDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDElement...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD element definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTDElement'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDElement...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDElement')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD attribute list definition
+
+     d xmlTextWriterStartDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDAttlist...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD attribute list definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteFormatDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteVFormatDTDAttlist'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDAttlist...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDAttlist')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD entity definition
+
+     d xmlTextWriterStartDTDEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterStartDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterEndDTDEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterEndDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      * DTD entity definition conveniency functions
+
+     d xmlTextWriterWriteFormatDTDInternalEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteFormatDTD-
+     d                                     InternalEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  #vararg1                       *   value options(*string: *nopass)      void *
+     d  #vararg2                       *   value options(*string: *nopass)      void *
+     d  #vararg3                       *   value options(*string: *nopass)      void *
+     d  #vararg4                       *   value options(*string: *nopass)      void *
+     d  #vararg5                       *   value options(*string: *nopass)      void *
+     d  #vararg6                       *   value options(*string: *nopass)      void *
+     d  #vararg7                       *   value options(*string: *nopass)      void *
+     d  #vararg8                       *   value options(*string: *nopass)      void *
+
+     d xmlTextWriterWriteVFormatDTDInternalEntity...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteVFormatDT-
+     d                                     DInternalEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  format                         *   value options(*string)               const char *
+     d  argptr                             likeds(xmlVaList)
+
+     d xmlTextWriterWriteDTDInternalEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDInternalEntity'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDExternalEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDExternalEntity'
+     d                                     )
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDExternalEntityContents...
+     d                 pr            10i 0 extproc('xmlTextWriterWriteDTDExtern-
+     d                                     alEntityContents')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterWriteDTDEntity...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDEntity')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  pe                           10i 0 value
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+     d  ndataid                        *   value options(*string)               const xmlChar *
+     d  content                        *   value options(*string)               const xmlChar *
+
+      * DTD notation definition
+
+     d xmlTextWriterWriteDTDNotation...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterWriteDTDNotation')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  pubid                          *   value options(*string)               const xmlChar *
+     d  sysid                          *   value options(*string)               const xmlChar *
+
+      * Indentation
+
+     d xmlTextWriterSetIndent...
+     d                 pr            10i 0 extproc('xmlTextWriterSetIndent')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  indent                       10i 0 value
+
+     d xmlTextWriterSetIndentString...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlTextWriterSetIndentString')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlTextWriterSetQuoteChar...
+     d                 pr            10i 0 extproc('xmlTextWriterSetQuoteChar')
+     d  writer                             value like(xmlTextWriterPtr)
+     d  quotechar                          value like(xmlChar)
+
+      * misc
+
+     d xmlTextWriterFlush...
+     d                 pr            10i 0 extproc('xmlTextWriterFlush')
+     d  writer                             value like(xmlTextWriterPtr)
+
+      /endif                                                                    LIBXML_WRITER_ENABLD
+      /endif                                                                    XML_XMLWRITER_H__
diff --git a/os400/libxmlrpg/xpath.rpgle b/os400/libxmlrpg/xpath.rpgle
new file mode 100644 (file)
index 0000000..3f3be32
--- /dev/null
@@ -0,0 +1,649 @@
+      * Summary: XML Path Language implementation
+      * Description: API for the XML Path Language implementation
+      *
+      * XML Path Language implementation
+      * XPath is a language for addressing parts of an XML document,
+      * designed to be used by both XSLT and XPointer
+      *     http://www.w3.org/TR/xpath
+      *
+      * Implements
+      * W3C Recommendation 16 November 1999
+      *     http://www.w3.org/TR/1999/REC-xpath-19991116
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPATH_H__)
+      /define XML_XPATH_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      /include "libxmlrpg/xmlerror"
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/hash"
+      /endif                                                                    LIBXML_XPATH_ENABLED
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+     d xmlXPathContextPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathParserContextPtr...
+     d                 s               *   based(######typedef######)
+
+      * The set of XPath error codes.
+
+     d xmlXPathError   s             10i 0 based(######typedef######)           enum
+     d  XPATH_EXPRESSION_OK...
+     d                 c                   0
+     d  XPATH_NUMBER_ERROR...
+     d                 c                   1
+     d  XPATH_UNFINISHED_LITERAL_ERROR...
+     d                 c                   2
+     d  XPATH_START_LITERAL_ERROR...
+     d                 c                   3
+     d  XPATH_VARIABLE_REF_ERROR...
+     d                 c                   4
+     d  XPATH_UNDEF_VARIABLE_ERROR...
+     d                 c                   5
+     d  XPATH_INVALID_PREDICATE_ERROR...
+     d                 c                   6
+     d  XPATH_EXPR_ERROR...
+     d                 c                   7
+     d  XPATH_UNCLOSED_ERROR...
+     d                 c                   8
+     d  XPATH_UNKNOWN_FUNC_ERROR...
+     d                 c                   9
+     d  XPATH_INVALID_OPERAND...
+     d                 c                   10
+     d  XPATH_INVALID_TYPE...
+     d                 c                   11
+     d  XPATH_INVALID_ARITY...
+     d                 c                   12
+     d  XPATH_INVALID_CTXT_SIZE...
+     d                 c                   13
+     d  XPATH_INVALID_CTXT_POSITION...
+     d                 c                   14
+     d  XPATH_MEMORY_ERROR...
+     d                 c                   15
+     d  XPTR_SYNTAX_ERROR...
+     d                 c                   16
+     d  XPTR_RESOURCE_ERROR...
+     d                 c                   17
+     d  XPTR_SUB_RESOURCE_ERROR...
+     d                 c                   18
+     d  XPATH_UNDEF_PREFIX_ERROR...
+     d                 c                   19
+     d  XPATH_ENCODING_ERROR...
+     d                 c                   20
+     d  XPATH_INVALID_CHAR_ERROR...
+     d                 c                   21
+     d  XPATH_INVALID_CTXT...
+     d                 c                   22
+     d  XPATH_STACK_ERROR...
+     d                 c                   23
+     d  XPATH_FORBID_VARIABLE_ERROR...
+     d                 c                   24
+
+      * A node-set (an unordered collection of nodes without duplicates).
+
+     d xmlNodeSetPtr   s               *   based(######typedef######)
+
+     d xmlNodeSet      ds                  based(xmlNodeSetPtr)
+     d                                     align qualified
+     d  nodeNr                       10i 0                                      Set node count
+     d  nodeMax                      10i 0                                      Max # nodes in set
+     d  nodeTab                        *                                        xmlNodePtr *
+
+      * An expression is evaluated to yield an object, which
+      * has one of the following four basic types:
+      *   - node-set
+      *   - boolean
+      *   - number
+      *   - string
+      *
+      * @@ XPointer will add more types !
+
+     d xmlXPathObjectType...
+     d                 s             10i 0 based(######typedef######)           enum
+     d  XPATH_UNDEFINED...
+     d                 c                   0
+     d  XPATH_NODESET  c                   1
+     d  XPATH_BOOLEAN  c                   2
+     d  XPATH_NUMBER   c                   3
+     d  XPATH_STRING   c                   4
+     d  XPATH_POINT    c                   5
+     d  XPATH_RANGE    c                   6
+     d  XPATH_LOCATIONSET...
+     d                 c                   7
+     d  XPATH_USERS    c                   8
+     d  XPATH_XSLT_TREE...                                                      R/O XSLT value tree
+     d                 c                   9
+
+     d xmlXPathObjectPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathObject  ds                  based(xmlXPathObjectPtr)
+     d                                     align qualified
+     d  type                               like(xmlXPathObjectType)
+     d  nodesetval                         like(xmlNodeSetPtr)
+     d  boolval                      10i 0
+     d  floatval                      8f
+     d  stringval                      *                                        xmlChar *
+     d  user                           *                                        void *
+     d  index                        10i 0
+     d  user2                          *                                        void *
+     d  index2                       10i 0
+
+      * xmlXPathConvertFunc:
+      * @obj:  an XPath object
+      * @type:  the number of the target type
+      *
+      * A conversion function is associated to a type and used to cast
+      * the new type to primitive values.
+      *
+      * Returns -1 in case of error, 0 otherwise
+
+     d xmlXPathConvertFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra type: a name and a conversion function.
+
+     d xmlXPathTypePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathType    ds                  based(xmlXPathTypePtr)
+     d                                     align qualified
+     d  name                           *                                        The type name
+     d  func                               like(xmlXPathConvertFunc)            Conversion function
+
+      * Extra variable: a name and a value.
+
+     d xmlXPathVariablePtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathVariable...
+     d                 ds                  based(xmlXPathVariablePtr)
+     d                                     align qualified
+     d  name                           *                                        The variable name
+     d  value                              like(xmlXPathObjectPtr)              The value
+
+      * xmlXPathEvalFunc:
+      * @ctxt: an XPath parser context
+      * @nargs: the number of arguments passed to the function
+      *
+      * An XPath evaluation function, the parameters are on the XPath
+      *   context stack.
+
+     d xmlXPathEvalFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra function: a name and an evaluation function.
+
+     d xmlXPathFuncPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathFunct   ds                  based(xmlXPathFuncPtr)
+     d                                     align qualified
+     d  name                           *                                        The function name
+     d  func                               like(xmlXPathEvalFunc)               Evaluation function
+
+      * xmlXPathAxisFunc:
+      * @ctxt:  the XPath interpreter context
+      * @cur:  the previous node being explored on that axis
+      *
+      * An axis traversal function. To traverse an axis, the engine calls
+      * the first time with cur == NULL and repeat until the function returns
+      * NULL indicating the end of the axis traversal.
+      *
+      * Returns the next node in that axis or NULL if at the end of the axis.
+
+     d xmlXPathAxisFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Extra axis: a name and an axis function.
+
+     d xmlXPathAxisPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlXPathAxis    ds                  based(xmlXPathAxisPtr)
+     d                                     align qualified
+     d  name                           *                                        The axis name
+     d  func                               like(xmlXPathAxisFunc)               The search function
+
+      * xmlXPathFunction:
+      * @ctxt:  the XPath interprestation context
+      * @nargs:  the number of arguments
+      *
+      * An XPath function.
+      * The arguments (if any) are popped out from the context stack
+      * and the result is pushed on the stack.
+
+     d xmlXPathFunction...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * Function and Variable Lookup.
+
+      * xmlXPathVariableLookupFunc:
+      * @ctxt:  an XPath context
+      * @name:  name of the variable
+      * @ns_uri:  the namespace name hosting this variable
+      *
+      * Prototype for callbacks used to plug variable lookup in the XPath
+      * engine.
+      *
+      * Returns the XPath object value or NULL if not found.
+
+     d xmlXPathVariableLookupFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlXPathFuncLookupFunc:
+      * @ctxt:  an XPath context
+      * @name:  name of the function
+      * @ns_uri:  the namespace name hosting this function
+      *
+      * Prototype for callbacks used to plug function lookup in the XPath
+      * engine.
+      *
+      * Returns the XPath function or NULL if not found.
+
+     d xmlXPathFuncLookupFunc...
+     d                 s               *   based(######typedef######)
+     d                                     procptr
+
+      * xmlXPathFlags:
+      * Flags for XPath engine compilation and runtime
+
+      * XML_XPATH_CHECKNS:
+      *
+      * check namespaces at compilation
+
+     d  XML_XPATH_CHECKNS...
+     d                 c                   X'0001'
+
+      * XML_XPATH_NOVAR:
+      *
+      * forbid variables in expression
+
+     d  XML_XPATH_NOVAR...
+     d                 c                   X'0002'
+
+      * xmlXPathContext:
+      *
+      * Expression evaluation occurs with respect to a context.
+      * he context consists of:
+      *    - a node (the context node)
+      *    - a node list (the context node list)
+      *    - a set of variable bindings
+      *    - a function library
+      *    - the set of namespace declarations in scope for the expression
+      * Following the switch to hash tables, this need to be trimmed up at
+      * the next binary incompatible release.
+      * The node may be modified when the context is passed to libxml2
+      * for an XPath evaluation so you may need to initialize it again
+      * before the next call.
+
+     d xmlXPathContext...
+     d                 ds                  based(xmlXPathContextPtr)
+     d                                     align qualified
+     d  doc                                like(xmlDocPtr)                      Current document
+     d  node                               like(xmlNodePtr)                     Current node
+      *
+     d  nb_variables_unused...                                                  Unused (hash table)
+     d                               10i 0
+     d  max_variables_unused...                                                  Unused (hash table)
+     d                               10i 0
+     d  varHash                            like(xmlHashTablePtr)                 Defined variables
+      *
+     d  nb_types                     10i 0                                       # of defined types
+     d  max_types                    10i 0                                       Max number of types
+     d  types                              like(xmlXPathTypePtr)                 Defined types array
+      *
+     d  nb_funcs_unused...                                                      Unused (hash table)
+     d                               10i 0
+     d  max_funcs_unused...                                                      Unused (hash table)
+     d                               10i 0
+     d  funcHash                           like(xmlHashTablePtr)                 Defined functions
+      *
+     d  nb_axis                      10i 0                                       # of defined axis
+     d  max_axis                     10i 0                                       Max number of axis
+     d  axis                               like(xmlXPathAxisPtr)                 Defined axis array
+      *
+      * the namespace nodes of the context node
+      *
+     d  namespaces                     *                                         xmlNsPtr *
+     d  nsNr                         10i 0                                       # scope namespaces
+     d  user                           *   procptr                               Function to free
+      *
+      * extra variables
+      *
+     d  contextSize                  10i 0                                       The context size
+     d  proximityPosition...
+     d                               10i 0
+      *
+      * extra stuff for XPointer
+      *
+     d  xptr                         10i 0                                       XPointer context ?
+     d  here                               like(xmlNodePtr)                      For here()
+     d  origin                             like(xmlNodePtr)                      For origin()
+      *
+      * the set of namespace declarations in scope for the expression
+      *
+     d  nsHash                             like(xmlHashTablePtr)                 Namespace hashtable
+     d  varLookupFunc                      like(xmlXPathVariableLookupFunc)      Var lookup function
+     d  varLookupData                  *                                         void *
+      *
+      * Possibility to link in an extra item
+      *
+     d  extra                          *                                         void *
+      *
+      * The function name and URI when calling a function
+      *
+     d  function                       *                                         const xmlChar *
+     d  functionURI                    *                                         const xmlChar *
+      *
+      * function lookup function and data
+      *
+     d  funcLookupFunc...                                                        Func lookup func
+     d                                     like(xmlXPathVariableLookupFunc)
+     d  funcLookupData...                                                        void *
+     d                                 *
+      *
+      * temporary namespace lists kept for walking the namespace axis
+      *
+     d  tmpNsList                      *                                        xmlNsPtr *
+     d  tmpNsNr                      10i 0                                      # scope namespaces
+      *
+      * error reporting mechanism
+      *
+     d  userData                       *                                        void *
+     d  error                              like(xmlStructuredErrorFunc)         Error callback
+     d  lastError                          like(xmlError)                       The last error
+     d  debugNode                          like(xmlNodePtr)                     XSLT source node
+      *
+      * dictionary
+      *
+     d  dict                               like(xmlDictPtr)                     Dictionary if any
+      *
+     d  flags                        10i 0                                      Compilation control
+      *
+      * Cache for reusal of XPath objects
+      *
+     d  cache                          *                                        void *
+
+      * The structure of a compiled expression form is not public.
+
+     d xmlXPathCompExprPtr...
+     d                 s               *   based(######typedef######)
+
+      * xmlXPathParserContext:
+      *
+      * An XPath parser context. It contains pure parsing informations,
+      * an xmlXPathContext, and the stack of objects.
+
+     d xmlXPathParserContext...
+     d                 ds                  based(xmlXPathParserContextPtr)
+     d                                     align qualified
+     d  cur                            *                                        const xmlChar *
+     d  base                           *                                        const xmlChar *
+      *
+     d  error                        10i 0                                      Error code
+      *
+     d  context                            like(xmlXPathContextPtr)             Evaluation context
+     d  value                              like(xmlXPathObjectPtr)              The current value
+     d  valueNr                      10i 0                                      Value stack depth
+     d  valueMax                     10i 0                                      Max stack depth
+     d  valueTab                       *                                        xmlXPathObjectPtr *
+      *
+     d  comp                               like(xmlXPathCompExprPtr)            Precompiled expr.
+     d  xptr                         10i 0                                      XPointer expression?
+     d  ancestor                           like(xmlNodePtr)                     To walk prec. axis
+      *
+     d  valueFrame                   10i 0                                      Limit stack pop
+
+      **************************************************************************
+      *                                                                        *
+      *                             Public API                                 *
+      *                                                                        *
+      **************************************************************************
+
+      * Objects and Nodesets handling
+
+     d xmlXPathNAN     s              8f   import('xmlXPathNAN')
+     d xmlXPathPINF    s              8f   import('xmlXPathPINF')
+     d xmlXPathNINF    s              8f   import('xmlXPathNINF')
+
+     d xmlXPathFreeObject...
+     d                 pr                  extproc('xmlXPathFreeObject')
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathNodeSetCreate...
+     d                 pr                  extproc('xmlXPathNodeSetCreate')
+     d                                     like(xmlNodeSetPtr)
+     d val                                 value like(xmlNodePtr)
+
+     d xmlXPathFreeNodeSetList...
+     d                 pr                  extproc('xmlXPathFreeNodeSetList')
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathFreeNodeSet...
+     d                 pr                  extproc('xmlXPathFreeNodeSet')
+     d obj                                 value like(xmlNodeSetPtr)
+
+     d xmlXPathObjectCopy...
+     d                 pr                  extproc('xmlXPathObjectCopy')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCmpNodes...
+     d                 pr            10i 0 extproc('xmlXPathCmpNodes')
+     d node1                               value like(xmlNodePtr)
+     d node2                               value like(xmlNodePtr)
+
+      * Conversion functions to basic types.
+
+     d xmlXPathCastNumberToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlXPathCastNumberToBoolean')
+     d val                            8f   value
+
+     d xmlXPathCastStringToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                      'xmlXPathCastStringToBoolean')
+     d val                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCastNodeSetToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathCastNodeSetToBoolean')
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToBoolean...
+     d                 pr            10i 0 extproc('xmlXPathCastToBoolean')
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCastBooleanToNumber...
+     d                 pr                  extproc(
+     d                                      'xmlXPathCastBooleanToNumber')
+     d                                8f
+     d val                           10i 0 value
+
+     d xmlXPathCastStringToNumber...
+     d                 pr             8f   extproc('xmlXPathCastStringToNumber')
+     d val                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCastNodeToNumber...
+     d                 pr             8f   extproc('xmlXPathCastNodeToNumber')
+     d node                                value like(xmlNodePtr)
+
+     d xmlXPathCastNodeSetToNumber...
+     d                 pr             8f   extproc(
+     d                                      'xmlXPathCastNodeSetToNumber')
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToNumber...
+     d                 pr             8f   extproc('xmlXPathCastToNumber')
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathCastBooleanToString...
+     d                 pr              *   extproc(                             xmlChar *
+     d                                      'xmlXPathCastBooleanToString')
+     d val                           10i 0 value
+
+     d xmlXPathCastNumberToString...
+     d                 pr              *   extproc('xmlXPathCastNumberToString')xmlChar *
+     d val                            8f   value
+
+     d xmlXPathCastNodeToString...
+     d                 pr              *   extproc('xmlXPathCastNodeToString')  xmlChar *
+     d node                                value like(xmlNodePtr)
+
+     d xmlXPathCastNodeSetToString...
+     d                 pr              *   extproc('xmlXPathCastNodeSetToString'xmlChar *
+     d                                     )
+     d ns                                  value like(xmlNodeSetPtr)
+
+     d xmlXPathCastToString...
+     d                 pr              *   extproc('xmlXPathCastToString')      xmlChar *
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertBoolean...
+     d                 pr                  extproc('xmlXPathConvertBoolean')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertNumber...
+     d                 pr                  extproc('xmlXPathConvertNumber')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPathConvertString...
+     d                 pr                  extproc('xmlXPathConvertString')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+      * Context handling.
+
+     d xmlXPathNewContext...
+     d                 pr                  extproc('xmlXPathNewContext')
+     d                                     like(xmlXPathContextPtr)
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlXPathFreeContext...
+     d                 pr                  extproc('xmlXPathFreeContext')
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathContextSetCache...
+     d                 pr            10i 0 extproc('xmlXPathContextSetCache')
+     d ctxt                                value like(xmlXPathContextPtr)
+     d active                        10i 0 value
+     d value                         10i 0 value
+     d options                       10i 0 value
+
+      * Evaluation functions.
+
+     d xmlXPathOrderDocElems...
+     d                 pr            20i 0 extproc('xmlXPathOrderDocElems')
+     d doc                                 value like(xmlDocPtr)
+
+     d xmlXPathSetContextNode...
+     d                 pr            10i 0 extproc('xmlXPathSetContextNode')
+     d node                                value like(xmlNodePtr)
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathNodeEval...
+     d                 pr                  extproc('xmlXPathNodeEval')
+     d                                     like(xmlXPathObjectPtr)
+     d node                                value like(xmlNodePtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathEval    pr                  extproc('xmlXPathEval')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathEvalExpression...
+     d                 pr                  extproc('xmlXPathEvalExpression')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathEvalPredicate...
+     d                 pr            10i 0 extproc('xmlXPathEvalPredicate')
+     d ctxt                                value like(xmlXPathContextPtr)
+     d res                                 value like(xmlXPathObjectPtr)
+
+      * Separate compilation/evaluation entry points.
+
+     d xmlXPathCompile...
+     d                 pr                  extproc('xmlXPathCompile')
+     d                                     like(xmlXPathCompExprPtr)
+     d str                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCtxtCompile...
+     d                 pr                  extproc('xmlXPathCtxtCompile')
+     d                                     like(xmlXPathCompExprPtr)
+     d ctxt                                value like(xmlXPathContextPtr)
+     d str                             *   value options(*string)               const xmlChar *
+
+     d xmlXPathCompiledEval...
+     d                 pr                  extproc('xmlXPathCompiledEval')
+     d                                     like(xmlXPathObjectPtr)
+     d comp                                value like(xmlXPathCompExprPtr)
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPathCompiledEvalToBoolean...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathCompiledEvalToBoolean')
+     d comp                                value like(xmlXPathCompExprPtr)
+     d ctxt                                value like(xmlXPathContextPtr)
+
+     d xmlXPathFreeCompExpr...
+     d                 pr                  extproc('xmlXPathFreeCompExpr')
+     d comp                                value like(xmlXPathCompExprPtr)
+      /endif                                                                    LIBXML_XPATH_ENABLED
+
+      /undefine XML_TESTVAL
+      /if defined(LIBXML_XPATH_ENABLED)
+      /define XML_TESTVAL
+      /elseif defined(LIBXML_SCHEMAS_ENABLED)
+      /define XML_TESTVAL
+      /endif
+      /if defined(XML_TESTVAL)
+     d xmlXPathInit    pr                  extproc('xmlXPathInit')
+
+     d xmlXPathIsNaN   pr            10i 0 extproc('xmlXPathIsNaN')
+     d val                            8f   value
+
+     d xmlXPathIsInf   pr            10i 0 extproc('xmlXPathIsInf')
+     d val                            8f   value
+
+      /undefine XML_TESTVAL
+      /endif
+
+      * C macros implemented as procedures for ILE/RPG support.
+
+      /if defined(LIBXML_XPATH_ENABLED)
+     d xmlXPathNodeSetGetLength...
+     d                 pr            10i 0 extproc('__xmlXPathNodeSetGetLength')
+     d  ns                                 value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeSetItem...
+     d                 pr                  extproc('__xmlXPathNodeSetItem')
+     d                                     like(xmlNodePtr)
+     d  ns                                 value like(xmlNodeSetPtr)
+     d  index                        10i 0 value
+
+     d xmlXPathNodeSetIsEmpty...
+     d                 pr            10i 0 extproc('__xmlXPathNodeSetIsEmpty')
+     d  ns                                 value like(xmlNodeSetPtr)
+      /endif                                                                    LIBXML_XPATH_ENABLED
+      /endif                                                                    XML_XPATH_H__
diff --git a/os400/libxmlrpg/xpathInternals.rpgle b/os400/libxmlrpg/xpathInternals.rpgle
new file mode 100644 (file)
index 0000000..69f3ae0
--- /dev/null
@@ -0,0 +1,672 @@
+      * Summary: internal interfaces for XML Path Language implementation
+      * Description: internal interfaces for XML Path Language implementation
+      *              used to build new modules on top of XPath like XPointer and
+      *              XSLT
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPATH_INTERNALS_H__)
+      /define XML_XPATH_INTERNALS_H__
+
+      /include "libxmlrpg/xmlversion"
+      /include "libxmlrpg/xpath"
+
+      /if defined(LIBXML_XPATH_ENABLED)
+
+      ************************************************************************
+      *                                                                      *
+      *                            Helpers                                   *
+      *                                                                      *
+      ************************************************************************
+
+      * Many of these macros may later turn into functions. They
+      * shouldn't be used in #ifdef's preprocessor instructions.
+
+     d xmlXPathPopBoolean...
+     d                 pr            10i 0 extproc('xmlXPathPopBoolean')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopNumber...
+     d                 pr             8f   extproc('xmlXPathPopNumber')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopString...
+     d                 pr              *   extproc('xmlXPathPopString')         xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopNodeSet...
+     d                 pr                  extproc('xmlXPathPopNodeSet')
+     d                                     like(xmlNodeSetPtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathPopExternal...
+     d                 pr              *   extproc('xmlXPathPopExternal')       void *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+      * Variable Lookup forwarding.
+
+     d xmlXPathRegisterVariableLookup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisterVariableLookup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  f                                  value
+     d                                     like(xmlXPathVariableLookupFunc)
+     d  data                           *   value                                void *
+
+      * Function Lookup forwarding.
+
+     d xmlXPathRegisterFuncLookup...
+     d                 pr                  extproc('xmlXPathRegisterFuncLookup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  f                                  value like(xmlXPathFuncLookupFunc)
+     d  funcCtxt                       *   value                                void *
+
+      * Error reporting.
+      * Note this procedure is renamed in RPG to avoid character case clash with
+      *   data type xmlXPathError.
+
+     d xmlXPathReportError...
+     d                 pr                  extproc('xmlXPatherror')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  file                           *   value options(*string)               const char *
+     d  line                         10i 0 value
+     d  no                           10i 0 value
+
+     d xmlXPathErr     pr                  extproc('xmlXPathErr')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  error                        10i 0 value
+
+      /if defined(LIBXML_DEBUG_ENABLED)
+     d xmlXPathDebugDumpObject...
+     d                 pr                  extproc('xmlXPathDebugDumpObject')
+     d  output                         *   value                                FILE *
+     d  cur                                value like(xmlXPathObjectPtr)
+     d  depth                        10i 0 value
+
+     d xmlXPathDebugDumpCompExpr...
+     d                 pr                  extproc('xmlXPathDebugDumpCompExpr')
+     d  output                         *   value                                FILE *
+     d  comp                               value like(xmlXPathCompExprPtr)
+     d  depth                        10i 0 value
+      /endif
+
+      * NodeSet handling.
+
+     d xmlXPathNodeSetContains...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetContains')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathDifference...
+     d                 pr                  extproc('xmlXPathDifference')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathIntersection...
+     d                 pr                  extproc('xmlXPathIntersection')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathDistinctSorted...
+     d                 pr                  extproc('xmlXPathDistinctSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+
+     d xmlXPathDistinct...
+     d                 pr                  extproc('xmlXPathDistinct')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+
+     d xmlXPathHasSameNodes...
+     d                 pr            10i 0 extproc('xmlXPathHasSameNodes')
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeLeadingSorted...
+     d                 pr                  extproc('xmlXPathNodeLeadingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathLeadingSorted...
+     d                 pr                  extproc('xmlXPathLeadingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeLeading...
+     d                 pr                  extproc('xmlXPathNodeLeading')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathLeading...
+     d                 pr                  extproc('xmlXPathLeading')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeTrailingSorted...
+     d                 pr                  extproc('xmlXPathNodeTrailingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathTrailingSorted...
+     d                 pr                  extproc('xmlXPathTrailingSorted')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeTrailing...
+     d                 pr                  extproc('xmlXPathNodeTrailing')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes                              value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+
+     d xmlXPathTrailing...
+     d                 pr                  extproc('xmlXPathTrailing')
+     d                                     like(xmlNodeSetPtr)
+     d  nodes1                             value like(xmlNodeSetPtr)
+     d  nodes2                             value like(xmlNodeSetPtr)
+
+      * Extending a context.
+
+     d xmlXPathRegisterNs...
+     d                 pr            10i 0 extproc('xmlXPathRegisterNs')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathNsLookup...
+     d                 pr              *   extproc('xmlXPathNsLookup')          const xmlChar *
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  prefix                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredNsCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredNsCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathRegisterFunc...
+     d                 pr            10i 0 extproc('xmlXPathRegisterFunc')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlXPathFunction)
+
+     d xmlXPathRegisterFuncNS...
+     d                 pr            10i 0 extproc('xmlXPathRegisterFuncNS')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+     d  f                                  value like(xmlXPathFunction)
+
+     d xmlXPathRegisterVariable...
+     d                 pr            10i 0 extproc('xmlXPathRegisterVariable')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathRegisterVariableNS...
+     d                 pr            10i 0 extproc('xmlXPathRegisterVariableNS')
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathFunctionLookup...
+     d                 pr                  extproc('xmlXPathFunctionLookup')
+     d                                     like(xmlXPathFunction)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlXPathFunctionLookupNS...
+     d                 pr                  extproc('xmlXPathFunctionLookupNS')
+     d                                     like(xmlXPathFunction)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredFuncsCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredFuncsCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathVariableLookup...
+     d                 pr                  extproc('xmlXPathVariableLookup')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+
+     d xmlXPathVariableLookupNS...
+     d                 pr                  extproc('xmlXPathVariableLookupNS')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathContextPtr)
+     d  name                           *   value options(*string)               const xmlChar *
+     d  ns_uri                         *   value options(*string)               const xmlChar *
+
+     d xmlXPathRegisteredVariablesCleanup...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisteredVariablesCleanup')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+      * Utilities to extend XPath.
+
+     d xmlXPathNewParserContext...
+     d                 pr                  extproc('xmlXPathNewParserContext')
+     d                                     like(xmlXPathParserContextPtr)
+     d  str                            *   value options(*string)               const xmlChar *
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathFreeParserContext...
+     d                 pr                  extproc('xmlXPathFreeParserContext')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+
+      * TODO: remap to xmlXPathValuePop and Push.
+
+     d valuePop        pr                  extproc('valuePop')
+     d                                     like(xmlXPathObjectPtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d valuePush       pr            10i 0 extproc('valuePush')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  value                              value like(xmlXPathObjectPtr)
+
+     d xmlXPathNewString...
+     d                 pr                  extproc('xmlXPathNewString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               const xmlChar *
+
+     d xmlXPathNewCString...
+     d                 pr                  extproc('xmlXPathNewCString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               const char *
+
+     d xmlXPathWrapString...
+     d                 pr                  extproc('xmlXPathWrapString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               xmlChar *
+
+     d xmlXPathWrapCString...
+     d                 pr                  extproc('xmlXPathWrapCString')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value options(*string)               char *
+
+     d xmlXPathNewFloat...
+     d                 pr                  extproc('xmlXPathNewFloat')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                           8f   value
+
+     d xmlXPathNewBoolean...
+     d                 pr                  extproc('xmlXPathNewBoolean')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                          10i 0 value
+
+     d xmlXPathNewNodeSet...
+     d                 pr                  extproc('xmlXPathNewNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNewValueTree...
+     d                 pr                  extproc('xmlXPathNewValueTree')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAdd...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAdd')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAddUnique...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAddUnique')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetAddNs...
+     d                 pr            10i 0 extproc('xmlXPathNodeSetAddNs')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  node                               value like(xmlNodePtr)
+     d  ns                                 value like(xmlNsPtr)
+
+     d xmlXPathNodeSetSort...
+     d                 pr                  extproc('xmlXPathNodeSetSort')
+     d  set                                value like(xmlNodeSetPtr)
+
+     d xmlXPathRoot    pr                  extproc('xmlXPathRoot')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathEvalExpr...
+     d                 pr                  extproc('xmlXPathEvalExpr')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathParseName...
+     d                 pr              *   extproc('xmlXPathParseName')         xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathParseNCName...
+     d                 pr              *   extproc('xmlXPathParseNCName')       xmlChar *
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+      * Existing functions.
+
+     d xmlXPathStringEvalNumber...
+     d                 pr             8f   extproc('xmlXPathStringEvalNumber')
+     d  str                            *   value options(*string)               const xmlChar *
+
+     d xmlXPathEvaluatePredicateResult...
+     d                 pr            10i 0 extproc(
+     d                                     'xmlXPathEvaluatePredicateResult')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  res                                value like(xmlXPathObjectPtr)
+
+     d xmlXPathRegisterAllFunctions...
+     d                 pr                  extproc(
+     d                                     'xmlXPathRegisterAllFunctions')
+     d  ctxt                               value like(xmlXPathContextPtr)
+
+     d xmlXPathNodeSetMerge...
+     d                 pr                  extproc('xmlXPathNodeSetMerge')
+     d                                     like(xmlNodeSetPtr)
+     d  val1                               value like(xmlNodeSetPtr)
+     d  val2                               value like(xmlNodeSetPtr)
+
+     d xmlXPathNodeSetDel...
+     d                 pr                  extproc('xmlXPathNodeSetDel')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                                value like(xmlNodePtr)
+
+     d xmlXPathNodeSetRemove...
+     d                 pr                  extproc('xmlXPathNodeSetRemove')
+     d  cur                                value like(xmlNodeSetPtr)
+     d  val                          10i 0 value
+
+     d xmlXPathNewNodeSetList...
+     d                 pr                  extproc('xmlXPathNewNodeSetList')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodeSetPtr)
+
+     d xmlXPathWrapNodeSet...
+     d                 pr                  extproc('xmlXPathWrapNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                                value like(xmlNodeSetPtr)
+
+     d xmlXPathWrapExternal...
+     d                 pr                  extproc('xmlXPathWrapExternal')
+     d                                     like(xmlXPathObjectPtr)
+     d  val                            *   value                                void *
+
+     d xmlXPathEqualValues...
+     d                 pr            10i 0 extproc('xmlXPathEqualValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathNotEqualValues...
+     d                 pr            10i 0 extproc('xmlXPathNotEqualValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathCompareValues...
+     d                 pr            10i 0 extproc('xmlXPathCompareValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  inf                          10i 0 value
+     d  strict                       10i 0 value
+
+     d xmlXPathValueFlipSign...
+     d                 pr                  extproc('xmlXPathValueFlipSign')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathAddValues...
+     d                 pr                  extproc('xmlXPathAddValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathSubValues...
+     d                 pr                  extproc('xmlXPathSubValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathMultValues...
+     d                 pr                  extproc('xmlXPathMultValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathDivValues...
+     d                 pr                  extproc('xmlXPathDivValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathModValues...
+     d                 pr                  extproc('xmlXPathModValues')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+
+     d xmlXPathIsNodeType...
+     d                 pr            10i 0 extproc('xmlXPathIsNodeType')
+     d  name                           *   value options(*string)               const xmlChar *
+
+      * Some of the axis navigation routines.
+
+     d xmlXPathNextSelf...
+     d                 pr                  extproc('xmlXPathNextSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextChild...
+     d                 pr                  extproc('xmlXPathNextChild')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextDescendant...
+     d                 pr                  extproc('xmlXPathNextDescendant')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextDescendantOrSelf...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextDescendantOrSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextParent...
+     d                 pr                  extproc('xmlXPathNextParent')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAncestorOrSelf...
+     d                 pr                  extproc('xmlXPathNextAncestorOrSelf')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextFollowingSibling...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextFollowingSibling')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextFollowing...
+     d                 pr                  extproc('xmlXPathNextFollowing')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextNamespace...
+     d                 pr                  extproc('xmlXPathNextNamespace')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAttribute...
+     d                 pr                  extproc('xmlXPathNextAttribute')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextPreceding...
+     d                 pr                  extproc('xmlXPathNextPreceding')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextAncestor...
+     d                 pr                  extproc('xmlXPathNextAncestor')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+     d xmlXPathNextPrecedingSibling...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNextPrecedingSibling')
+     d                                     like(xmlNodePtr)
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  cur                                value like(xmlNodePtr)
+
+      * The official core of XPath functions.
+
+     d xmlXPathLastFunction...
+     d                 pr                  extproc('xmlXPathLastFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathPositionFunction...
+     d                 pr                  extproc('xmlXPathPositionFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathCountFunction...
+     d                 pr                  extproc('xmlXPathCountFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathIdFunction...
+     d                 pr                  extproc('xmlXPathIdFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathLocalNameFunction...
+     d                 pr                  extproc('xmlXPathLocalNameFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNamespaceURIFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathNamespaceURIFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStringFunction...
+     d                 pr                  extproc('xmlXPathStringFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStringLengthFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathStringLengthFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathConcatFunction...
+     d                 pr                  extproc('xmlXPathConcatFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathContainsFunction...
+     d                 pr                  extproc('xmlXPathContainsFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathStartsWithFunction...
+     d                 pr                  extproc('xmlXPathStartsWithFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringFunction...
+     d                 pr                  extproc('xmlXPathSubstringFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringBeforeFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathSubstringBeforeFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSubstringAfterFunction...
+     d                 pr                  extproc(
+     d                                     'xmlXPathSubstringAfterFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+
+     d xmlXPathNormalizeFunction...
+     d                 pr                  extproc('xmlXPathNormalizeFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathTranslateFunction...
+     d                 pr                  extproc('xmlXPathTranslateFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNotFunction...
+     d                 pr                  extproc('xmlXPathNotFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathTrueFunction...
+     d                 pr                  extproc('xmlXPathTrueFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathFalseFunction...
+     d                 pr                  extproc('xmlXPathFalseFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathLangFunction...
+     d                 pr                  extproc('xmlXPathLangFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathNumberFunction...
+     d                 pr                  extproc('xmlXPathNumberFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathSumFunction...
+     d                 pr                  extproc('xmlXPathSumFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathFloorFunction...
+     d                 pr                  extproc('xmlXPathFloorFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathCeilingFunction...
+     d                 pr                  extproc('xmlXPathCeilingFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathRoundFunction...
+     d                 pr                  extproc('xmlXPathRoundFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+     d xmlXPathBooleanFunction...
+     d                 pr                  extproc('xmlXPathBooleanFunction')
+     d  ctxt                               value like(xmlXPathParserContextPtr)
+     d  nargs                        10i 0 value
+
+      * Really internal functions
+
+     d xmlXPathNodeSetFreeNs...
+     d                 pr                  extproc('xmlXPathNodeSetFreeNs')
+     d  ns                                 value like(xmlNsPtr)
+
+      /endif                                                                    LIBXML_XPATH_ENABLED
+      /endif                                                                    XPATH_INTERNALS_H__
diff --git a/os400/libxmlrpg/xpointer.rpgle b/os400/libxmlrpg/xpointer.rpgle
new file mode 100644 (file)
index 0000000..6f43314
--- /dev/null
@@ -0,0 +1,157 @@
+      * Summary: API to handle XML Pointers
+      * Description: API to handle XML Pointers
+      * Base implementation was made accordingly to
+      * W3C Candidate Recommendation 7 June 2000
+      * http://www.w3.org/TR/2000/CR-xptr-20000607
+      *
+      * Added support for the element() scheme described in:
+      * W3C Proposed Recommendation 13 November 2002
+      * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
+      *
+      * Copy: See Copyright for the status of this software.
+      *
+      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+
+      /if not defined(XML_XPTR_H__)
+      /define XML_XPTR_H__
+
+      /include "libxmlrpg/xmlversion"
+
+      /if defined(LIBXML_XPTR_ENABLED)
+
+      /include "libxmlrpg/tree"
+      /include "libxmlrpg/xpath"
+
+      * A Location Set
+
+     d xmlLocationSetPtr...
+     d                 s               *   based(######typedef######)
+
+     d xmlLocationSet  ds                  based(xmlLocationSetPtr)
+     d                                     align qualified
+     d  locNr                        10i 0                                      # locations in set
+     d  locMax                       10i 0                                      Max locations in set
+     d  locTab                         *                                        xmlXPathObjectPtr *
+
+      * Handling of location sets.
+
+     d xmlXPtrLocationSetCreate...
+     d                 pr                  extproc('xmlXPtrLocationSetCreate')
+     d                                     like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrFreeLocationSet...
+     d                 pr                  extproc('xmlXPtrFreeLocationSet')
+     d obj                                 value like(xmlLocationSetPtr)
+
+     d xmlXPtrLocationSetMerge...
+     d                 pr                  extproc('xmlXPtrLocationSetMerge')
+     d                                     like(xmlLocationSetPtr)
+     d val1                                value like(xmlLocationSetPtr)
+     d val2                                value like(xmlLocationSetPtr)
+
+     d xmlXPtrNewRange...
+     d                 pr                  extproc('xmlXPtrNewRange')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d startindex                    10i 0 value
+     d end                                 value like(xmlNodePtr)
+     d endindex                      10i 0 value
+
+     d xmlXPtrNewRangePoints...
+     d                 pr                  extproc('xmlXPtrNewRangePoints')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlXPathObjectPtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewRangeNodePoint...
+     d                 pr                  extproc('xmlXPtrNewRangeNodePoint')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewRangePointNode...
+     d                 pr                  extproc('xmlXPtrNewRangePointNode')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlXPathObjectPtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewRangeNodes...
+     d                 pr                  extproc('xmlXPtrNewRangeNodes')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewLocationSetNodes...
+     d                 pr                  extproc('xmlXPtrNewLocationSetNodes')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlNodePtr)
+
+     d xmlXPtrNewLocationSetNodeSet...
+     d                 pr                  extproc(
+     d                                     'xmlXPtrNewLocationSetNodeSet')
+     d                                     like(xmlXPathObjectPtr)
+     d set                                 value like(xmlNodeSetPtr)
+
+     d xmlXPtrNewRangeNodeObject...
+     d                 pr                  extproc('xmlXPtrNewRangeNodeObject')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+     d end                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrNewCollapsedRange...
+     d                 pr                  extproc('xmlXPtrNewCollapsedRange')
+     d                                     like(xmlXPathObjectPtr)
+     d start                               value like(xmlNodePtr)
+
+     d xmlXPtrLocationSetAdd...
+     d                 pr                  extproc('xmlXPtrLocationSetAdd')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrWrapLocationSet...
+     d                 pr                  extproc('xmlXPtrWrapLocationSet')
+     d                                     like(xmlXPathObjectPtr)
+     d val                                 value like(xmlLocationSetPtr)
+
+     d xmlXPtrLocationSetDel...
+     d                 pr                  extproc('xmlXPtrLocationSetDel')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrLocationSetRemove...
+     d                 pr                  extproc('xmlXPtrLocationSetRemove')
+     d cur                                 value like(xmlLocationSetPtr)
+     d val                           10i 0 value
+
+      * Functions.
+
+     d xmlXPtrNewContext...
+     d                 pr                  extproc('xmlXPtrNewContext')
+     d                                     like(xmlXPathContextPtr)
+     d doc                                 value like(xmlDocPtr)
+     d here                                value like(xmlNodePtr)
+     d origin                              value like(xmlNodePtr)
+
+     d xmlXPtrEval     pr                  extproc('xmlXPtrEval')
+     d                                     like(xmlXPathObjectPtr)
+     d str                             *   value options(*string)               const xmlChar *
+     d ctx                                 value like(xmlXPathContextPtr)
+
+     d xmlXPtrRangeToFunction...
+     d                 pr                  extproc('xmlXPtrRangeToFunction')
+     d ctxt                                value like(xmlXPathParserContextPtr)
+     d nargs                         10i 0 value
+
+     d xmlXPtrBuildNodeList...
+     d                 pr                  extproc('xmlXPtrBuildNodeList')
+     d                                     like(xmlNodePtr)
+     d obj                                 value like(xmlXPathObjectPtr)
+
+     d xmlXPtrEvalRangePredicate...
+     d                 pr                  extproc('xmlXPtrEvalRangePredicate')
+     d ctxt                                value like(xmlXPathParserContextPtr)
+
+      /endif                                                                    LIBXML_XPTR_ENABLED
+      /endif                                                                    XML_XPTR_H__
diff --git a/os400/make-bldcsndfa.sh b/os400/make-bldcsndfa.sh
new file mode 100644 (file)
index 0000000..57cf012
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+#       Compilation script for the iconv names DFA builer.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/os400/iconv/bldcsndfa"
+
+
+# This is for old XML library (bootstrapping).
+#rm -rf xml.h xml
+#ln -s /QSYS.LIB/XML.LIB/H.FILE/XML.MBR xml.h
+#mkdir xml
+#mkdir xml/h
+#ln -s /QSYS.LIB/XML.LIB/H.FILE/UTF8.MBR xml/h/utf8
+
+
+#       Compile.
+
+CMD="CRTCMOD MODULE(${TARGETLIB}/BLDCSNDFA) SRCSTMF('bldcsndfa.c')"
+CMD="${CMD} SYSIFCOPT(*IFS64IO) LANGLVL(*EXTENDED) LOCALETYPE(*LOCALE)"
+CMD="${CMD} INCDIR("
+CMD="${CMD} '${IFSDIR}/include' ${INCLUDES})"
+CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
+CMD="${CMD} OUTPUT(${OUTPUT})"
+CMD="${CMD} OPTIMIZE(10)"
+CMD="${CMD} DBGVIEW(${DEBUG})"
+#CMD="${CMD} DEFINE('OLDXML' 'xmlXPathSetContextNode=xmlXPathSetCurrentNode')"
+
+system "${CMD}"
+
+#       Link
+
+CMD="CRTPGM PGM(${TARGETLIB}/BLDCSNDFA) MODULE(${TARGETLIB}/BLDCSNDFA)"
+CMD="${CMD} BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
+#CMD="${CMD} BNDDIR(XML/XML)"
+CMD="${CMD} TGTRLS(${TGTRLS})"
+system "${CMD}"
diff --git a/os400/make-include.sh b/os400/make-include.sh
new file mode 100644 (file)
index 0000000..4e5b058
--- /dev/null
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+#       Installation of the C header files in the OS/400 library.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/include"
+
+
+#       Create the OS/400 source program file for the C header files.
+
+SRCPF="${LIBIFSNAME}/LIBXML.FILE"
+
+if action_needed "${SRCPF}"
+then    CMD="CRTSRCPF FILE(${TARGETLIB}/LIBXML) RCDLEN(112)"
+        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: C/C++ header files')"
+        system "${CMD}"
+fi
+
+
+#       Create the IFS directory for the C header files.
+
+if action_needed "${IFSDIR}/include/libxml"
+then    mkdir -p "${IFSDIR}/include/libxml"
+fi
+
+
+
+#       Enumeration values may be used as va_arg tagfields, so they MUST be
+#               integers.
+
+copy_hfile()
+
+{
+        sed -e '1i\
+#pragma enum(int)\
+' "${@}" -e '$a\
+#pragma enum(pop)\
+'
+}
+
+#       Copy the header files to DB2 library. Link from IFS include directory.
+
+for HFILE in "${TOPDIR}/os400/transcode.h" libxml/*.h libxml/*.h.in
+do      CMD="cat \"${HFILE}\""
+        DEST="${SRCPF}/`db2_name \"${HFILE}\" nomangle`.MBR"
+
+        case "`basename \"${HFILE}\"`" in
+
+        xmlwin32version.h*)
+                continue;;      # Not on M$W !
+
+        *.in)   CMD="${CMD} | versioned_copy";;
+
+        xmlschemastypes.h)      #       Special case: rename colliding file.
+                DEST="${SRCPF}/SCHMTYPES.MBR";;
+
+        esac
+
+        if action_needed "${DEST}" "${HFILE}"
+        then    eval "${CMD}" | copy_hfile > tmphdrfile
+
+                #       Need to translate to target CCSID.
+
+                CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')"
+                CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
+                system "${CMD}"
+        fi
+
+        IFSFILE="${IFSDIR}/include/libxml/`basename \"${HFILE}\" .in`"
+
+        if action_needed "${IFSFILE}" "${DEST}"
+        then    rm -f "${IFSFILE}"
+                ln -s "${DEST}" "${IFSFILE}"
+        fi
+done
diff --git a/os400/make-rpg.sh b/os400/make-rpg.sh
new file mode 100644 (file)
index 0000000..95d3249
--- /dev/null
@@ -0,0 +1,97 @@
+#!/bin/sh
+#
+#       Installation of the ILE/RPG header files in the OS/400 library.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}/os400/libxmlrpg"
+
+
+#       Create the OS/400 source program file for the ILE/RPG header files.
+
+SRCPF="${LIBIFSNAME}/LIBXMLRPG.FILE"
+
+if action_needed "${SRCPF}"
+then    CMD="CRTSRCPF FILE(${TARGETLIB}/LIBXMLRPG) RCDLEN(112)"
+        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: ILE/RPG header files')"
+        system "${CMD}"
+fi
+
+
+#       Map file names to DB2 name syntax.
+
+> tmpsubstfile
+
+for HFILE in *.rpgle *.rpgle.in
+do      NAME="`basename \"${HFILE}\" .in`"
+        VAR="`basename \"${NAME}\" .rpgle`"
+        VAL="`db2_name \"${NAME}\" nomangle`"
+
+        if [ "${VAR}" = 'xmlschemastypes' ]
+        then    VAL=SCHMTYPES
+        fi
+
+        echo "s/${VAR}/${VAL}/g" >> tmpsubstfile
+        eval "VAR_${VAR}=\"${VAL}\""
+done
+
+
+change_include()
+
+{
+        sed -e '\#^....../include  *"libxmlrpg/#{'                      \
+            -e 's///'                                                   \
+            -e 's/".*//'                                                \
+            -f tmpsubstfile                                             \
+            -e 's#.*#      /include libxmlrpg,&#'                       \
+            -e '}'
+}
+
+
+#       Create the IFS directory for the ILE/RPG header files.
+
+RPGIFSDIR="${IFSDIR}/include/libxmlrpg"
+
+if action_needed "${RPGIFSDIR}"
+then    mkdir -p "${RPGIFSDIR}"
+fi
+
+#       Copy the header files to IFS ILE/RPG include directory.
+#       Copy them with include path editing to the DB2 library.
+
+for HFILE in *.rpgle *.rpgle.in
+do      IFSCMD="cat \"${HFILE}\""
+        DB2CMD="change_include < \"${HFILE}\""
+        IFSFILE="`basename \"${HFILE}\" .in`"
+
+        case "${HFILE}" in
+
+        *.in)   IFSCMD="${IFSCMD} | versioned_copy"
+                DB2CMD="${DB2CMD} | versioned_copy"
+                ;;
+        esac
+
+        IFSDEST="${RPGIFSDIR}/${IFSFILE}"
+
+        if action_needed "${IFSDEST}" "${HFILE}"
+        then    eval "${IFSCMD}" > "${IFSDEST}"
+        fi
+
+        eval DB2MBR="\"\${VAR_`basename \"${IFSDEST}\" .rpgle`}\""
+        DB2DEST="${SRCPF}/${DB2MBR}.MBR"
+
+        if action_needed "${DB2DEST}" "${HFILE}"
+        then    eval "${DB2CMD}" | change_include > tmphdrfile
+
+                #       Need to translate to target CCSID.
+
+                CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DB2DEST}')"
+                CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
+                system "${CMD}"
+        fi
+done
diff --git a/os400/make-src.sh b/os400/make-src.sh
new file mode 100644 (file)
index 0000000..f06cfaf
--- /dev/null
@@ -0,0 +1,241 @@
+#!/bin/sh
+#
+#       libxml compilation script for the OS/400.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}"
+
+
+#      Create and compile the identification source file.
+
+echo '#pragma comment(user, "libxml2 version '"${LIBXML_VERSION}"'")' > os400.c
+echo '#pragma comment(user, __DATE__)' >> os400.c
+echo '#pragma comment(user, __TIME__)' >> os400.c
+echo '#pragma comment(copyright, "Copyright (C) 1998-2014 Daniel Veillard. OS/400 version by P. Monnerat.")' >> os400.c
+make_module     OS400           os400.c
+LINK=                           # No need to rebuild service program yet.
+MODULES=
+
+
+#       Get source list.
+
+foldlines()
+
+{
+        sed -e ':begin'                                                 \
+            -e '/\\$/{'                                                 \
+            -e 's/\\$/ /'                                               \
+            -e 'N'                                                      \
+            -e 'bbegin'                                                 \
+            -e '}'                                                      \
+            -e 's/\n//g'                                                \
+            -e 's/[[:space:]]*$//'
+}
+
+
+get_make_var()
+
+{
+        foldlines < Makefile.am                                         |
+        sed -e "/^${1}[[:space:]]*=[[:space:]]*/{"                      \
+            -e 's///'                                                   \
+            -e 'q'                                                      \
+            -e '}'                                                      \
+            -e 'd'
+}
+
+
+docb_sources=`get_make_var docb_sources`
+trio_sources=`get_make_var trio_sources`
+CSOURCES=`eval echo "\`get_make_var libxml2_la_SOURCES | tr '()' '{}'\`"`
+
+
+#       Compile the sources into modules.
+
+INCLUDES="'`pwd`'"
+
+#       OS/400 specific modules first.
+
+make_module     DLFCN           "${SCRIPTDIR}/dlfcn/dlfcn.c"    ''      ebcdic
+make_module     ICONV           "${SCRIPTDIR}/iconv/iconv.c"    ''      ebcdic
+make_module     WRAPPERS        "${SCRIPTDIR}/wrappers.c"       ''      ebcdic
+make_module     TRANSCODE       "${SCRIPTDIR}/transcode.c"
+make_module     RPGSUPPORT      "${SCRIPTDIR}/rpgsupport.c"
+
+#       Regular libxml2 modules.
+
+for SRC in ${CSOURCES}
+do      MODULE=`db2_name "${SRC}"`
+        make_module "${MODULE}" "${SRC}"
+done
+
+
+#       If needed, (re)create the static binding directory.
+
+if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
+then    LINK=YES
+fi
+
+if [ "${LINK}" ]
+then    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
+        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
+        CMD="${CMD} TEXT('libxml2 static binding directory')"
+        system "${CMD}"
+
+        for MODULE in ${MODULES}
+        do      CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
+                CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
+                system "${CMD}"
+        done
+fi
+
+
+#       The exportation file for service program creation must be in a DB2
+#               source file, so make sure it exists.
+
+if action_needed "${LIBIFSNAME}/TOOLS.FILE"
+then    CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
+        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('libxml2: build tools')"
+        system "${CMD}"
+fi
+
+
+#       Generate all exported symbol table versions in a binding source file.
+
+BSF="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
+PGMEXPS=
+
+OS400SYMS=`cat os400/transcode.h os400/rpgsupport.h                     |
+           sed -e 'H'                                                   \
+               -e 'g'                                                   \
+               -e 's/\n/ /'                                             \
+               -e 's/\\$/ /'                                            \
+               -e 's/.*/& /'                                            \
+               -e 's/\/\*.*\*\// /g'                                    \
+               -e 'h'                                                   \
+               -e ':loop'                                               \
+               -e 'g'                                                   \
+               -e '/\/\*/d'                                             \
+               -e '/;/!d'                                               \
+               -e 's/[^;]*;//'                                          \
+               -e 'x'                                                   \
+               -e 's/[[:space:]]*;.*$//'                                \
+               -e '/XMLPUBFUN/{'                                        \
+               -e 's/[[:space:]]*(.*$//'                                \
+               -e 's/.*[[:space:]*]//'                                  \
+               -e 'p'                                                   \
+               -e 'bloop'                                               \
+               -e '}'                                                   \
+               -e '/XMLPUBVAR/!bloop'                                   \
+               -e ':loop2'                                              \
+               -e '/\[[^][]*\]/{'                                       \
+               -e 's///'                                                \
+               -e 'bloop2'                                              \
+               -e '}'                                                   \
+               -e 's/[[:space:]]*,[[:space:]]*/,/g'                     \
+               -e 's/[^,]*[[:space:]*]//'                               \
+               -e 's/[^[:alnum:]_,]//g'                                 \
+               -e 's/,/\n/g'                                            \
+               -e 'p'                                                   \
+               -e 'bloop'`
+
+sed -e 's/#.*//'                                                        \
+    -e 's/[[:space:]]*$//'                                              \
+    -e 's/^[[:space:]]*//'                                              \
+    -e '/^*global:$/d'                                                  \
+    -e '/^$/d'                                                          \
+    -e '/[[:space:]]*{$/{'                                              \
+    -e   's///'                                                         \
+    -e   'h'                                                            \
+    -e   's/[^A-Za-z0-9]/_/g'                                           \
+    -e   's/^[0-9]/_&/'                                                 \
+    -e   'x'                                                            \
+    -e   'G'                                                            \
+    -e   's/\(.*\)\n\(.*\)/\2_SIGNATURE="\1"/'                          \
+    -e   'p'                                                            \
+    -e   's/.*//'                                                       \
+    -e   'x'                                                            \
+    -e   "s/.*/SONAME='&'/"                                             \
+    -e   'b'                                                            \
+    -e '}'                                                              \
+    -e '/[[:space:]]*;$/!d'                                             \
+    -e 's///'                                                           \
+    -e '/^xmlDllMain$/d'                                                \
+    -e '/^}[[:space:]]*/!{'                                             \
+    -e   'H'                                                            \
+    -e   'd'                                                            \
+    -e '}'                                                              \
+    -e 's///'                                                           \
+    -e '/^$/!{'                                                         \
+    -e   's/[^A-Za-z0-9]/_/g'                                           \
+    -e   's/^[0-9]/_&/'                                                 \
+    -e   's/.*/${&}/'                                                   \
+    -e   'x'                                                            \
+    -e   'H'                                                            \
+    -e   's/.*//'                                                       \
+    -e '}'                                                              \
+    -e 'x'                                                              \
+    -e 's/\n/ /g'                                                       \
+    -e 's/^[[:space:]]*//'                                              \
+    -e 's/.*/declare ${SONAME}="&"/'                                    \
+    -e 's/.*/&; PGMEXPS="${SONAME} ${PGMEXPS}"/'                        \
+        < "${TOPDIR}/libxml2.syms"    > bndvars
+. ./bndvars
+
+PGMLVL=CURRENT
+for PGMEXP in ${PGMEXPS}
+do      SIGNATURE=`echo "${PGMEXP}" | sed 's/^LIBXML2_//'`
+        eval ENTRIES=\"\${${PGMEXP}}\"
+        echo " STRPGMEXP PGMLVL(*${PGMLVL}) SIGNATURE('${SIGNATURE}')"
+        for ENTRY in ${ENTRIES} ${OS400SYMS}
+        do      echo " EXPORT    SYMBOL('${ENTRY}')"
+        done
+        echo ' ENDPGMEXP'
+        PGMLVL=PRV
+done            > "${BSF}"
+
+
+#       Build the service program if needed.
+
+if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
+then    LINK=YES
+fi
+
+if [ "${LINK}" ]
+then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
+        CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
+        CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
+        CMD="${CMD} BNDDIR((${TARGETLIB}/${STATBNDDIR})"
+        if [ "${WITH_ZLIB}" -ne 0 ]
+        then    CMD="${CMD} (${ZLIB_LIB}/${ZLIB_BNDDIR})"
+        fi
+        CMD="${CMD})"
+        CMD="${CMD} BNDSRVPGM(QADRTTS)"
+        CMD="${CMD} TEXT('libxml2 dynamic library')"
+        CMD="${CMD} TGTRLS(${TGTRLS})"
+        system "${CMD}"
+        LINK=YES
+fi
+
+
+#       If needed, (re)create the dynamic binding directory.
+
+if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
+then    LINK=YES
+fi
+
+if [ "${LINK}" ]
+then    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
+        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
+        CMD="${CMD} TEXT('libxml2 dynamic binding directory')"
+        system "${CMD}"
+        CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
+        CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
+        system "${CMD}"
+fi
diff --git a/os400/make.sh b/os400/make.sh
new file mode 100644 (file)
index 0000000..864e72b
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/sh
+#
+#       libxml2 compilation script for the OS/400.
+#       This is a shell script since make is not a standard component of OS/400.
+#
+#       See Copyright for the status of this software.
+#
+#       Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+#
+
+SCRIPTDIR=`dirname "${0}"`
+. "${SCRIPTDIR}/initscript.sh"
+cd "${TOPDIR}"
+
+
+#       Create the OS/400 library if it does not exist.
+
+if action_needed "${LIBIFSNAME}"
+then    CMD="CRTLIB LIB(${TARGETLIB})"
+        CMD="${CMD} TEXT('libxml2: XML parser and toolkit API')"
+        system "${CMD}"
+fi
+
+
+#       Create the DOCS source file if it does not exist.
+
+if action_needed "${LIBIFSNAME}/DOCS.FILE"
+then    CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(112)"
+        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
+        system "${CMD}"
+fi
+
+
+#       Copy some documentation files if needed.
+
+for TEXT in "${TOPDIR}/AUTHORS" "${TOPDIR}/ChangeLog"                   \
+    "${TOPDIR}/Copyright" "${TOPDIR}/HACKING" "${TOPDIR}/README"        \
+    "${TOPDIR}/MAINTAINERS" "${TOPDIR}/NEWS" "${TOPDIR}/TODO"           \
+    "${TOPDIR}/TODO_SCHEMAS" "${TOPDIR}/os400/README400"
+do      if [ -f "${TEXT}" ]
+        then    MEMBER="`basename \"${TEXT}\" .OS400`"
+                MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${MEMBER}\"`.MBR"
+
+                if action_needed "${MEMBER}" "${TEXT}"
+                then    CMD="CPY OBJ('${TEXT}') TOOBJ('${MEMBER}')"
+                        CMD="${CMD} TOCCSID(${TGTCCSID})"
+                        CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)"
+                        system "${CMD}"
+                fi
+        fi
+done
+
+
+#       Build files from template.
+
+configFile()
+
+{
+        args=`set | sed -e '/^[A-Za-z_][A-Za-z0-9_]*=/!d'               \
+                        -e 's/[\/\\\\&]/\\\\&/g'                        \
+                        -e "s/'/'\\\\\\''/g"                            \
+                        -e 's/^\([^=]*\)=\(.*\)$/-e '\''s\/@\1@\/\2\/g'\'/`
+        eval sed ${args} < "${1}".in > "${1}"
+}
+
+configFile include/libxml/xmlversion.h
+configFile os400/os400config.h
+mv os400/os400config.h config.h
+
+
+#       Build in each directory.
+
+for SUBDIR in include rpg src
+do      "${SCRIPTDIR}/make-${SUBDIR}.sh"
+done
diff --git a/os400/os400config.h.in b/os400/os400config.h.in
new file mode 100644 (file)
index 0000000..3966ac8
--- /dev/null
@@ -0,0 +1,353 @@
+/**
+***     Configuration parameters for the OS/400 implementation.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+/* Define to 1 if you have the <ansidecl.h> header file. */
+#undef HAVE_ANSIDECL_H
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#define HAVE_ARPA_INET_H        1
+
+/* Define to 1 if you have the <arpa/nameser.h> header file. */
+#define HAVE_ARPA_NAMESER_H     1
+
+/* Whether struct sockaddr::__ss_family exists */
+#undef HAVE_BROKEN_SS_FAMILY
+
+/* Define to 1 if you have the `class' function. */
+#undef HAVE_CLASS
+
+/* Define to 1 if you have the <ctype.h> header file. */
+#define HAVE_CTYPE_H            1
+
+/* Define to 1 if you have the <dirent.h> header file. */
+#define HAVE_DIRENT_H           1
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H            1       /* Locally emulated. */
+
+/* Have dlopen based dso */
+#define HAVE_DLOPEN             1       /* Locally emulated. */
+
+/* Define to 1 if you have the <dl.h> header file. */
+#undef HAVE_DL_H
+
+/* Define to 1 if you have the <errno.h> header file. */
+#define HAVE_ERRNO_H            1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H            1
+
+/* Define to 1 if you have the `finite' function. */
+#undef HAVE_FINITE
+
+/* Define to 1 if you have the <float.h> header file. */
+#define HAVE_FLOAT_H            1
+
+/* Define to 1 if you have the `fpclass' function. */
+#undef HAVE_FPCLASS
+
+/* Define to 1 if you have the `fprintf' function. */
+#undef HAVE_FPRINTF                     /* Use trio. */
+
+/* Define to 1 if you have the `fp_class' function. */
+#undef HAVE_FP_CLASS
+
+/* Define to 1 if you have the <fp_class.h> header file. */
+#undef HAVE_FP_CLASS_H
+
+/* Define to 1 if you have the `ftime' function. */
+#undef HAVE_FTIME
+
+/* Define if getaddrinfo is there */
+#define HAVE_GETADDRINFO        1
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H         1
+
+/* Define to 1 if you have the `isascii' function. */
+#define HAVE_ISASCII            1
+
+/* Define if isinf is there */
+#undef HAVE_ISINF
+
+/* Define if isnan is there */
+#undef HAVE_ISNAN
+
+/* Define to 1 if you have the `isnand' function. */
+#undef HAVE_ISNAND
+
+/* Define if history library is there (-lhistory) */
+#undef HAVE_LIBHISTORY
+
+/* Have compression library */
+#undef HAVE_LIBLZMA
+
+/* Define if pthread library is there (-lpthread) */
+#undef HAVE_LIBPTHREAD
+
+/* Define if readline library is there (-lreadline) */
+#undef HAVE_LIBREADLINE
+
+/* Have compression library */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H           1
+
+/* Define to 1 if you have the `localtime' function. */
+#define HAVE_LOCALTIME          1
+
+/* Define to 1 if you have the <lzma.h> header file. */
+#undef HAVE_LZMA_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the <math.h> header file. */
+#define HAVE_MATH_H             1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H           1
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* mmap() is no good without munmap() */
+#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP)
+#  undef /**/ HAVE_MMAP
+#endif
+
+/* Define to 1 if you have the <nan.h> header file. */
+#undef HAVE_NAN_H
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#define HAVE_NETDB_H            1
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#define HAVE_NETINET_IN_H       1
+
+/* Define to 1 if you have the <poll.h> header file. */
+#undef HAVE_POLL_H
+
+/* Define to 1 if you have the `printf' function. */
+#undef HAVE_PRINTF                      /* Use trio. */
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF                     /* Use trio. */
+
+/* Define if <pthread.h> is there */
+#define HAVE_PTHREAD_H          1
+
+/* Define to 1 if you have the `putenv' function. */
+#define HAVE_PUTENV             1
+
+/* Define to 1 if you have the `rand' function. */
+#define HAVE_RAND               1
+
+/* Define to 1 if you have the `rand_r' function. */
+#define HAVE_RAND_R             1
+
+/* Define to 1 if you have the <resolv.h> header file. */
+#define HAVE_RESOLV_H           1
+
+/* Have shl_load based dso */
+#undef HAVE_SHLLOAD
+
+/* Define to 1 if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define to 1 if you have the <signal.h> header file. */
+#define HAVE_SIGNAL_H           1
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF                    /* Use trio. */
+
+/* Define to 1 if you have the `sprintf' function. */
+#undef HAVE_SPRINTF                     /* Use trio. */
+
+/* Define to 1 if you have the `srand' function. */
+#define HAVE_SRAND              1
+
+/* Define to 1 if you have the `scanf' function. */
+#undef HAVE_SCANF                       /* Use trio. */
+
+/* Define to 1 if you have the `fscanf' function. */
+#undef HAVE_FSCANF                      /* Use trio. */
+
+/* Define to 1 if you have the `sscanf' function. */
+#undef HAVE_SSCANF                      /* Use trio. */
+
+/* Define to 1 if you have the `stat' function. */
+#define HAVE_STAT               1
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#define HAVE_STDARG_H           1       /* Overloaded */
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H           1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H           1
+
+/* Define to 1 if you have the `strdup' function. */
+#define HAVE_STRDUP             1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR           1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME           1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H          1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H           1
+
+/* Define to 1 if you have the `strndup' function. */
+#undef HAVE_STRNDUP
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#define HAVE_SYS_MMAN_H         1
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#define HAVE_SYS_SOCKET_H       1
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H         1
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#define HAVE_SYS_TIMEB_H        1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H        1
+
+/* Define to 1 if you have the `time' function. */
+#define HAVE_TIME               1
+
+/* Define to 1 if you have the <time.h> header file. */
+#define HAVE_TIME_H             1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H           1
+
+/* Whether va_copy() is available */
+#undef HAVE_VA_COPY
+
+/* Define to 1 if you have the `vfprintf' function. */
+#undef HAVE_VFPRINTF                    /* Use trio. */
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF                   /* Use trio. */
+
+/* Define to 1 if you have the `vsprintf' function. */
+#undef HAVE_VSPRINTF                    /* Use trio. */
+
+/* Define to 1 if you have the <zlib.h> header file. */
+/* Actually dependent on the compilation script. */
+#if @WITH_ZLIB@
+#define HAVE_ZLIB_H             1
+#else
+#undef HAVE_ZLIB_H
+#endif
+
+/* Define to 1 if you have the `_stat' function. */
+#undef HAVE__STAT
+
+/* Whether __va_copy() is available */
+#undef HAVE___VA_COPY
+
+/* Define as const if the declaration of iconv() needs const. */
+#define ICONV_CONST
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Name of package */
+#define PACKAGE                 "libxml2"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT       ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME            ""
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING          ""
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME         ""
+
+/* Define to the home page for this package. */
+#define PACKAGE_URL             ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION         ""
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS            1
+
+/* Support for IPv6 */
+#define SUPPORT_IP6
+
+/* Version number of package */
+#define VERSION                 "@VERSION@"
+
+/* Determine what socket length (socklen_t) data type is */
+#define XML_SOCKLEN_T           socklen_t
+
+/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#undef _UINT32_T
+
+/* Using the Win32 Socket implementation */
+#undef _WINSOCKAPI_
+
+/* ss_family is not defined here, use __ss_family instead */
+#undef ss_family
+
+/* Define to the type of an unsigned integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint32_t
+
+/* Type cast for the send() function 2nd arg */
+#define SEND_ARG2_CAST          (char *)
+
+/* Type cast for the gethostbyname() argument */
+#define GETHOSTBYNAME_ARG_CAST  (char *)
+
+/* Define if va_list is an array type */
+#define VA_LIST_IS_ARRAY        1
diff --git a/os400/rpgsupport.c b/os400/rpgsupport.c
new file mode 100644 (file)
index 0000000..a3609c0
--- /dev/null
@@ -0,0 +1,270 @@
+/**
+***     Additional procedures for ILE/RPG support.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#include <sys/types.h>
+
+#include <stdarg.h>
+
+#include "libxml/xmlmemory.h"
+#include "libxml/xpath.h"
+#include "libxml/parser.h"
+#include "libxml/HTMLparser.h"
+
+#include "rpgsupport.h"
+
+
+/**
+***     ILE/RPG cannot directly derefence a pointer and has no macros.
+***     The following additional procedures supply these functions.
+***     In addition, the following code is adjusted for threads control at
+***             compile time via the C macros.
+**/
+
+#define THREADED_VAR(name, type)                                        \
+                type __get_##name(void) { return name; }                \
+                void __set_##name(type arg) { name = arg; }
+
+
+THREADED_VAR(xmlFree, xmlFreeFunc)
+
+void
+__call_xmlFree(void * mem)
+
+{
+        xmlFree(mem);
+}
+
+
+THREADED_VAR(xmlMalloc, xmlMallocFunc)
+
+void *
+__call_xmlMalloc(size_t size)
+
+{
+        return xmlMalloc(size);
+}
+
+
+THREADED_VAR(xmlMallocAtomic, xmlMallocFunc)
+
+void *
+__call_xmlMallocAtomic(size_t size)
+
+{
+        return xmlMallocAtomic(size);
+}
+
+
+THREADED_VAR(xmlRealloc, xmlReallocFunc)
+
+void *
+__call_xmlRealloc(void * mem, size_t size)
+
+{
+        return xmlRealloc(mem, size);
+}
+
+
+THREADED_VAR(xmlMemStrdup, xmlStrdupFunc)
+
+char *
+__call_xmlMemStrdup(const char * str)
+
+{
+        return xmlMemStrdup(str);
+}
+
+
+#ifdef LIBXML_DOCB_ENABLED
+THREADED_VAR(docbDefaultSAXHandler, xmlSAXHandlerV1)
+#endif
+
+
+#ifdef LIBXML_HTML_ENABLED
+THREADED_VAR(htmlDefaultSAXHandler, xmlSAXHandlerV1)
+#endif
+
+
+THREADED_VAR(xmlLastError, xmlError)
+
+THREADED_VAR(oldXMLWDcompatibility, int)
+THREADED_VAR(xmlBufferAllocScheme, xmlBufferAllocationScheme)
+THREADED_VAR(xmlDefaultBufferSize, int)
+THREADED_VAR(xmlDefaultSAXHandler, xmlSAXHandlerV1)
+THREADED_VAR(xmlDefaultSAXLocator, xmlSAXLocator)
+THREADED_VAR(xmlDoValidityCheckingDefaultValue, int)
+
+/* No caller to xmlGenericError() because the argument list is unknown. */
+THREADED_VAR(xmlGenericError, xmlGenericErrorFunc)
+
+
+THREADED_VAR(xmlStructuredError, xmlStructuredErrorFunc)
+
+void
+__call_xmlStructuredError(void * userData, xmlErrorPtr error)
+
+{
+        xmlStructuredError(userData, error);
+}
+
+THREADED_VAR(xmlGenericErrorContext, void *)
+THREADED_VAR(xmlStructuredErrorContext, void *)
+THREADED_VAR(xmlGetWarningsDefaultValue, int)
+THREADED_VAR(xmlIndentTreeOutput, int)
+THREADED_VAR(xmlTreeIndentString, const char *)
+THREADED_VAR(xmlKeepBlanksDefaultValue, int)
+THREADED_VAR(xmlLineNumbersDefaultValue, int)
+THREADED_VAR(xmlLoadExtDtdDefaultValue, int)
+THREADED_VAR(xmlParserDebugEntities, int)
+THREADED_VAR(xmlParserVersion, const char *)
+THREADED_VAR(xmlPedanticParserDefaultValue, int)
+THREADED_VAR(xmlSaveNoEmptyTags, int)
+THREADED_VAR(xmlSubstituteEntitiesDefaultValue, int)
+
+
+THREADED_VAR(xmlRegisterNodeDefaultValue, xmlRegisterNodeFunc)
+
+void
+__call_xmlRegisterNodeDefaultValue(xmlNodePtr node)
+
+{
+        xmlRegisterNodeDefaultValue(node);
+}
+
+
+THREADED_VAR(xmlDeregisterNodeDefaultValue, xmlDeregisterNodeFunc)
+
+void
+__call_xmlDeregisterNodeDefaultValue(xmlNodePtr node)
+
+{
+        xmlDeregisterNodeDefaultValue(node);
+}
+
+
+THREADED_VAR(xmlParserInputBufferCreateFilenameValue, xmlParserInputBufferCreateFilenameFunc)
+
+xmlParserInputBufferPtr
+__call_xmlParserInputBufferCreateFilenameValue(const char *URI,
+                                                        xmlCharEncoding enc)
+
+{
+        return xmlParserInputBufferCreateFilenameValue(URI, enc);
+}
+
+
+THREADED_VAR(xmlOutputBufferCreateFilenameValue, xmlOutputBufferCreateFilenameFunc)
+
+xmlOutputBufferPtr
+__call_xmlOutputBufferCreateFilenameValue(const char *URI,
+                        xmlCharEncodingHandlerPtr encoder, int compression)
+
+{
+        return xmlOutputBufferCreateFilenameValue(URI, encoder, compression);
+}
+
+
+
+/**
+***     va_list support.
+**/
+
+void
+__xmlVaStart(char * * list, char * lastargaddr, size_t lastargsize)
+
+{
+        list[1] = lastargaddr + lastargsize;
+}
+
+
+void *
+__xmlVaArg(char * * list, void * dest, size_t argsize)
+
+{
+        size_t align;
+
+        if (!argsize)
+                return (void *) NULL;
+
+        for (align = 16; align > argsize; align >>= 1)
+                ;
+
+        align--;
+        list[0] = list[1] + (align - (((size_t) list[0] - 1) & align));
+        list[1] = list[0] + argsize;
+
+        if (dest)
+                memcpy(dest, list[0], argsize);
+
+        return (void *) list[0];
+}
+
+
+void
+__xmlVaEnd(char * * list)
+
+{
+        /* Nothing to do. */
+}
+
+
+#ifdef LIBXML_XPATH_ENABLED
+
+int
+__xmlXPathNodeSetGetLength(const xmlNodeSet * ns)
+
+{
+       return xmlXPathNodeSetGetLength(ns);
+}
+
+
+xmlNodePtr
+__xmlXPathNodeSetItem(const xmlNodeSet * ns, int index)
+
+{
+       return xmlXPathNodeSetItem(ns, index);
+}
+
+
+int
+__xmlXPathNodeSetIsEmpty(const xmlNodeSet * ns)
+
+{
+       return xmlXPathNodeSetIsEmpty(ns);
+}
+
+#endif
+
+
+#ifdef LIBXML_HTML_ENABLED
+
+const char *
+__htmlDefaultSubelement(const htmlElemDesc * elt)
+
+{
+       return htmlDefaultSubelement(elt);
+}
+
+
+int
+__htmlElementAllowedHereDesc(const htmlElemDesc * parent,
+                                               const htmlElemDesc * elt)
+
+{
+       return htmlElementAllowedHereDesc(parent, elt);
+}
+
+
+const char * *
+__htmlRequiredAttrs(const htmlElemDesc * elt)
+
+{
+       return htmlRequiredAttrs(elt);
+}
+
+#endif
diff --git a/os400/rpgsupport.h b/os400/rpgsupport.h
new file mode 100644 (file)
index 0000000..6725b59
--- /dev/null
@@ -0,0 +1,157 @@
+/**
+***     Additional delarations for ILE/RPG support.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#ifndef __RPGSUPPORT_H__
+#define __RPGSUPPORT_H__
+
+#include <sys/types.h>
+
+#include <libxml/xmlmemory.h>
+#include <libxml/xpath.h>
+#include "libxml/HTMLparser.h"
+
+
+XMLPUBFUN xmlFreeFunc   __get_xmlFree(void);
+XMLPUBFUN void          __set_xmlFree(xmlFreeFunc freefunc);
+XMLPUBFUN void          __call_xmlFree(void * mem);
+XMLPUBFUN xmlMallocFunc __get_xmlMalloc(void);
+XMLPUBFUN void          __set_xmlMalloc(xmlMallocFunc allocfunc);
+XMLPUBFUN void *        __call_xmlMalloc(size_t size);
+XMLPUBFUN xmlMallocFunc __get_xmlMallocAtomic(void);
+XMLPUBFUN void          __set_xmlMallocAtomic(xmlMallocFunc allocfunc);
+XMLPUBFUN void *        __call_xmlMallocAtomic(size_t size);
+XMLPUBFUN xmlReallocFunc __get_xmlRealloc(void);
+XMLPUBFUN void          __set_xmlRealloc(xmlReallocFunc reallocfunc);
+XMLPUBFUN void *        __call_xmlRealloc(void * mem, size_t size);
+XMLPUBFUN xmlStrdupFunc __get_xmlMemStrdup(void);
+XMLPUBFUN void          __set_xmlMemStrdup(xmlStrdupFunc strdupfunc);
+XMLPUBFUN char *        __call_xmlMemStrdup(const char * str);
+
+#ifdef LIBXML_DOCB_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 __get_docbDefaultSAXHandler(void);
+XMLPUBFUN void          __set_docbDefaultSAXHandler(xmlSAXHandlerV1 hdlr);
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN xmlSAXHandlerV1 __get_htmlDefaultSAXHandler(void);
+XMLPUBFUN void          __set_htmlDefaultSAXHandler(xmlSAXHandlerV1 hdlr);
+#endif
+
+XMLPUBFUN xmlError      __get_xmlLastError(void);
+XMLPUBFUN void          __set_xmlLastError(xmlError err);
+
+XMLPUBFUN int           __get_oldXMLWDcompatibility(void);
+XMLPUBFUN void          __set_oldXMLWDcompatibility(int val);
+
+XMLPUBFUN xmlBufferAllocationScheme __get_xmlBufferAllocScheme(void);
+XMLPUBFUN void          __set_xmlBufferAllocScheme(xmlBufferAllocationScheme val);
+
+XMLPUBFUN int           __get_xmlDefaultBufferSize(void);
+XMLPUBFUN void          __set_xmlDefaultBufferSize(int val);
+
+XMLPUBFUN xmlSAXHandlerV1 __get_xmlDefaultSAXHandler(void);
+XMLPUBFUN void          __set_xmlDefaultSAXHandler(xmlSAXHandlerV1 val);
+
+XMLPUBFUN xmlSAXLocator __get_xmlDefaultSAXLocator(void);
+XMLPUBFUN void          __set_xmlDefaultSAXLocator(xmlSAXLocator val);
+
+XMLPUBFUN int           __get_xmlDoValidityCheckingDefaultValue(void);
+XMLPUBFUN void          __set_xmlDoValidityCheckingDefaultValue(int val);
+
+XMLPUBFUN xmlGenericErrorFunc __get_xmlGenericError(void);
+XMLPUBFUN void          __set_xmlGenericError(xmlGenericErrorFunc val);
+
+XMLPUBFUN xmlStructuredErrorFunc __get_xmlStructuredError(void);
+XMLPUBFUN void          __set_xmlStructuredError(xmlStructuredErrorFunc val);
+XMLPUBFUN void          __call_xmlStructuredError(void *userData, xmlErrorPtr error);
+
+XMLPUBFUN void *        __get_xmlGenericErrorContext(void);
+XMLPUBFUN void          __set_xmlGenericErrorContext(void * val);
+
+XMLPUBFUN void *        __get_xmlStructuredErrorContext(void);
+XMLPUBFUN void          __set_xmlStructuredErrorContext(void * val);
+
+XMLPUBFUN int           __get_xmlGetWarningsDefaultValue(void);
+XMLPUBFUN void          __set_xmlGetWarningsDefaultValue(int val);
+
+XMLPUBFUN int           __get_xmlIndentTreeOutput(void);
+XMLPUBFUN void          __set_xmlIndentTreeOutput(int val);
+
+XMLPUBFUN const char *  __get_xmlTreeIndentString(void);
+XMLPUBFUN void          __set_xmlTreeIndentString(const char * val);
+
+XMLPUBFUN int           __get_xmlKeepBlanksDefaultValue(void);
+XMLPUBFUN void          __set_xmlKeepBlanksDefaultValue(int val);
+
+XMLPUBFUN int           __get_xmlLineNumbersDefaultValue(void);
+XMLPUBFUN void          __set_xmlLineNumbersDefaultValue(int val);
+
+XMLPUBFUN int           __get_xmlLoadExtDtdDefaultValue(void);
+XMLPUBFUN void          __set_xmlLoadExtDtdDefaultValue(int val);
+
+XMLPUBFUN int           __get_xmlParserDebugEntities(void);
+XMLPUBFUN void          __set_xmlParserDebugEntities(int val);
+
+XMLPUBFUN const char *  __get_xmlParserVersion(void);
+XMLPUBFUN void          __set_xmlParserVersion(const char * val);
+
+XMLPUBFUN int           __get_xmlPedanticParserDefaultValue(void);
+XMLPUBFUN void          __set_xmlPedanticParserDefaultValue(int val);
+
+XMLPUBFUN int           __get_xmlSaveNoEmptyTags(void);
+XMLPUBFUN void          __set_xmlSaveNoEmptyTags(int val);
+
+XMLPUBFUN int           __get_xmlSubstituteEntitiesDefaultValue(void);
+XMLPUBFUN void          __set_xmlSubstituteEntitiesDefaultValue(int val);
+
+XMLPUBFUN xmlRegisterNodeFunc __get_xmlRegisterNodeDefaultValue(void);
+XMLPUBFUN void          __set_xmlRegisterNodeDefaultValue(xmlRegisterNodeFunc val);
+XMLPUBFUN void          __call_xmlRegisterNodeDefaultValue(xmlNodePtr node);
+
+XMLPUBFUN xmlDeregisterNodeFunc __get_xmlDeregisterNodeDefaultValue(void);
+XMLPUBFUN void          __set_xmlDeregisterNodeDefaultValue(xmlDeregisterNodeFunc val);
+XMLPUBFUN void          __call_xmlDeregisterNodeDefaultValue(xmlNodePtr node);
+
+XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
+                        __get_xmlParserInputBufferCreateFilenameValue(void);
+XMLPUBFUN void          __set_xmlParserInputBufferCreateFilenameValue(
+                                xmlParserInputBufferCreateFilenameFunc val);
+XMLPUBFUN xmlParserInputBufferPtr
+                __call_xmlParserInputBufferCreateFilenameValue(const char *URI,
+                                                        xmlCharEncoding enc);
+
+XMLPUBFUN xmlOutputBufferCreateFilenameFunc
+                        __get_xmlOutputBufferCreateFilenameValue(void);
+XMLPUBFUN void          __set_xmlOutputBufferCreateFilenameValue(
+                                xmlOutputBufferCreateFilenameFunc val);
+XMLPUBFUN xmlOutputBufferPtr
+                        __call_xmlOutputBufferCreateFilenameValue(const char *URI,
+                                xmlCharEncodingHandlerPtr encoder,
+                                int compression);
+
+
+XMLPUBFUN void          __xmlVaStart(char * * list,
+                                char * lastargaddr, size_t lastargsize);
+XMLPUBFUN void *        __xmlVaArg(char * * list, void * dest, size_t argsize);
+XMLPUBFUN void          __xmlVaEnd(char * * list);
+
+#ifdef LIBXML_XPATH_ENABLED
+XMLPUBFUN int          __xmlXPathNodeSetGetLength(xmlNodeSetPtr ns);
+XMLPUBFUN xmlNodePtr   __xmlXPathNodeSetItem(xmlNodeSetPtr ns, int index);
+XMLPUBFUN int          __xmlXPathNodeSetIsEmpty(xmlNodeSetPtr ns);
+#endif
+
+#ifdef LIBXML_HTML_ENABLED
+XMLPUBFUN const char * __htmlDefaultSubelement(const htmlElemDesc * elt);
+XMLPUBFUN int  __htmlElementAllowedHereDesc(const htmlElemDesc * parent,
+                       const htmlElemDesc * elt);
+XMLPUBFUN const char * *
+                       __htmlRequiredAttrs(const htmlElemDesc * elt);
+#endif
+
+#endif
diff --git a/os400/transcode.c b/os400/transcode.c
new file mode 100644 (file)
index 0000000..bae6187
--- /dev/null
@@ -0,0 +1,268 @@
+/**
+***     Transcoding support and wrappers.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#define IN_LIBXML
+#include "libxml.h"
+
+#include <sys/types.h>
+#include <iconv.h>
+#include "libxml/xmlmemory.h"
+#include "libxml/dict.h"
+#include "transcode.h"
+
+
+/**
+***     Destroy a dictionary and mark as destroyed.
+**/
+
+void
+xmlZapDict(xmlDictPtr * dict)
+
+{
+        if (dict && *dict) {
+                xmlDictFree(*dict);
+                *dict = (xmlDictPtr) NULL;
+                }
+}
+
+
+/**
+***     Support for inline conversion from/to UTF-8.
+***     This is targetted to function parameter encoding conversion.
+***     Method is:
+***     -       Convert string from/to UTF-8.
+***     -       Keep it in a dictionary.
+***     -       Free original string if a release procedure is provided.
+***     Can also be called without dictionary to convert a string from/to UTF-8
+***             into xmlMalloc'ed dynamic storage.
+**/
+
+const char *
+xmlTranscodeResult(const xmlChar * s, const char * encoding,
+                        xmlDictPtr * dict, void (*freeproc)(const void *))
+
+{
+        size_t l;
+        iconv_t cd;
+        char * srcp;
+        char * dstp;
+        size_t srcc;
+        size_t dstc;
+        char * ts;
+        const char * ret;
+        int err;
+        static const int nullstring[] = { 0 };
+
+        /* Convert from UTF-8. */
+
+        if (!s)
+                return (const char *) NULL;
+
+        ret = (const char *) NULL;
+        ts = (char *) NULL;
+        err = 0;
+        l = xmlStrlen(s);
+
+        if (!l && dict)
+                ret = (const char *) nullstring;
+        else {
+                if (dict && !*dict)
+                        err = !(*dict = xmlDictCreate());
+
+                if (!err)
+                        err = !(ts = xmlMalloc(4 * l + 4));
+
+                dstp = ts;
+                dstc = 4 * l;
+
+                if (!err && l) {
+                        if (!encoding)
+                                encoding = "ibm-0";     /* Job's encoding. */
+
+                        cd = iconv_open(encoding, "UTF-8");
+
+                        if (cd == (iconv_t) -1)
+                                err = 1;
+                        else {
+                                srcp = (char *) s;
+                                srcc = l;
+                                srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc);
+                                iconv_close(cd);
+                                err = srcc == (size_t) -1;
+                                }
+                        }
+
+                if (!err) {
+                        dstp[0] = dstp[1] = dstp[2] = dstp[3] = '\0';
+
+                        if (!dict) {
+                                if (dstc)
+                                        ts = xmlRealloc(ts, (dstp - ts) + 4);
+
+                                ret = (const char *) ts;
+                                ts = (char *) NULL;
+                                }
+                        else
+                                ret = (char *) xmlDictLookup(*dict,
+                                    (xmlChar *) ts, dstp - ts + 1);
+                        }
+                }
+
+        if (ts)
+                xmlFree(ts);
+
+        if (freeproc)
+                (*freeproc)(s);
+
+        return ret;
+}
+
+
+/**
+***     Support for inline conversion to UTF-8.
+***     Method is:
+***     -       Convert string to UTF-8.
+***     -       Keep it in a dictionary.
+***     Can also be called without dictionary to convert a string to UTF-8 into
+***             xmlMalloc'ed dynamic storage.
+**/
+
+static const xmlChar *
+inTranscode(const char * s, size_t l, const char * encoding, xmlDictPtr * dict)
+
+{
+        iconv_t cd;
+        char * srcp;
+        char * dstp;
+        size_t srcc;
+        size_t dstc;
+        xmlChar * ts;
+        const xmlChar * ret;
+        static const xmlChar nullstring[] = { 0 };
+
+        if (!l && dict)
+                return nullstring;
+
+        if (dict && !*dict)
+                if (!(*dict = xmlDictCreate()))
+                        return (const xmlChar *) NULL;
+
+        ts = (xmlChar *) xmlMalloc(6 * l + 1);
+
+        if (!ts)
+                return (const xmlChar *) NULL;
+
+        dstp = (char *) ts;
+        dstc = 6 * l;
+
+        if (l) {
+                if (!encoding)
+                        encoding = "ibm-0";     /* Use job's encoding. */
+
+                cd = iconv_open("UTF-8", encoding);
+
+                if (cd == (iconv_t) -1) {
+                        xmlFree((char *) ts);
+                        return (const xmlChar *) NULL;
+                        }
+
+                srcp = (char *) s;
+                srcc = l;
+                srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc);
+                iconv_close(cd);
+
+                if (srcc == (size_t) -1) {
+                        xmlFree((char *) ts);
+                        return (const xmlChar *) NULL;
+                        }
+                }
+
+        *dstp = '\0';
+
+        if (!dict) {
+                if (dstc)
+                        ts = xmlRealloc(ts, (dstp - ts) + 1);
+
+                return ts;
+                }
+
+        ret = xmlDictLookup(*dict, ts, dstp - ts + 1);
+        xmlFree((char *) ts);
+        return ret;
+}
+
+
+/**
+***     Input 8-bit character string parameter.
+**/
+
+const xmlChar *
+xmlTranscodeString(const char * s, const char * encoding, xmlDictPtr * dict)
+
+{
+        if (!s)
+                return (const xmlChar *) NULL;
+
+        return inTranscode(s, xmlStrlen(s), encoding, dict);
+}
+
+
+/**
+***     Input 16-bit character string parameter.
+**/
+
+const xmlChar *
+xmlTranscodeWString(const char * s, const char * encoding, xmlDictPtr * dict)
+
+{
+        size_t i;
+
+        if (!s)
+                return (const xmlChar *) NULL;
+
+        for (i = 0; s[i] && s[i + 1]; i += 2)
+                ;
+
+        return inTranscode(s, i, encoding, dict);
+}
+
+
+/**
+***     Input 32-bit character string parameter.
+**/
+
+const xmlChar *
+xmlTranscodeHString(const char * s, const char * encoding, xmlDictPtr * dict)
+
+{
+        size_t i;
+
+        if (!s)
+                return (const xmlChar *) NULL;
+
+        for (i = 0; s[i] && s[i + 1] && s[i + 2] && s[i + 3]; i += 4)
+                ;
+
+        return inTranscode(s, i, encoding, dict);
+}
+
+
+/**
+***     vasprintf() implementation with result transcoding.
+**/
+
+const char *
+xmlVasprintf(xmlDictPtr * dict, const char * encoding,
+                                        const xmlChar * fmt, va_list args)
+
+{
+        char * s = NULL;
+
+        vasprintf(&s, fmt, args);
+        return xmlTranscodeResult((const xmlChar *) s, encoding, dict, free);
+}
diff --git a/os400/transcode.h b/os400/transcode.h
new file mode 100644 (file)
index 0000000..6ca5773
--- /dev/null
@@ -0,0 +1,43 @@
+/**
+***     Transcoding support declarations.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#ifndef _TRANSCODE_H_
+#define _TRANSCODE_H_
+
+#include <stdarg.h>
+#include <libxml/dict.h>
+
+
+XMLPUBFUN void          xmlZapDict(xmlDictPtr * dict);
+XMLPUBFUN const char *  xmlTranscodeResult(const xmlChar * s,
+        const char * encoding, xmlDictPtr * dict,
+        void (*freeproc)(const void *));
+XMLPUBFUN const xmlChar * xmlTranscodeString(const char * s,
+        const char * encoding, xmlDictPtr * dict);
+XMLPUBFUN const xmlChar * xmlTranscodeWString(const char * s,
+        const char * encoding, xmlDictPtr * dict);
+XMLPUBFUN const xmlChar * xmlTranscodeHString(const char * s,
+        const char * encoding, xmlDictPtr * dict);
+
+#ifndef XML_NO_SHORT_NAMES
+/**
+***     Since the above functions are generally called "inline" (i.e.: several
+***             times nested in a single expression), define shorthand names
+***             to minimize calling statement length.
+**/
+
+#define xmlTR   xmlTranscodeResult
+#define xmlTS   xmlTranscodeString
+#define xmlTW   xmlTranscodeWString
+#define xmlTH   xmlTranscodeHstring
+#endif
+
+XMLPUBFUN const char *  xmlVasprintf(xmlDictPtr * dict, const char * encoding,
+        const xmlChar * fmt, va_list args);
+
+#endif
diff --git a/os400/wrappers.c b/os400/wrappers.c
new file mode 100644 (file)
index 0000000..9f592b7
--- /dev/null
@@ -0,0 +1,170 @@
+/**
+***     UTF-8/EBCDIC wrappers to system and C library procedures.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <netdb.h>
+#include <errno.h>
+
+#include "config.h"
+
+#include "libxml/xmlmemory.h"
+
+#include "transcode.h"
+
+
+static const char *     lxdles = NULL;
+
+
+int
+_lx_getaddrinfo(const char * node, const char * service,
+        const struct addrinfo * hints, struct addrinfo * * res)
+
+{
+        xmlDictPtr d = NULL;
+        int i;
+
+        i = getaddrinfo(xmlTranscodeResult(node, NULL, &d, NULL),
+            xmlTranscodeResult(service, NULL, &d, NULL), hints, res);
+        xmlZapDict(&d);
+        return i;
+}
+
+
+const char *
+_lx_inet_ntop(int af, const void * src, char * dst, socklen_t size)
+
+{
+        const char * cp1 = inet_ntop(af, src, dst, size);
+        char const * cp2;
+        int i;
+
+        if (!cp1)
+                return cp1;
+
+        if (!(cp2 = xmlTranscodeString(cp1, NULL, NULL)))
+                return cp2;
+
+        i = strlen(cp2);
+
+        if (i >= size) {
+                xmlFree((char *) cp2);
+                errno = ENOSPC;
+                return (const char *) NULL;
+                }
+
+        memcpy(dst, cp2, i + 1);
+        xmlFree((char *) cp2);
+        return dst;
+}
+
+
+void *
+_lx_dlopen(const char * filename, int flag)
+
+{
+        xmlDictPtr d = NULL;
+        void * result;
+
+        result = dlopen(xmlTranscodeResult(filename, NULL, &d, NULL), flag);
+        xmlZapDict(&d);
+        return result;
+}
+
+
+void *
+_lx_dlsym(void * handle, const char * symbol)
+
+{
+        xmlDictPtr d = NULL;
+        void * result;
+
+        result = dlsym(handle, xmlTranscodeResult(symbol, NULL, &d, NULL));
+        xmlZapDict(&d);
+        return result;
+}
+
+
+char *
+_lx_dlerror(void)
+
+{
+        char * cp1 = (char *) dlerror();
+
+        if (!cp1)
+                return cp1;
+
+        if (lxdles)
+                xmlFree((char *) lxdles);
+
+        lxdles = (const char *) xmlTranscodeString(cp1, NULL, NULL);
+        return (char *) lxdles;
+}
+
+
+#ifdef HAVE_ZLIB_H
+#include <zlib.h>
+
+gzFile
+_lx_gzopen(const char * path, const char * mode)
+
+{
+        xmlDictPtr d = NULL;
+        gzFile f;
+
+        f = gzopen(xmlTranscodeResult(path, NULL, &d, NULL),
+            xmlTranscodeResult(mode, NULL, &d, NULL));
+        xmlZapDict(&d);
+        return f;
+}
+
+
+gzFile
+_lx_gzdopen(int fd, const char * mode)
+
+{
+        xmlDictPtr d = NULL;
+        gzFile f;
+
+        f = gzdopen(fd, xmlTranscodeResult(mode, NULL, &d, NULL));
+        xmlZapDict(&d);
+        return f;
+}
+
+int
+_lx_inflateInit2_(z_streamp strm, int windowBits,
+                                        const char * version, int stream_size)
+
+{
+        xmlDictPtr d = NULL;
+        int r;
+
+        r = inflateInit2_(strm, windowBits,
+            xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
+        xmlZapDict(&d);
+        return r;
+}
+
+int
+_lx_deflateInit2_(z_streamp strm, int level, int method, int windowBits,
+        int memLevel, int strategy, const char * version, int stream_size)
+
+{
+        xmlDictPtr d = NULL;
+        int r;
+
+        r = deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+            xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
+        xmlZapDict(&d);
+        return r;
+}
+
+#endif
diff --git a/os400/wrappers.h b/os400/wrappers.h
new file mode 100644 (file)
index 0000000..388ec8c
--- /dev/null
@@ -0,0 +1,70 @@
+/**
+***     Replace system/C library calls by EBCDIC wrappers.
+***     This is a layer inserted between libxml2 itself and the EBCDIC
+***             environment.
+***
+***     See Copyright for the status of this software.
+***
+***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
+**/
+
+#ifndef __WRAPPERS_H_
+#define __WRAPPERS_H_
+
+/**
+***     OS/400 specific defines.
+**/
+
+#define __cplusplus__strings__
+
+/**
+***     Force header inclusions before renaming procedures to UTF-8 wrappers.
+**/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include "dlfcn.h"
+
+
+/**
+***     UTF-8 wrappers prototypes.
+**/
+
+extern int      _lx_getaddrinfo(const char * node, const char * service,
+                        const struct addrinfo * hints, struct addrinfo * * res);
+extern const char *
+                _lx_inet_ntop(int af,
+                        const void * src, char * dst, socklen_t size);
+extern void *   _lx_dlopen(const char * filename, int flag);
+extern void *   _lx_dlsym(void * handle, const char * symbol);
+extern char *   _lx_dlerror(void);
+
+
+#ifdef HAVE_ZLIB_H
+
+#include <zlib.h>
+
+extern gzFile   _lx_gzopen(const char * path, const char * mode);
+extern gzFile   _lx_gzdopen(int fd, const char * mode);
+
+#endif
+
+
+/**
+***     Rename data/procedures to UTF-8 wrappers.
+**/
+
+#define getaddrinfo     _lx_getaddrinfo
+#define inet_ntop       _lx_inet_ntop
+#define dlopen          _lx_dlopen
+#define dlsym           _lx_dlsym
+#define dlerror         _lx_dlerror
+#define gzopen          _lx_gzopen
+#define gzdopen         _lx_gzdopen
+#define inflateInit2_   _lx_inflateInit2_
+#define deflateInit2_   _lx_deflateInit2_
+
+#endif
index 017d22d..dca4d98 100644 (file)
@@ -1,5 +1,8 @@
 <manifest>
- <request>
-    <domain name="_"/>
- </request>
+       <assign>
+               <filesystem path="/usr/bin/*" exec_label="none"/>
+       </assign>
+       <request>
+               <domain name="_"/>
+       </request>
 </manifest>
index c241e76..dd463d2 100644 (file)
@@ -1,5 +1,5 @@
 Name:           libxml2
-Version:        2.8.0
+Version:        2.9.2
 Release:        0
 Summary:        A Library to Manipulate XML Files
 License:        MIT
@@ -113,5 +113,6 @@ ln -s libxml2/libxml %{buildroot}%{_includedir}/libxml
 %{_libdir}/libxml2.la
 %{_libdir}/*.sh
 %{_libdir}/pkgconfig/*.pc
+%{_libdir}/cmake/libxml2/libxml2-config.cmake
 
 %changelog
index 88c5198..6825dec 100644 (file)
@@ -1,9 +1,9 @@
 Name:           python-libxml2
-Version:        2.8.0
+Version:        2.9.2
 Release:        0
 Summary:        Python Bindings for libxml2
 License:        MIT
-Group:          Platform Development/Python
+Group:          Development/Python
 Url:            http://xmlsoft.org
 Source:         ftp://xmlsoft.org/libxml2/libxml2-%{version}.tar.gz
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
index 2c38fae..1d93967 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -17,7 +17,7 @@
  * parserInternals.c to reduce this file size.
  * As much as possible the functions are associated with their relative
  * production in the XML specification. A few productions defining the
- * different ranges of character are actually implanted either in 
+ * different ranges of character are actually implanted either in
  * parserInternals.h or parserInternals.c
  * The DOM tree build is realized from the default SAX callbacks in
  * the module SAX.c.
@@ -40,6 +40,7 @@
 #endif
 
 #include <stdlib.h>
+#include <limits.h>
 #include <string.h>
 #include <stdarg.h>
 #include <libxml/xmlmemory.h>
@@ -83,6 +84,9 @@
 #include <lzma.h>
 #endif
 
+#include "buf.h"
+#include "enc.h"
+
 static void
 xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info);
 
@@ -117,16 +121,56 @@ xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID,
  * parser option.
  */
 static int
-xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size,
-                     xmlEntityPtr ent)
+xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size,
+                     xmlEntityPtr ent, size_t replacement)
 {
-    unsigned long consumed = 0;
+    size_t consumed = 0;
 
     if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE))
         return (0);
     if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
         return (1);
-    if (size != 0) {
+
+    /*
+     * This may look absurd but is needed to detect
+     * entities problems
+     */
+    if ((ent != NULL) && (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
+       (ent->content != NULL) && (ent->checked == 0)) {
+       unsigned long oldnbent = ctxt->nbentities;
+       xmlChar *rep;
+
+       ent->checked = 1;
+
+       rep = xmlStringDecodeEntities(ctxt, ent->content,
+                                 XML_SUBSTITUTE_REF, 0, 0, 0);
+
+       ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
+       if (rep != NULL) {
+           if (xmlStrchr(rep, '<'))
+               ent->checked |= 1;
+           xmlFree(rep);
+           rep = NULL;
+       }
+    }
+    if (replacement != 0) {
+       if (replacement < XML_MAX_TEXT_LENGTH)
+           return(0);
+
+        /*
+        * If the volume of entity copy reaches 10 times the
+        * amount of parsed data and over the large text threshold
+        * then that's very likely to be an abuse.
+        */
+        if (ctxt->input != NULL) {
+           consumed = ctxt->input->consumed +
+                      (ctxt->input->cur - ctxt->input->base);
+       }
+        consumed += ctxt->sizeentities;
+
+        if (replacement < XML_PARSER_NON_LINEAR * consumed)
+           return(0);
+    } else if (size != 0) {
         /*
          * Do the check based on the replacement size of the entity
          */
@@ -149,7 +193,7 @@ xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size,
         /*
          * use the number of parsed entities in the replacement
          */
-        size = ent->checked;
+        size = ent->checked / 2;
 
         /*
          * The amount of data parsed counting entities size only once
@@ -168,11 +212,13 @@ xmlParserEntityCheck(xmlParserCtxtPtr ctxt, unsigned long size,
             return (0);
     } else {
         /*
-         * strange we got no data for checking just return
+         * strange we got no data for checking
          */
-        return (0);
+       if (((ctxt->lastError.code != XML_ERR_UNDECLARED_ENTITY) &&
+            (ctxt->lastError.code != XML_WAR_UNDECLARED_ENTITY)) ||
+           (ctxt->nbentities <= 10000))
+           return (0);
     }
-
     xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
     return (1);
 }
@@ -194,6 +240,17 @@ unsigned int xmlParserMaxDepth = 256;
 #define XML_PARSER_BUFFER_SIZE 100
 #define SAX_COMPAT_MODE BAD_CAST "SAX compatibility mode document"
 
+/**
+ * XML_PARSER_CHUNK_SIZE
+ *
+ * When calling GROW that's the minimal amount of data
+ * the parser expected to have received. It is not a hard
+ * limit but an optimization when reading strings like Names
+ * It is not strictly needed as long as inputs available characters
+ * are followed by 0, which should be provided by the I/O level
+ */
+#define XML_PARSER_CHUNK_SIZE 100
+
 /*
  * List of XML prefixed PI allowed by W3C specs
  */
@@ -233,7 +290,7 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity);
 
 /************************************************************************
  *                                                                     *
- *             Some factorized error routines                          *
+ *             Some factorized error routines                          *
  *                                                                     *
  ************************************************************************/
 
@@ -285,193 +342,201 @@ static void
 xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info)
 {
     const char *errmsg;
+    char errstr[129] = "";
 
     if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
         (ctxt->instate == XML_PARSER_EOF))
        return;
     switch (error) {
         case XML_ERR_INVALID_HEX_CHARREF:
-            errmsg = "CharRef: invalid hexadecimal value\n";
+            errmsg = "CharRef: invalid hexadecimal value";
             break;
         case XML_ERR_INVALID_DEC_CHARREF:
-            errmsg = "CharRef: invalid decimal value\n";
+            errmsg = "CharRef: invalid decimal value";
             break;
         case XML_ERR_INVALID_CHARREF:
-            errmsg = "CharRef: invalid value\n";
+            errmsg = "CharRef: invalid value";
             break;
         case XML_ERR_INTERNAL_ERROR:
             errmsg = "internal error";
             break;
         case XML_ERR_PEREF_AT_EOF:
-            errmsg = "PEReference at end of document\n";
+            errmsg = "PEReference at end of document";
             break;
         case XML_ERR_PEREF_IN_PROLOG:
-            errmsg = "PEReference in prolog\n";
+            errmsg = "PEReference in prolog";
             break;
         case XML_ERR_PEREF_IN_EPILOG:
-            errmsg = "PEReference in epilog\n";
+            errmsg = "PEReference in epilog";
             break;
         case XML_ERR_PEREF_NO_NAME:
-            errmsg = "PEReference: no name\n";
+            errmsg = "PEReference: no name";
             break;
         case XML_ERR_PEREF_SEMICOL_MISSING:
-            errmsg = "PEReference: expecting ';'\n";
+            errmsg = "PEReference: expecting ';'";
             break;
         case XML_ERR_ENTITY_LOOP:
-            errmsg = "Detected an entity reference loop\n";
+            errmsg = "Detected an entity reference loop";
             break;
         case XML_ERR_ENTITY_NOT_STARTED:
-            errmsg = "EntityValue: \" or ' expected\n";
+            errmsg = "EntityValue: \" or ' expected";
             break;
         case XML_ERR_ENTITY_PE_INTERNAL:
-            errmsg = "PEReferences forbidden in internal subset\n";
+            errmsg = "PEReferences forbidden in internal subset";
             break;
         case XML_ERR_ENTITY_NOT_FINISHED:
-            errmsg = "EntityValue: \" or ' expected\n";
+            errmsg = "EntityValue: \" or ' expected";
             break;
         case XML_ERR_ATTRIBUTE_NOT_STARTED:
-            errmsg = "AttValue: \" or ' expected\n";
+            errmsg = "AttValue: \" or ' expected";
             break;
         case XML_ERR_LT_IN_ATTRIBUTE:
-            errmsg = "Unescaped '<' not allowed in attributes values\n";
+            errmsg = "Unescaped '<' not allowed in attributes values";
             break;
         case XML_ERR_LITERAL_NOT_STARTED:
-            errmsg = "SystemLiteral \" or ' expected\n";
+            errmsg = "SystemLiteral \" or ' expected";
             break;
         case XML_ERR_LITERAL_NOT_FINISHED:
-            errmsg = "Unfinished System or Public ID \" or ' expected\n";
+            errmsg = "Unfinished System or Public ID \" or ' expected";
             break;
         case XML_ERR_MISPLACED_CDATA_END:
-            errmsg = "Sequence ']]>' not allowed in content\n";
+            errmsg = "Sequence ']]>' not allowed in content";
             break;
         case XML_ERR_URI_REQUIRED:
-            errmsg = "SYSTEM or PUBLIC, the URI is missing\n";
+            errmsg = "SYSTEM or PUBLIC, the URI is missing";
             break;
         case XML_ERR_PUBID_REQUIRED:
-            errmsg = "PUBLIC, the Public Identifier is missing\n";
+            errmsg = "PUBLIC, the Public Identifier is missing";
             break;
         case XML_ERR_HYPHEN_IN_COMMENT:
-            errmsg = "Comment must not contain '--' (double-hyphen)\n";
+            errmsg = "Comment must not contain '--' (double-hyphen)";
             break;
         case XML_ERR_PI_NOT_STARTED:
-            errmsg = "xmlParsePI : no target name\n";
+            errmsg = "xmlParsePI : no target name";
             break;
         case XML_ERR_RESERVED_XML_NAME:
-            errmsg = "Invalid PI name\n";
+            errmsg = "Invalid PI name";
             break;
         case XML_ERR_NOTATION_NOT_STARTED:
-            errmsg = "NOTATION: Name expected here\n";
+            errmsg = "NOTATION: Name expected here";
             break;
         case XML_ERR_NOTATION_NOT_FINISHED:
-            errmsg = "'>' required to close NOTATION declaration\n";
+            errmsg = "'>' required to close NOTATION declaration";
             break;
         case XML_ERR_VALUE_REQUIRED:
-            errmsg = "Entity value required\n";
+            errmsg = "Entity value required";
             break;
         case XML_ERR_URI_FRAGMENT:
             errmsg = "Fragment not allowed";
             break;
         case XML_ERR_ATTLIST_NOT_STARTED:
-            errmsg = "'(' required to start ATTLIST enumeration\n";
+            errmsg = "'(' required to start ATTLIST enumeration";
             break;
         case XML_ERR_NMTOKEN_REQUIRED:
-            errmsg = "NmToken expected in ATTLIST enumeration\n";
+            errmsg = "NmToken expected in ATTLIST enumeration";
             break;
         case XML_ERR_ATTLIST_NOT_FINISHED:
-            errmsg = "')' required to finish ATTLIST enumeration\n";
+            errmsg = "')' required to finish ATTLIST enumeration";
             break;
         case XML_ERR_MIXED_NOT_STARTED:
-            errmsg = "MixedContentDecl : '|' or ')*' expected\n";
+            errmsg = "MixedContentDecl : '|' or ')*' expected";
             break;
         case XML_ERR_PCDATA_REQUIRED:
-            errmsg = "MixedContentDecl : '#PCDATA' expected\n";
+            errmsg = "MixedContentDecl : '#PCDATA' expected";
             break;
         case XML_ERR_ELEMCONTENT_NOT_STARTED:
-            errmsg = "ContentDecl : Name or '(' expected\n";
+            errmsg = "ContentDecl : Name or '(' expected";
             break;
         case XML_ERR_ELEMCONTENT_NOT_FINISHED:
-            errmsg = "ContentDecl : ',' '|' or ')' expected\n";
+            errmsg = "ContentDecl : ',' '|' or ')' expected";
             break;
         case XML_ERR_PEREF_IN_INT_SUBSET:
             errmsg =
-                "PEReference: forbidden within markup decl in internal subset\n";
+                "PEReference: forbidden within markup decl in internal subset";
             break;
         case XML_ERR_GT_REQUIRED:
-            errmsg = "expected '>'\n";
+            errmsg = "expected '>'";
             break;
         case XML_ERR_CONDSEC_INVALID:
-            errmsg = "XML conditional section '[' expected\n";
+            errmsg = "XML conditional section '[' expected";
             break;
         case XML_ERR_EXT_SUBSET_NOT_FINISHED:
-            errmsg = "Content error in the external subset\n";
+            errmsg = "Content error in the external subset";
             break;
         case XML_ERR_CONDSEC_INVALID_KEYWORD:
             errmsg =
-                "conditional section INCLUDE or IGNORE keyword expected\n";
+                "conditional section INCLUDE or IGNORE keyword expected";
             break;
         case XML_ERR_CONDSEC_NOT_FINISHED:
-            errmsg = "XML conditional section not closed\n";
+            errmsg = "XML conditional section not closed";
             break;
         case XML_ERR_XMLDECL_NOT_STARTED:
-            errmsg = "Text declaration '<?xml' required\n";
+            errmsg = "Text declaration '<?xml' required";
             break;
         case XML_ERR_XMLDECL_NOT_FINISHED:
-            errmsg = "parsing XML declaration: '?>' expected\n";
+            errmsg = "parsing XML declaration: '?>' expected";
             break;
         case XML_ERR_EXT_ENTITY_STANDALONE:
-            errmsg = "external parsed entities cannot be standalone\n";
+            errmsg = "external parsed entities cannot be standalone";
             break;
         case XML_ERR_ENTITYREF_SEMICOL_MISSING:
-            errmsg = "EntityRef: expecting ';'\n";
+            errmsg = "EntityRef: expecting ';'";
             break;
         case XML_ERR_DOCTYPE_NOT_FINISHED:
-            errmsg = "DOCTYPE improperly terminated\n";
+            errmsg = "DOCTYPE improperly terminated";
             break;
         case XML_ERR_LTSLASH_REQUIRED:
-            errmsg = "EndTag: '</' not found\n";
+            errmsg = "EndTag: '</' not found";
             break;
         case XML_ERR_EQUAL_REQUIRED:
-            errmsg = "expected '='\n";
+            errmsg = "expected '='";
             break;
         case XML_ERR_STRING_NOT_CLOSED:
-            errmsg = "String not closed expecting \" or '\n";
+            errmsg = "String not closed expecting \" or '";
             break;
         case XML_ERR_STRING_NOT_STARTED:
-            errmsg = "String not started expecting ' or \"\n";
+            errmsg = "String not started expecting ' or \"";
             break;
         case XML_ERR_ENCODING_NAME:
-            errmsg = "Invalid XML encoding name\n";
+            errmsg = "Invalid XML encoding name";
             break;
         case XML_ERR_STANDALONE_VALUE:
-            errmsg = "standalone accepts only 'yes' or 'no'\n";
+            errmsg = "standalone accepts only 'yes' or 'no'";
             break;
         case XML_ERR_DOCUMENT_EMPTY:
-            errmsg = "Document is empty\n";
+            errmsg = "Document is empty";
             break;
         case XML_ERR_DOCUMENT_END:
-            errmsg = "Extra content at the end of the document\n";
+            errmsg = "Extra content at the end of the document";
             break;
         case XML_ERR_NOT_WELL_BALANCED:
-            errmsg = "chunk is not well balanced\n";
+            errmsg = "chunk is not well balanced";
             break;
         case XML_ERR_EXTRA_CONTENT:
-            errmsg = "extra content at the end of well balanced chunk\n";
+            errmsg = "extra content at the end of well balanced chunk";
             break;
         case XML_ERR_VERSION_MISSING:
-            errmsg = "Malformed declaration expecting version\n";
+            errmsg = "Malformed declaration expecting version";
+            break;
+        case XML_ERR_NAME_TOO_LONG:
+            errmsg = "Name too long use XML_PARSE_HUGE option";
             break;
 #if 0
         case:
-            errmsg = "\n";
+            errmsg = "";
             break;
 #endif
         default:
-            errmsg = "Unregistered error message\n";
+            errmsg = "Unregistered error message";
     }
+    if (info == NULL)
+        snprintf(errstr, 128, "%s\n", errmsg);
+    else
+        snprintf(errstr, 128, "%s: %%s\n", errmsg);
     if (ctxt != NULL)
        ctxt->errNo = error;
     __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
-                    XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, errmsg,
+                    XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, &errstr[0],
                     info);
     if (ctxt != NULL) {
        ctxt->wellFormed = 0;
@@ -626,7 +691,7 @@ xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
  */
 static void
 xmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
-                  const char *msg, const xmlChar *str1, int val, 
+                  const char *msg, const xmlChar *str1, int val,
                  const xmlChar *str2)
 {
     if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
@@ -754,7 +819,7 @@ xmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error,
 
 /************************************************************************
  *                                                                     *
- *             Library wide options                                    *
+ *             Library wide options                                    *
  *                                                                     *
  ************************************************************************/
 
@@ -978,7 +1043,7 @@ xmlHasFeature(xmlFeature feature)
 
 /************************************************************************
  *                                                                     *
- *             SAX2 defaulted attributes handling                      *
+ *             SAX2 defaulted attributes handling                      *
  *                                                                     *
  ************************************************************************/
 
@@ -1002,8 +1067,8 @@ xmlDetectSAX2(xmlParserCtxtPtr ctxt) {
     ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
     ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
     ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
-    if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) || 
-               (ctxt->str_xml_ns == NULL)) {
+    if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) ||
+               (ctxt->str_xml_ns == NULL)) {
         xmlErrMemory(ctxt, NULL);
     }
 }
@@ -1517,7 +1582,7 @@ nsPush(xmlParserCtxtPtr ctxt, const xmlChar *prefix, const xmlChar *URL)
 {
     if (ctxt->options & XML_PARSE_NSCLEAN) {
         int i;
-       for (i = 0;i < ctxt->nsNr;i += 2) {
+       for (i = ctxt->nsNr - 2;i >= 0;i -= 2) {
            if (ctxt->nsTab[i] == prefix) {
                /* in scope */
                if (ctxt->nsTab[i + 1] == URL)
@@ -1922,7 +1987,7 @@ static int spacePop(xmlParserCtxtPtr ctxt) {
  *           to compare on ASCII based substring.
  *   SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
  *           strings without newlines within the parser.
- *   NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII 
+ *   NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII
  *           defined char within the parser.
  * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding
  *
@@ -1971,10 +2036,10 @@ static int spacePop(xmlParserCtxtPtr ctxt) {
 #define SKIPL(val) do {                                                        \
     int skipl;                                                         \
     for(skipl=0; skipl<val; skipl++) {                                 \
-       if (*(ctxt->input->cur) == '\n') {                              \
+       if (*(ctxt->input->cur) == '\n') {                              \
        ctxt->input->line++; ctxt->input->col = 1;                      \
-       } else ctxt->input->col++;                                      \
-       ctxt->nbChars++;                                                \
+       } else ctxt->input->col++;                                      \
+       ctxt->nbChars++;                                                \
        ctxt->input->cur++;                                             \
     }                                                                  \
     if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt);    \
@@ -2000,6 +2065,16 @@ static void xmlSHRINK (xmlParserCtxtPtr ctxt) {
        xmlGROW (ctxt);
 
 static void xmlGROW (xmlParserCtxtPtr ctxt) {
+    unsigned long curEnd = ctxt->input->end - ctxt->input->cur;
+    unsigned long curBase = ctxt->input->cur - ctxt->input->base;
+
+    if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) ||
+         (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) &&
+         ((ctxt->input->buf) && (ctxt->input->buf->readcallback != (xmlInputReadCallback) xmlNop)) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup");
+        ctxt->instate = XML_PARSER_EOF;
+    }
     xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
     if ((ctxt->input->cur != NULL) && (*ctxt->input->cur == 0) &&
         (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
@@ -2060,6 +2135,8 @@ xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
        while (IS_BLANK_CH(*cur)) {
            if (*cur == '\n') {
                ctxt->input->line++; ctxt->input->col = 1;
+           } else {
+               ctxt->input->col++;
            }
            cur++;
            res++;
@@ -2144,6 +2221,8 @@ xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) {
                "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur);
     }
     ret = inputPush(ctxt, input);
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(-1);
     GROW;
     return(ret);
 }
@@ -2159,7 +2238,7 @@ xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) {
  *
  * [ WFC: Legal Character ]
  * Characters referred to using character references must match the
- * production for Char. 
+ * production for Char.
  *
  * Returns the value parsed (as an int), 0 in case of error
  */
@@ -2180,8 +2259,10 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) {
            if (count++ > 20) {
                count = 0;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(0);
            }
-           if ((RAW >= '0') && (RAW <= '9')) 
+           if ((RAW >= '0') && (RAW <= '9'))
                val = val * 16 + (CUR - '0');
            else if ((RAW >= 'a') && (RAW <= 'f') && (count < 20))
                val = val * 16 + (CUR - 'a') + 10;
@@ -2211,8 +2292,10 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) {
            if (count++ > 20) {
                count = 0;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(0);
            }
-           if ((RAW >= '0') && (RAW <= '9')) 
+           if ((RAW >= '0') && (RAW <= '9'))
                val = val * 10 + (CUR - '0');
            else {
                xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
@@ -2238,7 +2321,7 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) {
     /*
      * [ WFC: Legal Character ]
      * Characters referred to using character references must match the
-     * production for Char. 
+     * production for Char.
      */
     if ((IS_CHAR(val) && (outofrange == 0))) {
         return(val);
@@ -2263,7 +2346,7 @@ xmlParseCharRef(xmlParserCtxtPtr ctxt) {
  *
  * [ WFC: Legal Character ]
  * Characters referred to using character references must match the
- * production for Char. 
+ * production for Char.
  *
  * Returns the value parsed (as an int), 0 in case of error, str will be
  *         updated to the current value of the index
@@ -2282,7 +2365,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
        ptr += 3;
        cur = *ptr;
        while (cur != ';') { /* Non input consuming loop */
-           if ((cur >= '0') && (cur <= '9')) 
+           if ((cur >= '0') && (cur <= '9'))
                val = val * 16 + (cur - '0');
            else if ((cur >= 'a') && (cur <= 'f'))
                val = val * 16 + (cur - 'a') + 10;
@@ -2305,7 +2388,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
        ptr += 2;
        cur = *ptr;
        while (cur != ';') { /* Non input consuming loops */
-           if ((cur >= '0') && (cur <= '9')) 
+           if ((cur >= '0') && (cur <= '9'))
                val = val * 10 + (cur - '0');
            else {
                xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
@@ -2329,7 +2412,7 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
     /*
      * [ WFC: Legal Character ]
      * Characters referred to using character references must match the
-     * production for Char. 
+     * production for Char.
      */
     if ((IS_CHAR(val) && (outofrange == 0))) {
         return(val);
@@ -2351,9 +2434,9 @@ xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
  *
  * Returns the new input stream or NULL
  */
+
 static void deallocblankswrapper (xmlChar *str) {xmlFree(str);}
+
 static xmlParserInputPtr
 xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
     xmlParserInputPtr input;
@@ -2376,7 +2459,7 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
     if (buffer == NULL) {
        xmlErrMemory(ctxt, NULL);
         xmlFree(input);
-       return(NULL);
+       return(NULL);
     }
     buffer [0] = ' ';
     buffer [1] = '%';
@@ -2395,12 +2478,12 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
 /**
  * xmlParserHandlePEReference:
  * @ctxt:  the parser context
- * 
+ *
  * [69] PEReference ::= '%' Name ';'
  *
  * [ WFC: No Recursion ]
  * A parsed entity must not contain a recursive
- * reference to itself, either directly or indirectly. 
+ * reference to itself, either directly or indirectly.
  *
  * [ WFC: Entity Declared ]
  * In a document without any DTD, a document with only an internal DTD
@@ -2418,9 +2501,9 @@ xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
  * NOTE: misleading but this is handled.
  *
  * A PEReference may have been detected in the current input stream
- * the handling is done accordingly to 
+ * the handling is done accordingly to
  *      http://www.w3.org/TR/REC-xml#entproc
- * i.e. 
+ * i.e.
  *   - Included in literal in entity values
  *   - Included as Parameter Entity reference within DTDs
  */
@@ -2497,8 +2580,10 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
            NEXT;
            if ((ctxt->sax != NULL) && (ctxt->sax->getParameterEntity != NULL))
                entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
+           if (ctxt->instate == XML_PARSER_EOF)
+               return;
            if (entity == NULL) {
-               
+
                /*
                 * [ WFC: Entity Declared ]
                 * In a document without any DTD, a document with only an
@@ -2524,12 +2609,13 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
                        xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY,
                                         "PEReference: %%%s; not found\n",
                                         name, NULL);
-                   } else 
+                   } else
                        xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
                                      "PEReference: %%%s; not found\n",
                                      name, NULL);
                    ctxt->valid = 0;
                }
+               xmlParserEntityCheck(ctxt, 0, NULL, 0);
            } else if (ctxt->input->free != deallocblankswrapper) {
                    input = xmlNewBlanksWrapperInputStream(ctxt, entity);
                    if (xmlPushInput(ctxt, input) < 0)
@@ -2541,6 +2627,23 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
                    xmlCharEncoding enc;
 
                    /*
+                    * Note: external parameter entities will not be loaded, it
+                    * is not required for a non-validating parser, unless the
+                    * option of validating, or substituting entities were
+                    * given. Doing so is far more secure as the parser will
+                    * only process data coming from the document entity by
+                    * default.
+                    */
+                    if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
+                       ((ctxt->options & XML_PARSE_NOENT) == 0) &&
+                       ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
+                       ((ctxt->options & XML_PARSE_DTDLOAD) == 0) &&
+                       ((ctxt->options & XML_PARSE_DTDATTR) == 0) &&
+                       (ctxt->replaceEntities == 0) &&
+                       (ctxt->validate == 0))
+                       return;
+
+                   /*
                     * handle the extra spaces added before and after
                     * c.f. http://www.w3.org/TR/REC-xml#as-PE
                     * this is done independently.
@@ -2549,7 +2652,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
                    if (xmlPushInput(ctxt, input) < 0)
                        return;
 
-                   /* 
+                   /*
                     * Get the 4 first bytes and decode the charset
                     * if enc != XML_CHAR_ENCODING_NONE
                     * plug some encoding conversion routines.
@@ -2559,6 +2662,8 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
                     * the amount of data in the buffer.
                     */
                    GROW
+                    if (ctxt->instate == XML_PARSER_EOF)
+                        return;
                    if ((ctxt->input->end - ctxt->input->cur)>=4) {
                        start[0] = RAW;
                        start[1] = NXT(1);
@@ -2589,15 +2694,17 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
 
 /*
  * Macro used to grow the current buffer.
+ * buffer##_size is expected to be a size_t
+ * mem_error: is expected to handle memory allocation failures
  */
 #define growBuffer(buffer, n) {                                                \
     xmlChar *tmp;                                                      \
-    buffer##_size *= 2;                                                        \
-    buffer##_size += n;                                                        \
-    tmp = (xmlChar *)                                                  \
-               xmlRealloc(buffer, buffer##_size * sizeof(xmlChar));    \
+    size_t new_size = buffer##_size * 2 + n;                            \
+    if (new_size < buffer##_size) goto mem_error;                       \
+    tmp = (xmlChar *) xmlRealloc(buffer, new_size);                     \
     if (tmp == NULL) goto mem_error;                                   \
     buffer = tmp;                                                      \
+    buffer##_size = new_size;                                           \
 }
 
 /**
@@ -2609,7 +2716,7 @@ xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
  * @end:  an end marker xmlChar, 0 if none
  * @end2:  an end marker xmlChar, 0 if none
  * @end3:  an end marker xmlChar, 0 if none
- * 
+ *
  * Takes a entity string content and process to do the adequate substitutions.
  *
  * [67] Reference ::= EntityRef | CharRef
@@ -2623,14 +2730,14 @@ xmlChar *
 xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
                      int what, xmlChar end, xmlChar  end2, xmlChar end3) {
     xmlChar *buffer = NULL;
-    int buffer_size = 0;
+    size_t buffer_size = 0;
+    size_t nbchars = 0;
 
     xmlChar *current = NULL;
     xmlChar *rep = NULL;
     const xmlChar *last;
     xmlEntityPtr ent;
     int c,l;
-    int nbchars = 0;
 
     if ((ctxt == NULL) || (str == NULL) || (len < 0))
        return(NULL);
@@ -2647,7 +2754,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
      * allocate a translation buffer.
      */
     buffer_size = XML_PARSER_BIG_BUFFER_SIZE;
-    buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
+    buffer = (xmlChar *) xmlMallocAtomic(buffer_size);
     if (buffer == NULL) goto mem_error;
 
     /*
@@ -2667,7 +2774,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
            if (val != 0) {
                COPY_BUF(0,buffer,nbchars,val);
            }
-           if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
+           if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
                growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
            }
        } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) {
@@ -2679,13 +2786,14 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
            if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) ||
                (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR))
                goto int_error;
+           xmlParserEntityCheck(ctxt, 0, ent, 0);
            if (ent != NULL)
-               ctxt->nbentities += ent->checked;
+               ctxt->nbentities += ent->checked / 2;
            if ((ent != NULL) &&
                (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
                if (ent->content != NULL) {
                    COPY_BUF(0,buffer,nbchars,ent->content[0]);
-                   if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
+                   if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
                        growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
                    }
                } else {
@@ -2702,9 +2810,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
                    current = rep;
                    while (*current != 0) { /* non input consuming loop */
                        buffer[nbchars++] = *current++;
-                       if (nbchars >
-                           buffer_size - XML_PARSER_BUFFER_SIZE) {
-                           if (xmlParserEntityCheck(ctxt, nbchars, ent))
+                       if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
+                           if (xmlParserEntityCheck(ctxt, nbchars, ent, 0))
                                goto int_error;
                            growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
                        }
@@ -2717,7 +2824,7 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
                const xmlChar *cur = ent->name;
 
                buffer[nbchars++] = '&';
-               if (nbchars > buffer_size - i - XML_PARSER_BUFFER_SIZE) {
+               if (nbchars + i + XML_PARSER_BUFFER_SIZE > buffer_size) {
                    growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE);
                }
                for (;i > 0;i--)
@@ -2731,8 +2838,9 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
            ent = xmlParseStringPEReference(ctxt, &str);
            if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
                goto int_error;
+           xmlParserEntityCheck(ctxt, 0, ent, 0);
            if (ent != NULL)
-               ctxt->nbentities += ent->checked;
+               ctxt->nbentities += ent->checked / 2;
            if (ent != NULL) {
                 if (ent->content == NULL) {
                    xmlLoadEntityContent(ctxt, ent);
@@ -2745,9 +2853,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
                    current = rep;
                    while (*current != 0) { /* non input consuming loop */
                        buffer[nbchars++] = *current++;
-                       if (nbchars >
-                           buffer_size - XML_PARSER_BUFFER_SIZE) {
-                           if (xmlParserEntityCheck(ctxt, nbchars, ent))
+                       if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
+                           if (xmlParserEntityCheck(ctxt, nbchars, ent, 0))
                                goto int_error;
                            growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
                        }
@@ -2759,8 +2866,8 @@ xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
        } else {
            COPY_BUF(l,buffer,nbchars,c);
            str += l;
-           if (nbchars > buffer_size - XML_PARSER_BUFFER_SIZE) {
-             growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
+           if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
+               growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
            }
        }
        if (str < last)
@@ -2789,7 +2896,7 @@ int_error:
  * @end:  an end marker xmlChar, 0 if none
  * @end2:  an end marker xmlChar, 0 if none
  * @end3:  an end marker xmlChar, 0 if none
- * 
+ *
  * Takes a entity string content and process to do the adequate substitutions.
  *
  * [67] Reference ::= EntityRef | CharRef
@@ -3152,7 +3259,7 @@ xmlIsNameChar(xmlParserCtxtPtr ctxt, int c) {
     } else {
         if ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
             (c == '.') || (c == '-') ||
-           (c == '_') || (c == ':') || 
+           (c == '_') || (c == ':') ||
            (IS_COMBINING(c)) ||
            (IS_EXTENDER(c)))
            return(1);
@@ -3177,6 +3284,8 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
      * Handler for more complex cases
      */
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(NULL);
     c = CUR_CHAR(l);
     if ((ctxt->options & XML_PARSE_OLD10) == 0) {
         /*
@@ -3225,9 +3334,11 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
                ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
                ((c >= 0x10000) && (c <= 0xEFFFF))
                )) {
-           if (count++ > 100) {
+           if (count++ > XML_PARSER_CHUNK_SIZE) {
                count = 0;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
            }
            len += l;
            NEXTL(l);
@@ -3246,18 +3357,32 @@ xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
        while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
               ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
                (c == '.') || (c == '-') ||
-               (c == '_') || (c == ':') || 
+               (c == '_') || (c == ':') ||
                (IS_COMBINING(c)) ||
                (IS_EXTENDER(c)))) {
-           if (count++ > 100) {
+           if (count++ > XML_PARSER_CHUNK_SIZE) {
                count = 0;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
            }
            len += l;
            NEXTL(l);
            c = CUR_CHAR(l);
+           if (c == 0) {
+               count = 0;
+               GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
+               c = CUR_CHAR(l);
+           }
        }
     }
+    if ((len > XML_MAX_NAME_LENGTH) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
+        return(NULL);
+    }
     if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r'))
         return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len));
     return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
@@ -3307,6 +3432,11 @@ xmlParseName(xmlParserCtxtPtr ctxt) {
            in++;
        if ((*in > 0) && (*in < 0x80)) {
            count = in - ctxt->input->cur;
+            if ((count > XML_MAX_NAME_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
+                return(NULL);
+            }
            ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
            ctxt->input->cur = in;
            ctxt->nbChars += count;
@@ -3325,6 +3455,7 @@ xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) {
     int len = 0, l;
     int c;
     int count = 0;
+    const xmlChar *end; /* needed because CUR_CHAR() can move cur on \r\n */
 
 #ifdef DEBUG
     nbParseNCNameComplex++;
@@ -3334,6 +3465,7 @@ xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) {
      * Handler for more complex cases
      */
     GROW;
+    end = ctxt->input->cur;
     c = CUR_CHAR(l);
     if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
        (!xmlIsNameStartChar(ctxt, c) || (c == ':'))) {
@@ -3342,21 +3474,42 @@ xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) {
 
     while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
           (xmlIsNameChar(ctxt, c) && (c != ':'))) {
-       if (count++ > 100) {
+       if (count++ > XML_PARSER_CHUNK_SIZE) {
+            if ((len > XML_MAX_NAME_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
+                return(NULL);
+            }
            count = 0;
            GROW;
+            if (ctxt->instate == XML_PARSER_EOF)
+                return(NULL);
        }
        len += l;
        NEXTL(l);
+       end = ctxt->input->cur;
        c = CUR_CHAR(l);
+       if (c == 0) {
+           count = 0;
+           GROW;
+            if (ctxt->instate == XML_PARSER_EOF)
+                return(NULL);
+           end = ctxt->input->cur;
+           c = CUR_CHAR(l);
+       }
     }
-    return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
+    if ((len > XML_MAX_NAME_LENGTH) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
+        return(NULL);
+    }
+    return(xmlDictLookup(ctxt->dict, end - len, len));
 }
 
 /**
  * xmlParseNCName:
  * @ctxt:  an XML parser context
- * @len:  lenght of the string parsed
+ * @len:  length of the string parsed
  *
  * parse an XML name.
  *
@@ -3394,6 +3547,11 @@ xmlParseNCName(xmlParserCtxtPtr ctxt) {
            in++;
        if ((*in > 0) && (*in < 0x80)) {
            count = in - ctxt->input->cur;
+            if ((count > XML_MAX_NAME_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
+                return(NULL);
+            }
            ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
            ctxt->input->cur = in;
            ctxt->nbChars += count;
@@ -3425,6 +3583,8 @@ xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) {
     const xmlChar *ret;
 
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(NULL);
 
     in = ctxt->input->cur;
     while (*in != 0 && *in == *cmp) {
@@ -3460,7 +3620,7 @@ xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) {
  *
  * [6] Names ::= Name (#x20 Name)*
  *
- * Returns the Name parsed or NULL. The @str pointer 
+ * Returns the Name parsed or NULL. The @str pointer
  * is updated to the current location in the string.
  */
 
@@ -3504,6 +3664,13 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
            while (xmlIsNameChar(ctxt, c)) {
                if (len + 10 > max) {
                    xmlChar *tmp;
+
+                    if ((len > XML_MAX_NAME_LENGTH) &&
+                        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
+                       xmlFree(buffer);
+                        return(NULL);
+                    }
                    max *= 2;
                    tmp = (xmlChar *) xmlRealloc(buffer,
                                                    max * sizeof(xmlChar));
@@ -3523,6 +3690,11 @@ xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
            return(buffer);
        }
     }
+    if ((len > XML_MAX_NAME_LENGTH) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
+        return(NULL);
+    }
     *str = cur;
     return(xmlStrndup(buf, len));
 }
@@ -3552,16 +3724,25 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
 #endif
 
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(NULL);
     c = CUR_CHAR(l);
 
     while (xmlIsNameChar(ctxt, c)) {
-       if (count++ > 100) {
+       if (count++ > XML_PARSER_CHUNK_SIZE) {
            count = 0;
            GROW;
        }
        COPY_BUF(l,buf,len,c);
        NEXTL(l);
        c = CUR_CHAR(l);
+       if (c == 0) {
+           count = 0;
+           GROW;
+           if (ctxt->instate == XML_PARSER_EOF)
+               return(NULL);
+            c = CUR_CHAR(l);
+       }
        if (len >= XML_MAX_NAMELEN) {
            /*
             * Okay someone managed to make a huge token, so he's ready to pay
@@ -3577,13 +3758,23 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
            }
            memcpy(buffer, buf, len);
            while (xmlIsNameChar(ctxt, c)) {
-               if (count++ > 100) {
+               if (count++ > XML_PARSER_CHUNK_SIZE) {
                    count = 0;
                    GROW;
+                    if (ctxt->instate == XML_PARSER_EOF) {
+                        xmlFree(buffer);
+                        return(NULL);
+                    }
                }
                if (len + 10 > max) {
                    xmlChar *tmp;
 
+                    if ((max > XML_MAX_NAME_LENGTH) &&
+                        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken");
+                        xmlFree(buffer);
+                        return(NULL);
+                    }
                    max *= 2;
                    tmp = (xmlChar *) xmlRealloc(buffer,
                                                    max * sizeof(xmlChar));
@@ -3604,6 +3795,11 @@ xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
     }
     if (len == 0)
         return(NULL);
+    if ((len > XML_MAX_NAME_LENGTH) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken");
+        return(NULL);
+    }
     return(xmlStrndup(buf, len));
 }
 
@@ -3650,6 +3846,10 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
     ctxt->instate = XML_PARSER_ENTITY_VALUE;
     input = ctxt->input;
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF) {
+        xmlFree(buf);
+        return(NULL);
+    }
     NEXT;
     c = CUR_CHAR(l);
     /*
@@ -3657,12 +3857,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
      * When a parameter entity reference appears in a literal entity
      * value, ... a single or double quote character in the replacement
      * text is always treated as a normal data character and will not
-     * terminate the literal. 
+     * terminate the literal.
      * In practice it means we stop the loop only when back at parsing
      * the initial entity and the quote is found
      */
-    while ((IS_CHAR(c)) && ((c != stop) || /* checked */
-          (ctxt->input != input))) {
+    while (((IS_CHAR(c)) && ((c != stop) || /* checked */
+           (ctxt->input != input))) && (ctxt->instate != XML_PARSER_EOF)) {
        if (len + 5 >= size) {
            xmlChar *tmp;
 
@@ -3691,6 +3891,10 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
        }
     }
     buf[len] = 0;
+    if (ctxt->instate == XML_PARSER_EOF) {
+        xmlFree(buf);
+        return(NULL);
+    }
 
     /*
      * Raise problem w.r.t. '&' and '%' being used in non-entities
@@ -3738,12 +3942,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
         */
        ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF,
                                      0, 0, 0);
-       if (orig != NULL) 
+       if (orig != NULL)
            *orig = buf;
        else
            xmlFree(buf);
     }
-    
+
     return(ret);
 }
 
@@ -3764,8 +3968,8 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
     xmlChar limit = 0;
     xmlChar *buf = NULL;
     xmlChar *rep = NULL;
-    int len = 0;
-    int buf_size = 0;
+    size_t len = 0;
+    size_t buf_size = 0;
     int c, l, in_space = 0;
     xmlChar *current = NULL;
     xmlEntityPtr ent;
@@ -3787,15 +3991,26 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
      * allocate a translation buffer.
      */
     buf_size = XML_PARSER_BUFFER_SIZE;
-    buf = (xmlChar *) xmlMallocAtomic(buf_size * sizeof(xmlChar));
+    buf = (xmlChar *) xmlMallocAtomic(buf_size);
     if (buf == NULL) goto mem_error;
 
     /*
      * OK loop until we reach one of the ending char or a size limit.
      */
     c = CUR_CHAR(l);
-    while ((NXT(0) != limit) && /* checked */
-           (IS_CHAR(c)) && (c != '<')) {
+    while (((NXT(0) != limit) && /* checked */
+            (IS_CHAR(c)) && (c != '<')) &&
+            (ctxt->instate != XML_PARSER_EOF)) {
+        /*
+         * Impose a reasonable limit on attribute size, unless XML_PARSE_HUGE
+         * special option is given
+         */
+        if ((len > XML_MAX_TEXT_LENGTH) &&
+            ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+            xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                           "AttValue length too long\n");
+            goto mem_error;
+        }
        if (c == 0) break;
        if (c == '&') {
            in_space = 0;
@@ -3804,7 +4019,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
 
                if (val == '&') {
                    if (ctxt->replaceEntities) {
-                       if (len > buf_size - 10) {
+                       if (len + 10 > buf_size) {
                            growBuffer(buf, 10);
                        }
                        buf[len++] = '&';
@@ -3813,7 +4028,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                         * The reparsing will be done in xmlStringGetNodeList()
                         * called by the attribute() function in SAX.c
                         */
-                       if (len > buf_size - 10) {
+                       if (len + 10 > buf_size) {
                            growBuffer(buf, 10);
                        }
                        buf[len++] = '&';
@@ -3823,7 +4038,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                        buf[len++] = ';';
                    }
                } else if (val != 0) {
-                   if (len > buf_size - 10) {
+                   if (len + 10 > buf_size) {
                        growBuffer(buf, 10);
                    }
                    len += xmlCopyChar(0, &buf[len], val);
@@ -3835,7 +4050,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                    ctxt->nbentities += ent->owner;
                if ((ent != NULL) &&
                    (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
-                   if (len > buf_size - 10) {
+                   if (len + 10 > buf_size) {
                        growBuffer(buf, 10);
                    }
                    if ((ctxt->replaceEntities == 0) &&
@@ -3848,7 +4063,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                    } else {
                        buf[len++] = ent->content[0];
                    }
-               } else if ((ent != NULL) && 
+               } else if ((ent != NULL) &&
                           (ctxt->replaceEntities != 0)) {
                    if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) {
                        rep = xmlStringDecodeEntities(ctxt, ent->content,
@@ -3863,7 +4078,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                                     current++;
                                 } else
                                     buf[len++] = *current++;
-                               if (len > buf_size - 10) {
+                               if (len + 10 > buf_size) {
                                    growBuffer(buf, 10);
                                }
                            }
@@ -3871,7 +4086,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                            rep = NULL;
                        }
                    } else {
-                       if (len > buf_size - 10) {
+                       if (len + 10 > buf_size) {
                            growBuffer(buf, 10);
                        }
                        if (ent->content != NULL)
@@ -3886,10 +4101,16 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                     * entities problems
                     */
                    if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
-                       (ent->content != NULL)) {
+                       (ent->content != NULL) && (ent->checked == 0)) {
+                       unsigned long oldnbent = ctxt->nbentities;
+
                        rep = xmlStringDecodeEntities(ctxt, ent->content,
                                                  XML_SUBSTITUTE_REF, 0, 0, 0);
+
+                       ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
                        if (rep != NULL) {
+                           if (xmlStrchr(rep, '<'))
+                               ent->checked |= 1;
                            xmlFree(rep);
                            rep = NULL;
                        }
@@ -3899,7 +4120,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                     * Just output the reference
                     */
                    buf[len++] = '&';
-                   while (len > buf_size - i - 10) {
+                   while (len + i + 10 > buf_size) {
                        growBuffer(buf, i + 10);
                    }
                    for (;i > 0;i--)
@@ -3912,7 +4133,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
                if ((len != 0) || (!normalize)) {
                    if ((!normalize) || (!in_space)) {
                        COPY_BUF(l,buf,len,0x20);
-                       while (len > buf_size - 10) {
+                       while (len + 10 > buf_size) {
                            growBuffer(buf, 10);
                        }
                    }
@@ -3921,7 +4142,7 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
            } else {
                in_space = 0;
                COPY_BUF(l,buf,len,c);
-               if (len > buf_size - 10) {
+               if (len + 10 > buf_size) {
                    growBuffer(buf, 10);
                }
            }
@@ -3930,8 +4151,11 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
        GROW;
        c = CUR_CHAR(l);
     }
+    if (ctxt->instate == XML_PARSER_EOF)
+        goto error;
+
     if ((in_space) && (normalize)) {
-        while (buf[len - 1] == 0x20) len--;
+        while ((len > 0) && (buf[len - 1] == 0x20)) len--;
     }
     buf[len] = 0;
     if (RAW == '<') {
@@ -3946,11 +4170,23 @@ xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
         }
     } else
        NEXT;
-    if (attlen != NULL) *attlen = len;
+
+    /*
+     * There we potentially risk an overflow, don't allow attribute value of
+     * length more than INT_MAX it is a very reasonnable assumption !
+     */
+    if (len >= INT_MAX) {
+        xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                       "AttValue length too long\n");
+        goto mem_error;
+    }
+
+    if (attlen != NULL) *attlen = (int) len;
     return(buf);
 
 mem_error:
     xmlErrMemory(ctxt, NULL);
+error:
     if (buf != NULL)
         xmlFree(buf);
     if (rep != NULL)
@@ -3971,20 +4207,20 @@ mem_error:
  *
  * 3.3.3 Attribute-Value Normalization:
  * Before the value of an attribute is passed to the application or
- * checked for validity, the XML processor must normalize it as follows: 
+ * checked for validity, the XML processor must normalize it as follows:
  * - a character reference is processed by appending the referenced
  *   character to the attribute value
  * - an entity reference is processed by recursively processing the
- *   replacement text of the entity 
+ *   replacement text of the entity
  * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
  *   appending #x20 to the normalized value, except that only a single
  *   #x20 is appended for a "#xD#xA" sequence that is part of an external
- *   parsed entity or the literal entity value of an internal parsed entity 
- * - other characters are processed by appending them to the normalized value 
+ *   parsed entity or the literal entity value of an internal parsed entity
+ * - other characters are processed by appending them to the normalized value
  * If the declared value is not CDATA, then the XML processor must further
  * process the normalized attribute value by discarding any leading and
  * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by a single space (#x20) character.  
+ * (#x20) characters by a single space (#x20) character.
  * All attributes for which no declaration has been read should be treated
  * by a non-validating parser as if declared CDATA.
  *
@@ -4001,7 +4237,7 @@ xmlParseAttValue(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseSystemLiteral:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML Literal
  *
  * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
@@ -4030,7 +4266,7 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
        xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL);
        return(NULL);
     }
-    
+
     buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
     if (buf == NULL) {
         xmlErrMemory(ctxt, NULL);
@@ -4042,6 +4278,13 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
        if (len + 5 >= size) {
            xmlChar *tmp;
 
+            if ((size > XML_MAX_NAME_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "SystemLiteral");
+                xmlFree(buf);
+               ctxt->instate = (xmlParserInputState) state;
+                return(NULL);
+            }
            size *= 2;
            tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
            if (tmp == NULL) {
@@ -4056,6 +4299,10 @@ xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
        if (count > 50) {
            GROW;
            count = 0;
+            if (ctxt->instate == XML_PARSER_EOF) {
+               xmlFree(buf);
+               return(NULL);
+            }
        }
        COPY_BUF(l,buf,len,cur);
        NEXTL(l);
@@ -4119,6 +4366,12 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
        if (len + 1 >= size) {
            xmlChar *tmp;
 
+            if ((size > XML_MAX_NAME_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Public ID");
+                xmlFree(buf);
+                return(NULL);
+            }
            size *= 2;
            tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
            if (tmp == NULL) {
@@ -4133,6 +4386,10 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
        if (count > 50) {
            GROW;
            count = 0;
+            if (ctxt->instate == XML_PARSER_EOF) {
+               xmlFree(buf);
+               return(NULL);
+            }
        }
        NEXT;
        cur = CUR;
@@ -4203,7 +4460,7 @@ static const unsigned char test_char_data[256] = {
  * The right angle bracket (>) may be represented using the string "&gt;",
  * and must, for compatibility, be escaped using "&gt;" or a character
  * reference when it appears in the string "]]>" in content, when that
- * string is not marking the end of a CDATA section. 
+ * string is not marking the end of a CDATA section.
  *
  * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
  */
@@ -4339,6 +4596,8 @@ get_more:
            }
            SHRINK;
            GROW;
+            if (ctxt->instate == XML_PARSER_EOF)
+               return;
            in = ctxt->input->cur;
        } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09));
        nbchar = 0;
@@ -4368,7 +4627,7 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) {
     GROW;
     cur = CUR_CHAR(l);
     while ((cur != '<') && /* checked */
-           (cur != '&') && 
+           (cur != '&') &&
           (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ {
        if ((cur == ']') && (NXT(1) == ']') &&
            (NXT(2) == '>')) {
@@ -4407,6 +4666,8 @@ xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) {
        if (count > 50) {
            GROW;
            count = 0;
+            if (ctxt->instate == XML_PARSER_EOF)
+               return;
        }
        NEXTL(l);
        cur = CUR_CHAR(l);
@@ -4499,7 +4760,7 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) {
            }
        } else {
            /*
-            * We handle [83] so we return immediately, if 
+            * We handle [83] so we return immediately, if
             * "S SystemLiteral" is not detected. From a purely parsing
             * point of view that's a nice mess.
             */
@@ -4508,7 +4769,7 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) {
 
            ptr = CUR_PTR;
            if (!IS_BLANK_CH(*ptr)) return(NULL);
-           
+
            while (IS_BLANK_CH(*ptr)) ptr++; /* TODO: dangerous, fix ! */
            if ((*ptr != '\'') && (*ptr != '"')) return(NULL);
        }
@@ -4536,11 +4797,12 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) {
  * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
  */
 static void
-xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) {
+xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf,
+                       size_t len, size_t size) {
     int q, ql;
     int r, rl;
     int cur, l;
-    int count = 0;
+    size_t count = 0;
     int inputid;
 
     inputid = ctxt->input->id;
@@ -4586,16 +4848,26 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) {
        if ((r == '-') && (q == '-')) {
            xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL);
        }
+        if ((len > XML_MAX_TEXT_LENGTH) &&
+            ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+            xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
+                         "Comment too big found", NULL);
+            xmlFree (buf);
+            return;
+        }
        if (len + 5 >= size) {
            xmlChar *new_buf;
-           size *= 2;
-           new_buf = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+            size_t new_size;
+
+           new_size = size * 2;
+           new_buf = (xmlChar *) xmlRealloc(buf, new_size);
            if (new_buf == NULL) {
                xmlFree (buf);
                xmlErrMemory(ctxt, NULL);
                return;
            }
            buf = new_buf;
+            size = new_size;
        }
        COPY_BUF(ql,buf,len,q);
        q = r;
@@ -4607,6 +4879,10 @@ xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf, int len, int size) {
        if (count > 50) {
            GROW;
            count = 0;
+            if (ctxt->instate == XML_PARSER_EOF) {
+               xmlFree(buf);
+               return;
+            }
        }
        NEXTL(l);
        cur = CUR_CHAR(l);
@@ -4656,11 +4932,12 @@ not_terminated:
 void
 xmlParseComment(xmlParserCtxtPtr ctxt) {
     xmlChar *buf = NULL;
-    int size = XML_PARSER_BUFFER_SIZE;
-    int len = 0;
+    size_t size = XML_PARSER_BUFFER_SIZE;
+    size_t len = 0;
     xmlParserInputState state;
     const xmlChar *in;
-    int nbchar = 0, ccol;
+    size_t nbchar = 0;
+    int ccol;
     int inputid;
 
     /*
@@ -4740,6 +5017,13 @@ get_more:
                buf[len] = 0;
            }
        }
+        if ((len > XML_MAX_TEXT_LENGTH) &&
+            ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+            xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
+                         "Comment too big found", NULL);
+            xmlFree (buf);
+            return;
+        }
        ctxt->input->cur = in;
        if (*in == 0xA) {
            in++;
@@ -4757,6 +5041,10 @@ get_more:
        }
        SHRINK;
        GROW;
+        if (ctxt->instate == XML_PARSER_EOF) {
+            xmlFree(buf);
+            return;
+        }
        in = ctxt->input->cur;
        if (*in == '-') {
            if (in[1] == '-') {
@@ -4775,7 +5063,8 @@ get_more:
                    }
                    if (buf != NULL)
                        xmlFree(buf);
-                   ctxt->instate = state;
+                   if (ctxt->instate != XML_PARSER_EOF)
+                       ctxt->instate = state;
                    return;
                }
                if (buf != NULL) {
@@ -4803,7 +5092,7 @@ get_more:
 /**
  * xmlParsePITarget:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse the name of a PI
  *
  * [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
@@ -4840,8 +5129,8 @@ xmlParsePITarget(xmlParserCtxtPtr ctxt) {
                      NULL, NULL);
     }
     if ((name != NULL) && (xmlStrchr(name, ':') != NULL)) {
-       xmlNsErr(ctxt, XML_NS_ERR_COLON, 
-                "colon are forbidden from PI names '%s'\n", name, NULL, NULL);
+       xmlNsErr(ctxt, XML_NS_ERR_COLON,
+                "colons are forbidden from PI names '%s'\n", name, NULL, NULL);
     }
     return(name);
 }
@@ -4851,7 +5140,7 @@ xmlParsePITarget(xmlParserCtxtPtr ctxt) {
  * xmlParseCatalogPI:
  * @ctxt:  an XML parser context
  * @catalog:  the PI value string
- * 
+ *
  * parse an XML Catalog Processing Instruction.
  *
  * <?oasis-xml-catalog catalog="http://example.com/catalog.xml"?>
@@ -4911,7 +5200,7 @@ error:
 /**
  * xmlParsePI:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML Processing Instruction.
  *
  * [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
@@ -4922,8 +5211,8 @@ error:
 void
 xmlParsePI(xmlParserCtxtPtr ctxt) {
     xmlChar *buf = NULL;
-    int len = 0;
-    int size = XML_PARSER_BUFFER_SIZE;
+    size_t len = 0;
+    size_t size = XML_PARSER_BUFFER_SIZE;
     int cur, l;
     const xmlChar *target;
     xmlParserInputState state;
@@ -4980,9 +5269,8 @@ xmlParsePI(xmlParserCtxtPtr ctxt) {
                   ((cur != '?') || (NXT(1) != '>'))) {
                if (len + 5 >= size) {
                    xmlChar *tmp;
-
-                   size *= 2;
-                   tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+                    size_t new_size = size * 2;
+                   tmp = (xmlChar *) xmlRealloc(buf, new_size);
                    if (tmp == NULL) {
                        xmlErrMemory(ctxt, NULL);
                        xmlFree(buf);
@@ -4990,11 +5278,24 @@ xmlParsePI(xmlParserCtxtPtr ctxt) {
                        return;
                    }
                    buf = tmp;
+                    size = new_size;
                }
                count++;
                if (count > 50) {
                    GROW;
+                    if (ctxt->instate == XML_PARSER_EOF) {
+                        xmlFree(buf);
+                        return;
+                    }
                    count = 0;
+                    if ((len > XML_MAX_TEXT_LENGTH) &&
+                        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                        xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
+                                          "PI %s too big found", target);
+                        xmlFree(buf);
+                        ctxt->instate = state;
+                        return;
+                    }
                }
                COPY_BUF(l,buf,len,cur);
                NEXTL(l);
@@ -5005,6 +5306,14 @@ xmlParsePI(xmlParserCtxtPtr ctxt) {
                    cur = CUR_CHAR(l);
                }
            }
+            if ((len > XML_MAX_TEXT_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
+                                  "PI %s too big found", target);
+                xmlFree(buf);
+                ctxt->instate = state;
+                return;
+            }
            buf[len] = 0;
            if (cur != '?') {
                xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
@@ -5066,7 +5375,7 @@ xmlParseNotationDecl(xmlParserCtxtPtr ctxt) {
     const xmlChar *name;
     xmlChar *Pubid;
     xmlChar *Systemid;
-    
+
     if (CMP10(CUR_PTR, '<', '!', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) {
        xmlParserInputPtr input = ctxt->input;
        SHRINK;
@@ -5089,8 +5398,8 @@ xmlParseNotationDecl(xmlParserCtxtPtr ctxt) {
            return;
        }
        if (xmlStrchr(name, ':') != NULL) {
-           xmlNsErr(ctxt, XML_NS_ERR_COLON, 
-                    "colon are forbidden from notation names '%s'\n",
+           xmlNsErr(ctxt, XML_NS_ERR_COLON,
+                    "colons are forbidden from notation names '%s'\n",
                     name, NULL, NULL);
        }
        SKIP_BLANKS;
@@ -5149,7 +5458,7 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
     int isParameter = 0;
     xmlChar *orig = NULL;
     int skipped;
-    
+
     /* GROW; done in the caller */
     if (CMP8(CUR_PTR, '<', '!', 'E', 'N', 'T', 'I', 'T', 'Y')) {
        xmlParserInputPtr input = ctxt->input;
@@ -5178,8 +5487,8 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
             return;
        }
        if (xmlStrchr(name, ':') != NULL) {
-           xmlNsErr(ctxt, XML_NS_ERR_COLON, 
-                    "colon are forbidden from entities names '%s'\n",
+           xmlNsErr(ctxt, XML_NS_ERR_COLON,
+                    "colons are forbidden from entities names '%s'\n",
                     name, NULL, NULL);
        }
         skipped = SKIP_BLANKS;
@@ -5343,6 +5652,8 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
                }
            }
        }
+       if (ctxt->instate == XML_PARSER_EOF)
+           return;
        SKIP_BLANKS;
        if (RAW != '>') {
            xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_NOT_FINISHED,
@@ -5406,13 +5717,13 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
  *
  * [ VC: Fixed Attribute Default ]
  * if an attribute has a default value declared with the #FIXED
- * keyword, instances of that attribute must match the default value. 
+ * keyword, instances of that attribute must match the default value.
  *
  * [ WFC: No < in Attribute Values ]
  * handled in xmlParseAttValue()
  *
  * returns: XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED
- *          or XML_ATTRIBUTE_FIXED. 
+ *          or XML_ATTRIBUTE_FIXED.
  */
 
 int
@@ -5461,7 +5772,7 @@ xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, xmlChar **value) {
  *
  * [ VC: Notation Attributes ]
  * Values of this type must match one of the notation names included
- * in the declaration; all notation names in the declaration must be declared. 
+ * in the declaration; all notation names in the declaration must be declared.
  *
  * Returns: the notation attribute tree built while parsing
  */
@@ -5661,15 +5972,15 @@ xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
  * [ VC: Entity Name ]
  * Values of type ENTITY must match the Name production, values
  * of type ENTITIES must match Names; each Entity Name must match the
- * name of an unparsed entity declared in the DTD.  
+ * name of an unparsed entity declared in the DTD.
  *
  * [ VC: Name Token ]
  * Values of type NMTOKEN must match the Nmtoken production; values
- * of type NMTOKENS must match Nmtokens. 
+ * of type NMTOKENS must match Nmtokens.
  *
  * Returns the attribute type
  */
-int 
+int
 xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
     SHRINK;
     if (CMP5(CUR_PTR, 'C', 'D', 'A', 'T', 'A')) {
@@ -5734,7 +6045,7 @@ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
        }
        SKIP_BLANKS;
        GROW;
-       while (RAW != '>') {
+       while ((RAW != '>') && (ctxt->instate != XML_PARSER_EOF)) {
            const xmlChar *check = CUR_PTR;
            int type;
            int def;
@@ -5812,7 +6123,7 @@ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
                xmlFreeEnumeration(tree);
 
            if ((ctxt->sax2) && (defaultValue != NULL) &&
-               (def != XML_ATTRIBUTE_IMPLIED) && 
+               (def != XML_ATTRIBUTE_IMPLIED) &&
                (def != XML_ATTRIBUTE_REQUIRED)) {
                xmlAddDefAttrs(ctxt, elemName, attrName, defaultValue);
            }
@@ -5841,7 +6152,7 @@ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
  *
  * parse the declaration for a Mixed Element content
  * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
- * 
+ *
  * [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |
  *                '(' S? '#PCDATA' S? ')'
  *
@@ -5849,7 +6160,7 @@ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
  *
  * [ VC: No Duplicate Types ]
  * The same name must not appear more than once in a single
- * mixed-content declaration. 
+ * mixed-content declaration.
  *
  * returns: the list of the xmlElementContentPtr describing the element choices
  */
@@ -5883,7 +6194,7 @@ xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
            ret = cur = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_PCDATA);
            if (ret == NULL) return(NULL);
        }
-       while (RAW == '|') {
+       while ((RAW == '|') && (ctxt->instate != XML_PARSER_EOF)) {
            NEXT;
            if (elem == NULL) {
                ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR);
@@ -5949,7 +6260,7 @@ xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
  *
  * parse the declaration for a Mixed Element content
  * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
- * 
+ *
  *
  * [47] children ::= (choice | seq) ('?' | '*' | '+')?
  *
@@ -5970,7 +6281,7 @@ xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
  *     be empty, and neither the first nor last non-blank character of
  *     the replacement text should be a connector (| or ,).
  *
- * Returns the tree of xmlElementContentPtr describing the element 
+ * Returns the tree of xmlElementContentPtr describing the element
  *          hierarchy.
  */
 static xmlElementContentPtr
@@ -6027,7 +6338,7 @@ xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk,
     }
     SKIP_BLANKS;
     SHRINK;
-    while (RAW != ')') {
+    while ((RAW != ')') && (ctxt->instate != XML_PARSER_EOF)) {
         /*
         * Each loop we parse one separator and one element.
         */
@@ -6283,7 +6594,7 @@ xmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
  *
  * parse the declaration for an Element content either Mixed or Children,
  * the cases EMPTY and ANY are handled directly in xmlParseElementDecl
- * 
+ *
  * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
  *
  * returns: the type of element content XML_ELEMENT_TYPE_xxx
@@ -6306,6 +6617,8 @@ xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, const xmlChar *name,
     }
     NEXT;
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(-1);
     SKIP_BLANKS;
     if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) {
         tree = xmlParseElementMixedContentDecl(ctxt, inputid);
@@ -6409,7 +6722,7 @@ xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
                xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
     "Element declaration doesn't start and stop in the same entity\n");
            }
-               
+
            NEXT;
            if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
                (ctxt->sax->elementDecl != NULL)) {
@@ -6421,7 +6734,7 @@ xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
                    /*
                     * this is a trick: if xmlAddElementDecl is called,
                     * instead of copying the full tree it is plugged directly
-                    * if called from the parser. Avoid duplicating the 
+                    * if called from the parser. Avoid duplicating the
                     * interfaces or change the API/ABI
                     */
                    xmlFreeDocElementContent(ctxt->myDoc, content);
@@ -6438,8 +6751,8 @@ xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
  * xmlParseConditionalSections
  * @ctxt:  an XML parser context
  *
- * [61] conditionalSect ::= includeSect | ignoreSect 
- * [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' 
+ * [61] conditionalSect ::= includeSect | ignoreSect
+ * [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
  * [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
  * [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)*
  * [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)
@@ -6473,8 +6786,8 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
                    "Entering INCLUDE Conditional Section\n");
        }
 
-       while ((RAW != 0) && ((RAW != ']') || (NXT(1) != ']') ||
-              (NXT(2) != '>'))) {
+       while (((RAW != 0) && ((RAW != ']') || (NXT(1) != ']') ||
+               (NXT(2) != '>'))) && (ctxt->instate != XML_PARSER_EOF)) {
            const xmlChar *check = CUR_PTR;
            unsigned int cons = ctxt->input->consumed;
 
@@ -6542,7 +6855,8 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
        if (ctxt->recovery == 0) ctxt->disableSAX = 1;
        ctxt->instate = XML_PARSER_IGNORE;
 
-       while ((depth >= 0) && (RAW != 0)) {
+       while (((depth >= 0) && (RAW != 0)) &&
+               (ctxt->instate != XML_PARSER_EOF)) {
          if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
            depth++;
            SKIP(3);
@@ -6590,7 +6904,7 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseMarkupDecl:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse Markup declarations
  *
  * [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl |
@@ -6607,7 +6921,7 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
  * In the internal DTD subset, parameter-entity references can occur
  * only where markup declarations can occur, not within markup declarations.
  * (This does not apply to references that occur in external parameter
- * entities or to the external subset.) 
+ * entities or to the external subset.)
  */
 void
 xmlParseMarkupDecl(xmlParserCtxtPtr ctxt) {
@@ -6736,7 +7050,7 @@ xmlParseTextDecl(xmlParserCtxtPtr ctxt) {
  * @ctxt:  an XML parser context
  * @ExternalID: the external identifier
  * @SystemID: the system identifier (or URL)
- * 
+ *
  * parse Markup declarations from an external subset
  *
  * [30] extSubset ::= textDecl? extSubsetDecl
@@ -6813,7 +7127,7 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID,
            break;
        }
     }
-    
+
     if (RAW != 0) {
        xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
     }
@@ -6915,8 +7229,15 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
      * The first reference to the entity trigger a parsing phase
      * where the ent->children is filled with the result from
      * the parsing.
-     */
-    if (ent->checked == 0) {
+     * Note: external parsed entities will not be loaded, it is not
+     * required for a non-validating parser, unless the parsing option
+     * of validating, or substituting entities were given. Doing so is
+     * far more secure as the parser will only process data coming from
+     * the document entity by default.
+     */
+    if ((ent->checked == 0) &&
+        ((ent->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY) ||
+         (ctxt->options & (XML_PARSE_NOENT | XML_PARSE_DTDVALID)))) {
        unsigned long oldnbent = ctxt->nbentities;
 
        /*
@@ -6958,13 +7279,15 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
         * Store the number of entities needing parsing for this entity
         * content and do checkings
         */
-       ent->checked = ctxt->nbentities - oldnbent;
+       ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
+       if ((ent->content != NULL) && (xmlStrchr(ent->content, '<')))
+           ent->checked |= 1;
        if (ret == XML_ERR_ENTITY_LOOP) {
            xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
            xmlFreeNodeList(list);
            return;
        }
-       if (xmlParserEntityCheck(ctxt, 0, ent)) {
+       if (xmlParserEntityCheck(ctxt, 0, ent, 0)) {
            xmlFreeNodeList(list);
            return;
        }
@@ -7018,14 +7341,15 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
                   (ret != XML_WAR_UNDECLARED_ENTITY)) {
            xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
                     "Entity '%s' failed to parse\n", ent->name);
+           xmlParserEntityCheck(ctxt, 0, ent, 0);
        } else if (list != NULL) {
            xmlFreeNodeList(list);
            list = NULL;
        }
        if (ent->checked == 0)
-           ent->checked = 1;
+           ent->checked = 2;
     } else if (ent->checked != 1) {
-       ctxt->nbentities += ent->checked;
+       ctxt->nbentities += ent->checked / 2;
     }
 
     /*
@@ -7116,14 +7440,19 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
             * Seems we are generating the DOM content, do
             * a simple tree copy for all references except the first
             * In the first occurrence list contains the replacement.
-            * progressive == 2 means we are operating on the Reader
-            * and since nodes are discarded we must copy all the time.
             */
            if (((list == NULL) && (ent->owner == 0)) ||
                (ctxt->parseMode == XML_PARSE_READER)) {
                xmlNodePtr nw = NULL, cur, firstChild = NULL;
 
                /*
+                * We are copying here, make sure there is no abuse
+                */
+               ctxt->sizeentcopy += ent->length + 5;
+               if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
+                   return;
+
+               /*
                 * when operating on a reader, the entities definitions
                 * are always owning the entities subtree.
                if (ctxt->parseMode == XML_PARSE_READER)
@@ -7160,9 +7489,17 @@ xmlParseReference(xmlParserCtxtPtr ctxt) {
                if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
                  xmlAddEntityReference(ent, firstChild, nw);
 #endif /* LIBXML_LEGACY_ENABLED */
-           } else if (list == NULL) {
+           } else if ((list == NULL) || (ctxt->inputNr > 0)) {
                xmlNodePtr nw = NULL, cur, next, last,
                           firstChild = NULL;
+
+               /*
+                * We are copying here, make sure there is no abuse
+                */
+               ctxt->sizeentcopy += ent->length + 5;
+               if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
+                   return;
+
                /*
                 * Copy the entity child list and make it the new
                 * entity child list. The goal is to make sure any
@@ -7260,6 +7597,8 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
     xmlEntityPtr ent = NULL;
 
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(NULL);
 
     if (RAW != '&')
         return(NULL);
@@ -7277,7 +7616,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
     NEXT;
 
     /*
-     * Predefined entites override any extra definition
+     * Predefined entities override any extra definition
      */
     if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
         ent = xmlGetPredefinedEntity(name);
@@ -7286,7 +7625,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
     }
 
     /*
-     * Increate the number of entity references parsed
+     * Increase the number of entity references parsed
      */
     ctxt->nbentities++;
 
@@ -7297,7 +7636,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
     if (ctxt->sax != NULL) {
        if (ctxt->sax->getEntity != NULL)
            ent = ctxt->sax->getEntity(ctxt->userData, name);
-       if ((ctxt->wellFormed == 1 ) && (ent == NULL) && 
+       if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
            (ctxt->options & XML_PARSE_OLDSAX))
            ent = xmlGetPredefinedEntity(name);
        if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
@@ -7305,6 +7644,8 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
            ent = xmlSAX2GetEntity(ctxt, name);
        }
     }
+    if (ctxt->instate == XML_PARSER_EOF)
+       return(NULL);
     /*
      * [ WFC: Entity Declared ]
      * In a document without any DTD, a document with only an
@@ -7341,6 +7682,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
                ctxt->sax->reference(ctxt->userData, name);
            }
        }
+       xmlParserEntityCheck(ctxt, 0, ent, 0);
        ctxt->valid = 0;
     }
 
@@ -7368,14 +7710,16 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
      * [ WFC: No < in Attribute Values ]
      * The replacement text of any entity referred to directly or
      * indirectly in an attribute value (other than "&lt;") must
-     * not contain a <. 
+     * not contain a <.
      */
     else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
-            (ent != NULL) && (ent->content != NULL) &&
-            (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
-            (xmlStrchr(ent->content, '<'))) {
-       xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
-    "'<' in entity '%s' is not allowed in attributes values\n", name);
+            (ent != NULL) && 
+            (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY)) {
+       if (((ent->checked & 1) || (ent->checked == 0)) &&
+            (ent->content != NULL) && (xmlStrchr(ent->content, '<'))) {
+           xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
+       "'<' in entity '%s' is not allowed in attributes values\n", name);
+        }
     }
 
     /*
@@ -7397,7 +7741,7 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
     /*
      * [ WFC: No Recursion ]
      * A parsed entity must not contain a recursive reference
-     * to itself, either directly or indirectly. 
+     * to itself, either directly or indirectly.
      * Done somewhere else
      */
     return(ent);
@@ -7466,7 +7810,7 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
 
 
     /*
-     * Predefined entites override any extra definition
+     * Predefined entities override any extra definition
      */
     if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
         ent = xmlGetPredefinedEntity(name);
@@ -7495,6 +7839,10 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
            ent = xmlSAX2GetEntity(ctxt, name);
        }
     }
+    if (ctxt->instate == XML_PARSER_EOF) {
+       xmlFree(name);
+       return(NULL);
+    }
 
     /*
      * [ WFC: Entity Declared ]
@@ -7515,7 +7863,7 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
      * is not obligated to read and process their declarations;
      * for such documents, the rule that an entity must be
      * declared is a well-formedness constraint only if
-     * standalone='yes'. 
+     * standalone='yes'.
      */
     if (ent == NULL) {
        if ((ctxt->standalone == 1) ||
@@ -7528,6 +7876,7 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
                          "Entity '%s' not defined\n",
                          name);
        }
+       xmlParserEntityCheck(ctxt, 0, ent, 0);
        /* TODO ? check regressions ctxt->valid = 0; */
     }
 
@@ -7606,7 +7955,7 @@ xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
  *
  * [ WFC: No Recursion ]
  * A parsed entity must not contain a recursive
- * reference to itself, either directly or indirectly. 
+ * reference to itself, either directly or indirectly.
  *
  * [ WFC: Entity Declared ]
  * In a document without any DTD, a document with only an internal DTD
@@ -7656,8 +8005,9 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
      */
     if ((ctxt->sax != NULL) &&
        (ctxt->sax->getParameterEntity != NULL))
-       entity = ctxt->sax->getParameterEntity(ctxt->userData,
-                                              name);
+       entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return;
     if (entity == NULL) {
        /*
         * [ WFC: Entity Declared ]
@@ -7686,6 +8036,7 @@ xmlParsePEReference(xmlParserCtxtPtr ctxt)
                          name, NULL);
            ctxt->valid = 0;
        }
+       xmlParserEntityCheck(ctxt, 0, NULL, 0);
     } else {
        /*
         * Internal checking in case the entity quest barfed
@@ -7787,12 +8138,25 @@ xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
     while ((ctxt->input == input) && (ctxt->input->cur < ctxt->input->end) &&
            (IS_CHAR(c))) {
         xmlBufferAdd(buf, ctxt->input->cur, l);
-       if (count++ > 100) {
+       if (count++ > XML_PARSER_CHUNK_SIZE) {
            count = 0;
            GROW;
+            if (ctxt->instate == XML_PARSER_EOF) {
+                xmlBufferFree(buf);
+                return(-1);
+            }
        }
        NEXTL(l);
        c = CUR_CHAR(l);
+       if (c == 0) {
+           count = 0;
+           GROW;
+            if (ctxt->instate == XML_PARSER_EOF) {
+                xmlBufferFree(buf);
+                return(-1);
+            }
+           c = CUR_CHAR(l);
+       }
     }
 
     if ((ctxt->input == input) && (ctxt->input->cur >= ctxt->input->end)) {
@@ -7881,8 +8245,11 @@ xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
      */
     if ((ctxt->sax != NULL) &&
        (ctxt->sax->getParameterEntity != NULL))
-       entity = ctxt->sax->getParameterEntity(ctxt->userData,
-                                              name);
+       entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
+    if (ctxt->instate == XML_PARSER_EOF) {
+       xmlFree(name);
+       return(NULL);
+    }
     if (entity == NULL) {
        /*
         * [ WFC: Entity Declared ]
@@ -7909,6 +8276,7 @@ xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
                          name, NULL);
            ctxt->valid = 0;
        }
+       xmlParserEntityCheck(ctxt, 0, NULL, 0);
     } else {
        /*
         * Internal checking in case the entity quest barfed
@@ -7932,12 +8300,12 @@ xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
  *
  * parse a DOCTYPE declaration
  *
- * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? 
+ * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
  *                      ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
  *
  * [ VC: Root Element Type ]
  * The Name in the document type declaration must match the element
- * type of the root element. 
+ * type of the root element.
  */
 
 void
@@ -7984,6 +8352,8 @@ xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) {
     if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) &&
        (!ctxt->disableSAX))
        ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return;
 
     /*
      * Is there any internal subset declarations ?
@@ -8019,11 +8389,11 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
         ctxt->instate = XML_PARSER_DTD;
         NEXT;
        /*
-        * Parse the succession of Markup declarations and 
+        * Parse the succession of Markup declarations and
         * PEReferences.
         * Subsequence (markupdecl | PEReference | S)*
         */
-       while (RAW != ']') {
+       while ((RAW != ']') && (ctxt->instate != XML_PARSER_EOF)) {
            const xmlChar *check = CUR_PTR;
            unsigned int cons = ctxt->input->consumed;
 
@@ -8043,7 +8413,7 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
                break;
            }
        }
-       if (RAW == ']') { 
+       if (RAW == ']') {
            NEXT;
            SKIP_BLANKS;
        }
@@ -8074,8 +8444,8 @@ xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
  *
  * [ WFC: No < in Attribute Values ]
  * The replacement text of any entity referred to directly or indirectly in
- * an attribute value (other than "&lt;") must not contain a <. 
- * 
+ * an attribute value (other than "&lt;") must not contain a <.
+ *
  * [ VC: Attribute Value Type ]
  * The attribute must have been declared; the value must be of the type
  * declared for it.
@@ -8156,7 +8526,7 @@ xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) {
 /**
  * xmlParseStartTag:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse a start of tag either for rule element or
  * EmptyElement. In both case we don't parse the tag closing chars.
  *
@@ -8164,13 +8534,13 @@ xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) {
  *
  * [ WFC: Unique Att Spec ]
  * No attribute name may appear more than once in the same start-tag or
- * empty-element tag. 
+ * empty-element tag.
  *
  * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
  *
  * [ WFC: Unique Att Spec ]
  * No attribute name may appear more than once in the same start-tag or
- * empty-element tag. 
+ * empty-element tag.
  *
  * With namespace:
  *
@@ -8209,9 +8579,9 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) {
     SKIP_BLANKS;
     GROW;
 
-    while ((RAW != '>') && 
+    while (((RAW != '>') &&
           ((RAW != '/') || (NXT(1) != '>')) &&
-          (IS_BYTE_CHAR(RAW))) {
+          (IS_BYTE_CHAR(RAW))) && (ctxt->instate != XML_PARSER_EOF)) {
        const xmlChar *q = CUR_PTR;
        unsigned int cons = ctxt->input->consumed;
 
@@ -8220,7 +8590,7 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) {
            /*
             * [ WFC: Unique Att Spec ]
             * No attribute name may appear more than once in the same
-            * start-tag or empty-element tag. 
+            * start-tag or empty-element tag.
             */
            for (i = 0; i < nbatts;i += 2) {
                if (xmlStrEqual(atts[i], attname)) {
@@ -8269,7 +8639,7 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) {
                xmlFree(attvalue);
        }
 
-failed:     
+failed:
 
        GROW
        if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
@@ -8351,7 +8721,7 @@ xmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) {
     /*
      * [ WFC: Element Type Match ]
      * The Name in an element's end-tag must match the element type in the
-     * start-tag. 
+     * start-tag.
      *
      */
     if (name != (xmlChar*)1) {
@@ -8447,7 +8817,7 @@ xmlParseQName(xmlParserCtxtPtr ctxt, const xmlChar **prefix) {
         if (CUR == ':') {
            l = xmlParseName(ctxt);
            if (l != NULL) {
-               xmlNsErr(ctxt, XML_NS_ERR_QNAME, 
+               xmlNsErr(ctxt, XML_NS_ERR_QNAME,
                         "Failed to parse QName '%s'\n", l, NULL, NULL);
                *prefix = NULL;
                return(l);
@@ -8530,7 +8900,7 @@ xmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name,
 
     cmp = prefix;
     while (*in != 0 && *in == *cmp) {
-       ++in;
+       ++in;
        ++cmp;
     }
     if ((*cmp == 0) && (*in == ':')) {
@@ -8568,20 +8938,20 @@ xmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name,
  *
  * 3.3.3 Attribute-Value Normalization:
  * Before the value of an attribute is passed to the application or
- * checked for validity, the XML processor must normalize it as follows: 
+ * checked for validity, the XML processor must normalize it as follows:
  * - a character reference is processed by appending the referenced
  *   character to the attribute value
  * - an entity reference is processed by recursively processing the
- *   replacement text of the entity 
+ *   replacement text of the entity
  * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
  *   appending #x20 to the normalized value, except that only a single
  *   #x20 is appended for a "#xD#xA" sequence that is part of an external
- *   parsed entity or the literal entity value of an internal parsed entity 
- * - other characters are processed by appending them to the normalized value 
+ *   parsed entity or the literal entity value of an internal parsed entity
+ * - other characters are processed by appending them to the normalized value
  * If the declared value is not CDATA, then the XML processor must further
  * process the normalized attribute value by discarding any leading and
  * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by a single space (#x20) character.  
+ * (#x20) characters by a single space (#x20) character.
  * All attributes for which no declaration has been read should be treated
  * by a non-validating parser as if declared CDATA.
  *
@@ -8596,9 +8966,12 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
     xmlChar limit = 0;
     const xmlChar *in = NULL, *start, *end, *last;
     xmlChar *ret = NULL;
+    int line, col;
 
     GROW;
     in = (xmlChar *) CUR_PTR;
+    line = ctxt->input->line;
+    col = ctxt->input->col;
     if (*in != '"' && *in != '\'') {
         xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL);
         return (NULL);
@@ -8611,6 +8984,7 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
      * pure ASCII.
      */
     limit = *in++;
+    col++;
     end = ctxt->input->end;
     start = in;
     if (in >= end) {
@@ -8627,34 +9001,56 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
         /*
         * Skip any leading spaces
         */
-       while ((in < end) && (*in != limit) && 
+       while ((in < end) && (*in != limit) &&
               ((*in == 0x20) || (*in == 0x9) ||
                (*in == 0xA) || (*in == 0xD))) {
+           if (*in == 0xA) {
+               line++; col = 1;
+           } else {
+               col++;
+           }
            in++;
            start = in;
            if (in >= end) {
                const xmlChar *oldbase = ctxt->input->base;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
                if (oldbase != ctxt->input->base) {
                    long delta = ctxt->input->base - oldbase;
                    start = start + delta;
                    in = in + delta;
                }
                end = ctxt->input->end;
+                if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+                    ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                    xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                                   "AttValue length too long\n");
+                    return(NULL);
+                }
            }
        }
        while ((in < end) && (*in != limit) && (*in >= 0x20) &&
               (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
+           col++;
            if ((*in++ == 0x20) && (*in == 0x20)) break;
            if (in >= end) {
                const xmlChar *oldbase = ctxt->input->base;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
                if (oldbase != ctxt->input->base) {
                    long delta = ctxt->input->base - oldbase;
                    start = start + delta;
                    in = in + delta;
                }
                end = ctxt->input->end;
+                if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+                    ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                    xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                                   "AttValue length too long\n");
+                    return(NULL);
+                }
            }
        }
        last = in;
@@ -8662,13 +9058,20 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
         * skip the trailing blanks
         */
        while ((last[-1] == 0x20) && (last > start)) last--;
-       while ((in < end) && (*in != limit) && 
+       while ((in < end) && (*in != limit) &&
               ((*in == 0x20) || (*in == 0x9) ||
                (*in == 0xA) || (*in == 0xD))) {
+           if (*in == 0xA) {
+               line++, col = 1;
+           } else {
+               col++;
+           }
            in++;
            if (in >= end) {
                const xmlChar *oldbase = ctxt->input->base;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
                if (oldbase != ctxt->input->base) {
                    long delta = ctxt->input->base - oldbase;
                    start = start + delta;
@@ -8676,28 +9079,56 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
                    last = last + delta;
                }
                end = ctxt->input->end;
-           }
-       }
+                if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+                    ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                    xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                                   "AttValue length too long\n");
+                    return(NULL);
+                }
+           }
+       }
+        if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+            ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+            xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                           "AttValue length too long\n");
+            return(NULL);
+        }
        if (*in != limit) goto need_complex;
     } else {
        while ((in < end) && (*in != limit) && (*in >= 0x20) &&
               (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
            in++;
+           col++;
            if (in >= end) {
                const xmlChar *oldbase = ctxt->input->base;
                GROW;
+                if (ctxt->instate == XML_PARSER_EOF)
+                    return(NULL);
                if (oldbase != ctxt->input->base) {
                    long delta = ctxt->input->base - oldbase;
                    start = start + delta;
                    in = in + delta;
                }
                end = ctxt->input->end;
+                if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+                    ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                    xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                                   "AttValue length too long\n");
+                    return(NULL);
+                }
            }
        }
        last = in;
+        if (((in - start) > XML_MAX_TEXT_LENGTH) &&
+            ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+            xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
+                           "AttValue length too long\n");
+            return(NULL);
+        }
        if (*in != limit) goto need_complex;
     }
     in++;
+    col++;
     if (len != NULL) {
         *len = last - start;
         ret = (xmlChar *) start;
@@ -8706,6 +9137,8 @@ xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
         ret = xmlStrndup(start, last - start);
     }
     CUR_PTR = in;
+    ctxt->input->line = line;
+    ctxt->input->col = col;
     if (alloc) *alloc = 0;
     return ret;
 need_complex:
@@ -8833,7 +9266,7 @@ xmlParseAttribute2(xmlParserCtxtPtr ctxt,
 /**
  * xmlParseStartTag2:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse a start of tag either for rule element or
  * EmptyElement. In both case we don't parse the tag closing chars.
  * This routine is called when running SAX2 parsing
@@ -8842,13 +9275,13 @@ xmlParseAttribute2(xmlParserCtxtPtr ctxt,
  *
  * [ WFC: Unique Att Spec ]
  * No attribute name may appear more than once in the same start-tag or
- * empty-element tag. 
+ * empty-element tag.
  *
  * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
  *
  * [ WFC: Unique Att Spec ]
  * No attribute name may appear more than once in the same start-tag or
- * empty-element tag. 
+ * empty-element tag.
  *
  * With namespace:
  *
@@ -8917,9 +9350,9 @@ reparse:
     GROW;
     if (ctxt->input->base != base) goto base_changed;
 
-    while ((RAW != '>') && 
+    while (((RAW != '>') &&
           ((RAW != '/') || (NXT(1) != '>')) &&
-          (IS_BYTE_CHAR(RAW))) {
+          (IS_BYTE_CHAR(RAW))) && (ctxt->instate != XML_PARSER_EOF)) {
        const xmlChar *q = CUR_PTR;
        unsigned int cons = ctxt->input->consumed;
        int len = -1, alloc = 0;
@@ -8938,6 +9371,12 @@ reparse:
                const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len);
                xmlURIPtr uri;
 
+                if (URL == NULL) {
+                   xmlErrMemory(ctxt, "dictionary allocation failure");
+                   if ((attvalue != NULL) && (alloc != 0))
+                       xmlFree(attvalue);
+                   return(NULL);
+               }
                 if (*URL != 0) {
                    uri = xmlParseURI((const char *) URL);
                    if (uri == NULL) {
@@ -8981,6 +9420,13 @@ reparse:
                    if (nsPush(ctxt, NULL, URL) > 0) nbNs++;
 skip_default_ns:
                if (alloc != 0) xmlFree(attvalue);
+               if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
+                   break;
+               if (!IS_BLANK_CH(RAW)) {
+                   xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+                                  "attributes construct error\n");
+                   break;
+               }
                SKIP_BLANKS;
                continue;
            }
@@ -9054,6 +9500,13 @@ skip_default_ns:
                    if (nsPush(ctxt, attname, URL) > 0) nbNs++;
 skip_ns:
                if (alloc != 0) xmlFree(attvalue);
+               if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
+                   break;
+               if (!IS_BLANK_CH(RAW)) {
+                   xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
+                                  "attributes construct error\n");
+                   break;
+               }
                SKIP_BLANKS;
                if (ctxt->input->base != base) goto base_changed;
                continue;
@@ -9090,6 +9543,8 @@ skip_ns:
 failed:
 
        GROW
+        if (ctxt->instate == XML_PARSER_EOF)
+            break;
        if (ctxt->input->base != base) goto base_changed;
        if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
            break;
@@ -9181,7 +9636,7 @@ failed:
                    atts[nbatts++] = defaults->values[5 * i + 3];
                    if ((ctxt->standalone == 1) &&
                        (defaults->values[5 * i + 4] != NULL)) {
-                       xmlValidityError(ctxt, XML_DTD_STANDALONE_DEFAULTED, 
+                       xmlValidityError(ctxt, XML_DTD_STANDALONE_DEFAULTED,
          "standalone: attribute %s on %s defaulted from external subset\n",
                                         attname, localname);
                    }
@@ -9211,7 +9666,7 @@ failed:
        /*
         * [ WFC: Unique Att Spec ]
         * No attribute name may appear more than once in the same
-        * start-tag or empty-element tag. 
+        * start-tag or empty-element tag.
         * As extended by the Namespace in XML REC.
         */
         for (j = 0; j < i;j += 5) {
@@ -9312,9 +9767,11 @@ xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
     if ((tlen > 0) && (xmlStrncmp(ctxt->input->cur, ctxt->name, tlen) == 0)) {
         if (ctxt->input->cur[tlen] == '>') {
            ctxt->input->cur += tlen + 1;
+           ctxt->input->col += tlen + 1;
            goto done;
        }
        ctxt->input->cur += tlen;
+       ctxt->input->col += tlen;
        name = (xmlChar*)1;
     } else {
        if (prefix == NULL)
@@ -9327,6 +9784,8 @@ xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
      * We should definitely be at the ending "S? '>'" part
      */
     GROW;
+    if (ctxt->instate == XML_PARSER_EOF)
+        return;
     SKIP_BLANKS;
     if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) {
        xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
@@ -9336,7 +9795,7 @@ xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
     /*
      * [ WFC: Element Type Match ]
      * The Name in an element's end-tag must match the element type in the
-     * start-tag. 
+     * start-tag.
      *
      */
     if (name != (xmlChar*)1) {
@@ -9365,7 +9824,7 @@ done:
 /**
  * xmlParseCDSect:
  * @ctxt:  an XML parser context
- * 
+ *
  * Parse escaped pure raw content.
  *
  * [18] CDSect ::= CDStart CData CDEnd
@@ -9418,14 +9877,21 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) {
        if (len + 5 >= size) {
            xmlChar *tmp;
 
-           size *= 2;
-           tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
+            if ((size > XML_MAX_TEXT_LENGTH) &&
+                ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+                xmlFatalErrMsgStr(ctxt, XML_ERR_CDATA_NOT_FINISHED,
+                             "CData section too big found", NULL);
+                xmlFree (buf);
+                return;
+            }
+           tmp = (xmlChar *) xmlRealloc(buf, size * 2 * sizeof(xmlChar));
            if (tmp == NULL) {
                xmlFree(buf);
                xmlErrMemory(ctxt, NULL);
                return;
            }
            buf = tmp;
+           size *= 2;
        }
        COPY_BUF(rl,buf,len,r);
        r = s;
@@ -9435,6 +9901,10 @@ xmlParseCDSect(xmlParserCtxtPtr ctxt) {
        count++;
        if (count > 50) {
            GROW;
+            if (ctxt->instate == XML_PARSER_EOF) {
+               xmlFree(buf);
+               return;
+            }
            count = 0;
        }
        NEXTL(l);
@@ -9514,7 +9984,7 @@ xmlParseContent(xmlParserCtxtPtr ctxt) {
 
        /*
         * Fifth case : a reference. If if has not been resolved,
-        *    parsing returns it's Name, create the node 
+        *    parsing returns it's Name, create the node
         */
 
        else if (*cur == '&') {
@@ -9555,7 +10025,7 @@ xmlParseContent(xmlParserCtxtPtr ctxt) {
  *
  * [ WFC: Element Type Match ]
  * The Name in an element's end-tag must match the element type in the
- * start-tag. 
+ * start-tag.
  *
  */
 
@@ -9614,7 +10084,7 @@ xmlParseElement(xmlParserCtxtPtr ctxt) {
     /*
      * [ VC: Root Element Type ]
      * The Name in the document type declaration must match the element
-     * type of the root element. 
+     * type of the root element.
      */
     if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
         ctxt->node && (ctxt->node == ctxt->myDoc->children))
@@ -9683,6 +10153,8 @@ xmlParseElement(xmlParserCtxtPtr ctxt) {
      * Parse the content of the element:
      */
     xmlParseContent(ctxt);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return;
     if (!IS_BYTE_CHAR(RAW)) {
         xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NOT_FINISHED,
         "Premature end of data in tag %s line %d\n",
@@ -9895,7 +10367,7 @@ xmlParseEncName(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseEncodingDecl:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse the XML encoding declaration
  *
  * [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' |  "'" EncName "'")
@@ -9940,8 +10412,10 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
         /*
          * Non standard parsing, allowing the user to ignore encoding
          */
-        if (ctxt->options & XML_PARSE_IGNORE_ENC)
-            return(encoding);
+        if (ctxt->options & XML_PARSE_IGNORE_ENC) {
+           xmlFree((xmlChar *) encoding);
+            return(NULL);
+       }
 
        /*
         * UTF-16 encoding stwich has already taken place at this stage,
@@ -9952,7 +10426,7 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
             (!xmlStrcasecmp(encoding, BAD_CAST "UTF16")))) {
            /*
             * If no encoding was passed to the parser, that we are
-            * using UTF-16 and no decoder is present i.e. the 
+            * using UTF-16 and no decoder is present i.e. the
             * document is apparently UTF-8 compatible, then raise an
             * encoding mismatch fatal error
             */
@@ -10003,7 +10477,7 @@ xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
  * parse the XML standalone declaration
  *
  * [32] SDDecl ::= S 'standalone' Eq
- *                 (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"')) 
+ *                 (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"'))
  *
  * [ VC: Standalone Document Declaration ]
  * TODO The standalone document declaration must have the value "no"
@@ -10083,7 +10557,7 @@ xmlParseSDDecl(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseXMLDecl:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML declaration header
  *
  * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
@@ -10197,7 +10671,7 @@ xmlParseXMLDecl(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseMisc:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML Misc* optional field.
  *
  * [27] Misc ::= Comment | PI |  S
@@ -10205,9 +10679,10 @@ xmlParseXMLDecl(xmlParserCtxtPtr ctxt) {
 
 void
 xmlParseMisc(xmlParserCtxtPtr ctxt) {
-    while (((RAW == '<') && (NXT(1) == '?')) ||
-           (CMP4(CUR_PTR, '<', '!', '-', '-')) ||
-           IS_BLANK_CH(CUR)) {
+    while ((ctxt->instate != XML_PARSER_EOF) &&
+           (((RAW == '<') && (NXT(1) == '?')) ||
+            (CMP4(CUR_PTR, '<', '!', '-', '-')) ||
+            IS_BLANK_CH(CUR))) {
         if ((RAW == '<') && (NXT(1) == '?')) {
            xmlParsePI(ctxt);
        } else if (IS_BLANK_CH(CUR)) {
@@ -10220,7 +10695,7 @@ xmlParseMisc(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseDocument:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse an XML document (and build a tree if using the standard SAX
  * interface).
  *
@@ -10254,10 +10729,12 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
      */
     if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
         ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return(-1);
 
     if ((ctxt->encoding == NULL) &&
         ((ctxt->input->end - ctxt->input->cur) >= 4)) {
-       /* 
+       /*
         * Get the 4 first bytes and decode the charset
         * if enc != XML_CHAR_ENCODING_NONE
         * plug some encoding conversion routines.
@@ -10305,6 +10782,12 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
     }
     if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
         ctxt->sax->startDocument(ctxt->userData);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return(-1);
+    if ((ctxt->myDoc != NULL) && (ctxt->input != NULL) &&
+        (ctxt->input->buf != NULL) && (ctxt->input->buf->compressed >= 0)) {
+       ctxt->myDoc->compression = ctxt->input->buf->compressed;
+    }
 
     /*
      * The Misc part of the Prolog
@@ -10324,6 +10807,8 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
        if (RAW == '[') {
            ctxt->instate = XML_PARSER_DTD;
            xmlParseInternalSubset(ctxt);
+           if (ctxt->instate == XML_PARSER_EOF)
+               return(-1);
        }
 
        /*
@@ -10334,6 +10819,8 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
            (!ctxt->disableSAX))
            ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName,
                                      ctxt->extSubSystem, ctxt->extSubURI);
+       if (ctxt->instate == XML_PARSER_EOF)
+           return(-1);
        ctxt->inSubset = 0;
 
         xmlCleanSpecialAttr(ctxt);
@@ -10400,7 +10887,7 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) {
 /**
  * xmlParseExtParsedEnt:
  * @ctxt:  an XML parser context
- * 
+ *
  * parse a general parsed entity
  * An external general parsed entity is well-formed if it matches the
  * production labeled extParsedEnt.
@@ -10431,7 +10918,7 @@ xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
     if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
         ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
 
-    /* 
+    /*
      * Get the 4 first bytes and decode the charset
      * if enc != XML_CHAR_ENCODING_NONE
      * plug some encoding conversion routines.
@@ -10474,6 +10961,8 @@ xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
     }
     if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
         ctxt->sax->startDocument(ctxt->userData);
+    if (ctxt->instate == XML_PARSER_EOF)
+       return(-1);
 
     /*
      * Doing validity checking on chunk doesn't make sense
@@ -10484,7 +10973,9 @@ xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
     ctxt->depth = 0;
 
     xmlParseContent(ctxt);
-   
+    if (ctxt->instate == XML_PARSER_EOF)
+       return(-1);
+
     if ((RAW == '<') && (NXT(1) == '/')) {
        xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
     } else if (RAW != 0) {
@@ -10504,7 +10995,7 @@ xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
 #ifdef LIBXML_PUSH_ENABLED
 /************************************************************************
  *                                                                     *
- *             Progressive parsing interfaces                          *
+ *             Progressive parsing interfaces                          *
  *                                                                     *
  ************************************************************************/
 
@@ -10541,8 +11032,8 @@ xmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first,
        buf = in->base;
        len = in->length;
     } else {
-       buf = in->buf->buffer->content;
-       len = in->buf->buffer->use;
+       buf = xmlBufContent(in->buf->buffer);
+       len = xmlBufUse(in->buf->buffer);
     }
     /* take into account the sequence length */
     if (third) len -= 2;
@@ -10565,7 +11056,7 @@ xmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first,
                xmlGenericError(xmlGenericErrorContext,
                        "PP: lookup '%c%c' found at %d\n",
                        first, next, base);
-           else 
+           else
                xmlGenericError(xmlGenericErrorContext,
                        "PP: lookup '%c%c%c' found at %d\n",
                        first, next, third, base);
@@ -10581,7 +11072,7 @@ xmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first,
     else if (third == 0)
        xmlGenericError(xmlGenericErrorContext,
                "PP: lookup '%c%c' failed\n", first, next);
-    else       
+    else
        xmlGenericError(xmlGenericErrorContext,
                "PP: lookup '%c%c%c' failed\n", first, next, third);
 #endif
@@ -10663,7 +11154,7 @@ xmlCheckCdataPush(const xmlChar *utf, int len) {
 
     if ((utf == NULL) || (len <= 0))
         return(0);
-    
+
     for (ix = 0; ix < len;) {      /* string is 0-terminated */
         c = utf[ix];
         if ((c & 0x80) == 0x00) {      /* 1-byte code, starts with 10 */
@@ -10791,11 +11282,11 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
     }
     xmlParseGetLasts(ctxt, &lastlt, &lastgt);
 
-    while (1) {
+    while (ctxt->instate != XML_PARSER_EOF) {
        if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
            return(0);
 
-        
+
        /*
         * Pop-up of finished entities.
         */
@@ -10810,22 +11301,22 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
            /*
             * If we are operating on converted input, try to flush
             * remainng chars to avoid them stalling in the non-converted
-            * buffer.
+            * buffer. But do not do this in document start where
+            * encoding="..." may not have been read and we work on a
+            * guessed encoding.
             */
-           if ((ctxt->input->buf->raw != NULL) &&
-               (ctxt->input->buf->raw->use > 0)) {
-               int base = ctxt->input->base -
-                          ctxt->input->buf->buffer->content;
-               int current = ctxt->input->cur - ctxt->input->base;
+           if ((ctxt->instate != XML_PARSER_START) &&
+               (ctxt->input->buf->raw != NULL) &&
+               (xmlBufIsEmpty(ctxt->input->buf->raw) == 0)) {
+                size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer,
+                                                 ctxt->input);
+               size_t current = ctxt->input->cur - ctxt->input->base;
 
                xmlParserInputBufferPush(ctxt->input->buf, 0, "");
-               ctxt->input->base = ctxt->input->buf->buffer->content + base;
-               ctxt->input->cur = ctxt->input->base + current;
-               ctxt->input->end =
-                   &ctxt->input->buf->buffer->content[
-                                      ctxt->input->buf->buffer->use];
+                xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input,
+                                      base, current);
            }
-           avail = ctxt->input->buf->buffer->use -
+           avail = xmlBufUse(ctxt->input->buf->buffer) -
                    (ctxt->input->cur - ctxt->input->base);
        }
         if (avail < 1)
@@ -10847,7 +11338,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    if (avail < 4)
                        goto done;
 
-                   /* 
+                   /*
                     * Get the 4 first bytes and decode the charset
                     * if enc != XML_CHAR_ENCODING_NONE
                     * plug some encoding conversion routines,
@@ -11002,7 +11493,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                /*
                 * [ VC: Root Element Type ]
                 * The Name in the document type declaration must match
-                * the element type of the root element. 
+                * the element type of the root element.
                 */
                if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
                    ctxt->node && (ctxt->node == ctxt->myDoc->children))
@@ -11031,12 +11522,15 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                            ctxt->sax->endElement(ctxt->userData, name);
 #endif /* LIBXML_SAX1_ENABLED */
                    }
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    spacePop(ctxt);
                    if (ctxt->nameNr == 0) {
                        ctxt->instate = XML_PARSER_EPILOG;
                    } else {
                        ctxt->instate = XML_PARSER_CONTENT;
                    }
+                    ctxt->progressive = 1;
                    break;
                }
                if (RAW == '>') {
@@ -11056,6 +11550,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
 #endif /* LIBXML_SAX1_ENABLED */
 
                ctxt->instate = XML_PARSER_CONTENT;
+                ctxt->progressive = 1;
                 break;
            }
             case XML_PARSER_CONTENT: {
@@ -11073,9 +11568,13 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    break;
                } else if ((cur == '<') && (next == '?')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
+                        ctxt->progressive = XML_PARSER_PI;
                        goto done;
+                    }
                    xmlParsePI(ctxt);
+                   ctxt->instate = XML_PARSER_CONTENT;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (next != '!')) {
                    ctxt->instate = XML_PARSER_START_TAG;
                    break;
@@ -11089,10 +11588,13 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    ctxt->input->cur += 4;
                    term = xmlParseLookupSequence(ctxt, '-', '-', '>');
                    ctxt->input->cur -= 4;
-                   if ((!terminate) && (term < 0))
+                   if ((!terminate) && (term < 0)) {
+                        ctxt->progressive = XML_PARSER_COMMENT;
                        goto done;
+                    }
                    xmlParseComment(ctxt);
                    ctxt->instate = XML_PARSER_CONTENT;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (ctxt->input->cur[1] == '!') &&
                    (ctxt->input->cur[2] == '[') &&
                    (ctxt->input->cur[3] == 'C') &&
@@ -11187,7 +11689,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                break;
             case XML_PARSER_CDATA_SECTION: {
                /*
-                * The Push mode need to have the SAX callback for 
+                * The Push mode need to have the SAX callback for
                 * cdataBlock merge back contiguous callbacks.
                 */
                int base;
@@ -11197,7 +11699,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    if (avail >= XML_PARSER_BIG_BUFFER_SIZE + 2) {
                        int tmp;
 
-                       tmp = xmlCheckCdataPush(ctxt->input->cur, 
+                       tmp = xmlCheckCdataPush(ctxt->input->cur,
                                                XML_PARSER_BIG_BUFFER_SIZE);
                        if (tmp < 0) {
                            tmp = -tmp;
@@ -11212,6 +11714,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                                ctxt->sax->characters(ctxt->userData,
                                                      ctxt->input->cur, tmp);
                        }
+                       if (ctxt->instate == XML_PARSER_EOF)
+                           goto done;
                        SKIPL(tmp);
                        ctxt->checkIndex = 0;
                    }
@@ -11247,6 +11751,8 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                            ctxt->sax->characters(ctxt->userData,
                                                  ctxt->input->cur, base);
                    }
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    SKIPL(base + 3);
                    ctxt->checkIndex = 0;
                    ctxt->instate = XML_PARSER_CONTENT;
@@ -11263,7 +11769,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    avail = ctxt->input->length -
                            (ctxt->input->cur - ctxt->input->base);
                else
-                   avail = ctxt->input->buf->buffer->use -
+                   avail = xmlBufUse(ctxt->input->buf->buffer) -
                            (ctxt->input->cur - ctxt->input->base);
                if (avail < 2)
                    goto done;
@@ -11271,26 +11777,37 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                next = ctxt->input->cur[1];
                if ((cur == '<') && (next == '?')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
+                        ctxt->progressive = XML_PARSER_PI;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing PI\n");
 #endif
                    xmlParsePI(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
+                   ctxt->instate = XML_PARSER_MISC;
+                    ctxt->progressive = 1;
                    ctxt->checkIndex = 0;
                } else if ((cur == '<') && (next == '!') &&
                    (ctxt->input->cur[2] == '-') &&
                    (ctxt->input->cur[3] == '-')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
+                        ctxt->progressive = XML_PARSER_COMMENT;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing Comment\n");
 #endif
                    xmlParseComment(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    ctxt->instate = XML_PARSER_MISC;
+                    ctxt->progressive = 1;
                    ctxt->checkIndex = 0;
                } else if ((cur == '<') && (next == '!') &&
                    (ctxt->input->cur[2] == 'D') &&
@@ -11301,14 +11818,20 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    (ctxt->input->cur[7] == 'P') &&
                    (ctxt->input->cur[8] == 'E')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0))
+                       (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0)) {
+                        ctxt->progressive = XML_PARSER_DTD;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing internal subset\n");
 #endif
                    ctxt->inSubset = 1;
+                    ctxt->progressive = 0;
+                   ctxt->checkIndex = 0;
                    xmlParseDocTypeDecl(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    if (RAW == '[') {
                        ctxt->instate = XML_PARSER_DTD;
 #ifdef DEBUG_PUSH
@@ -11338,7 +11861,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                    goto done;
                } else {
                    ctxt->instate = XML_PARSER_START_TAG;
-                   ctxt->progressive = 1;
+                   ctxt->progressive = XML_PARSER_START_TAG;
                    xmlParseGetLasts(ctxt, &lastlt, &lastgt);
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
@@ -11351,38 +11874,50 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                if (ctxt->input->buf == NULL)
                    avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
                else
-                   avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base);
-               if (avail < 2) 
+                   avail = xmlBufUse(ctxt->input->buf->buffer) -
+                            (ctxt->input->cur - ctxt->input->base);
+               if (avail < 2)
                    goto done;
                cur = ctxt->input->cur[0];
                next = ctxt->input->cur[1];
                if ((cur == '<') && (next == '?')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
+                        ctxt->progressive = XML_PARSER_PI;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing PI\n");
 #endif
                    xmlParsePI(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
+                   ctxt->instate = XML_PARSER_PROLOG;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (next == '!') &&
                    (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
+                        ctxt->progressive = XML_PARSER_COMMENT;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing Comment\n");
 #endif
                    xmlParseComment(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    ctxt->instate = XML_PARSER_PROLOG;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (next == '!') &&
                           (avail < 4)) {
                    goto done;
                } else {
                    ctxt->instate = XML_PARSER_START_TAG;
                    if (ctxt->progressive == 0)
-                       ctxt->progressive = 1;
+                       ctxt->progressive = XML_PARSER_START_TAG;
                    xmlParseGetLasts(ctxt, &lastlt, &lastgt);
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
@@ -11395,32 +11930,43 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                if (ctxt->input->buf == NULL)
                    avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
                else
-                   avail = ctxt->input->buf->buffer->use - (ctxt->input->cur - ctxt->input->base);
+                   avail = xmlBufUse(ctxt->input->buf->buffer) -
+                            (ctxt->input->cur - ctxt->input->base);
                if (avail < 2)
                    goto done;
                cur = ctxt->input->cur[0];
                next = ctxt->input->cur[1];
                if ((cur == '<') && (next == '?')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
+                       (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
+                        ctxt->progressive = XML_PARSER_PI;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing PI\n");
 #endif
                    xmlParsePI(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    ctxt->instate = XML_PARSER_EPILOG;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (next == '!') &&
                    (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
                    if ((!terminate) &&
-                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0))
+                       (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
+                        ctxt->progressive = XML_PARSER_COMMENT;
                        goto done;
+                    }
 #ifdef DEBUG_PUSH
                    xmlGenericError(xmlGenericErrorContext,
                            "PP: Parsing Comment\n");
 #endif
                    xmlParseComment(ctxt);
+                   if (ctxt->instate == XML_PARSER_EOF)
+                       goto done;
                    ctxt->instate = XML_PARSER_EPILOG;
+                    ctxt->progressive = 1;
                } else if ((cur == '<') && (next == '!') &&
                           (avail < 4)) {
                    goto done;
@@ -11450,29 +11996,28 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                int base, i;
                xmlChar *buf;
                xmlChar quote = 0;
+                size_t use;
 
                base = ctxt->input->cur - ctxt->input->base;
                if (base < 0) return(0);
                if (ctxt->checkIndex > base)
                    base = ctxt->checkIndex;
-               buf = ctxt->input->buf->buffer->content;
-               for (;(unsigned int) base < ctxt->input->buf->buffer->use;
-                    base++) {
+               buf = xmlBufContent(ctxt->input->buf->buffer);
+                use = xmlBufUse(ctxt->input->buf->buffer);
+               for (;(unsigned int) base < use; base++) {
                    if (quote != 0) {
                        if (buf[base] == quote)
                            quote = 0;
-                       continue;    
+                       continue;
                    }
                    if ((quote == 0) && (buf[base] == '<')) {
                        int found  = 0;
                        /* special handling of comments */
-                       if (((unsigned int) base + 4 <
-                            ctxt->input->buf->buffer->use) &&
+                       if (((unsigned int) base + 4 < use) &&
                            (buf[base + 1] == '!') &&
                            (buf[base + 2] == '-') &&
                            (buf[base + 3] == '-')) {
-                           for (;(unsigned int) base + 3 <
-                                 ctxt->input->buf->buffer->use; base++) {
+                           for (;(unsigned int) base + 3 < use; base++) {
                                if ((buf[base] == '-') &&
                                    (buf[base + 1] == '-') &&
                                    (buf[base + 2] == '>')) {
@@ -11503,17 +12048,14 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                        fprintf(stderr, "%c%c%c%c: ", buf[base],
                                buf[base + 1], buf[base + 2], buf[base + 3]);
 #endif
-                       if ((unsigned int) base +1 >=
-                           ctxt->input->buf->buffer->use)
+                       if ((unsigned int) base +1 >= use)
                            break;
                        if (buf[base + 1] == ']') {
                            /* conditional crap, skip both ']' ! */
                            base++;
                            continue;
                        }
-                       for (i = 1;
-                    (unsigned int) base + i < ctxt->input->buf->buffer->use;
-                            i++) {
+                       for (i = 1; (unsigned int) base + i < use; i++) {
                            if (buf[base + i] == '>') {
 #if 0
                                fprintf(stderr, "found\n");
@@ -11531,7 +12073,7 @@ xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
                        fprintf(stderr, "end of stream\n");
 #endif
                        break;
-                        
+
                    }
 not_end_of_int_subset:
                     continue; /* for */
@@ -11539,6 +12081,10 @@ not_end_of_int_subset:
                /*
                 * We didn't found the end of the Internal subset
                 */
+                if (quote == 0)
+                    ctxt->checkIndex = base;
+                else
+                    ctxt->checkIndex = 0;
 #ifdef DEBUG_PUSH
                if (next == 0)
                    xmlGenericError(xmlGenericErrorContext,
@@ -11547,7 +12093,10 @@ not_end_of_int_subset:
                goto done;
 
 found_end_int_subset:
+                ctxt->checkIndex = 0;
                xmlParseInternalSubset(ctxt);
+               if (ctxt->instate == XML_PARSER_EOF)
+                   goto done;
                ctxt->inSubset = 2;
                if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
                    (ctxt->sax->externalSubset != NULL))
@@ -11555,6 +12104,8 @@ found_end_int_subset:
                            ctxt->extSubSystem, ctxt->extSubURI);
                ctxt->inSubset = 0;
                xmlCleanSpecialAttr(ctxt);
+               if (ctxt->instate == XML_PARSER_EOF)
+                   goto done;
                ctxt->instate = XML_PARSER_PROLOG;
                ctxt->checkIndex = 0;
 #ifdef DEBUG_PUSH
@@ -11637,7 +12188,7 @@ found_end_int_subset:
                break;
        }
     }
-done:    
+done:
 #ifdef DEBUG_PUSH
     xmlGenericError(xmlGenericErrorContext, "PP: done %d\n", ret);
 #endif
@@ -11657,6 +12208,55 @@ encoding_error:
 }
 
 /**
+ * xmlParseCheckTransition:
+ * @ctxt:  an XML parser context
+ * @chunk:  a char array
+ * @size:  the size in byte of the chunk
+ *
+ * Check depending on the current parser state if the chunk given must be
+ * processed immediately or one need more data to advance on parsing.
+ *
+ * Returns -1 in case of error, 0 if the push is not needed and 1 if needed
+ */
+static int
+xmlParseCheckTransition(xmlParserCtxtPtr ctxt, const char *chunk, int size) {
+    if ((ctxt == NULL) || (chunk == NULL) || (size < 0))
+        return(-1);
+    if (ctxt->instate == XML_PARSER_START_TAG) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    if (ctxt->progressive == XML_PARSER_COMMENT) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    if (ctxt->instate == XML_PARSER_CDATA_SECTION) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    if (ctxt->progressive == XML_PARSER_PI) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    if (ctxt->instate == XML_PARSER_END_TAG) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    if ((ctxt->progressive == XML_PARSER_DTD) ||
+        (ctxt->instate == XML_PARSER_DTD)) {
+        if (memchr(chunk, '>', size) != NULL)
+            return(1);
+        return(0);
+    }
+    return(1);
+}
+
+/**
  * xmlParseChunk:
  * @ctxt:  an XML parser context
  * @chunk:  an char array
@@ -11672,11 +12272,15 @@ xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size,
               int terminate) {
     int end_in_lf = 0;
     int remain = 0;
+    size_t old_avail = 0;
+    size_t avail = 0;
 
     if (ctxt == NULL)
         return(XML_ERR_INTERNAL_ERROR);
     if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
         return(ctxt->errNo);
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(-1);
     if (ctxt->instate == XML_PARSER_START)
         xmlDetectSAX2(ctxt);
     if ((size > 0) && (chunk != NULL) && (!terminate) &&
@@ -11689,10 +12293,11 @@ xmldecl_done:
 
     if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
         (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF))  {
-       int base = ctxt->input->base - ctxt->input->buf->buffer->content;
-       int cur = ctxt->input->cur - ctxt->input->base;
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
+       size_t cur = ctxt->input->cur - ctxt->input->base;
        int res;
 
+        old_avail = xmlBufUse(ctxt->input->buf->buffer);
         /*
          * Specific handling if we autodetected an encoding, we should not
          * push more than the first line ... which depend on the encoding
@@ -11728,16 +12333,13 @@ xmldecl_done:
                 remain = 0;
             }
         }
-       res =xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
+       res = xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
        if (res < 0) {
            ctxt->errNo = XML_PARSER_EOF;
            ctxt->disableSAX = 1;
            return (XML_PARSER_EOF);
        }
-       ctxt->input->base = ctxt->input->buf->buffer->content + base;
-       ctxt->input->cur = ctxt->input->base + cur;
-       ctxt->input->end =
-           &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+        xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
 #ifdef DEBUG_PUSH
        xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
 #endif
@@ -11748,21 +12350,48 @@ xmldecl_done:
            if ((in->encoder != NULL) && (in->buffer != NULL) &&
                    (in->raw != NULL)) {
                int nbchars;
+               size_t base = xmlBufGetInputBase(in->buffer, ctxt->input);
+               size_t current = ctxt->input->cur - ctxt->input->base;
 
-               nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+               nbchars = xmlCharEncInput(in, terminate);
                if (nbchars < 0) {
                    /* TODO 2.6.0 */
                    xmlGenericError(xmlGenericErrorContext,
                                    "xmlParseChunk: encoder error\n");
                    return(XML_ERR_INVALID_ENCODING);
                }
+               xmlBufSetInputBaseCur(in->buffer, ctxt->input, base, current);
            }
        }
     }
-    if (remain != 0)
+    if (remain != 0) {
         xmlParseTryOrFinish(ctxt, 0);
-    else
-        xmlParseTryOrFinish(ctxt, terminate);
+    } else {
+        if ((ctxt->input != NULL) && (ctxt->input->buf != NULL))
+            avail = xmlBufUse(ctxt->input->buf->buffer);
+        /*
+         * Depending on the current state it may not be such
+         * a good idea to try parsing if there is nothing in the chunk
+         * which would be worth doing a parser state transition and we
+         * need to wait for more data
+         */
+        if ((terminate) || (avail > XML_MAX_TEXT_LENGTH) ||
+            (old_avail == 0) || (avail == 0) ||
+            (xmlParseCheckTransition(ctxt,
+                       (const char *)&ctxt->input->base[old_avail],
+                                     avail - old_avail)))
+            xmlParseTryOrFinish(ctxt, terminate);
+    }
+    if (ctxt->instate == XML_PARSER_EOF)
+        return(ctxt->errNo);
+
+    if ((ctxt->input != NULL) &&
+         (((ctxt->input->end - ctxt->input->cur) > XML_MAX_LOOKUP_LIMIT) ||
+         ((ctxt->input->cur - ctxt->input->base) > XML_MAX_LOOKUP_LIMIT)) &&
+        ((ctxt->options & XML_PARSE_HUGE) == 0)) {
+        xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup");
+        ctxt->instate = XML_PARSER_EOF;
+    }
     if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
         return(ctxt->errNo);
 
@@ -11774,28 +12403,35 @@ xmldecl_done:
     }
     if ((end_in_lf == 1) && (ctxt->input != NULL) &&
         (ctxt->input->buf != NULL)) {
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer,
+                                        ctxt->input);
+       size_t current = ctxt->input->cur - ctxt->input->base;
+
        xmlParserInputBufferPush(ctxt->input->buf, 1, "\r");
+
+       xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input,
+                             base, current);
     }
     if (terminate) {
        /*
         * Check for termination
         */
-       int avail = 0;
+       int cur_avail = 0;
 
        if (ctxt->input != NULL) {
            if (ctxt->input->buf == NULL)
-               avail = ctxt->input->length -
-                       (ctxt->input->cur - ctxt->input->base);
+               cur_avail = ctxt->input->length -
+                           (ctxt->input->cur - ctxt->input->base);
            else
-               avail = ctxt->input->buf->buffer->use -
-                       (ctxt->input->cur - ctxt->input->base);
+               cur_avail = xmlBufUse(ctxt->input->buf->buffer) -
+                                     (ctxt->input->cur - ctxt->input->base);
        }
-                           
+
        if ((ctxt->instate != XML_PARSER_EOF) &&
            (ctxt->instate != XML_PARSER_EPILOG)) {
            xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
-       } 
-       if ((ctxt->instate == XML_PARSER_EPILOG) && (avail > 0)) {
+       }
+       if ((ctxt->instate == XML_PARSER_EPILOG) && (cur_avail > 0)) {
            xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
        }
        if (ctxt->instate != XML_PARSER_EOF) {
@@ -11804,12 +12440,15 @@ xmldecl_done:
        }
        ctxt->instate = XML_PARSER_EOF;
     }
-    return((xmlParserErrors) ctxt->errNo);           
+    if (ctxt->wellFormed == 0)
+       return((xmlParserErrors) ctxt->errNo);
+    else
+        return(0);
 }
 
 /************************************************************************
  *                                                                     *
- *             I/O front end functions to the parser                   *
+ *             I/O front end functions to the parser                   *
  *                                                                     *
  ************************************************************************/
 
@@ -11833,7 +12472,7 @@ xmldecl_done:
  */
 
 xmlParserCtxtPtr
-xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data, 
+xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
                         const char *chunk, int size, const char *filename) {
     xmlParserCtxtPtr ctxt;
     xmlParserInputPtr inputStream;
@@ -11882,7 +12521,7 @@ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
            memcpy(ctxt->sax, sax, sizeof(xmlSAXHandlerV1));
        if (user_data != NULL)
            ctxt->userData = user_data;
-    }  
+    }
     if (filename == NULL) {
        ctxt->directory = NULL;
     } else {
@@ -11908,11 +12547,7 @@ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
        }
     }
     inputStream->buf = buf;
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end = 
-       &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
-
+    xmlBufResetInput(inputStream->buf->buffer, inputStream);
     inputPush(ctxt, inputStream);
 
     /*
@@ -11923,15 +12558,12 @@ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
     if ((size == 0) || (chunk == NULL)) {
        ctxt->charset = XML_CHAR_ENCODING_NONE;
     } else if ((ctxt->input != NULL) && (ctxt->input->buf != NULL)) {
-       int base = ctxt->input->base - ctxt->input->buf->buffer->content;
-       int cur = ctxt->input->cur - ctxt->input->base;
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
+       size_t cur = ctxt->input->cur - ctxt->input->base;
 
-       xmlParserInputBufferPush(ctxt->input->buf, size, chunk);              
+       xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
 
-       ctxt->input->base = ctxt->input->buf->buffer->content + base;
-       ctxt->input->cur = ctxt->input->base + cur;
-       ctxt->input->end =
-           &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->use];
+        xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
 #ifdef DEBUG_PUSH
        xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
 #endif
@@ -11951,11 +12583,12 @@ xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
  *
  * Blocks further parser processing
  */
-void           
+void
 xmlStopParser(xmlParserCtxtPtr ctxt) {
     if (ctxt == NULL)
         return;
     ctxt->instate = XML_PARSER_EOF;
+    ctxt->errNo = XML_ERR_USER_STOP;
     ctxt->disableSAX = 1;
     if (ctxt->input != NULL) {
        ctxt->input->cur = BAD_CAST"";
@@ -12032,7 +12665,7 @@ xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
 #ifdef LIBXML_VALID_ENABLED
 /************************************************************************
  *                                                                     *
- *             Front ends when parsing a DTD                           *
+ *             Front ends when parsing a DTD                           *
  *                                                                     *
  ************************************************************************/
 
@@ -12043,7 +12676,7 @@ xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
  * @enc:  the charset encoding if known
  *
  * Load and parse a DTD
- * 
+ *
  * Returns the resulting xmlDtdPtr or NULL in case of error.
  * @input will be freed by the function in any case.
  */
@@ -12065,10 +12698,13 @@ xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
        return(NULL);
     }
 
+    /* We are loading a DTD */
+    ctxt->options |= XML_PARSE_DTDLOAD;
+
     /*
      * Set-up the SAX context
      */
-    if (sax != NULL) { 
+    if (sax != NULL) {
        if (ctxt->sax != NULL)
            xmlFree(ctxt->sax);
         ctxt->sax = sax;
@@ -12122,7 +12758,7 @@ xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
 
     if ((enc == XML_CHAR_ENCODING_NONE) &&
         ((ctxt->input->end - ctxt->input->cur) >= 4)) {
-       /* 
+       /*
         * Get the 4 first bytes and decode the charset
         * if enc != XML_CHAR_ENCODING_NONE
         * plug some encoding conversion routines.
@@ -12161,7 +12797,7 @@ xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
     }
     if (sax != NULL) ctxt->sax = NULL;
     xmlFreeParserCtxt(ctxt);
-    
+
     return(ret);
 }
 
@@ -12172,7 +12808,7 @@ xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
  * @SystemID:  a NAME* containing the URL to the DTD
  *
  * Load and parse an external subset.
- * 
+ *
  * Returns the resulting xmlDtdPtr or NULL in case of error.
  */
 
@@ -12192,16 +12828,19 @@ xmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID,
        return(NULL);
     }
 
+    /* We are loading a DTD */
+    ctxt->options |= XML_PARSE_DTDLOAD;
+
     /*
      * Set-up the SAX context
      */
-    if (sax != NULL) { 
+    if (sax != NULL) {
        if (ctxt->sax != NULL)
            xmlFree(ctxt->sax);
         ctxt->sax = sax;
         ctxt->userData = ctxt;
     }
-    
+
     /*
      * Canonicalise the system ID
      */
@@ -12312,7 +12951,7 @@ xmlParseDTD(const xmlChar *ExternalID, const xmlChar *SystemID) {
 
 /************************************************************************
  *                                                                     *
- *             Front ends when parsing an Entity                       *
+ *             Front ends when parsing an Entity                       *
  *                                                                     *
  ************************************************************************/
 
@@ -12428,7 +13067,7 @@ xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL,
         */
        if ((xmlStrEqual(ctx->version, BAD_CAST "1.0")) &&
            (!xmlStrEqual(ctxt->input->version, BAD_CAST "1.0"))) {
-           xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH, 
+           xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH,
                           "Version mismatch between document and entity\n");
        }
     }
@@ -12711,7 +13350,7 @@ xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
     if (ctxt->lastError.code != XML_ERR_OK)
         xmlCopyError(&ctxt->lastError, &oldctxt->lastError);
 
-    if (sax != NULL) 
+    if (sax != NULL)
        ctxt->sax = oldsax;
     oldctxt->node_seq.maximum = ctxt->node_seq.maximum;
     oldctxt->node_seq.length = ctxt->node_seq.length;
@@ -13081,7 +13720,7 @@ xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen,
            xmlFree((xmlChar *) ctxt->encoding);
         ctxt->encoding = xmlStrdup((const xmlChar *) doc->encoding);
 
-        hdlr = xmlFindCharEncodingHandler(doc->encoding);
+        hdlr = xmlFindCharEncodingHandler((const char *) doc->encoding);
         if (hdlr != NULL) {
             xmlSwitchToEncoding(ctxt, hdlr);
        } else {
@@ -13092,6 +13731,8 @@ xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen,
     xmlCtxtUseOptionsInternal(ctxt, options, NULL);
     xmlDetectSAX2(ctxt);
     ctxt->myDoc = doc;
+    /* parsing in context, i.e. as within existing content */
+    ctxt->instate = XML_PARSER_CONTENT;
 
     fake = xmlNewComment(NULL);
     if (fake == NULL) {
@@ -13127,7 +13768,6 @@ xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen,
            }
            cur = cur->parent;
        }
-       ctxt->instate = XML_PARSER_CONTENT;
     }
 
     if ((ctxt->validate) || (ctxt->replaceEntities != 0)) {
@@ -13530,7 +14170,7 @@ xmlCreateEntityParserCtxt(const xmlChar *URL, const xmlChar *ID,
  * @filename:  the filename or URL
  * @options:  a combination of xmlParserOption
  *
- * Create a parser context for a file or URL content. 
+ * Create a parser context for a file or URL content.
  * Automatic support for ZLIB/Compress compressed document is provided
  * by default if found at compile-time and for file accesses
  *
@@ -13572,7 +14212,7 @@ xmlCreateURLParserCtxt(const char *filename, int options)
  * xmlCreateFileParserCtxt:
  * @filename:  the filename
  *
- * Create a parser context for a file content. 
+ * Create a parser context for a file content.
  * Automatic support for ZLIB/Compress compressed document is provided
  * by default if found at compile-time.
  *
@@ -13650,7 +14290,7 @@ xmlSAXParseFileWithData(xmlSAXHandlerPtr sax, const char *filename,
     if (sax != NULL)
         ctxt->sax = NULL;
     xmlFreeParserCtxt(ctxt);
-    
+
     return(ret);
 }
 
@@ -13750,7 +14390,7 @@ xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const xmlChar* buffer,
         xmlClearParserCtxt(ctxt);
         return;
     }
-  
+
     xmlClearParserCtxt(ctxt);
     if (filename != NULL)
         input->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
@@ -13768,7 +14408,7 @@ xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const xmlChar* buffer,
  *
  * parse an XML file and call the given SAX handler routines.
  * Automatic support for ZLIB/Compress compressed document is provided
- * 
+ *
  * Returns 0 in case of success or a error number otherwise
  */
 int
@@ -13776,7 +14416,7 @@ xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
                     const char *filename) {
     int ret = 0;
     xmlParserCtxtPtr ctxt;
-    
+
     ctxt = xmlCreateFileParserCtxt(filename);
     if (ctxt == NULL) return -1;
     if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
@@ -13786,9 +14426,9 @@ xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
 
     if (user_data != NULL)
        ctxt->userData = user_data;
-    
+
     xmlParseDocument(ctxt);
-    
+
     if (ctxt->wellFormed)
        ret = 0;
     else {
@@ -13804,14 +14444,14 @@ xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
        ctxt->myDoc = NULL;
     }
     xmlFreeParserCtxt(ctxt);
-    
+
     return ret;
 }
 #endif /* LIBXML_SAX1_ENABLED */
 
 /************************************************************************
  *                                                                     *
- *             Front ends when parsing from memory                     *
+ *             Front ends when parsing from memory                     *
  *                                                                     *
  ************************************************************************/
 
@@ -13855,9 +14495,7 @@ xmlCreateMemoryParserCtxt(const char *buffer, int size) {
 
     input->filename = NULL;
     input->buf = buf;
-    input->base = input->buf->buffer->content;
-    input->cur = input->buf->buffer->content;
-    input->end = &input->buf->buffer->content[input->buf->buffer->use];
+    xmlBufResetInput(input->buf->buffer, input);
 
     inputPush(ctxt, input);
     return(ctxt);
@@ -13913,7 +14551,7 @@ xmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer,
        xmlFreeDoc(ctxt->myDoc);
        ctxt->myDoc = NULL;
     }
-    if (sax != NULL) 
+    if (sax != NULL)
        ctxt->sax = NULL;
     xmlFreeParserCtxt(ctxt);
 
@@ -13931,7 +14569,7 @@ xmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer,
  * parse an XML in-memory block and use the given SAX function block
  * to handle the parsing callback. If sax is NULL, fallback to the default
  * DOM tree building routines.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -13946,7 +14584,7 @@ xmlSAXParseMemory(xmlSAXHandlerPtr sax, const char *buffer,
  * @size:  the size of the array
  *
  * parse an XML in-memory block and build a tree.
- * 
+ *
  * Returns the resulting document tree
  */
 
@@ -14000,7 +14638,7 @@ int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data,
        ctxt->userData = user_data;
 
     xmlParseDocument(ctxt);
-    
+
     if (ctxt->wellFormed)
        ret = 0;
     else {
@@ -14016,7 +14654,7 @@ int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data,
        ctxt->myDoc = NULL;
     }
     xmlFreeParserCtxt(ctxt);
-    
+
     return ret;
 }
 #endif /* LIBXML_SAX1_ENABLED */
@@ -14050,7 +14688,7 @@ xmlCreateDocParserCtxt(const xmlChar *cur) {
  * parse an XML in-memory document and build a tree.
  * It use the given SAX function block to handle the parsing callback.
  * If sax is NULL, fallback to the default DOM tree building routines.
- * 
+ *
  * Returns the resulting document tree
  */
 
@@ -14065,7 +14703,7 @@ xmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
 
     ctxt = xmlCreateDocParserCtxt(cur);
     if (ctxt == NULL) return(NULL);
-    if (sax != NULL) { 
+    if (sax != NULL) {
         oldsax = ctxt->sax;
         ctxt->sax = sax;
         ctxt->userData = NULL;
@@ -14082,7 +14720,7 @@ xmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
     if (sax != NULL)
        ctxt->sax = oldsax;
     xmlFreeParserCtxt(ctxt);
-    
+
     return(ret);
 }
 
@@ -14091,7 +14729,7 @@ xmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
  * @cur:  a pointer to an array of xmlChar
  *
  * parse an XML in-memory document and build a tree.
- * 
+ *
  * Returns the resulting document tree
  */
 
@@ -14104,8 +14742,8 @@ xmlParseDoc(const xmlChar *cur) {
 #ifdef LIBXML_LEGACY_ENABLED
 /************************************************************************
  *                                                                     *
- *     Specific function to keep track of entities references          *
- *     and used by the XSLT debugger                                   *
+ *     Specific function to keep track of entities references          *
+ *     and used by the XSLT debugger                                   *
  *                                                                     *
  ************************************************************************/
 
@@ -14115,7 +14753,7 @@ static xmlEntityReferenceFunc xmlEntityRefFunc = NULL;
  * xmlAddEntityReference:
  * @ent : A valid entity
  * @firstNode : A valid first node for children of entity
- * @lastNode : A valid last node of children entity 
+ * @lastNode : A valid last node of children entity
  *
  * Notify of a reference to an entity of type XML_EXTERNAL_GENERAL_PARSED_ENTITY
  */
@@ -14144,7 +14782,7 @@ xmlSetEntityReferenceFunc(xmlEntityReferenceFunc func)
 
 /************************************************************************
  *                                                                     *
- *                             Miscellaneous                           *
+ *                             Miscellaneous                           *
  *                                                                     *
  ************************************************************************/
 
@@ -14192,6 +14830,9 @@ xmlInitParser(void) {
 #ifdef LIBXML_XPATH_ENABLED
        xmlXPathInit();
 #endif
+#ifdef LIBXML_CATALOG_ENABLED
+        xmlInitializeCatalog();
+#endif
        xmlParserInitialized = 1;
 #ifdef LIBXML_THREAD_ENABLED
     }
@@ -14239,8 +14880,8 @@ xmlCleanupParser(void) {
     xmlSchemaCleanupTypes();
     xmlRelaxNGCleanupTypes();
 #endif
-    xmlCleanupGlobals();
     xmlResetLastError();
+    xmlCleanupGlobals();
     xmlCleanupThreads(); /* must be last if called not from the main thread */
     xmlCleanupMemory();
     xmlParserInitialized = 0;
@@ -14260,7 +14901,7 @@ xmlCleanupParser(void) {
  * current scope
  */
 #define DICT_FREE(str)                                         \
-       if ((str) && ((!dict) ||                                \
+       if ((str) && ((!dict) ||                                \
            (xmlDictOwns(dict, (const xmlChar *)(str)) == 0)))  \
            xmlFree((char *)(str));
 
@@ -14275,7 +14916,7 @@ xmlCtxtReset(xmlParserCtxtPtr ctxt)
 {
     xmlParserInputPtr input;
     xmlDictPtr dict;
-    
+
     if (ctxt == NULL)
         return;
 
@@ -14343,6 +14984,7 @@ xmlCtxtReset(xmlParserCtxtPtr ctxt)
     ctxt->catalogs = NULL;
     ctxt->nbentities = 0;
     ctxt->sizeentities = 0;
+    ctxt->sizeentcopy = 0;
     xmlInitNodeInfoSeq(&ctxt->node_seq);
 
     if (ctxt->attsDefault != NULL) {
@@ -14427,25 +15069,18 @@ xmlCtxtResetPush(xmlParserCtxtPtr ctxt, const char *chunk,
         inputStream->filename = (char *)
             xmlCanonicPath((const xmlChar *) filename);
     inputStream->buf = buf;
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end =
-        &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+    xmlBufResetInput(buf->buffer, inputStream);
 
     inputPush(ctxt, inputStream);
 
     if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
         (ctxt->input->buf != NULL)) {
-        int base = ctxt->input->base - ctxt->input->buf->buffer->content;
-        int cur = ctxt->input->cur - ctxt->input->base;
+       size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
+        size_t cur = ctxt->input->cur - ctxt->input->base;
 
         xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
 
-        ctxt->input->base = ctxt->input->buf->buffer->content + base;
-        ctxt->input->cur = ctxt->input->base + cur;
-        ctxt->input->end =
-            &ctxt->input->buf->buffer->content[ctxt->input->buf->buffer->
-                                               use];
+        xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
 #ifdef DEBUG_PUSH
         xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
 #endif
@@ -14596,6 +15231,8 @@ xmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, const char *encodi
     if (options & XML_PARSE_HUGE) {
        ctxt->options |= XML_PARSE_HUGE;
         options -= XML_PARSE_HUGE;
+        if (ctxt->dict != NULL)
+            xmlDictSetLimit(ctxt->dict, 0);
     }
     if (options & XML_PARSE_OLDSAX) {
        ctxt->options |= XML_PARSE_OLDSAX;
@@ -14605,6 +15242,10 @@ xmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, const char *encodi
        ctxt->options |= XML_PARSE_IGNORE_ENC;
         options -= XML_PARSE_IGNORE_ENC;
     }
+    if (options & XML_PARSE_BIG_LINES) {
+       ctxt->options |= XML_PARSE_BIG_LINES;
+        options -= XML_PARSE_BIG_LINES;
+    }
     ctxt->linenumbers = 1;
     return (options);
 }
@@ -14679,7 +15320,7 @@ xmlDoRead(xmlParserCtxtPtr ctxt, const char *URL, const char *encoding,
  * @options:  a combination of xmlParserOption
  *
  * parse an XML in-memory document and build a tree.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14689,6 +15330,7 @@ xmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int optio
 
     if (cur == NULL)
         return (NULL);
+    xmlInitParser();
 
     ctxt = xmlCreateDocParserCtxt(cur);
     if (ctxt == NULL)
@@ -14703,7 +15345,7 @@ xmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int optio
  * @options:  a combination of xmlParserOption
  *
  * parse an XML file from the filesystem or the network.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14711,6 +15353,7 @@ xmlReadFile(const char *filename, const char *encoding, int options)
 {
     xmlParserCtxtPtr ctxt;
 
+    xmlInitParser();
     ctxt = xmlCreateURLParserCtxt(filename, options);
     if (ctxt == NULL)
         return (NULL);
@@ -14726,7 +15369,7 @@ xmlReadFile(const char *filename, const char *encoding, int options)
  * @options:  a combination of xmlParserOption
  *
  * parse an XML in-memory document and build a tree.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14734,6 +15377,7 @@ xmlReadMemory(const char *buffer, int size, const char *URL, const char *encodin
 {
     xmlParserCtxtPtr ctxt;
 
+    xmlInitParser();
     ctxt = xmlCreateMemoryParserCtxt(buffer, size);
     if (ctxt == NULL)
         return (NULL);
@@ -14750,7 +15394,7 @@ xmlReadMemory(const char *buffer, int size, const char *URL, const char *encodin
  * parse an XML from a file descriptor and build a tree.
  * NOTE that the file descriptor will not be closed when the
  *      reader is closed or reset.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14762,6 +15406,7 @@ xmlReadFd(int fd, const char *URL, const char *encoding, int options)
 
     if (fd < 0)
         return (NULL);
+    xmlInitParser();
 
     input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
     if (input == NULL)
@@ -14805,6 +15450,7 @@ xmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
 
     if (ioread == NULL)
         return (NULL);
+    xmlInitParser();
 
     input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
                                          XML_CHAR_ENCODING_NONE);
@@ -14851,6 +15497,7 @@ xmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     xmlCtxtReset(ctxt);
 
@@ -14871,7 +15518,7 @@ xmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur,
  *
  * parse an XML file from the filesystem or the network.
  * This reuses the existing @ctxt parser context
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14884,6 +15531,7 @@ xmlCtxtReadFile(xmlParserCtxtPtr ctxt, const char *filename,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     xmlCtxtReset(ctxt);
 
@@ -14906,7 +15554,7 @@ xmlCtxtReadFile(xmlParserCtxtPtr ctxt, const char *filename,
  *
  * parse an XML in-memory document and build a tree.
  * This reuses the existing @ctxt parser context
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14920,6 +15568,7 @@ xmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size,
         return (NULL);
     if (buffer == NULL)
         return (NULL);
+    xmlInitParser();
 
     xmlCtxtReset(ctxt);
 
@@ -14950,7 +15599,7 @@ xmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size,
  * This reuses the existing @ctxt parser context
  * NOTE that the file descriptor will not be closed when the
  *      reader is closed or reset.
- * 
+ *
  * Returns the resulting document tree
  */
 xmlDocPtr
@@ -14964,6 +15613,7 @@ xmlCtxtReadFd(xmlParserCtxtPtr ctxt, int fd,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     xmlCtxtReset(ctxt);
 
@@ -15009,6 +15659,7 @@ xmlCtxtReadIO(xmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
         return (NULL);
     if (ctxt == NULL)
         return (NULL);
+    xmlInitParser();
 
     xmlCtxtReset(ctxt);
 
index 746b7fd..df204fd 100644 (file)
@@ -55,6 +55,9 @@
 #include <libxml/globals.h>
 #include <libxml/chvalid.h>
 
+#include "buf.h"
+#include "enc.h"
+
 /*
  * Various global defaults for parsing
  */
@@ -73,15 +76,15 @@ xmlCheckVersion(int version) {
     xmlInitParser();
 
     if ((myversion / 10000) != (version / 10000)) {
-       xmlGenericError(xmlGenericErrorContext, 
+       xmlGenericError(xmlGenericErrorContext,
                "Fatal: program compiled against libxml %d using libxml %d\n",
                (version / 10000), (myversion / 10000));
-       fprintf(stderr, 
+       fprintf(stderr,
                "Fatal: program compiled against libxml %d using libxml %d\n",
                (version / 10000), (myversion / 10000));
     }
     if ((myversion / 100) < (version / 100)) {
-       xmlGenericError(xmlGenericErrorContext, 
+       xmlGenericError(xmlGenericErrorContext,
                "Warning: program compiled against libxml %d using older %d\n",
                (version / 100), (myversion / 100));
     }
@@ -90,7 +93,7 @@ xmlCheckVersion(int version) {
 
 /************************************************************************
  *                                                                     *
- *             Some factorized error routines                          *
+ *             Some factorized error routines                          *
  *                                                                     *
  ************************************************************************/
 
@@ -225,7 +228,7 @@ xmlIsLetter(int c) {
 
 /************************************************************************
  *                                                                     *
- *             Input handling functions for progressive parsing        *
+ *             Input handling functions for progressive parsing        *
  *                                                                     *
  ************************************************************************/
 
@@ -242,7 +245,7 @@ xmlIsLetter(int c) {
 
 static
 void check_buffer(xmlParserInputPtr in) {
-    if (in->base != in->buf->buffer->content) {
+    if (in->base != xmlBufContent(in->buf->buffer)) {
         xmlGenericError(xmlGenericErrorContext,
                "xmlParserInput: base mismatch problem\n");
     }
@@ -250,17 +253,17 @@ void check_buffer(xmlParserInputPtr in) {
         xmlGenericError(xmlGenericErrorContext,
                "xmlParserInput: cur < base problem\n");
     }
-    if (in->cur > in->base + in->buf->buffer->use) {
+    if (in->cur > in->base + xmlBufUse(in->buf->buffer)) {
         xmlGenericError(xmlGenericErrorContext,
                "xmlParserInput: cur > base + use problem\n");
     }
-    xmlGenericError(xmlGenericErrorContext,"buffer %x : content %x, cur %d, use %d, size %d\n",
-            (int) in, (int) in->buf->buffer->content, in->cur - in->base,
-           in->buf->buffer->use, in->buf->buffer->size);
+    xmlGenericError(xmlGenericErrorContext,"buffer %x : content %x, cur %d, use %d\n",
+            (int) in, (int) xmlBufContent(in->buf->buffer), in->cur - in->base,
+           xmlBufUse(in->buf->buffer));
 }
 
 #else
-#define CHECK_BUFFER(in) 
+#define CHECK_BUFFER(in)
 #endif
 
 
@@ -269,50 +272,13 @@ void check_buffer(xmlParserInputPtr in) {
  * @in:  an XML parser input
  * @len:  an indicative size for the lookahead
  *
- * This function refresh the input for the parser. It doesn't try to
- * preserve pointers to the input buffer, and discard already read data
+ * This function was internal and is deprecated.
  *
- * Returns the number of xmlChars read, or -1 in case of error, 0 indicate the
- * end of this entity
+ * Returns -1 as this is an error to use it.
  */
 int
-xmlParserInputRead(xmlParserInputPtr in, int len) {
-    int ret;
-    int used;
-    int indx;
-
-    if (in == NULL) return(-1);
-#ifdef DEBUG_INPUT
-    xmlGenericError(xmlGenericErrorContext, "Read\n");
-#endif
-    if (in->buf == NULL) return(-1);
-    if (in->base == NULL) return(-1);
-    if (in->cur == NULL) return(-1);
-    if (in->buf->buffer == NULL) return(-1);
-    if (in->buf->readcallback == NULL) return(-1);
-
-    CHECK_BUFFER(in);
-
-    used = in->cur - in->buf->buffer->content;
-    ret = xmlBufferShrink(in->buf->buffer, used);
-    if (ret > 0) {
-       in->cur -= ret;
-       in->consumed += ret;
-    }
-    ret = xmlParserInputBufferRead(in->buf, len);
-    if (in->base != in->buf->buffer->content) {
-        /*
-        * the buffer has been reallocated
-        */
-       indx = in->cur - in->base;
-       in->base = in->buf->buffer->content;
-       in->cur = &in->buf->buffer->content[indx];
-    }
-    in->end = &in->buf->buffer->content[in->buf->buffer->use];
-
-    CHECK_BUFFER(in);
-
-    return(ret);
+xmlParserInputRead(xmlParserInputPtr in ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED) {
+    return(-1);
 }
 
 /**
@@ -323,15 +289,16 @@ xmlParserInputRead(xmlParserInputPtr in, int len) {
  * This function increase the input for the parser. It tries to
  * preserve pointers to the input buffer, and keep already read data
  *
- * Returns the number of xmlChars read, or -1 in case of error, 0 indicate the
+ * Returns the amount of char read, or -1 in case of error, 0 indicate the
  * end of this entity
  */
 int
 xmlParserInputGrow(xmlParserInputPtr in, int len) {
-    int ret;
-    int indx;
+    size_t ret;
+    size_t indx;
+    const xmlChar *content;
 
-    if (in == NULL) return(-1);
+    if ((in == NULL) || (len < 0)) return(-1);
 #ifdef DEBUG_INPUT
     xmlGenericError(xmlGenericErrorContext, "Grow\n");
 #endif
@@ -343,15 +310,15 @@ xmlParserInputGrow(xmlParserInputPtr in, int len) {
     CHECK_BUFFER(in);
 
     indx = in->cur - in->base;
-    if (in->buf->buffer->use > (unsigned int) indx + INPUT_CHUNK) {
+    if (xmlBufUse(in->buf->buffer) > (unsigned int) indx + INPUT_CHUNK) {
 
        CHECK_BUFFER(in);
 
         return(0);
     }
-    if (in->buf->readcallback != NULL)
+    if (in->buf->readcallback != NULL) {
        ret = xmlParserInputBufferGrow(in->buf, len);
-    else       
+    } else
         return(0);
 
     /*
@@ -360,15 +327,17 @@ xmlParserInputGrow(xmlParserInputPtr in, int len) {
      *        pointer arithmetic. Insure will raise it as a bug but in
      *        that specific case, that's not !
      */
-    if (in->base != in->buf->buffer->content) {
+
+    content = xmlBufContent(in->buf->buffer);
+    if (in->base != content) {
         /*
         * the buffer has been reallocated
         */
        indx = in->cur - in->base;
-       in->base = in->buf->buffer->content;
-       in->cur = &in->buf->buffer->content[indx];
+       in->base = content;
+       in->cur = &content[indx];
     }
-    in->end = &in->buf->buffer->content[in->buf->buffer->use];
+    in->end = xmlBufEnd(in->buf->buffer);
 
     CHECK_BUFFER(in);
 
@@ -383,9 +352,10 @@ xmlParserInputGrow(xmlParserInputPtr in, int len) {
  */
 void
 xmlParserInputShrink(xmlParserInputPtr in) {
-    int used;
-    int ret;
-    int indx;
+    size_t used;
+    size_t ret;
+    size_t indx;
+    const xmlChar *content;
 
 #ifdef DEBUG_INPUT
     xmlGenericError(xmlGenericErrorContext, "Shrink\n");
@@ -398,42 +368,43 @@ xmlParserInputShrink(xmlParserInputPtr in) {
 
     CHECK_BUFFER(in);
 
-    used = in->cur - in->buf->buffer->content;
+    used = in->cur - xmlBufContent(in->buf->buffer);
     /*
      * Do not shrink on large buffers whose only a tiny fraction
      * was consumed
      */
     if (used > INPUT_CHUNK) {
-       ret = xmlBufferShrink(in->buf->buffer, used - LINE_LEN);
+       ret = xmlBufShrink(in->buf->buffer, used - LINE_LEN);
        if (ret > 0) {
            in->cur -= ret;
            in->consumed += ret;
        }
-       in->end = &in->buf->buffer->content[in->buf->buffer->use];
+       in->end = xmlBufEnd(in->buf->buffer);
     }
 
     CHECK_BUFFER(in);
 
-    if (in->buf->buffer->use > INPUT_CHUNK) {
+    if (xmlBufUse(in->buf->buffer) > INPUT_CHUNK) {
         return;
     }
     xmlParserInputBufferRead(in->buf, 2 * INPUT_CHUNK);
-    if (in->base != in->buf->buffer->content) {
+    content = xmlBufContent(in->buf->buffer);
+    if (in->base != content) {
         /*
         * the buffer has been reallocated
         */
        indx = in->cur - in->base;
-       in->base = in->buf->buffer->content;
-       in->cur = &in->buf->buffer->content[indx];
+       in->base = content;
+       in->cur = &content[indx];
     }
-    in->end = &in->buf->buffer->content[in->buf->buffer->use];
+    in->end = xmlBufEnd(in->buf->buffer);
 
     CHECK_BUFFER(in);
 }
 
 /************************************************************************
  *                                                                     *
- *             UTF8 character input and related functions              *
+ *             UTF8 character input and related functions              *
  *                                                                     *
  ************************************************************************/
 
@@ -484,7 +455,7 @@ xmlNextChar(xmlParserCtxtPtr ctxt)
              * UCS-4 range (hex.)           UTF-8 octet sequence (binary)
              * 0000 0000-0000 007F   0xxxxxxx
              * 0000 0080-0000 07FF   110xxxxx 10xxxxxx
-             * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx 
+             * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
              *
              * Check for the 0x110000 limit too
              */
@@ -634,7 +605,7 @@ xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
         * UCS-4 range (hex.)           UTF-8 octet sequence (binary)
         * 0000 0000-0000 007F   0xxxxxxx
         * 0000 0080-0000 07FF   110xxxxx 10xxxxxx
-        * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx 
+        * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
         *
         * Check for the 0x110000 limit too
         */
@@ -695,7 +666,7 @@ xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
            if (!IS_CHAR(val)) {
                xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
                                  "Char 0x%X out of allowed range\n", val);
-           }    
+           }
            return(val);
        } else {
            /* 1-byte code */
@@ -759,7 +730,7 @@ encoding_error:
                     "Input is not proper UTF-8, indicate encoding !\n%s",
                     BAD_CAST buffer, NULL);
     }
-    ctxt->charset = XML_CHAR_ENCODING_8859_1; 
+    ctxt->charset = XML_CHAR_ENCODING_8859_1;
     *len = 1;
     return((int) *ctxt->input->cur);
 }
@@ -788,7 +759,7 @@ xmlStringCurrentChar(xmlParserCtxtPtr ctxt, const xmlChar * cur, int *len)
          * UCS-4 range (hex.)           UTF-8 octet sequence (binary)
          * 0000 0000-0000 007F   0xxxxxxx
          * 0000 0080-0000 07FF   110xxxxx 10xxxxxx
-         * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx 
+         * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
          *
          * Check for the 0x110000 limit too
          */
@@ -881,7 +852,7 @@ encoding_error:
  * @out:  pointer to an array of xmlChar
  * @val:  the char value
  *
- * append the char value in the array 
+ * append the char value in the array
  *
  * Returns the number of xmlChar written
  */
@@ -895,7 +866,7 @@ xmlCopyCharMultiByte(xmlChar *out, int val) {
      * UCS-4 range (hex.)           UTF-8 octet sequence (binary)
      * 0000 0000-0000 007F   0xxxxxxx
      * 0000 0080-0000 07FF   110xxxxx 10xxxxxx
-     * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx 
+     * 0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx
      */
     if  (val >= 0x80) {
        xmlChar *savedout = out;
@@ -923,7 +894,7 @@ xmlCopyCharMultiByte(xmlChar *out, int val) {
  * @out:  pointer to an array of xmlChar
  * @val:  the char value
  *
- * append the char value in the array 
+ * append the char value in the array
  *
  * Returns the number of xmlChar written
  */
@@ -945,11 +916,6 @@ xmlCopyChar(int len ATTRIBUTE_UNUSED, xmlChar *out, int val) {
  *                                                                     *
  ************************************************************************/
 
-/* defined in encoding.c, not public */
-int
-xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
-                       xmlBufferPtr in, int len);
-
 static int
 xmlSwitchToEncodingInt(xmlParserCtxtPtr ctxt,
                        xmlCharEncodingHandlerPtr handler, int len);
@@ -1189,12 +1155,12 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
         /*
          * Is there already some content down the pipe to convert ?
          */
-        if ((input->buf->buffer != NULL) && (input->buf->buffer->use > 0)) {
+        if (xmlBufIsEmpty(input->buf->buffer) == 0) {
             int processed;
            unsigned int use;
 
             /*
-             * Specific handling of the Byte Order Mark for 
+             * Specific handling of the Byte Order Mark for
              * UTF-16
              */
             if ((handler->name != NULL) &&
@@ -1225,19 +1191,17 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
              * Move it as the raw buffer and create a new input buffer
              */
             processed = input->cur - input->base;
-            xmlBufferShrink(input->buf->buffer, processed);
+            xmlBufShrink(input->buf->buffer, processed);
             input->buf->raw = input->buf->buffer;
-            input->buf->buffer = xmlBufferCreate();
+            input->buf->buffer = xmlBufCreate();
            input->buf->rawconsumed = processed;
-           use = input->buf->raw->use;
+           use = xmlBufUse(input->buf->raw);
 
             if (ctxt->html) {
                 /*
                  * convert as much as possible of the buffer
                  */
-                nbchars = xmlCharEncInFunc(input->buf->encoder,
-                                           input->buf->buffer,
-                                           input->buf->raw);
+                nbchars = xmlCharEncInput(input->buf, 1);
             } else {
                 /*
                  * convert just enough to get
@@ -1245,10 +1209,7 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
                  * parsed with the autodetected encoding
                  * into the parser reading buffer.
                  */
-                nbchars = xmlCharEncFirstLineInt(input->buf->encoder,
-                                                 input->buf->buffer,
-                                                 input->buf->raw,
-                                                 len);
+                nbchars = xmlCharEncFirstLineInput(input->buf, len);
             }
             if (nbchars < 0) {
                 xmlErrInternal(ctxt,
@@ -1256,10 +1217,8 @@ xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
                                NULL);
                 return (-1);
             }
-           input->buf->rawconsumed += use - input->buf->raw->use;
-            input->base = input->cur = input->buf->buffer->content;
-            input->end = &input->base[input->buf->buffer->use];
-
+           input->buf->rawconsumed += use - xmlBufUse(input->buf->raw);
+            xmlBufResetInput(input->buf->buffer, input);
         }
         return (0);
     } else if (input->length == 0) {
@@ -1294,7 +1253,7 @@ xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
  * xmlSwitchToEncodingInt:
  * @ctxt:  the parser context
  * @handler:  the encoding handler
- * @len: the lenght to convert or -1
+ * @len: the length to convert or -1
  *
  * change the input functions when discovering the character encoding
  * of a given entity, and convert only @len bytes of the output, this
@@ -1336,7 +1295,7 @@ xmlSwitchToEncodingInt(xmlParserCtxtPtr ctxt,
  * Returns 0 in case of success, -1 otherwise
  */
 int
-xmlSwitchToEncoding(xmlParserCtxtPtr ctxt, xmlCharEncodingHandlerPtr handler) 
+xmlSwitchToEncoding(xmlParserCtxtPtr ctxt, xmlCharEncodingHandlerPtr handler)
 {
     return (xmlSwitchToEncodingInt(ctxt, handler, -1));
 }
@@ -1363,7 +1322,7 @@ xmlFreeInputStream(xmlParserInputPtr input) {
     if (input->version != NULL) xmlFree((char *) input->version);
     if ((input->free != NULL) && (input->base != NULL))
         input->free((xmlChar *) input->base);
-    if (input->buf != NULL) 
+    if (input->buf != NULL)
         xmlFreeParserInputBuffer(input->buf);
     xmlFree(input);
 }
@@ -1426,9 +1385,8 @@ xmlNewIOInputStream(xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input,
     }
     inputStream->filename = NULL;
     inputStream->buf = input;
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end = &inputStream->base[inputStream->buf->buffer->use];
+    xmlBufResetInput(inputStream->buf->buffer, inputStream);
+
     if (enc != XML_CHAR_ENCODING_NONE) {
         xmlSwitchEncoding(ctxt, enc);
     }
@@ -1570,7 +1528,7 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
     inputStream = xmlCheckHTTPInput(ctxt, inputStream);
     if (inputStream == NULL)
         return(NULL);
-    
+
     if (inputStream->filename == NULL)
        URI = xmlStrdup((xmlChar *) filename);
     else
@@ -1581,9 +1539,7 @@ xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
     if (URI != NULL) xmlFree((char *) URI);
     inputStream->directory = directory;
 
-    inputStream->base = inputStream->buf->buffer->content;
-    inputStream->cur = inputStream->buf->buffer->content;
-    inputStream->end = &inputStream->base[inputStream->buf->buffer->use];
+    xmlBufResetInput(inputStream->buf->buffer, inputStream);
     if ((ctxt->directory == NULL) && (directory != NULL))
         ctxt->directory = (char *) xmlStrdup((const xmlChar *) directory);
     return(inputStream);
@@ -1622,6 +1578,8 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
         xmlErrMemory(NULL, "cannot initialize parser context\n");
        return(-1);
     }
+    xmlDictSetLimit(ctxt->dict, XML_MAX_DICTIONARY_LIMIT);
+
     if (ctxt->sax == NULL)
        ctxt->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
     if (ctxt->sax == NULL) {
@@ -1733,12 +1691,20 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
     ctxt->nsWellFormed = 1;
     ctxt->valid = 1;
     ctxt->loadsubset = xmlLoadExtDtdDefaultValue;
+    if (ctxt->loadsubset) {
+        ctxt->options |= XML_PARSE_DTDLOAD;
+    }
     ctxt->validate = xmlDoValidityCheckingDefaultValue;
     ctxt->pedantic = xmlPedanticParserDefaultValue;
+    if (ctxt->pedantic) {
+        ctxt->options |= XML_PARSE_PEDANTIC;
+    }
     ctxt->linenumbers = xmlLineNumbersDefaultValue;
     ctxt->keepBlanks = xmlKeepBlanksDefaultValue;
-    if (ctxt->keepBlanks == 0)
+    if (ctxt->keepBlanks == 0) {
        ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
+       ctxt->options |= XML_PARSE_NOBLANKS;
+    }
 
     ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_0;
     ctxt->vctxt.userData = ctxt;
@@ -1750,8 +1716,12 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
        else
            ctxt->vctxt.warning = xmlParserValidityWarning;
        ctxt->vctxt.nodeMax = 0;
+        ctxt->options |= XML_PARSE_DTDVALID;
     }
     ctxt->replaceEntities = xmlSubstituteEntitiesDefaultValue;
+    if (ctxt->replaceEntities) {
+        ctxt->options |= XML_PARSE_NOENT;
+    }
     ctxt->record_info = 0;
     ctxt->nbChars = 0;
     ctxt->checkIndex = 0;
@@ -1761,6 +1731,8 @@ xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
     ctxt->charset = XML_CHAR_ENCODING_UTF8;
     ctxt->catalogs = NULL;
     ctxt->nbentities = 0;
+    ctxt->sizeentities = 0;
+    ctxt->sizeentcopy = 0;
     ctxt->input_id = 1;
     xmlInitNodeInfoSeq(&ctxt->node_seq);
     return(0);
@@ -1807,7 +1779,7 @@ xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
     if (ctxt->nsTab != NULL) xmlFree((char *) ctxt->nsTab);
     if (ctxt->pushTab != NULL) xmlFree(ctxt->pushTab);
     if (ctxt->attallocs != NULL) xmlFree(ctxt->attallocs);
-    if (ctxt->attsDefault != NULL) 
+    if (ctxt->attsDefault != NULL)
         xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
     if (ctxt->attsSpecial != NULL)
         xmlHashFree(ctxt->attsSpecial, NULL);
@@ -1907,7 +1879,7 @@ xmlClearParserCtxt(xmlParserCtxtPtr ctxt)
  * @node:  an XML node within the tree
  *
  * Find the parser node info struct for a given node
- * 
+ *
  * Returns an xmlParserNodeInfo block pointer or NULL
  */
 const xmlParserNodeInfo *
@@ -1965,7 +1937,7 @@ xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq)
  * @seq:  a node info sequence pointer
  * @node:  an XML node pointer
  *
- * 
+ *
  * xmlParserFindNodeInfoIndex : Find the index that the info record for
  *   the given node is or should be at in a sorted sequence
  *
@@ -2022,7 +1994,7 @@ xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
     pos = xmlParserFindNodeInfoIndex(&ctxt->node_seq, (xmlNodePtr)
                                      info->node);
 
-    if ((pos < ctxt->node_seq.length) && 
+    if ((pos < ctxt->node_seq.length) &&
         (ctxt->node_seq.buffer != NULL) &&
         (ctxt->node_seq.buffer[pos].node == info->node)) {
         ctxt->node_seq.buffer[pos] = *info;
@@ -2030,7 +2002,8 @@ xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
 
     /* Otherwise, we need to add new node to buffer */
     else {
-        if (ctxt->node_seq.length + 1 > ctxt->node_seq.maximum) {
+        if ((ctxt->node_seq.length + 1 > ctxt->node_seq.maximum) ||
+           (ctxt->node_seq.buffer == NULL)) {
             xmlParserNodeInfo *tmp_buffer;
             unsigned int byte_size;
 
@@ -2075,7 +2048,7 @@ xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
  ************************************************************************/
 /**
  * xmlPedanticParserDefault:
- * @val:  int 0 or 1 
+ * @val:  int 0 or 1
  *
  * Set and return the previous value for enabling pedantic warnings.
  *
@@ -2092,7 +2065,7 @@ xmlPedanticParserDefault(int val) {
 
 /**
  * xmlLineNumbersDefault:
- * @val:  int 0 or 1 
+ * @val:  int 0 or 1
  *
  * Set and return the previous value for enabling line numbers in elements
  * contents. This may break on old application and is turned off by default.
@@ -2110,7 +2083,7 @@ xmlLineNumbersDefault(int val) {
 
 /**
  * xmlSubstituteEntitiesDefault:
- * @val:  int 0 or 1 
+ * @val:  int 0 or 1
  *
  * Set and return the previous value for default entity support.
  * Initially the parser always keep entity references instead of substituting
@@ -2132,7 +2105,7 @@ xmlSubstituteEntitiesDefault(int val) {
 
 /**
  * xmlKeepBlanksDefault:
- * @val:  int 0 or 1 
+ * @val:  int 0 or 1
  *
  * Set and return the previous value for default blanks text nodes support.
  * The 1.x version of the parser used an heuristic to try to detect
@@ -2143,7 +2116,7 @@ xmlSubstituteEntitiesDefault(int val) {
  * ignorableWhitespace() are only generated when running the parser in
  * validating mode and when the current element doesn't allow CDATA or
  * mixed content.
- * This function is provided as a way to force the standard behavior 
+ * This function is provided as a way to force the standard behavior
  * on 1.X libs and to switch back to the old mode for compatibility when
  * running 1.X client code on 2.X . Upgrade of 1.X code should be done
  * by using xmlIsBlankNode() commodity function to detect the "empty"
index 1570001..33dee3a 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -3,7 +3,7 @@
  *
  * Reference:
  *   http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
- *   to some extent 
+ *   to some extent
  *   http://www.w3.org/TR/1999/REC-xml-19991116
  *
  * See Copyright for the status of this software.
@@ -56,7 +56,7 @@
 * NOTE: Those private flags (XML_STREAM_xxx) are used
 *   in _xmlStreamCtxt->flag. They extend the public
 *   xmlPatternFlags, so be carefull not to interfere with the
-*   reserved values for xmlPatternFlags. 
+*   reserved values for xmlPatternFlags.
 */
 #define XML_STREAM_FINAL_IS_ANY_NODE 1<<14
 #define XML_STREAM_FROM_ROOT 1<<15
@@ -162,7 +162,7 @@ struct _xmlStepOp {
 #define PAT_FROM_CUR   (1<<9)
 
 struct _xmlPattern {
-    void *data;                /* the associated template */
+    void *data;                /* the associated template */
     xmlDictPtr dict;           /* the optional dictionary */
     struct _xmlPattern *next;  /* next pattern if | is used */
     const xmlChar *pattern;    /* the pattern */
@@ -181,15 +181,15 @@ struct _xmlPatParserContext {
     int                   error;               /* error code */
     xmlDictPtr     dict;               /* the dictionary if any */
     xmlPatternPtr  comp;               /* the result */
-    xmlNodePtr     elem;               /* the current node if any */    
+    xmlNodePtr     elem;               /* the current node if any */
     const xmlChar **namespaces;                /* the namespaces definitions */
     int   nb_namespaces;               /* the number of namespaces */
 };
 
 /************************************************************************
- *                                                                     *
- *                     Type functions                                  *
- *                                                                     *
+ *                                                                     *
+ *                     Type functions                                  *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -327,7 +327,7 @@ xmlNewPatParserContext(const xmlChar *pattern, xmlDictPtr dict,
 static void
 xmlFreePatParserContext(xmlPatParserContextPtr ctxt) {
     if (ctxt == NULL)
-       return;    
+       return;
     memset(ctxt, -1, sizeof(xmlPatParserContext));
     xmlFree(ctxt);
 }
@@ -455,9 +455,9 @@ xmlReversePattern(xmlPatternPtr comp) {
 }
 
 /************************************************************************
- *                                                                     *
- *             The interpreter for the precompiled patterns            *
- *                                                                     *
+ *                                                                     *
+ *             The interpreter for the precompiled patterns            *
+ *                                                                     *
  ************************************************************************/
 
 static int
@@ -709,7 +709,7 @@ rollback:
  *                                                                     *
  ************************************************************************/
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -719,14 +719,14 @@ rollback:
 #define PEEKPREV(val) ctxt->cur[-(val)]
 #define CUR_PTR ctxt->cur
 
-#define SKIP_BLANKS                                                    \
+#define SKIP_BLANKS                                                    \
     while (IS_BLANK_CH(CUR)) NEXT
 
 #define CURRENT (*ctxt->cur)
 #define NEXT ((*ctxt->cur) ?  ctxt->cur++: ctxt->cur)
 
 
-#define PUSH(op, val, val2)                                            \
+#define PUSH(op, val, val2)                                            \
     if (xmlPatternAdd(ctxt, ctxt->comp, (op), (val), (val2))) goto error;
 
 #define XSLT_ERROR(X)                                                  \
@@ -772,7 +772,7 @@ xmlPatScanLiteral(xmlPatParserContextPtr ctxt) {
            if (ctxt->dict)
                ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
            else
-               ret = xmlStrndup(q, cur - q);       
+               ret = xmlStrndup(q, cur - q);
         }
        cur += len;
        CUR_PTR = cur;
@@ -791,7 +791,7 @@ xmlPatScanLiteral(xmlPatParserContextPtr ctxt) {
            if (ctxt->dict)
                ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
            else
-               ret = xmlStrndup(q, cur - q);       
+               ret = xmlStrndup(q, cur - q);
         }
        cur += len;
        CUR_PTR = cur;
@@ -808,7 +808,7 @@ xmlPatScanLiteral(xmlPatParserContextPtr ctxt) {
  * xmlPatScanName:
  * @ctxt:  the XPath Parser context
  *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | 
+ * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' |
  *                  CombiningChar | Extender
  *
  * [5] Name ::= (Letter | '_' | ':') (NameChar)*
@@ -833,7 +833,7 @@ xmlPatScanName(xmlPatParserContextPtr ctxt) {
 
     while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
            (val == '.') || (val == '-') ||
-          (val == '_') || 
+          (val == '_') ||
           (IS_COMBINING(val)) ||
           (IS_EXTENDER(val))) {
        cur += len;
@@ -842,7 +842,7 @@ xmlPatScanName(xmlPatParserContextPtr ctxt) {
     if (ctxt->dict)
        ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
     else
-       ret = xmlStrndup(q, cur - q);    
+       ret = xmlStrndup(q, cur - q);
     CUR_PTR = cur;
     return(ret);
 }
@@ -922,7 +922,7 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
     xmlChar *token = NULL;
     xmlChar *name = NULL;
     xmlChar *URL = NULL;
-    
+
     SKIP_BLANKS;
     name = xmlPatScanNCName(ctxt);
     if (name == NULL) {
@@ -939,10 +939,10 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
     if (CUR == ':') {
        int i;
        xmlChar *prefix = name;
-       
+
        NEXT;
 
-       if (IS_BLANK_CH(CUR)) {     
+       if (IS_BLANK_CH(CUR)) {
            ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
            XML_PAT_FREE_STRING(ctxt, prefix);
            ctxt->error = 1;
@@ -957,11 +957,11 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
            (prefix[2] == 'l') &&
            (prefix[3] == 0))
        {
-           XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE);      
+           XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE);
        } else {
            for (i = 0;i < ctxt->nb_namespaces;i++) {
                if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
-                   XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])                 
+                   XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])
                    break;
                }
            }
@@ -969,7 +969,7 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
                ERROR5(NULL, NULL, NULL,
                    "xmlCompileAttributeTest : no namespace bound to prefix %s\n",
                    prefix);
-               ctxt->error = 1;            
+               ctxt->error = 1;
                goto error;
            }
        }
@@ -983,7 +983,7 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
                    "xmlCompileAttributeTest : Name expected\n");
                ctxt->error = 1;
                goto error;
-           }       
+           }
        } else {
            PUSH(XML_OP_ATTR, token, URL);
        }
@@ -993,7 +993,7 @@ xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
     return;
 error:
     if (URL != NULL)
-       XML_PAT_FREE_STRING(ctxt, URL)  
+       XML_PAT_FREE_STRING(ctxt, URL)
     if (token != NULL)
        XML_PAT_FREE_STRING(ctxt, token);
 }
@@ -1006,7 +1006,7 @@ error:
  * form suitable for fast matching.
  *
  * [3]    Step    ::=    '.' | NameTest
- * [4]    NameTest    ::=    QName | '*' | NCName ':' '*' 
+ * [4]    NameTest    ::=    QName | '*' | NCName ':' '*'
  */
 
 static void
@@ -1037,7 +1037,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
        }
        NEXT;
        xmlCompileAttributeTest(ctxt);
-       if (ctxt->error != 0) 
+       if (ctxt->error != 0)
            goto error;
        return;
     }
@@ -1062,7 +1062,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
        NEXT;
        if (CUR != ':') {
            xmlChar *prefix = name;
-           int i;          
+           int i;
 
            if (hasBlanks || IS_BLANK_CH(CUR)) {
                ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
@@ -1111,7 +1111,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
            }
        } else {
            NEXT;
-           if (xmlStrEqual(name, (const xmlChar *) "child")) {         
+           if (xmlStrEqual(name, (const xmlChar *) "child")) {
                XML_PAT_FREE_STRING(ctxt, name);
                name = xmlPatScanName(ctxt);
                if (name == NULL) {
@@ -1129,7 +1129,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
                if (CUR == ':') {
                    xmlChar *prefix = name;
                    int i;
-                   
+
                    NEXT;
                    if (IS_BLANK_CH(CUR)) {
                        ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
@@ -1145,11 +1145,11 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
                        (prefix[2] == 'l') &&
                        (prefix[3] == 0))
                    {
-                       XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE)                       
+                       XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE)
                    } else {
                        for (i = 0;i < ctxt->nb_namespaces;i++) {
                            if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
-                               XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])                         
+                               XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])
                                break;
                            }
                        }
@@ -1197,7 +1197,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
                    "The 'element' or 'attribute' axis is expected.\n", NULL);
                ctxt->error = 1;
                goto error;
-           }       
+           }
        }
     } else if (CUR == '*') {
         if (name != NULL) {
@@ -1212,7 +1212,7 @@ xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
     return;
 error:
     if (URL != NULL)
-       XML_PAT_FREE_STRING(ctxt, URL)  
+       XML_PAT_FREE_STRING(ctxt, URL)
     if (token != NULL)
        XML_PAT_FREE_STRING(ctxt, token)
     if (name != NULL)
@@ -1226,7 +1226,7 @@ error:
  * Compile the Path Pattern and generates a precompiled
  * form suitable for fast matching.
  *
- * [5]    Path    ::=    ('.//')? ( Step '/' )* ( Step | '@' NameTest ) 
+ * [5]    Path    ::=    ('.//')? ( Step '/' )* ( Step | '@' NameTest )
  */
 static void
 xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
@@ -1236,7 +1236,7 @@ xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
     } else if ((CUR == '.') || (ctxt->comp->flags & XML_PATTERN_NOTPATTERN)) {
         ctxt->comp->flags |= PAT_FROM_CUR;
     }
-       
+
     if ((CUR == '/') && (NXT(1) == '/')) {
        PUSH(XML_OP_ANCESTOR, NULL, NULL);
        NEXT;
@@ -1299,7 +1299,7 @@ xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
                    ERROR5(NULL, NULL, NULL,
                    "Incomplete expression '%s'.\n", ctxt->base);
                    ctxt->error = 1;
-                   goto error;             
+                   goto error;
                }
                xmlCompileStepPattern(ctxt);
                if (ctxt->error != 0)
@@ -1323,7 +1323,7 @@ error:
  * Compile the Path Pattern and generates a precompiled
  * form suitable for fast matching.
  *
- * [5]    Path    ::=    ('.//')? ( Step '/' )* ( Step | '@' NameTest ) 
+ * [5]    Path    ::=    ('.//')? ( Step '/' )* ( Step | '@' NameTest )
  */
 static void
 xmlCompileIDCXPathPath(xmlPatParserContextPtr ctxt) {
@@ -1378,7 +1378,7 @@ xmlCompileIDCXPathPath(xmlPatParserContextPtr ctxt) {
     */
     do {
        xmlCompileStepPattern(ctxt);
-       if (ctxt->error != 0) 
+       if (ctxt->error != 0)
            goto error;
        SKIP_BLANKS;
        if (CUR != '/')
@@ -1397,7 +1397,7 @@ xmlCompileIDCXPathPath(xmlPatParserContextPtr ctxt) {
        }
        if (CUR == 0)
            goto error_unfinished;
-       
+
     } while (CUR != 0);
 
     if (CUR != 0) {
@@ -1413,7 +1413,7 @@ error:
 error_unfinished:
     ctxt->error = 1;
     ERROR5(NULL, NULL, NULL,
-       "Unfinished expression '%s'.\n", ctxt->base);    
+       "Unfinished expression '%s'.\n", ctxt->base);
     return;
 }
 
@@ -1568,7 +1568,7 @@ xmlStreamCompAddStep(xmlStreamCompPtr comp, const xmlChar *name,
 /**
  * xmlStreamCompile:
  * @comp: the precompiled pattern
- * 
+ *
  * Tries to stream compile a pattern
  *
  * Returns -1 in case of failure and 0 in case of success.
@@ -1605,7 +1605,7 @@ xmlStreamCompile(xmlPatternPtr comp) {
        xmlDictReference(stream->dict);
     }
 
-    i = 0;        
+    i = 0;
     if (comp->flags & PAT_FROM_ROOT)
        stream->flags |= XML_STREAM_FROM_ROOT;
 
@@ -1621,12 +1621,12 @@ xmlStreamCompile(xmlPatternPtr comp) {
                break;
            case XML_OP_NS:
                s = xmlStreamCompAddStep(stream, NULL, step.value,
-                   XML_ELEMENT_NODE, flags);           
+                   XML_ELEMENT_NODE, flags);
                if (s < 0)
                    goto error;
                prevs = s;
-               flags = 0;              
-               break;      
+               flags = 0;
+               break;
            case XML_OP_ATTR:
                flags |= XML_STREAM_STEP_ATTR;
                prevs = -1;
@@ -1636,7 +1636,7 @@ xmlStreamCompile(xmlPatternPtr comp) {
                if (s < 0)
                    goto error;
                break;
-           case XML_OP_ELEM:           
+           case XML_OP_ELEM:
                if ((step.value == NULL) && (step.value2 == NULL)) {
                    /*
                    * We have a "." or "self::node()" here.
@@ -1655,7 +1655,7 @@ xmlStreamCompile(xmlPatternPtr comp) {
                        if (comp->nbStep == i + 1) {
                            stream->flags |= XML_STREAM_FINAL_IS_ANY_NODE;
                        }
-                       flags |= XML_STREAM_STEP_NODE;                  
+                       flags |= XML_STREAM_STEP_NODE;
                        s = xmlStreamCompAddStep(stream, NULL, NULL,
                            XML_STREAM_ANY_NODE, flags);
                        if (s < 0)
@@ -1671,39 +1671,39 @@ xmlStreamCompile(xmlPatternPtr comp) {
                            stream->steps[prevs].flags |= XML_STREAM_STEP_IN_SET;
                            prevs = -1;
                        }
-                       break;  
+                       break;
 
                    } else {
                        /* Just skip this one. */
                        continue;
                    }
                }
-               /* An element node. */          
+               /* An element node. */
                s = xmlStreamCompAddStep(stream, step.value, step.value2,
-                   XML_ELEMENT_NODE, flags);           
+                   XML_ELEMENT_NODE, flags);
                if (s < 0)
                    goto error;
                prevs = s;
-               flags = 0;              
-               break;          
+               flags = 0;
+               break;
            case XML_OP_CHILD:
                /* An element node child. */
                s = xmlStreamCompAddStep(stream, step.value, step.value2,
-                   XML_ELEMENT_NODE, flags);           
+                   XML_ELEMENT_NODE, flags);
                if (s < 0)
                    goto error;
                prevs = s;
                flags = 0;
-               break;      
+               break;
            case XML_OP_ALL:
                s = xmlStreamCompAddStep(stream, NULL, NULL,
-                   XML_ELEMENT_NODE, flags);           
+                   XML_ELEMENT_NODE, flags);
                if (s < 0)
                    goto error;
                prevs = s;
                flags = 0;
                break;
-           case XML_OP_PARENT: 
+           case XML_OP_PARENT:
                break;
            case XML_OP_ANCESTOR:
                /* Skip redundant continuations. */
@@ -1717,7 +1717,7 @@ xmlStreamCompile(xmlPatternPtr comp) {
                    stream->flags |= XML_STREAM_DESC;
                break;
        }
-    }    
+    }
     if ((! root) && (comp->flags & XML_PATTERN_NOTPATTERN) == 0) {
        /*
        * If this should behave like a real pattern, we will mark
@@ -1729,7 +1729,7 @@ xmlStreamCompile(xmlPatternPtr comp) {
 
        if (stream->nbStep > 0) {
            if ((stream->steps[0].flags & XML_STREAM_STEP_DESC) == 0)
-               stream->steps[0].flags |= XML_STREAM_STEP_DESC;     
+               stream->steps[0].flags |= XML_STREAM_STEP_DESC;
        }
     }
     if (stream->nbStep <= s)
@@ -1922,7 +1922,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
            if ((nodeType != XML_ATTRIBUTE_NODE) &&
                (((stream->flags & XML_PATTERN_NOTPATTERN) == 0) ||
                (stream->level == 0))) {
-                   ret = 1;            
+                   ret = 1;
            }
            stream->level++;
            goto stream_next;
@@ -1931,7 +1931,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
            /*
            * Skip blocked expressions.
            */
-           stream->level++;
+           stream->level++;
            goto stream_next;
        }
 
@@ -1974,7 +1974,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                * If there are "//", then we need to process every "//"
                * occuring in the states, plus any other state for this
                * level.
-               */              
+               */
                stepNr = stream->states[2 * i];
 
                /* TODO: should not happen anymore: dead states */
@@ -1992,7 +1992,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                if ((tmp < stream->level) && (!desc))
                    goto next_state;
            }
-           /* 
+           /*
            * Check for correct node-type.
            */
            step = comp->steps[stepNr];
@@ -2006,7 +2006,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                    goto next_state;
                } else if (step.nodeType != XML_STREAM_ANY_NODE)
                    goto next_state;
-           }       
+           }
            /*
            * Compare local/namespace-name.
            */
@@ -2027,9 +2027,9 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                xmlStrEqual(step.name, name) &&
                ((step.ns == ns) || xmlStrEqual(step.ns, ns)))
            {
-               match = 1;          
-           }    
-#if 0 
+               match = 1;
+           }
+#if 0
 /*
 * TODO: Pointer comparison won't work, since not guaranteed that the given
 *  values are in the same dict; especially if it's the namespace name,
@@ -2044,8 +2044,8 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                } else {
                    match = ((step.name == name) && (step.ns == ns));
                }
-#endif /* if 0 ------------------------------------------------------- */          
-           if (match) {                
+#endif /* if 0 ------------------------------------------------------- */
+           if (match) {
                final = step.flags & XML_STREAM_STEP_FINAL;
                if (desc) {
                    if (final) {
@@ -2070,7 +2070,7 @@ xmlStreamPushInternal(xmlStreamCtxtPtr stream,
                    */
                    ret = 1;
                }
-           }       
+           }
            if (((comp->flags & XML_STREAM_DESC) == 0) &&
                ((! match) || final))  {
                /*
@@ -2101,7 +2101,7 @@ next_state:
            * Re/enter the expression if it is a "descendant" one,
            * or if we are at the 1st level of evaluation.
            */
-           
+
            if (stream->level == 1) {
                if (XML_STREAM_XS_IDC(stream)) {
                    /*
@@ -2111,7 +2111,7 @@ next_state:
                    goto stream_next;
                } else
                    goto compare;
-           }       
+           }
            /*
            * A "//" is always reentrant.
            */
@@ -2121,14 +2121,14 @@ next_state:
            /*
            * XS-IDC: Process the 2nd level, since the missing
            * "self::node()" is responsible for the 2nd level being
-           * the real start level.         
-           */      
+           * the real start level.
+           */
            if ((stream->level == 2) && XML_STREAM_XS_IDC(stream))
                goto compare;
 
            goto stream_next;
        }
-       
+
 compare:
        /*
        * Check expected node-type.
@@ -2137,7 +2137,7 @@ compare:
            if (nodeType == XML_ATTRIBUTE_NODE)
                goto stream_next;
            else if (step.nodeType != XML_STREAM_ANY_NODE)
-               goto stream_next;            
+               goto stream_next;
        }
        /*
        * Compare local/namespace-name.
@@ -2159,10 +2159,10 @@ compare:
            xmlStrEqual(step.name, name) &&
            ((step.ns == ns) || xmlStrEqual(step.ns, ns)))
        {
-           match = 1;      
-       }           
+           match = 1;
+       }
        final = step.flags & XML_STREAM_STEP_FINAL;
-       if (match) {        
+       if (match) {
            if (final)
                ret = 1;
            else
@@ -2187,7 +2187,7 @@ compare:
 stream_next:
         stream = stream->next;
     } /* while stream != NULL */
+
     if (err > 0)
         ret = -1;
 #ifdef DEBUG_STREAMING
@@ -2279,7 +2279,7 @@ xmlStreamPushAttr(xmlStreamCtxtPtr stream,
 int
 xmlStreamPop(xmlStreamCtxtPtr stream) {
     int i, lev;
-    
+
     if (stream == NULL)
         return(-1);
     while (stream != NULL) {
@@ -2298,7 +2298,7 @@ xmlStreamPop(xmlStreamCtxtPtr stream) {
            stream->level--;
        /*
         * Check evolution of existing states
-        */     
+        */
        for (i = stream->nbState -1; i >= 0; i--) {
            /* discard obsoleted states */
            lev = stream->states[(2 * i) + 1];
@@ -2326,11 +2326,11 @@ xmlStreamPop(xmlStreamCtxtPtr stream) {
  */
 int
 xmlStreamWantsAnyNode(xmlStreamCtxtPtr streamCtxt)
-{    
+{
     if (streamCtxt == NULL)
        return(-1);
     while (streamCtxt != NULL) {
-       if (streamCtxt->comp->flags & XML_STREAM_FINAL_IS_ANY_NODE)     
+       if (streamCtxt->comp->flags & XML_STREAM_FINAL_IS_ANY_NODE)
            return(1);
        streamCtxt = streamCtxt->next;
     }
@@ -2381,13 +2381,13 @@ xmlPatterncompile(const xmlChar *pattern, xmlDict *dict, int flags,
            }
            or++;
        }
-       if (ctxt == NULL) goto error;   
+       if (ctxt == NULL) goto error;
        cur = xmlNewPattern();
        if (cur == NULL) goto error;
        /*
        * Assign string dict.
        */
-       if (dict) {         
+       if (dict) {
            cur->dict = dict;
            xmlDictReference(dict);
        }
@@ -2570,7 +2570,7 @@ xmlPatternMaxDepth(xmlPatternPtr comp) {
  * part of the set.
  *
  * Returns -1 in case of error otherwise the depth,
- *         
+ *
  */
 int
 xmlPatternMinDepth(xmlPatternPtr comp) {
index 68d2236..34aed96 100644 (file)
@@ -1,67 +1,54 @@
 # Makefile for libxml2 python library
 AUTOMAKE_OPTIONS = 1.4 foreign
 
-SUBDIRS= . tests
-
-INCLUDES = \
-       -I$(PYTHON_INCLUDES) \
-       -I$(top_srcdir)/include \
-       -I$(top_builddir)/include \
-       -I$(top_builddir)/$(subdir)
+SUBDIRS = . tests
 
 docsdir = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)
-# libxml2class.txt is generated
 dist_docs_DATA = TODO
 
 EXTRA_DIST =                   \
        setup.py                \
-       setup.py.in             \
        generator.py            \
-       libxml_wrap.h           \
        libxml.py               \
-       libxml2-python-api.xml
-
-libxml2mod_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ -module -avoid-version 
+       libxml2-export.c        \
+       libxml2-python-api.xml  \
+       libxml2class.py         \
+       libxml2class.txt
 
 if WITH_PYTHON
-mylibs = \
-       $(top_builddir)/libxml2.la
+AM_CPPFLAGS = \
+       -I$(top_builddir)/include \
+       -I$(top_srcdir)/include \
+       -I$(PYTHON_INCLUDES)
 
 python_LTLIBRARIES = libxml2mod.la
 
-libxml2mod_la_SOURCES = $(srcdir)/libxml.c $(srcdir)/types.c
-nodist_libxml2mod_la_SOURCES = libxml2-py.c
-libxml2mod_la_LIBADD = $(mylibs) @CYGWIN_EXTRA_PYTHON_LIBADD@ @WIN32_EXTRA_PYTHON_LIBADD@ @PYTHON_LIBS@ -lpython$(PYTHON_VERSION)
+libxml2mod_la_SOURCES = libxml.c libxml_wrap.h libxml2-py.h libxml2-py.c types.c
+libxml2mod_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) -module -avoid-version \
+        $(top_builddir)/libxml2.la $(CYGWIN_EXTRA_PYTHON_LIBADD) $(WIN32_EXTRA_PYTHON_LIBADD) $(PYTHON_LIBS)
 
-$(srcdir)/libxml.c: libxml2-py.h # to generate before to compile
+BUILT_SOURCES = libxml2-export.c libxml2-py.h libxml2-py.c
 
+# libxml.c #includes libxml2-export.c
+libxml.$(OBJEXT): libxml2-export.c
 
 libxml2.py: $(srcdir)/libxml.py libxml2class.py
-       cat $(srcdir)/libxml.py libxml2class.py > $@
-
-python_DATA = \
-       libxml2.py
+       cat $(srcdir)/libxml.py `test -f libxml2class.py || echo $(srcdir)/`libxml2class.py > $@
 
 dist_python_DATA = \
-       drv_libxml2.py
+       drv_libxml2.py \
+       libxml2.py
        
-GENERATE = generator.py
-API_DESC = $(top_srcdir)/doc/libxml2-api.xml $(srcdir)/libxml2-python-api.xml
-GENERATED= libxml2class.py \
-           libxml2-export.c \
-           libxml2class.txt \
-          libxml2-py.c \
-          libxml2-py.h
+CLEANFILES = *.pyc
 
-CLEANFILES= $(GENERATED) gen_prog libxml2.py
+MAINTAINERCLEANFILES = libxml2.py libxml2class.*
 
-$(GENERATED): gen_prog
+API_DESC = $(top_srcdir)/doc/libxml2-api.xml $(srcdir)/libxml2-python-api.xml
+GENERATED = libxml2class.py libxml2class.txt $(BUILT_SOURCES)
 
-gen_prog: $(srcdir)/$(GENERATE) $(API_DESC)
-       $(PYTHON) $(srcdir)/$(GENERATE) $(srcdir)
-       touch gen_prog
+$(GENERATED): $(srcdir)/generator.py $(API_DESC)
+       $(PYTHON) $(srcdir)/generator.py $(srcdir)
 endif
 
 tests test: all
-       cd tests && $(MAKE) MAKEFLAGS+=--silent tests
-
+       cd tests && $(MAKE) tests
index 7b19b89..03fbd5b 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -36,14 +80,14 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = python
-DIST_COMMON = README $(am__dist_python_DATA_DIST) $(dist_docs_DATA) \
-       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
-       $(srcdir)/setup.py.in TODO
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(srcdir)/setup.py.in $(top_srcdir)/depcomp $(dist_docs_DATA) \
+       $(am__dist_python_DATA_DIST) README TODO
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
@@ -71,22 +115,41 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(docsdir)" \
-       "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(pythondir)"
+       "$(DESTDIR)$(pythondir)"
 LTLIBRARIES = $(python_LTLIBRARIES)
-@WITH_PYTHON_TRUE@libxml2mod_la_DEPENDENCIES = $(mylibs)
-am__libxml2mod_la_SOURCES_DIST = $(srcdir)/libxml.c $(srcdir)/types.c
-@WITH_PYTHON_TRUE@am_libxml2mod_la_OBJECTS = libxml.lo types.lo
-@WITH_PYTHON_TRUE@nodist_libxml2mod_la_OBJECTS = libxml2-py.lo
-libxml2mod_la_OBJECTS = $(am_libxml2mod_la_OBJECTS) \
-       $(nodist_libxml2mod_la_OBJECTS)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+libxml2mod_la_LIBADD =
+am__libxml2mod_la_SOURCES_DIST = libxml.c libxml_wrap.h libxml2-py.h \
+       libxml2-py.c types.c
+@WITH_PYTHON_TRUE@am_libxml2mod_la_OBJECTS = libxml.lo libxml2-py.lo \
+@WITH_PYTHON_TRUE@     types.lo
+libxml2mod_la_OBJECTS = $(am_libxml2mod_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
 am__v_lt_0 = --silent
+am__v_lt_1 = 
 libxml2mod_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(libxml2mod_la_LDFLAGS) $(LDFLAGS) -o $@
 @WITH_PYTHON_TRUE@am_libxml2mod_la_rpath = -rpath $(pythondir)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
@@ -97,38 +160,60 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
        $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
        $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_$(V))
-am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
-am__v_CC_0 = @echo "  CC    " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
-am__v_at_0 = @
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
 CCLD = $(CC)
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_$(V))
-am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
-am__v_CCLD_0 = @echo "  CCLD  " $@;
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(libxml2mod_la_SOURCES) $(nodist_libxml2mod_la_SOURCES)
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libxml2mod_la_SOURCES)
 DIST_SOURCES = $(am__libxml2mod_la_SOURCES_DIST)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
-am__dist_python_DATA_DIST = drv_libxml2.py
-DATA = $(dist_docs_DATA) $(dist_python_DATA) $(python_DATA)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+       ctags-recursive dvi-recursive html-recursive info-recursive \
+       install-data-recursive install-dvi-recursive \
+       install-exec-recursive install-html-recursive \
+       install-info-recursive install-pdf-recursive \
+       install-ps-recursive install-recursive installcheck-recursive \
+       installdirs-recursive pdf-recursive ps-recursive \
+       tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__dist_python_DATA_DIST = drv_libxml2.py libxml2.py
+DATA = $(dist_docs_DATA) $(dist_python_DATA)
 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
   distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
        distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
@@ -162,7 +247,6 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -199,6 +283,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -243,6 +328,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -254,7 +342,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -279,7 +366,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -312,6 +398,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -389,47 +476,38 @@ top_srcdir = @top_srcdir@
 # Makefile for libxml2 python library
 AUTOMAKE_OPTIONS = 1.4 foreign
 SUBDIRS = . tests
-INCLUDES = \
-       -I$(PYTHON_INCLUDES) \
-       -I$(top_srcdir)/include \
-       -I$(top_builddir)/include \
-       -I$(top_builddir)/$(subdir)
-
 docsdir = $(datadir)/doc/libxml2-python-$(LIBXML_VERSION)
-# libxml2class.txt is generated
 dist_docs_DATA = TODO
 EXTRA_DIST = \
        setup.py                \
-       setup.py.in             \
        generator.py            \
-       libxml_wrap.h           \
        libxml.py               \
-       libxml2-python-api.xml
+       libxml2-export.c        \
+       libxml2-python-api.xml  \
+       libxml2class.py         \
+       libxml2class.txt
 
-libxml2mod_la_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@ @WIN32_EXTRA_LDFLAGS@ -module -avoid-version 
-@WITH_PYTHON_TRUE@mylibs = \
-@WITH_PYTHON_TRUE@     $(top_builddir)/libxml2.la
+@WITH_PYTHON_TRUE@AM_CPPFLAGS = \
+@WITH_PYTHON_TRUE@     -I$(top_builddir)/include \
+@WITH_PYTHON_TRUE@     -I$(top_srcdir)/include \
+@WITH_PYTHON_TRUE@     -I$(PYTHON_INCLUDES)
 
 @WITH_PYTHON_TRUE@python_LTLIBRARIES = libxml2mod.la
-@WITH_PYTHON_TRUE@libxml2mod_la_SOURCES = $(srcdir)/libxml.c $(srcdir)/types.c
-@WITH_PYTHON_TRUE@nodist_libxml2mod_la_SOURCES = libxml2-py.c
-@WITH_PYTHON_TRUE@libxml2mod_la_LIBADD = $(mylibs) @CYGWIN_EXTRA_PYTHON_LIBADD@ @WIN32_EXTRA_PYTHON_LIBADD@ @PYTHON_LIBS@ -lpython$(PYTHON_VERSION)
-@WITH_PYTHON_TRUE@python_DATA = \
-@WITH_PYTHON_TRUE@     libxml2.py
+@WITH_PYTHON_TRUE@libxml2mod_la_SOURCES = libxml.c libxml_wrap.h libxml2-py.h libxml2-py.c types.c
+@WITH_PYTHON_TRUE@libxml2mod_la_LDFLAGS = $(CYGWIN_EXTRA_LDFLAGS) $(WIN32_EXTRA_LDFLAGS) -module -avoid-version \
+@WITH_PYTHON_TRUE@        $(top_builddir)/libxml2.la $(CYGWIN_EXTRA_PYTHON_LIBADD) $(WIN32_EXTRA_PYTHON_LIBADD) $(PYTHON_LIBS)
 
+@WITH_PYTHON_TRUE@BUILT_SOURCES = libxml2-export.c libxml2-py.h libxml2-py.c
 @WITH_PYTHON_TRUE@dist_python_DATA = \
-@WITH_PYTHON_TRUE@     drv_libxml2.py
+@WITH_PYTHON_TRUE@     drv_libxml2.py \
+@WITH_PYTHON_TRUE@     libxml2.py
 
-@WITH_PYTHON_TRUE@GENERATE = generator.py
+@WITH_PYTHON_TRUE@CLEANFILES = *.pyc
+@WITH_PYTHON_TRUE@MAINTAINERCLEANFILES = libxml2.py libxml2class.*
 @WITH_PYTHON_TRUE@API_DESC = $(top_srcdir)/doc/libxml2-api.xml $(srcdir)/libxml2-python-api.xml
-@WITH_PYTHON_TRUE@GENERATED = libxml2class.py \
-@WITH_PYTHON_TRUE@           libxml2-export.c \
-@WITH_PYTHON_TRUE@           libxml2class.txt \
-@WITH_PYTHON_TRUE@        libxml2-py.c \
-@WITH_PYTHON_TRUE@        libxml2-py.h
-
-@WITH_PYTHON_TRUE@CLEANFILES = $(GENERATED) gen_prog libxml2.py
-all: all-recursive
+@WITH_PYTHON_TRUE@GENERATED = libxml2class.py libxml2class.txt $(BUILT_SOURCES)
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
 
 .SUFFIXES:
 .SUFFIXES: .c .lo .o .obj
@@ -465,9 +543,9 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in
        cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
 install-pythonLTLIBRARIES: $(python_LTLIBRARIES)
        @$(NORMAL_INSTALL)
-       test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)"
        @list='$(python_LTLIBRARIES)'; test -n "$(pythondir)" || list=; \
        list2=; for p in $$list; do \
          if test -f $$p; then \
@@ -475,6 +553,8 @@ install-pythonLTLIBRARIES: $(python_LTLIBRARIES)
          else :; fi; \
        done; \
        test -z "$$list2" || { \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \
          echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pythondir)'"; \
          $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pythondir)"; \
        }
@@ -490,13 +570,16 @@ uninstall-pythonLTLIBRARIES:
 
 clean-pythonLTLIBRARIES:
        -test -z "$(python_LTLIBRARIES)" || rm -f $(python_LTLIBRARIES)
-       @list='$(python_LTLIBRARIES)'; for p in $$list; do \
-         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-         test "$$dir" != "$$p" || dir=.; \
-         echo "rm -f \"$${dir}/so_locations\""; \
-         rm -f "$${dir}/so_locations"; \
-       done
-libxml2mod.la: $(libxml2mod_la_OBJECTS) $(libxml2mod_la_DEPENDENCIES) 
+       @list='$(python_LTLIBRARIES)'; \
+       locs=`for p in $$list; do echo $$p; done | \
+             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+             sort -u`; \
+       test -z "$$locs" || { \
+         echo rm -f $${locs}; \
+         rm -f $${locs}; \
+       }
+
+libxml2mod.la: $(libxml2mod_la_OBJECTS) $(libxml2mod_la_DEPENDENCIES) $(EXTRA_libxml2mod_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(libxml2mod_la_LINK) $(am_libxml2mod_la_rpath) $(libxml2mod_la_OBJECTS) $(libxml2mod_la_LIBADD) $(LIBS)
 
 mostlyclean-compile:
@@ -512,42 +595,23 @@ distclean-compile:
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
 
 .c.obj:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
 
 .c.lo:
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-libxml.lo: $(srcdir)/libxml.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libxml.lo -MD -MP -MF $(DEPDIR)/libxml.Tpo -c -o libxml.lo `test -f '$(srcdir)/libxml.c' || echo '$(srcdir)/'`$(srcdir)/libxml.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libxml.Tpo $(DEPDIR)/libxml.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/libxml.c' object='libxml.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libxml.lo `test -f '$(srcdir)/libxml.c' || echo '$(srcdir)/'`$(srcdir)/libxml.c
-
-types.lo: $(srcdir)/types.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT types.lo -MD -MP -MF $(DEPDIR)/types.Tpo -c -o types.lo `test -f '$(srcdir)/types.c' || echo '$(srcdir)/'`$(srcdir)/types.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/types.Tpo $(DEPDIR)/types.Plo
-@am__fastdepCC_FALSE@  $(AM_V_CC) @AM_BACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/types.c' object='types.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o types.lo `test -f '$(srcdir)/types.c' || echo '$(srcdir)/'`$(srcdir)/types.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -556,8 +620,11 @@ clean-libtool:
        -rm -rf .libs _libs
 install-dist_docsDATA: $(dist_docs_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(docsdir)" || $(MKDIR_P) "$(DESTDIR)$(docsdir)"
        @list='$(dist_docs_DATA)'; test -n "$(docsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docsdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -571,13 +638,14 @@ uninstall-dist_docsDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(dist_docs_DATA)'; test -n "$(docsdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(docsdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(docsdir)" && rm -f $$files
+       dir='$(DESTDIR)$(docsdir)'; $(am__uninstall_files_from_dir)
 install-dist_pythonDATA: $(dist_python_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)"
        @list='$(dist_python_DATA)'; test -n "$(pythondir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -591,47 +659,28 @@ uninstall-dist_pythonDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(dist_python_DATA)'; test -n "$(pythondir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pythondir)" && rm -f $$files
-install-pythonDATA: $(python_DATA)
-       @$(NORMAL_INSTALL)
-       test -z "$(pythondir)" || $(MKDIR_P) "$(DESTDIR)$(pythondir)"
-       @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \
-       for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         echo "$$d$$p"; \
-       done | $(am__base_list) | \
-       while read files; do \
-         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \
-         $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \
-       done
-
-uninstall-pythonDATA:
-       @$(NORMAL_UNINSTALL)
-       @list='$(python_DATA)'; test -n "$(pythondir)" || list=; \
-       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pythondir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pythondir)" && rm -f $$files
+       dir='$(DESTDIR)$(pythondir)'; $(am__uninstall_files_from_dir)
 
 # This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+       @fail=; \
+       if $(am__make_keepgoing); then \
+         failcom='fail=yes'; \
+       else \
+         failcom='exit 1'; \
+       fi; \
        dot_seen=no; \
        target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       for subdir in $$list; do \
          echo "Making $$target in $$subdir"; \
          if test "$$subdir" = "."; then \
            dot_seen=yes; \
@@ -646,57 +695,12 @@ $(RECURSIVE_TARGETS):
          $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
        fi; test -z "$$fail"
 
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
 
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
        set x; \
        here=`pwd`; \
        if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
@@ -712,12 +716,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
          fi; \
        done; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       $(am__define_uniq_tagged_files); \
        shift; \
        if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
          test -n "$$unique" || unique=$$empty_fix; \
@@ -729,15 +728,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
              $$unique; \
          fi; \
        fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-             END { if (nonempty) { for (i in files) print i; }; }'`; \
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
        test -z "$(CTAGS_ARGS)$$unique" \
          || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
             $$unique
@@ -746,6 +741,21 @@ GTAGS:
        here=`$(am__cd) $(top_builddir) && pwd` \
          && $(am__cd) $(top_srcdir) \
          && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
@@ -782,13 +792,10 @@ distdir: $(DISTFILES)
        done
        @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
          if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
+           $(am__make_dryrun) \
+             || test -d "$(distdir)/$$subdir" \
+             || $(MKDIR_P) "$(distdir)/$$subdir" \
+             || exit 1; \
            dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
            $(am__relativize); \
            new_distdir=$$reldir; \
@@ -809,14 +816,16 @@ distdir: $(DISTFILES)
          fi; \
        done
 check-am: all-am
-check: check-recursive
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
 all-am: Makefile $(LTLIBRARIES) $(DATA)
 installdirs: installdirs-recursive
 installdirs-am:
-       for dir in "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(docsdir)" "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(pythondir)"; do \
+       for dir in "$(DESTDIR)$(pythondir)" "$(DESTDIR)$(docsdir)" "$(DESTDIR)$(pythondir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
-install: install-recursive
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-recursive
 install-exec: install-exec-recursive
 install-data: install-data-recursive
 uninstall: uninstall-recursive
@@ -826,10 +835,15 @@ install-am: all-am
 
 installcheck: installcheck-recursive
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -842,6 +856,8 @@ distclean-generic:
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
 clean: clean-recursive
 
 clean-am: clean-generic clean-libtool clean-pythonLTLIBRARIES \
@@ -866,7 +882,7 @@ info: info-recursive
 info-am:
 
 install-data-am: install-dist_docsDATA install-dist_pythonDATA \
-       install-pythonDATA install-pythonLTLIBRARIES
+       install-pythonLTLIBRARIES
 
 install-dvi: install-dvi-recursive
 
@@ -913,14 +929,14 @@ ps: ps-recursive
 ps-am:
 
 uninstall-am: uninstall-dist_docsDATA uninstall-dist_pythonDATA \
-       uninstall-pythonDATA uninstall-pythonLTLIBRARIES
+       uninstall-pythonLTLIBRARIES
 
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
-       install-am install-strip tags-recursive
+.MAKE: $(am__recursive_targets) all check install install-am \
+       install-strip
 
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am check check-am clean clean-generic clean-libtool \
-       clean-pythonLTLIBRARIES ctags ctags-recursive distclean \
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+       check-am clean clean-generic clean-libtool \
+       clean-pythonLTLIBRARIES cscopelist-am ctags ctags-am distclean \
        distclean-compile distclean-generic distclean-libtool \
        distclean-tags distdir dvi dvi-am html html-am info info-am \
        install install-am install-data install-data-am \
@@ -928,28 +944,25 @@ uninstall-am: uninstall-dist_docsDATA uninstall-dist_pythonDATA \
        install-dvi-am install-exec install-exec-am install-html \
        install-html-am install-info install-info-am install-man \
        install-pdf install-pdf-am install-ps install-ps-am \
-       install-pythonDATA install-pythonLTLIBRARIES install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-       pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
-       uninstall-dist_docsDATA uninstall-dist_pythonDATA \
-       uninstall-pythonDATA uninstall-pythonLTLIBRARIES
+       install-pythonLTLIBRARIES install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am uninstall-dist_docsDATA \
+       uninstall-dist_pythonDATA uninstall-pythonLTLIBRARIES
 
 
-@WITH_PYTHON_TRUE@$(srcdir)/libxml.c: libxml2-py.h # to generate before to compile
+# libxml.c #includes libxml2-export.c
+@WITH_PYTHON_TRUE@libxml.$(OBJEXT): libxml2-export.c
 
 @WITH_PYTHON_TRUE@libxml2.py: $(srcdir)/libxml.py libxml2class.py
-@WITH_PYTHON_TRUE@     cat $(srcdir)/libxml.py libxml2class.py > $@
-
-@WITH_PYTHON_TRUE@$(GENERATED): gen_prog
+@WITH_PYTHON_TRUE@     cat $(srcdir)/libxml.py `test -f libxml2class.py || echo $(srcdir)/`libxml2class.py > $@
 
-@WITH_PYTHON_TRUE@gen_prog: $(srcdir)/$(GENERATE) $(API_DESC)
-@WITH_PYTHON_TRUE@     $(PYTHON) $(srcdir)/$(GENERATE) $(srcdir)
-@WITH_PYTHON_TRUE@     touch gen_prog
+@WITH_PYTHON_TRUE@$(GENERATED): $(srcdir)/generator.py $(API_DESC)
+@WITH_PYTHON_TRUE@     $(PYTHON) $(srcdir)/generator.py $(srcdir)
 
 tests test: all
-       cd tests && $(MAKE) MAKEFLAGS+=--silent tests
+       cd tests && $(MAKE) tests
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
index e43fb1d..c2ec3e2 100644 (file)
@@ -34,12 +34,18 @@ TODO
 
 """
 
-__author__  = u"Stéphane Bidoul <sbi@skynet.be>"
+__author__  = "Stéphane Bidoul <sbi@skynet.be>"
 __version__ = "0.3"
 
+import sys
 import codecs
-from types import StringType, UnicodeType
-StringTypes = (StringType,UnicodeType)
+
+if sys.version_info[0] < 3:
+    __author__  = codecs.unicode_escape_decode(__author__)[0]
+
+    StringTypes = (str, unicode)
+else:
+    StringTypes = str
 
 from xml.sax._exceptions import *
 from xml.sax import xmlreader, saxutils
@@ -65,9 +71,9 @@ def _d(s):
 
 try:
     import libxml2
-except ImportError, e:
+except ImportError:
     raise SAXReaderNotAvailable("libxml2 not available: " \
-                                "import error was: %s" % e)
+                                "import error was: %s" % sys.exc_info()[1])
 
 class Locator(xmlreader.Locator):
     """SAX Locator adapter for libxml2.xmlTextReaderLocator"""
@@ -134,7 +140,7 @@ class LibXml2Reader(xmlreader.XMLReader):
         self.__parsing = 1
         try:
             # prepare source and create reader
-            if type(source) in StringTypes:
+            if isinstance(source, StringTypes):
                 reader = libxml2.newTextReaderFilename(source)
             else:
                 source = saxutils.prepare_input_source(source)
index 767c4bb..c0cb3ad 100755 (executable)
@@ -47,19 +47,19 @@ class docParser(xml.sax.handler.ContentHandler):
 
     def close(self):
         if debug:
-            print "close"
+            print("close")
 
     def getmethodname(self):
         return self._methodname
 
     def data(self, text):
         if debug:
-            print "data %s" % text
+            print("data %s" % text)
         self._data.append(text)
 
     def start(self, tag, attrs):
         if debug:
-            print "start %s, %s" % (tag, attrs)
+            print("start %s, %s" % (tag, attrs))
         if tag == 'function':
             self._data = []
             self.in_function = 1
@@ -69,9 +69,9 @@ class docParser(xml.sax.handler.ContentHandler):
             self.function_descr = None
             self.function_return = None
             self.function_file = None
-            if attrs.has_key('name'):
+            if 'name' in attrs.keys():
                 self.function = attrs['name']
-            if attrs.has_key('file'):
+            if 'file' in attrs.keys():
                 self.function_file = attrs['file']
         elif tag == 'cond':
             self._data = []
@@ -82,29 +82,29 @@ class docParser(xml.sax.handler.ContentHandler):
                 self.function_arg_name = None
                 self.function_arg_type = None
                 self.function_arg_info = None
-                if attrs.has_key('name'):
+                if 'name' in attrs.keys():
                     self.function_arg_name = attrs['name']
-                if attrs.has_key('type'):
+                if 'type' in attrs.keys():
                     self.function_arg_type = attrs['type']
-                if attrs.has_key('info'):
+                if 'info' in attrs.keys():
                     self.function_arg_info = attrs['info']
         elif tag == 'return':
             if self.in_function == 1:
                 self.function_return_type = None
                 self.function_return_info = None
                 self.function_return_field = None
-                if attrs.has_key('type'):
+                if 'type' in attrs.keys():
                     self.function_return_type = attrs['type']
-                if attrs.has_key('info'):
+                if 'info' in attrs.keys():
                     self.function_return_info = attrs['info']
-                if attrs.has_key('field'):
+                if 'field' in attrs.keys():
                     self.function_return_field = attrs['field']
         elif tag == 'enum':
             enum(attrs['type'],attrs['name'],attrs['value'])
 
     def end(self, tag):
         if debug:
-            print "end %s" % tag
+            print("end %s" % tag)
         if tag == 'function':
             if self.function != None:
                 function(self.function, self.function_descr,
@@ -133,13 +133,13 @@ class docParser(xml.sax.handler.ContentHandler):
                 str = str + c
             if self.in_function == 1:
                 self.function_cond = str
-                
-                
+
+
 def function(name, desc, ret, args, file, cond):
     functions[name] = (desc, ret, args, file, cond)
 
 def enum(type, name, value):
-    if not enums.has_key(type):
+    if type not in enums:
         enums[type] = {}
     enums[type][name] = value
 
@@ -339,6 +339,8 @@ def skip_function(name):
         return 1
     if name == "xmlValidateAttributeDecl":
         return 1
+    if name == "xmlPopInputCallbacks":
+        return 1
 
     return 0
 
@@ -351,10 +353,10 @@ def print_function_wrapper(name, output, export, include):
     try:
         (desc, ret, args, file, cond) = functions[name]
     except:
-        print "failed to get function %s infos"
+        print("failed to get function %s infos")
         return
 
-    if skipped_modules.has_key(file):
+    if file in skipped_modules:
         return 0
     if skip_function(name) == 1:
         return 0
@@ -368,16 +370,17 @@ def print_function_wrapper(name, output, export, include):
     c_args=""
     c_return=""
     c_convert=""
+    c_release=""
     num_bufs=0
     for arg in args:
         # This should be correct
         if arg[1][0:6] == "const ":
             arg[1] = arg[1][6:]
         c_args = c_args + "    %s %s;\n" % (arg[1], arg[0])
-        if py_types.has_key(arg[1]):
+        if arg[1] in py_types:
             (f, t, n, c) = py_types[arg[1]]
             if (f == 'z') and (name in foreign_encoding_args) and (num_bufs == 0):
-                f = 't#'
+                f = 's#'
             if f != None:
                 format = format + f
             if t != None:
@@ -388,17 +391,20 @@ def print_function_wrapper(name, output, export, include):
                    arg[1], t, arg[0])
             else:
                 format_args = format_args + ", &%s" % (arg[0])
-            if f == 't#':
+            if f == 's#':
                 format_args = format_args + ", &py_buffsize%d" % num_bufs
                 c_args = c_args + "    int py_buffsize%d;\n" % num_bufs
                 num_bufs = num_bufs + 1
             if c_call != "":
                 c_call = c_call + ", "
             c_call = c_call + "%s" % (arg[0])
+            if t == "File":
+                c_release = c_release + \
+                           "    PyFile_Release(%s);\n" % (arg[0])
         else:
-            if skipped_types.has_key(arg[1]):
+            if arg[1] in skipped_types:
                 return 0
-            if unknown_types.has_key(arg[1]):
+            if arg[1] in unknown_types:
                 lst = unknown_types[arg[1]]
                 lst.append(name)
             else:
@@ -420,25 +426,25 @@ def print_function_wrapper(name, output, export, include):
         else:
             c_call = "\n    %s(%s);\n" % (name, c_call)
         ret_convert = "    Py_INCREF(Py_None);\n    return(Py_None);\n"
-    elif py_types.has_key(ret[0]):
+    elif ret[0] in py_types:
         (f, t, n, c) = py_types[ret[0]]
-        c_return = "    %s c_retval;\n" % (ret[0])
+        c_return = c_return + "    %s c_retval;\n" % (ret[0])
         if file == "python_accessor" and ret[2] != None:
             c_call = "\n    c_retval = %s->%s;\n" % (args[0][0], ret[2])
         else:
             c_call = "\n    c_retval = %s(%s);\n" % (name, c_call)
         ret_convert = "    py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
         ret_convert = ret_convert + "    return(py_retval);\n"
-    elif py_return_types.has_key(ret[0]):
+    elif ret[0] in py_return_types:
         (f, t, n, c) = py_return_types[ret[0]]
-        c_return = "    %s c_retval;\n" % (ret[0])
+        c_return = c_return + "    %s c_retval;\n" % (ret[0])
         c_call = "\n    c_retval = %s(%s);\n" % (name, c_call)
         ret_convert = "    py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
         ret_convert = ret_convert + "    return(py_retval);\n"
     else:
-        if skipped_types.has_key(ret[0]):
+        if ret[0] in skipped_types:
             return 0
-        if unknown_types.has_key(ret[0]):
+        if ret[0] in unknown_types:
             lst = unknown_types[ret[0]]
             lst.append(name)
         else:
@@ -489,8 +495,10 @@ def print_function_wrapper(name, output, export, include):
         output.write("        return(NULL);\n")
     if c_convert != "":
         output.write(c_convert)
-                                                              
+
     output.write(c_call)
+    if c_release != "":
+        output.write(c_release)
     output.write(ret_convert)
     output.write("}\n\n")
     if cond != None and cond != "":
@@ -510,19 +518,19 @@ def buildStubs():
         (parser, target)  = getparser()
         parser.feed(data)
         parser.close()
-    except IOError, msg:
+    except IOError as msg:
         try:
             f = open(os.path.join(srcPref,"..","doc","libxml2-api.xml"))
             data = f.read()
             (parser, target)  = getparser()
             parser.feed(data)
             parser.close()
-        except IOError, msg:
-            print file, ":", msg
+        except IOError as msg:
+            print(file, ":", msg)
             sys.exit(1)
 
-    n = len(functions.keys())
-    print "Found %d functions in libxml2-api.xml" % (n)
+    n = len(list(functions.keys()))
+    print("Found %d functions in libxml2-api.xml" % (n))
 
     py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
     try:
@@ -531,12 +539,12 @@ def buildStubs():
         (parser, target)  = getparser()
         parser.feed(data)
         parser.close()
-    except IOError, msg:
-        print file, ":", msg
+    except IOError as msg:
+        print(file, ":", msg)
 
 
-    print "Found %d functions in libxml2-python-api.xml" % (
-          len(functions.keys()) - n)
+    print("Found %d functions in libxml2-python-api.xml" % (
+          len(list(functions.keys())) - n))
     nb_wrap = 0
     failed = 0
     skipped = 0
@@ -567,12 +575,12 @@ def buildStubs():
     export.close()
     wrapper.close()
 
-    print "Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
-                                                              failed, skipped)
-    print "Missing type converters: "
-    for type in unknown_types.keys():
-        print "%s:%d " % (type, len(unknown_types[type])),
-    print
+    print("Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
+                                                              failed, skipped))
+    print("Missing type converters: ")
+    for type in list(unknown_types.keys()):
+        print("%s:%d " % (type, len(unknown_types[type])))
+    print()
 
 #######################################################################
 #
@@ -589,7 +597,7 @@ classes_type = {
     "xmlNodePtr": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
     "xmlNode *": ("._o", "xmlNode(_obj=%s)", "xmlNode"),
     "xmlDocPtr": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
-    "xmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
+    "xmlDoc *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
     "htmlDocPtr": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
     "htmlxmlDocPtr *": ("._o", "xmlDoc(_obj=%s)", "xmlDoc"),
     "xmlAttrPtr": ("._o", "xmlAttr(_obj=%s)", "xmlAttr"),
@@ -697,40 +705,40 @@ def nameFixup(name, classe, type, file):
     l = len(classe)
     if name[0:l] == listname:
         func = name[l:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:12] == "xmlParserGet" and file == "python_accessor":
         func = name[12:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:12] == "xmlParserSet" and file == "python_accessor":
         func = name[12:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:10] == "xmlNodeGet" and file == "python_accessor":
         func = name[10:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:9] == "xmlURIGet" and file == "python_accessor":
         func = name[9:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:9] == "xmlURISet" and file == "python_accessor":
         func = name[6:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:11] == "xmlErrorGet" and file == "python_accessor":
         func = name[11:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:17] == "xmlXPathParserGet" and file == "python_accessor":
         func = name[17:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:11] == "xmlXPathGet" and file == "python_accessor":
         func = name[11:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:11] == "xmlXPathSet" and file == "python_accessor":
         func = name[8:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:15] == "xmlOutputBuffer" and file != "python":
         func = name[15:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:20] == "xmlParserInputBuffer" and file != "python":
         func = name[20:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:9] == "xmlRegexp" and file == "xmlregexp":
         func = "regexp" + name[9:]
     elif name[0:6] == "xmlReg" and file == "xmlregexp":
@@ -745,19 +753,19 @@ def nameFixup(name, classe, type, file):
         func = name[9:]
     elif name[0:11] == "xmlACatalog":
         func = name[11:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:l] == classe:
         func = name[l:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:7] == "libxml_":
         func = name[7:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:6] == "xmlGet":
         func = name[6:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     elif name[0:3] == "xml":
         func = name[3:]
-        func = string.lower(func[0:1]) + func[1:]
+        func = func[0:1].lower() + func[1:]
     else:
         func = name
     if func[0:5] == "xPath":
@@ -795,11 +803,29 @@ def functionCompare(info1, info2):
         return 1
     return 0
 
+def cmp_to_key(mycmp):
+    'Convert a cmp= function into a key= function'
+    class K(object):
+        def __init__(self, obj, *args):
+            self.obj = obj
+        def __lt__(self, other):
+            return mycmp(self.obj, other.obj) < 0
+        def __gt__(self, other):
+            return mycmp(self.obj, other.obj) > 0
+        def __eq__(self, other):
+            return mycmp(self.obj, other.obj) == 0
+        def __le__(self, other):
+            return mycmp(self.obj, other.obj) <= 0
+        def __ge__(self, other):
+            return mycmp(self.obj, other.obj) >= 0
+        def __ne__(self, other):
+            return mycmp(self.obj, other.obj) != 0
+    return K
 def writeDoc(name, args, indent, output):
      if functions[name][0] is None or functions[name][0] == "":
          return
      val = functions[name][0]
-     val = string.replace(val, "NULL", "None")
+     val = val.replace("NULL", "None")
      output.write(indent)
      output.write('"""')
      while len(val) > 60:
@@ -807,7 +833,7 @@ def writeDoc(name, args, indent, output):
              val = val[1:]
              continue
          str = val[0:60]
-         i = string.rfind(str, " ")
+         i = str.rfind(" ")
          if i < 0:
              i = 60
          str = val[0:i]
@@ -857,13 +883,13 @@ def buildWrappers():
                 ctypes.append(type)
                 ctypes_processed[type] = ()
     for type in sorted(classes_type.keys()):
-        if ctypes_processed.has_key(type):
+        if type in ctypes_processed:
             continue
         tinfo = classes_type[type]
-        if not classes_processed.has_key(tinfo[2]):
+        if tinfo[2] not in classes_processed:
             classes_list.append(tinfo[2])
             classes_processed[tinfo[2]] = ()
-            
+
         ctypes.append(type)
         ctypes_processed[type] = ()
 
@@ -912,9 +938,9 @@ def buildWrappers():
     txt.write("          Generated Classes for libxml2-python\n\n")
 
     txt.write("#\n# Global functions of the module\n#\n\n")
-    if function_classes.has_key("None"):
+    if "None" in function_classes:
         flist = function_classes["None"]
-        flist.sort(functionCompare)
+        flist = sorted(flist, key=cmp_to_key(functionCompare))
         oldfile = ""
         for info in flist:
             (index, func, name, ret, args, file) = info
@@ -934,11 +960,17 @@ def buildWrappers():
             writeDoc(name, args, '    ', classes)
 
             for arg in args:
-                if classes_type.has_key(arg[1]):
+                if arg[1] in classes_type:
                     classes.write("    if %s is None: %s__o = None\n" %
                                   (arg[0], arg[0]))
                     classes.write("    else: %s__o = %s%s\n" %
                                   (arg[0], arg[0], classes_type[arg[1]][0]))
+                if arg[1] in py_types:
+                    (f, t, n, c) = py_types[arg[1]]
+                    if t == "File":
+                        classes.write("    if %s is not None: %s.flush()\n" % (
+                                      arg[0], arg[0]))
+
             if ret[0] != "void":
                 classes.write("    ret = ")
             else:
@@ -949,26 +981,36 @@ def buildWrappers():
                 if n != 0:
                     classes.write(", ")
                 classes.write("%s" % arg[0])
-                if classes_type.has_key(arg[1]):
+                if arg[1] in classes_type:
                     classes.write("__o")
                 n = n + 1
             classes.write(")\n")
+
+# This may be needed to reposition the I/O, but likely to cause more harm
+# than good. Those changes in Python3 really break the model.
+#           for arg in args:
+#               if arg[1] in py_types:
+#                   (f, t, n, c) = py_types[arg[1]]
+#                   if t == "File":
+#                       classes.write("    if %s is not None: %s.seek(0,0)\n"%(
+#                                     arg[0], arg[0]))
+
             if ret[0] != "void":
-                if classes_type.has_key(ret[0]):
+                if ret[0] in classes_type:
                     #
                     # Raise an exception
                     #
-                    if functions_noexcept.has_key(name):
+                    if name in functions_noexcept:
                         classes.write("    if ret is None:return None\n")
-                    elif string.find(name, "URI") >= 0:
+                    elif name.find("URI") >= 0:
                         classes.write(
                         "    if ret is None:raise uriError('%s() failed')\n"
                                       % (name))
-                    elif string.find(name, "XPath") >= 0:
+                    elif name.find("XPath") >= 0:
                         classes.write(
                         "    if ret is None:raise xpathError('%s() failed')\n"
                                       % (name))
-                    elif string.find(name, "Parse") >= 0:
+                    elif name.find("Parse") >= 0:
                         classes.write(
                         "    if ret is None:raise parserError('%s() failed')\n"
                                       % (name))
@@ -988,7 +1030,7 @@ def buildWrappers():
         if classname == "None":
             pass
         else:
-            if classes_ancestor.has_key(classname):
+            if classname in classes_ancestor:
                 txt.write("\n\nClass %s(%s)\n" % (classname,
                           classes_ancestor[classname]))
                 classes.write("class %s(%s):\n" % (classname,
@@ -996,12 +1038,11 @@ def buildWrappers():
                 classes.write("    def __init__(self, _obj=None):\n")
                 if classes_ancestor[classname] == "xmlCore" or \
                    classes_ancestor[classname] == "xmlNode":
-                    classes.write("        if type(_obj).__name__ != ")
-                    classes.write("'PyCObject':\n")
-                    classes.write("            raise TypeError, ")
-                    classes.write("'%s needs a PyCObject argument'\n" % \
+                    classes.write("        if checkWrapper(_obj) != 0:")
+                    classes.write("            raise TypeError")
+                    classes.write("('%s got a wrong wrapper object type')\n" % \
                                 classname)
-                if reference_keepers.has_key(classname):
+                if classname in reference_keepers:
                     rlist = reference_keepers[classname]
                     for ref in rlist:
                         classes.write("        self.%s = None\n" % ref[1])
@@ -1012,20 +1053,20 @@ def buildWrappers():
                    classes_ancestor[classname] == "xmlNode":
                     classes.write("    def __repr__(self):\n")
                     format = "<%s (%%s) object at 0x%%x>" % (classname)
-                    classes.write("        return \"%s\" %% (self.name, long(pos_id (self)))\n\n" % (
+                    classes.write("        return \"%s\" %% (self.name, int(pos_id (self)))\n\n" % (
                                   format))
             else:
                 txt.write("Class %s()\n" % (classname))
                 classes.write("class %s:\n" % (classname))
                 classes.write("    def __init__(self, _obj=None):\n")
-                if reference_keepers.has_key(classname):
+                if classname in reference_keepers:
                     list = reference_keepers[classname]
                     for ref in list:
                         classes.write("        self.%s = None\n" % ref[1])
                 classes.write("        if _obj != None:self._o = _obj;return\n")
                 classes.write("        self._o = None\n\n")
             destruct=None
-            if classes_destructors.has_key(classname):
+            if classname in classes_destructors:
                 classes.write("    def __del__(self):\n")
                 classes.write("        if self._o != None:\n")
                 classes.write("            libxml2mod.%s(self._o)\n" %
@@ -1033,7 +1074,7 @@ def buildWrappers():
                 classes.write("        self._o = None\n\n")
                 destruct=classes_destructors[classname]
             flist = function_classes[classname]
-            flist.sort(functionCompare)
+            flist = sorted(flist, key=cmp_to_key(functionCompare))
             oldfile = ""
             for info in flist:
                 (index, func, name, ret, args, file) = info
@@ -1065,7 +1106,7 @@ def buildWrappers():
                 writeDoc(name, args, '        ', classes)
                 n = 0
                 for arg in args:
-                    if classes_type.has_key(arg[1]):
+                    if arg[1] in classes_type:
                         if n != index:
                             classes.write("        if %s is None: %s__o = None\n" %
                                           (arg[0], arg[0]))
@@ -1083,31 +1124,31 @@ def buildWrappers():
                         classes.write(", ")
                     if n != index:
                         classes.write("%s" % arg[0])
-                        if classes_type.has_key(arg[1]):
+                        if arg[1] in classes_type:
                             classes.write("__o")
                     else:
                         classes.write("self")
-                        if classes_type.has_key(arg[1]):
+                        if arg[1] in classes_type:
                             classes.write(classes_type[arg[1]][0])
                     n = n + 1
                 classes.write(")\n")
                 if ret[0] != "void":
-                    if classes_type.has_key(ret[0]):
+                    if ret[0] in classes_type:
                         #
                         # Raise an exception
                         #
-                        if functions_noexcept.has_key(name):
+                        if name in functions_noexcept:
                             classes.write(
                                 "        if ret is None:return None\n")
-                        elif string.find(name, "URI") >= 0:
+                        elif name.find("URI") >= 0:
                             classes.write(
                     "        if ret is None:raise uriError('%s() failed')\n"
                                           % (name))
-                        elif string.find(name, "XPath") >= 0:
+                        elif name.find("XPath") >= 0:
                             classes.write(
                     "        if ret is None:raise xpathError('%s() failed')\n"
                                           % (name))
-                        elif string.find(name, "Parse") >= 0:
+                        elif name.find("Parse") >= 0:
                             classes.write(
                     "        if ret is None:raise parserError('%s() failed')\n"
                                           % (name))
@@ -1129,7 +1170,7 @@ def buildWrappers():
                         # See reference_keepers for the list
                         #
                         tclass = classes_type[ret[0]][2]
-                        if reference_keepers.has_key(tclass):
+                        if tclass in reference_keepers:
                             list = reference_keepers[tclass]
                             for pref in list:
                                 if pref[0] == classname:
@@ -1139,22 +1180,22 @@ def buildWrappers():
                         # return the class
                         #
                         classes.write("        return __tmp\n")
-                    elif converter_type.has_key(ret[0]):
+                    elif ret[0] in converter_type:
                         #
                         # Raise an exception
                         #
-                        if functions_noexcept.has_key(name):
+                        if name in functions_noexcept:
                             classes.write(
                                 "        if ret is None:return None")
-                        elif string.find(name, "URI") >= 0:
+                        elif name.find("URI") >= 0:
                             classes.write(
                     "        if ret is None:raise uriError('%s() failed')\n"
                                           % (name))
-                        elif string.find(name, "XPath") >= 0:
+                        elif name.find("XPath") >= 0:
                             classes.write(
                     "        if ret is None:raise xpathError('%s() failed')\n"
                                           % (name))
-                        elif string.find(name, "Parse") >= 0:
+                        elif name.find("Parse") >= 0:
                             classes.write(
                     "        if ret is None:raise parserError('%s() failed')\n"
                                           % (name))
@@ -1175,7 +1216,7 @@ def buildWrappers():
     for type,enum in enums.items():
         classes.write("# %s\n" % type)
         items = enum.items()
-        items.sort(lambda i1,i2: cmp(long(i1[1]),long(i2[1])))
+        items = sorted(items, key=(lambda i: int(i[1])))
         for name,value in items:
             classes.write("%s = %s\n" % (name,value))
         classes.write("\n")
index 9dabf89..30b71f3 100644 (file)
@@ -28,9 +28,7 @@
 #include "libxml_wrap.h"
 #include "libxml2-py.h"
 
-#if defined(_MSC_VER) && !defined(vsnprintf)
-#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
-#elif defined(WITH_TRIO) && !defined(vsnprintf)
+#if defined(WITH_TRIO)
 #include "trio.h"
 #define vsnprintf trio_vsnprintf
 #endif
 /* #define DEBUG_FILES */
 /* #define DEBUG_LOADER */
 
+#if PY_MAJOR_VERSION >= 3
+PyObject *PyInit_libxml2mod(void);
+
+#define PY_IMPORT_STRING_SIZE PyUnicode_FromStringAndSize
+#define PY_IMPORT_STRING PyUnicode_FromString
+#else
 void initlibxml2mod(void);
+#define PY_IMPORT_STRING_SIZE PyString_FromStringAndSize
+#define PY_IMPORT_STRING PyString_FromString
+#endif
+
 
 /**
  * TODO:
@@ -282,18 +290,42 @@ xmlPythonFileReadRaw (void * context, char * buffer, int len) {
     if (ret == NULL) {
        printf("xmlPythonFileReadRaw: result is NULL\n");
        return(-1);
-    } else if (PyString_Check(ret)) {
-       lenread = PyString_Size(ret);
-       data = PyString_AsString(ret);
-       if (lenread > len)
-           memcpy(buffer, data, len);
-       else
-           memcpy(buffer, data, lenread);
-       Py_DECREF(ret);
+    } else if (PyBytes_Check(ret)) {
+       lenread = PyBytes_Size(ret);
+       data = PyBytes_AsString(ret);
+#ifdef PyUnicode_Check
+    } else if PyUnicode_Check (ret) {
+#if PY_VERSION_HEX >= 0x03030000
+        Py_ssize_t size;
+       const char *tmp;
+
+       /* tmp doesn't need to be deallocated */
+        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
+
+       lenread = (int) size;
+       data = (char *) tmp;
+#else
+        PyObject *b;
+       b = PyUnicode_AsUTF8String(ret);
+       if (b == NULL) {
+           printf("xmlPythonFileReadRaw: failed to convert to UTF-8\n");
+           return(-1);
+       }
+       lenread = PyBytes_Size(b);
+       data = PyBytes_AsString(b);
+       Py_DECREF(b);
+#endif
+#endif
     } else {
        printf("xmlPythonFileReadRaw: result is not a String\n");
        Py_DECREF(ret);
+       return(-1);
     }
+    if (lenread > len)
+       memcpy(buffer, data, len);
+    else
+       memcpy(buffer, data, lenread);
+    Py_DECREF(ret);
     return(lenread);
 }
 
@@ -323,18 +355,42 @@ xmlPythonFileRead (void * context, char * buffer, int len) {
     if (ret == NULL) {
        printf("xmlPythonFileRead: result is NULL\n");
        return(-1);
-    } else if (PyString_Check(ret)) {
-       lenread = PyString_Size(ret);
-       data = PyString_AsString(ret);
-       if (lenread > len)
-           memcpy(buffer, data, len);
-       else
-           memcpy(buffer, data, lenread);
-       Py_DECREF(ret);
+    } else if (PyBytes_Check(ret)) {
+       lenread = PyBytes_Size(ret);
+       data = PyBytes_AsString(ret);
+#ifdef PyUnicode_Check
+    } else if PyUnicode_Check (ret) {
+#if PY_VERSION_HEX >= 0x03030000
+        Py_ssize_t size;
+       const char *tmp;
+
+       /* tmp doesn't need to be deallocated */
+        tmp = PyUnicode_AsUTF8AndSize(ret, &size);
+
+       lenread = (int) size;
+       data = (char *) tmp;
+#else
+        PyObject *b;
+       b = PyUnicode_AsUTF8String(ret);
+       if (b == NULL) {
+           printf("xmlPythonFileRead: failed to convert to UTF-8\n");
+           return(-1);
+       }
+       lenread = PyBytes_Size(b);
+       data = PyBytes_AsString(b);
+       Py_DECREF(b);
+#endif
+#endif
     } else {
        printf("xmlPythonFileRead: result is not a String\n");
        Py_DECREF(ret);
+       return(-1);
     }
+    if (lenread > len)
+       memcpy(buffer, data, len);
+    else
+       memcpy(buffer, data, lenread);
+    Py_DECREF(ret);
     return(lenread);
 }
 
@@ -360,7 +416,7 @@ xmlPythonFileWrite (void * context, const char * buffer, int len) {
 #endif
     file = (PyObject *) context;
     if (file == NULL) return(-1);
-    string = PyString_FromStringAndSize(buffer, len);
+    string = PY_IMPORT_STRING_SIZE(buffer, len);
     if (string == NULL) return(-1);
     if (PyObject_HasAttrString(file, (char *) "io_write")) {
         ret = PyEval_CallMethod(file, (char *) "io_write", (char *) "(O)",
@@ -373,8 +429,8 @@ xmlPythonFileWrite (void * context, const char * buffer, int len) {
     if (ret == NULL) {
        printf("xmlPythonFileWrite: result is NULL\n");
        return(-1);
-    } else if (PyInt_Check(ret)) {
-       written = (int) PyInt_AsLong(ret);
+    } else if (PyLong_Check(ret)) {
+       written = (int) PyLong_AsLong(ret);
        Py_DECREF(ret);
     } else if (ret == Py_None) {
        written = len;
@@ -667,7 +723,7 @@ pythonExternalEntityLoader(const char *URL, const char *ID,
        Py_XDECREF(ctxtobj);
 #ifdef DEBUG_LOADER
        printf("pythonExternalEntityLoader: result ");
-       PyObject_Print(ret, stderr, 0);
+       PyObject_Print(ret, stdout, 0);
        printf("\n");
 #endif
 
@@ -713,19 +769,114 @@ libxml_xmlSetEntityLoader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
                &loader))
        return(NULL);
 
+    if (!PyCallable_Check(loader)) {
+       PyErr_SetString(PyExc_ValueError, "entity loader is not callable");
+       return(NULL);
+    }
+
 #ifdef DEBUG_LOADER
     printf("libxml_xmlSetEntityLoader\n");
 #endif
     if (defaultExternalEntityLoader == NULL) 
        defaultExternalEntityLoader = xmlGetExternalEntityLoader();
 
+    Py_XDECREF(pythonExternalEntityLoaderObjext);
     pythonExternalEntityLoaderObjext = loader;
+    Py_XINCREF(pythonExternalEntityLoaderObjext);
     xmlSetExternalEntityLoader(pythonExternalEntityLoader);
 
-    py_retval = PyInt_FromLong(0);
+    py_retval = PyLong_FromLong(0);
     return(py_retval);
 }
 
+/************************************************************************
+ *                                                                     *
+ *             Input callback registration                             *
+ *                                                                     *
+ ************************************************************************/
+static PyObject *pythonInputOpenCallbackObject;
+static int pythonInputCallbackID = -1;
+
+static int
+pythonInputMatchCallback(ATTRIBUTE_UNUSED const char *URI)
+{
+    /* Always return success, real decision whether URI is supported will be
+     * made in open callback.  */
+    return 1;
+}
+
+static void *
+pythonInputOpenCallback(const char *URI)
+{
+    PyObject *ret;
+
+    ret = PyObject_CallFunction(pythonInputOpenCallbackObject,
+           (char *)"s", URI);
+    if (ret == Py_None) {
+       Py_DECREF(Py_None);
+       return NULL;
+    }
+    return ret;
+}
+
+PyObject *
+libxml_xmlRegisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
+                                PyObject *args) {
+    PyObject *cb;
+
+    if (!PyArg_ParseTuple(args,
+               (const char *)"O:libxml_xmlRegisterInputCallback", &cb))
+       return(NULL);
+
+    if (!PyCallable_Check(cb)) {
+       PyErr_SetString(PyExc_ValueError, "input callback is not callable");
+       return(NULL);
+    }
+
+    /* Python module registers a single callback and manages the list of
+     * all callbacks internally. This is necessitated by xmlInputMatchCallback
+     * API, which does not allow for passing of data objects to discriminate
+     * different Python methods.  */
+    if (pythonInputCallbackID == -1) {
+       pythonInputCallbackID = xmlRegisterInputCallbacks(
+               pythonInputMatchCallback, pythonInputOpenCallback,
+               xmlPythonFileReadRaw, xmlPythonFileCloseRaw);
+       if (pythonInputCallbackID == -1)
+           return PyErr_NoMemory();
+       pythonInputOpenCallbackObject = cb;
+       Py_INCREF(pythonInputOpenCallbackObject);
+    }
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlUnregisterInputCallback(ATTRIBUTE_UNUSED PyObject *self,
+                                ATTRIBUTE_UNUSED PyObject *args) {
+    int ret;
+
+    ret = xmlPopInputCallbacks();
+    if (pythonInputCallbackID != -1) {
+       /* Assert that the right input callback was popped. libxml's API does not
+        * allow removal by ID, so all that could be done is an assert.  */
+       if (pythonInputCallbackID == ret) {
+           pythonInputCallbackID = -1;
+           Py_DECREF(pythonInputOpenCallbackObject);
+           pythonInputOpenCallbackObject = NULL;
+       } else {
+           PyErr_SetString(PyExc_AssertionError, "popped non-python input callback");
+           return(NULL);
+       }
+    } else if (ret == -1) {
+       /* No more callbacks to pop */
+       PyErr_SetString(PyExc_IndexError, "no input callbacks to pop");
+       return(NULL);
+    }
+
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
 
 /************************************************************************
  *                                                                     *
@@ -766,10 +917,10 @@ pythonStartElement(void *user_data, const xmlChar * name,
         } else {
             dict = PyDict_New();
             for (i = 0; attrs[i] != NULL; i++) {
-                attrname = PyString_FromString((char *) attrs[i]);
+                attrname = PY_IMPORT_STRING((char *) attrs[i]);
                 i++;
                 if (attrs[i] != NULL) {
-                    attrvalue = PyString_FromString((char *) attrs[i]);
+                    attrvalue = PY_IMPORT_STRING((char *) attrs[i]);
                 } else {
                     Py_XINCREF(Py_None);
                     attrvalue = Py_None;
@@ -1172,7 +1323,7 @@ pythonAttributeDecl(void *user_data,
         nameList = PyList_New(count);
         count = 0;
         for (node = tree; node != NULL; node = node->next) {
-            newName = PyString_FromString((char *) node->name);
+            newName = PY_IMPORT_STRING((char *) node->name);
             PyList_SetItem(nameList, count, newName);
            Py_DECREF(newName);
             count++;
@@ -1367,6 +1518,7 @@ libxml_htmlCreatePushParser(ATTRIBUTE_UNUSED PyObject * self,
 PyObject *
 libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
 {
+#ifdef LIBXML_SAX1_ENABLED
     int recover;
     const char *URI;
     PyObject *pyobj_SAX = NULL;
@@ -1388,6 +1540,7 @@ libxml_xmlSAXParseFile(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
     Py_INCREF(pyobj_SAX);
     /* The reference is released in pythonEndDocument() */
     xmlSAXUserParseFile(SAX, pyobj_SAX, URI);
+#endif /* LIBXML_SAX1_ENABLED */
     Py_INCREF(Py_None);
     return (Py_None);
 }
@@ -2033,7 +2186,7 @@ libxml_xmlFreeTextReader(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) {
 
     if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeTextReader", &pyobj_reader))
         return(NULL);
-    if (!PyCObject_Check(pyobj_reader)) {
+    if (!PyCapsule_CheckExact(pyobj_reader)) {
        Py_INCREF(Py_None);
        return(Py_None);
     }
@@ -2234,6 +2387,32 @@ libxml_xmlRegisterXPathFunction(ATTRIBUTE_UNUSED PyObject * self,
     return (py_retval);
 }
 
+PyObject *
+libxml_xmlXPathRegisterVariable(ATTRIBUTE_UNUSED PyObject * self,
+                                PyObject * args)
+{
+    PyObject *py_retval;
+    int c_retval = 0;
+    xmlChar *name;
+    xmlChar *ns_uri;
+    xmlXPathContextPtr ctx;
+    xmlXPathObjectPtr val;
+    PyObject *pyobj_ctx;
+    PyObject *pyobj_value;
+
+    if (!PyArg_ParseTuple
+        (args, (char *) "OszO:xpathRegisterVariable", &pyobj_ctx, &name,
+         &ns_uri, &pyobj_value))
+        return (NULL);
+
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+    val = libxml_xmlXPathObjectPtrConvert(pyobj_value);
+
+    c_retval = xmlXPathRegisterVariableNS(ctx, name, ns_uri, val);
+    py_retval = libxml_intWrap(c_retval);
+    return (py_retval);
+}
+
 /************************************************************************
  *                                                                     *
  *                     Global properties access                        *
@@ -2504,6 +2683,7 @@ libxml_last(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
                 xmlAttrPtr attr = (xmlAttrPtr) cur;
 
                 res = attr->last;
+               break;
             }
         default:
             res = NULL;
@@ -2566,6 +2746,10 @@ libxml_type(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
     if (!PyArg_ParseTuple(args, (char *) "O:last", &obj))
         return NULL;
     cur = PyxmlNode_Get(obj);
+    if (cur == NULL) {
+        Py_INCREF(Py_None);
+       return (Py_None);
+    }
 
 #ifdef DEBUG
     printf("libxml_type: cur = %p\n", cur);
@@ -2682,7 +2866,7 @@ libxml_xmlNodeRemoveNsDef(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
     PyObject *pyobj_node;
     xmlChar *href;
     xmlNsPtr c_retval;
-    
+
     if (!PyArg_ParseTuple
         (args, (char *) "Oz:xmlNodeRemoveNsDef", &pyobj_node, &href))
         return (NULL);
@@ -2844,16 +3028,12 @@ libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
                           &py_file, &encoding, &format))
         return (NULL);
     node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
-
     if (node == NULL) {
-        return (PyInt_FromLong((long) -1));
-    }
-    if ((py_file == NULL) || (!(PyFile_Check(py_file)))) {
-        return (PyInt_FromLong((long) -1));
+        return (PyLong_FromLong((long) -1));
     }
-    output = PyFile_AsFile(py_file);
+    output = PyFile_Get(py_file);
     if (output == NULL) {
-        return (PyInt_FromLong((long) -1));
+        return (PyLong_FromLong((long) -1));
     }
 
     if (node->type == XML_DOCUMENT_NODE) {
@@ -2872,7 +3052,7 @@ libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
     if (encoding != NULL) {
         handler = xmlFindCharEncodingHandler(encoding);
         if (handler == NULL) {
-            return (PyInt_FromLong((long) -1));
+            return (PyLong_FromLong((long) -1));
         }
     }
     if (doc->type == XML_HTML_DOCUMENT_NODE) {
@@ -2897,7 +3077,8 @@ libxml_saveNodeTo(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
         xmlNodeDumpOutput(buf, doc, node, 0, format, encoding);
         len = xmlOutputBufferClose(buf);
     }
-    return (PyInt_FromLong((long) len));
+    PyFile_Release(output);
+    return (PyLong_FromLong((long) len));
 }
 #endif /* LIBXML_OUTPUT_ENABLED */
 
@@ -3403,7 +3584,7 @@ PystringSet_Convert(PyObject *py_strings, xmlChar *** result)
     {
         int idx;
         for (idx=0; idx < count; ++idx) {
-            char* s = PyString_AsString
+            char* s = PyBytes_AsString
                 (is_tuple
                  ? PyTuple_GET_ITEM(py_strings, idx)
                  : PyList_GET_ITEM(py_strings, idx));
@@ -3492,8 +3673,8 @@ libxml_C14NDocDumpMemory(ATTRIBUTE_UNUSED PyObject * self,
         return NULL;
     }
     else {
-        py_retval = PyString_FromStringAndSize((const char *) doc_txt,
-                                               result);
+        py_retval = PY_IMPORT_STRING_SIZE((const char *) doc_txt,
+                                                result);
         xmlFree(doc_txt);
         return py_retval;
     }
@@ -3534,11 +3715,7 @@ libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
         return NULL;
     }
 
-    if ((py_file == NULL) || (!(PyFile_Check(py_file)))) {
-        PyErr_SetString(PyExc_TypeError, "bad file.");
-        return NULL;
-    }
-    output = PyFile_AsFile(py_file);
+    output = PyFile_Get(py_file);
     if (output == NULL) {
         PyErr_SetString(PyExc_TypeError, "bad file.");
         return NULL;
@@ -3576,6 +3753,7 @@ libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
         xmlFree(prefixes);
     }
 
+    PyFile_Release(output);
     len = xmlOutputBufferClose(buf);
 
     if (result < 0) {
@@ -3584,7 +3762,7 @@ libxml_C14NDocSaveTo(ATTRIBUTE_UNUSED PyObject * self,
         return NULL;
     }
     else
-        return PyInt_FromLong((long) len);
+        return PyLong_FromLong((long) len);
 }
 
 #endif
@@ -3598,7 +3776,7 @@ libxml_getObjDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
 
     if (!PyArg_ParseTuple(args, (char *)"O:getObjDesc", &obj))
         return NULL;
-    str = PyCObject_GetDesc(obj);
+    str = PyCapsule_GetPointer(obj, PyCapsule_GetName(obj));
     return Py_BuildValue((char *)"s", str);
 }
 
@@ -3693,31 +3871,64 @@ static PyMethodDef libxmlMethods[] = {
     {(char *) "getObjDesc", libxml_getObjDesc, METH_VARARGS, NULL},
     {(char *) "compareNodesEqual", libxml_compareNodesEqual, METH_VARARGS, NULL},
     {(char *) "nodeHash", libxml_nodeHash, METH_VARARGS, NULL},
+    {(char *) "xmlRegisterInputCallback", libxml_xmlRegisterInputCallback, METH_VARARGS, NULL},
+    {(char *) "xmlUnregisterInputCallback", libxml_xmlUnregisterInputCallback, METH_VARARGS, NULL},
     {NULL, NULL, 0, NULL}
 };
 
+#if PY_MAJOR_VERSION >= 3
+#define INITERROR return NULL
+
+static struct PyModuleDef moduledef = {
+        PyModuleDef_HEAD_INIT,
+        "libxml2mod",
+        NULL,
+        -1,
+        libxmlMethods,
+        NULL,
+        NULL,
+        NULL,
+        NULL
+};
+
+#else
+#define INITERROR return
+
 #ifdef MERGED_MODULES
 extern void initlibxsltmod(void);
 #endif
 
-void
-initlibxml2mod(void)
-{
-    static int initialized = 0;
+#endif
 
-    if (initialized != 0)
-        return;
+#if PY_MAJOR_VERSION >= 3
+PyObject *PyInit_libxml2mod(void)
+#else
+void initlibxml2mod(void)
+#endif
+{
+    PyObject *module;
 
+#if PY_MAJOR_VERSION >= 3
+    module = PyModule_Create(&moduledef);
+#else
     /* intialize the python extension module */
-    Py_InitModule((char *) "libxml2mod", libxmlMethods);
+    module = Py_InitModule((char *) "libxml2mod", libxmlMethods);
+#endif
+    if (module == NULL)
+        INITERROR;
 
     /* initialize libxml2 */
     xmlInitParser();
+    /* TODO this probably need to be revamped for Python3 */
     libxml_xmlErrorInitialize();
 
-    initialized = 1;
-
+#if PY_MAJOR_VERSION < 3
 #ifdef MERGED_MODULES
     initlibxsltmod();
 #endif
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+    return module;
+#endif
 }
index c861a70..2466cc9 100644 (file)
@@ -5,13 +5,23 @@ import sys
 # The root of all libxml2 errors.
 class libxmlError(Exception): pass
 
+# Type of the wrapper class for the C objects wrappers
+def checkWrapper(obj):
+    try:
+        n = type(_obj).__name__
+        if n != 'PyCObject' and n != 'PyCapsule':
+            return 1
+    except:
+        return 0
+    return 0
+
 #
 # id() is sometimes negative ...
 #
 def pos_id(o):
     i = id(o)
     if (i < 0):
-        return (sys.maxint - i)
+        return (sys.maxsize - i)
     return i
 
 #
@@ -62,9 +72,20 @@ class ioWrapper:
     def io_read(self, len = -1):
         if self.__io == None:
             return(-1)
-        if len < 0:
-            return(self.__io.read())
-        return(self.__io.read(len))
+        try:
+            if len < 0:
+                ret = self.__io.read()
+            else:
+                ret = self.__io.read(len)
+        except Exception:
+            import sys
+            e = sys.exc_info()[1]
+            print("failed to read from Python:", type(e))
+            print("on IO:", self.__io)
+            self.__io == None
+            return(-1)
+
+        return(ret)
 
     def io_write(self, str, len = -1):
         if self.__io == None:
@@ -79,7 +100,7 @@ class ioReadWrapper(ioWrapper):
         self._o = libxml2mod.xmlCreateInputBuffer(self, enc)
 
     def __del__(self):
-        print "__del__"
+        print("__del__")
         self.io_close()
         if self._o != None:
             libxml2mod.xmlFreeParserInputBuffer(self._o)
@@ -95,12 +116,19 @@ class ioWriteWrapper(ioWrapper):
     def __init__(self, _obj, enc = ""):
 #        print "ioWriteWrapper.__init__", _obj
         if type(_obj) == type(''):
-            print "write io from a string"
+            print("write io from a string")
             self.o = None
-        elif type(_obj) == types.InstanceType:
-            print "write io from instance of %s" % (_obj.__class__)
-            ioWrapper.__init__(self, _obj)
-            self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
+        elif type(_obj).__name__ == 'PyCapsule':
+            file = libxml2mod.outputBufferGetPythonFile(_obj)
+            if file != None:
+                ioWrapper.__init__(self, file)
+            else:
+                ioWrapper.__init__(self, _obj)
+            self._o = _obj
+#        elif type(_obj) == types.InstanceType:
+#            print(("write io from instance of %s" % (_obj.__class__)))
+#            ioWrapper.__init__(self, _obj)
+#            self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
         else:
             file = libxml2mod.outputBufferGetPythonFile(_obj)
             if file != None:
@@ -265,22 +293,22 @@ class xmlCore:
         ret = libxml2mod.parent(self._o)
         if ret == None:
             return None
-        return xmlNode(_obj=ret)
+        return nodeWrap(ret)
     def get_children(self):
         ret = libxml2mod.children(self._o)
         if ret == None:
             return None
-        return xmlNode(_obj=ret)
+        return nodeWrap(ret)
     def get_last(self):
         ret = libxml2mod.last(self._o)
         if ret == None:
             return None
-        return xmlNode(_obj=ret)
+        return nodeWrap(ret)
     def get_next(self):
         ret = libxml2mod.next(self._o)
         if ret == None:
             return None
-        return xmlNode(_obj=ret)
+        return nodeWrap(ret)
     def get_properties(self):
         ret = libxml2mod.properties(self._o)
         if ret == None:
@@ -290,7 +318,7 @@ class xmlCore:
         ret = libxml2mod.prev(self._o)
         if ret == None:
             return None
-        return xmlNode(_obj=ret)
+        return nodeWrap(ret)
     def get_content(self):
         return libxml2mod.xmlNodeGetContent(self._o)
     getContent = get_content  # why is this duplicate naming needed ?
@@ -317,7 +345,7 @@ class xmlCore:
                 ret = libxml2mod.parent(self._o)
                 if ret == None:
                     return None
-                return xmlNode(_obj=ret)
+                return nodeWrap(ret)
             elif attr == "properties":
                 ret = libxml2mod.properties(self._o)
                 if ret == None:
@@ -327,22 +355,22 @@ class xmlCore:
                 ret = libxml2mod.children(self._o)
                 if ret == None:
                     return None
-                return xmlNode(_obj=ret)
+                return nodeWrap(ret)
             elif attr == "last":
                 ret = libxml2mod.last(self._o)
                 if ret == None:
                     return None
-                return xmlNode(_obj=ret)
+                return nodeWrap(ret)
             elif attr == "next":
                 ret = libxml2mod.next(self._o)
                 if ret == None:
                     return None
-                return xmlNode(_obj=ret)
+                return nodeWrap(ret)
             elif attr == "prev":
                 ret = libxml2mod.prev(self._o)
                 if ret == None:
                     return None
-                return xmlNode(_obj=ret)
+                return nodeWrap(ret)
             elif attr == "content":
                 return libxml2mod.xmlNodeGetContent(self._o)
             elif attr == "name":
@@ -357,7 +385,7 @@ class xmlCore:
                     else:
                         return None
                 return xmlDoc(_obj=ret)
-            raise AttributeError,attr
+            raise AttributeError(attr)
     else:
         parent = property(get_parent, None, None, "Parent node")
         children = property(get_children, None, None, "First child node")
@@ -400,7 +428,7 @@ class xmlCore:
                    prefixes=None,
                    with_comments=0):
         if nodes:
-            nodes = map(lambda n: n._o, nodes)
+            nodes = [n._o for n in nodes]
         return libxml2mod.xmlC14NDocDumpMemory(
             self.get_doc()._o,
             nodes,
@@ -414,7 +442,7 @@ class xmlCore:
                    prefixes=None,
                    with_comments=0):
         if nodes:
-            nodes = map(lambda n: n._o, nodes)
+            nodes = [n._o for n in nodes]
         return libxml2mod.xmlC14NDocSaveTo(
             self.get_doc()._o,
             nodes,
@@ -502,7 +530,7 @@ class xmlCoreDepthFirstItertor:
         self.parents = []
     def __iter__(self):
         return self
-    def next(self):
+    def __next__(self):
         while 1:
             if self.node:
                 ret = self.node
@@ -514,6 +542,7 @@ class xmlCoreDepthFirstItertor:
             except IndexError:
                 raise StopIteration
             self.node = parent.next
+    next = __next__
 
 #
 # implements the breadth-first iterator for libxml2 DOM tree
@@ -524,7 +553,7 @@ class xmlCoreBreadthFirstItertor:
         self.parents = []
     def __iter__(self):
         return self
-    def next(self):
+    def __next__(self):
         while 1:
             if self.node:
                 ret = self.node
@@ -536,6 +565,7 @@ class xmlCoreBreadthFirstItertor:
             except IndexError:
                 raise StopIteration
             self.node = parent.children
+    next = __next__
 
 #
 # converters to present a nicer view of the XPath returns
@@ -564,10 +594,10 @@ def nodeWrap(o):
 def xpathObjectRet(o):
     otype = type(o)
     if otype == type([]):
-        ret = map(xpathObjectRet, o)
+        ret = list(map(xpathObjectRet, o))
         return ret
     elif otype == type(()):
-        ret = map(xpathObjectRet, o)
+        ret = list(map(xpathObjectRet, o))
         return tuple(ret)
     elif otype == type('') or otype == type(0) or otype == type(0.0):
         return o
@@ -603,7 +633,7 @@ def registerErrorHandler(f, ctx):
     """Register a Python written function to for error reporting.
        The function is called back as f(ctx, error). """
     import sys
-    if not sys.modules.has_key('libxslt'):
+    if 'libxslt' not in sys.modules:
         # normal behaviour when libxslt is not imported
         ret = libxml2mod.xmlRegisterErrorHandler(f,ctx)
     else:
@@ -682,8 +712,9 @@ class relaxNgValidCtxtCore:
         libxml2mod.xmlRelaxNGSetValidErrors(self._o, err_func, warn_func, arg)
 
     
-def _xmlTextReaderErrorFunc((f,arg),msg,severity,locator):
+def _xmlTextReaderErrorFunc(xxx_todo_changeme,msg,severity,locator):
     """Intermediate callback to wrap the locator"""
+    (f,arg) = xxx_todo_changeme
     return f(arg,msg,severity,xmlTextReaderLocator(locator))
 
 class xmlTextReaderCore:
@@ -719,11 +750,35 @@ class xmlTextReaderCore:
             return arg
 
 #
-# The cleanup now goes though a wrappe in libxml.c
+# The cleanup now goes though a wrapper in libxml.c
 #
 def cleanupParser():
     libxml2mod.xmlPythonCleanupParser()
 
+#
+# The interface to xmlRegisterInputCallbacks.
+# Since this API does not allow to pass a data object along with
+# match/open callbacks, it is necessary to maintain a list of all
+# Python callbacks.
+#
+__input_callbacks = []
+def registerInputCallback(func):
+    def findOpenCallback(URI):
+        for cb in reversed(__input_callbacks):
+            o = cb(URI)
+            if o is not None:
+                return o
+    libxml2mod.xmlRegisterInputCallback(findOpenCallback)
+    __input_callbacks.append(func)
+
+def popInputCallbacks():
+    # First pop python-level callbacks, when no more available - start
+    # popping built-in ones.
+    if len(__input_callbacks) > 0:
+        __input_callbacks.pop()
+    if len(__input_callbacks) == 0:
+        libxml2mod.xmlUnregisterInputCallback()
+
 # WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
 #
 # Everything before this line comes from libxml.py 
diff --git a/python/libxml2-export.c b/python/libxml2-export.c
new file mode 100644 (file)
index 0000000..84073ea
--- /dev/null
@@ -0,0 +1,2063 @@
+/* Generated */
+
+#if defined(LIBXML_DOCB_ENABLED)
+    { (char *)"docbDefaultSAXHandlerInit", libxml_docbDefaultSAXHandlerInit, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DOCB_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlAutoCloseTag", libxml_htmlAutoCloseTag, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCreateFileParserCtxt", libxml_htmlCreateFileParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCreateMemoryParserCtxt", libxml_htmlCreateMemoryParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCreatePushParser", libxml_htmlCreatePushParser, METH_VARARGS, NULL },
+#endif
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtReadDoc", libxml_htmlCtxtReadDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtReadFd", libxml_htmlCtxtReadFd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtReadFile", libxml_htmlCtxtReadFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtReadMemory", libxml_htmlCtxtReadMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtReset", libxml_htmlCtxtReset, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlCtxtUseOptions", libxml_htmlCtxtUseOptions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlDefaultSAXHandlerInit", libxml_htmlDefaultSAXHandlerInit, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlDocContentDumpFormatOutput", libxml_htmlDocContentDumpFormatOutput, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlDocContentDumpOutput", libxml_htmlDocContentDumpOutput, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlDocDump", libxml_htmlDocDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlFreeParserCtxt", libxml_htmlFreeParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlGetMetaEncoding", libxml_htmlGetMetaEncoding, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlHandleOmittedElem", libxml_htmlHandleOmittedElem, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlInitAutoClose", libxml_htmlInitAutoClose, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlIsAutoClosed", libxml_htmlIsAutoClosed, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlIsBooleanAttr", libxml_htmlIsBooleanAttr, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlIsScriptAttribute", libxml_htmlIsScriptAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlNewDoc", libxml_htmlNewDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlNewDocNoDtD", libxml_htmlNewDocNoDtD, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlNewParserCtxt", libxml_htmlNewParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlNodeDumpFile", libxml_htmlNodeDumpFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlNodeDumpFileFormat", libxml_htmlNodeDumpFileFormat, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlNodeDumpFormatOutput", libxml_htmlNodeDumpFormatOutput, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlNodeDumpOutput", libxml_htmlNodeDumpOutput, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlParseCharRef", libxml_htmlParseCharRef, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
+    { (char *)"htmlParseChunk", libxml_htmlParseChunk, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlParseDoc", libxml_htmlParseDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlParseDocument", libxml_htmlParseDocument, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlParseElement", libxml_htmlParseElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlParseFile", libxml_htmlParseFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlReadDoc", libxml_htmlReadDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlReadFd", libxml_htmlReadFd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlReadFile", libxml_htmlReadFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlReadMemory", libxml_htmlReadMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlSAXParseFile", libxml_htmlSAXParseFile, METH_VARARGS, NULL },
+#endif
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlSaveFile", libxml_htmlSaveFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlSaveFileEnc", libxml_htmlSaveFileEnc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"htmlSaveFileFormat", libxml_htmlSaveFileFormat, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+    { (char *)"htmlSetMetaEncoding", libxml_htmlSetMetaEncoding, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTML_ENABLED) */
+    { (char *)"namePop", libxml_namePop, METH_VARARGS, NULL },
+    { (char *)"namePush", libxml_namePush, METH_VARARGS, NULL },
+    { (char *)"nodePop", libxml_nodePop, METH_VARARGS, NULL },
+    { (char *)"nodePush", libxml_nodePush, METH_VARARGS, NULL },
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"valuePop", libxml_valuePop, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogAdd", libxml_xmlACatalogAdd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlACatalogDump", libxml_xmlACatalogDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogRemove", libxml_xmlACatalogRemove, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogResolve", libxml_xmlACatalogResolve, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogResolvePublic", libxml_xmlACatalogResolvePublic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogResolveSystem", libxml_xmlACatalogResolveSystem, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlACatalogResolveURI", libxml_xmlACatalogResolveURI, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlAddChild", libxml_xmlAddChild, METH_VARARGS, NULL },
+    { (char *)"xmlAddChildList", libxml_xmlAddChildList, METH_VARARGS, NULL },
+    { (char *)"xmlAddDocEntity", libxml_xmlAddDocEntity, METH_VARARGS, NULL },
+    { (char *)"xmlAddDtdEntity", libxml_xmlAddDtdEntity, METH_VARARGS, NULL },
+    { (char *)"xmlAddEncodingAlias", libxml_xmlAddEncodingAlias, METH_VARARGS, NULL },
+    { (char *)"xmlAddNextSibling", libxml_xmlAddNextSibling, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlAddPrevSibling", libxml_xmlAddPrevSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+    { (char *)"xmlAddSibling", libxml_xmlAddSibling, METH_VARARGS, NULL },
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlBoolToText", libxml_xmlBoolToText, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+    { (char *)"xmlBuildQName", libxml_xmlBuildQName, METH_VARARGS, NULL },
+    { (char *)"xmlBuildRelativeURI", libxml_xmlBuildRelativeURI, METH_VARARGS, NULL },
+    { (char *)"xmlBuildURI", libxml_xmlBuildURI, METH_VARARGS, NULL },
+    { (char *)"xmlByteConsumed", libxml_xmlByteConsumed, METH_VARARGS, NULL },
+    { (char *)"xmlCanonicPath", libxml_xmlCanonicPath, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogAdd", libxml_xmlCatalogAdd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogCleanup", libxml_xmlCatalogCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogConvert", libxml_xmlCatalogConvert, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlCatalogDump", libxml_xmlCatalogDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogGetPublic", libxml_xmlCatalogGetPublic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogGetSystem", libxml_xmlCatalogGetSystem, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogIsEmpty", libxml_xmlCatalogIsEmpty, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogRemove", libxml_xmlCatalogRemove, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogResolve", libxml_xmlCatalogResolve, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogResolvePublic", libxml_xmlCatalogResolvePublic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogResolveSystem", libxml_xmlCatalogResolveSystem, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogResolveURI", libxml_xmlCatalogResolveURI, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlCatalogSetDebug", libxml_xmlCatalogSetDebug, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlCharStrdup", libxml_xmlCharStrdup, METH_VARARGS, NULL },
+    { (char *)"xmlCharStrndup", libxml_xmlCharStrndup, METH_VARARGS, NULL },
+    { (char *)"xmlCheckFilename", libxml_xmlCheckFilename, METH_VARARGS, NULL },
+    { (char *)"xmlCheckLanguageID", libxml_xmlCheckLanguageID, METH_VARARGS, NULL },
+    { (char *)"xmlCheckUTF8", libxml_xmlCheckUTF8, METH_VARARGS, NULL },
+    { (char *)"xmlCheckVersion", libxml_xmlCheckVersion, METH_VARARGS, NULL },
+    { (char *)"xmlCleanupCharEncodingHandlers", libxml_xmlCleanupCharEncodingHandlers, METH_VARARGS, NULL },
+    { (char *)"xmlCleanupEncodingAliases", libxml_xmlCleanupEncodingAliases, METH_VARARGS, NULL },
+    { (char *)"xmlCleanupGlobals", libxml_xmlCleanupGlobals, METH_VARARGS, NULL },
+    { (char *)"xmlCleanupInputCallbacks", libxml_xmlCleanupInputCallbacks, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlCleanupOutputCallbacks", libxml_xmlCleanupOutputCallbacks, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlCleanupPredefinedEntities", libxml_xmlCleanupPredefinedEntities, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlClearParserCtxt", libxml_xmlClearParserCtxt, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlConvertSGMLCatalog", libxml_xmlConvertSGMLCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlCopyChar", libxml_xmlCopyChar, METH_VARARGS, NULL },
+    { (char *)"xmlCopyCharMultiByte", libxml_xmlCopyCharMultiByte, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlCopyDoc", libxml_xmlCopyDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlCopyDtd", libxml_xmlCopyDtd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlCopyError", libxml_xmlCopyError, METH_VARARGS, NULL },
+    { (char *)"xmlCopyNamespace", libxml_xmlCopyNamespace, METH_VARARGS, NULL },
+    { (char *)"xmlCopyNamespaceList", libxml_xmlCopyNamespaceList, METH_VARARGS, NULL },
+    { (char *)"xmlCopyNode", libxml_xmlCopyNode, METH_VARARGS, NULL },
+    { (char *)"xmlCopyNodeList", libxml_xmlCopyNodeList, METH_VARARGS, NULL },
+    { (char *)"xmlCopyProp", libxml_xmlCopyProp, METH_VARARGS, NULL },
+    { (char *)"xmlCopyPropList", libxml_xmlCopyPropList, METH_VARARGS, NULL },
+    { (char *)"xmlCreateDocParserCtxt", libxml_xmlCreateDocParserCtxt, METH_VARARGS, NULL },
+    { (char *)"xmlCreateEntityParserCtxt", libxml_xmlCreateEntityParserCtxt, METH_VARARGS, NULL },
+    { (char *)"xmlCreateFileParserCtxt", libxml_xmlCreateFileParserCtxt, METH_VARARGS, NULL },
+    { (char *)"xmlCreateInputBuffer", libxml_xmlCreateInputBuffer, METH_VARARGS, NULL },
+    { (char *)"xmlCreateIntSubset", libxml_xmlCreateIntSubset, METH_VARARGS, NULL },
+    { (char *)"xmlCreateMemoryParserCtxt", libxml_xmlCreateMemoryParserCtxt, METH_VARARGS, NULL },
+    { (char *)"xmlCreateOutputBuffer", libxml_xmlCreateOutputBuffer, METH_VARARGS, NULL },
+    { (char *)"xmlCreatePushParser", libxml_xmlCreatePushParser, METH_VARARGS, NULL },
+    { (char *)"xmlCreateURI", libxml_xmlCreateURI, METH_VARARGS, NULL },
+    { (char *)"xmlCreateURLParserCtxt", libxml_xmlCreateURLParserCtxt, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtReadDoc", libxml_xmlCtxtReadDoc, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtReadFd", libxml_xmlCtxtReadFd, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtReadFile", libxml_xmlCtxtReadFile, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtReadMemory", libxml_xmlCtxtReadMemory, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtReset", libxml_xmlCtxtReset, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtResetPush", libxml_xmlCtxtResetPush, METH_VARARGS, NULL },
+    { (char *)"xmlCtxtUseOptions", libxml_xmlCtxtUseOptions, METH_VARARGS, NULL },
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugCheckDocument", libxml_xmlDebugCheckDocument, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpAttr", libxml_xmlDebugDumpAttr, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpAttrList", libxml_xmlDebugDumpAttrList, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpDTD", libxml_xmlDebugDumpDTD, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpDocument", libxml_xmlDebugDumpDocument, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpDocumentHead", libxml_xmlDebugDumpDocumentHead, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpEntities", libxml_xmlDebugDumpEntities, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpNode", libxml_xmlDebugDumpNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpNodeList", libxml_xmlDebugDumpNodeList, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpOneNode", libxml_xmlDebugDumpOneNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlDebugDumpString", libxml_xmlDebugDumpString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+    { (char *)"xmlDebugMemory", libxml_xmlDebugMemory, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlDecodeEntities", libxml_xmlDecodeEntities, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlDefaultSAXHandlerInit", libxml_xmlDefaultSAXHandlerInit, METH_VARARGS, NULL },
+    { (char *)"xmlDelEncodingAlias", libxml_xmlDelEncodingAlias, METH_VARARGS, NULL },
+    { (char *)"xmlDictCleanup", libxml_xmlDictCleanup, METH_VARARGS, NULL },
+    { (char *)"xmlDocCopyNode", libxml_xmlDocCopyNode, METH_VARARGS, NULL },
+    { (char *)"xmlDocCopyNodeList", libxml_xmlDocCopyNodeList, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlDocDump", libxml_xmlDocDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlDocFormatDump", libxml_xmlDocFormatDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+    { (char *)"xmlDocGetRootElement", libxml_xmlDocGetRootElement, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+    { (char *)"xmlDocSetRootElement", libxml_xmlDocSetRootElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+    { (char *)"xmlDumpMemory", libxml_xmlDumpMemory, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlElemDump", libxml_xmlElemDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlEncodeEntities", libxml_xmlEncodeEntities, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlEncodeEntitiesReentrant", libxml_xmlEncodeEntitiesReentrant, METH_VARARGS, NULL },
+    { (char *)"xmlEncodeSpecialChars", libxml_xmlEncodeSpecialChars, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetCode", libxml_xmlErrorGetCode, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetDomain", libxml_xmlErrorGetDomain, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetFile", libxml_xmlErrorGetFile, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetLevel", libxml_xmlErrorGetLevel, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetLine", libxml_xmlErrorGetLine, METH_VARARGS, NULL },
+    { (char *)"xmlErrorGetMessage", libxml_xmlErrorGetMessage, METH_VARARGS, NULL },
+    { (char *)"xmlFileMatch", libxml_xmlFileMatch, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlFirstElementChild", libxml_xmlFirstElementChild, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlFreeCatalog", libxml_xmlFreeCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlFreeDoc", libxml_xmlFreeDoc, METH_VARARGS, NULL },
+    { (char *)"xmlFreeDtd", libxml_xmlFreeDtd, METH_VARARGS, NULL },
+    { (char *)"xmlFreeNode", libxml_xmlFreeNode, METH_VARARGS, NULL },
+    { (char *)"xmlFreeNodeList", libxml_xmlFreeNodeList, METH_VARARGS, NULL },
+    { (char *)"xmlFreeNs", libxml_xmlFreeNs, METH_VARARGS, NULL },
+    { (char *)"xmlFreeNsList", libxml_xmlFreeNsList, METH_VARARGS, NULL },
+    { (char *)"xmlFreeParserInputBuffer", libxml_xmlFreeParserInputBuffer, METH_VARARGS, NULL },
+    { (char *)"xmlFreeProp", libxml_xmlFreeProp, METH_VARARGS, NULL },
+    { (char *)"xmlFreePropList", libxml_xmlFreePropList, METH_VARARGS, NULL },
+    { (char *)"xmlFreeURI", libxml_xmlFreeURI, METH_VARARGS, NULL },
+    { (char *)"xmlGetCompressMode", libxml_xmlGetCompressMode, METH_VARARGS, NULL },
+    { (char *)"xmlGetDocCompressMode", libxml_xmlGetDocCompressMode, METH_VARARGS, NULL },
+    { (char *)"xmlGetDocEntity", libxml_xmlGetDocEntity, METH_VARARGS, NULL },
+    { (char *)"xmlGetDtdAttrDesc", libxml_xmlGetDtdAttrDesc, METH_VARARGS, NULL },
+    { (char *)"xmlGetDtdElementDesc", libxml_xmlGetDtdElementDesc, METH_VARARGS, NULL },
+    { (char *)"xmlGetDtdEntity", libxml_xmlGetDtdEntity, METH_VARARGS, NULL },
+    { (char *)"xmlGetDtdQAttrDesc", libxml_xmlGetDtdQAttrDesc, METH_VARARGS, NULL },
+    { (char *)"xmlGetDtdQElementDesc", libxml_xmlGetDtdQElementDesc, METH_VARARGS, NULL },
+    { (char *)"xmlGetEncodingAlias", libxml_xmlGetEncodingAlias, METH_VARARGS, NULL },
+    { (char *)"xmlGetID", libxml_xmlGetID, METH_VARARGS, NULL },
+    { (char *)"xmlGetIntSubset", libxml_xmlGetIntSubset, METH_VARARGS, NULL },
+    { (char *)"xmlGetLastChild", libxml_xmlGetLastChild, METH_VARARGS, NULL },
+    { (char *)"xmlGetLastError", libxml_xmlGetLastError, METH_VARARGS, NULL },
+    { (char *)"xmlGetLineNo", libxml_xmlGetLineNo, METH_VARARGS, NULL },
+    { (char *)"xmlGetNoNsProp", libxml_xmlGetNoNsProp, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlGetNodePath", libxml_xmlGetNodePath, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
+    { (char *)"xmlGetNsProp", libxml_xmlGetNsProp, METH_VARARGS, NULL },
+    { (char *)"xmlGetParameterEntity", libxml_xmlGetParameterEntity, METH_VARARGS, NULL },
+    { (char *)"xmlGetPredefinedEntity", libxml_xmlGetPredefinedEntity, METH_VARARGS, NULL },
+    { (char *)"xmlGetProp", libxml_xmlGetProp, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlHandleEntity", libxml_xmlHandleEntity, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlHasNsProp", libxml_xmlHasNsProp, METH_VARARGS, NULL },
+    { (char *)"xmlHasProp", libxml_xmlHasProp, METH_VARARGS, NULL },
+#if defined(LIBXML_FTP_ENABLED)
+    { (char *)"xmlIOFTPMatch", libxml_xmlIOFTPMatch, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+    { (char *)"xmlIOHTTPMatch", libxml_xmlIOHTTPMatch, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+    { (char *)"xmlInitCharEncodingHandlers", libxml_xmlInitCharEncodingHandlers, METH_VARARGS, NULL },
+    { (char *)"xmlInitGlobals", libxml_xmlInitGlobals, METH_VARARGS, NULL },
+    { (char *)"xmlInitParser", libxml_xmlInitParser, METH_VARARGS, NULL },
+    { (char *)"xmlInitParserCtxt", libxml_xmlInitParserCtxt, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlInitializeCatalog", libxml_xmlInitializeCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlInitializeDict", libxml_xmlInitializeDict, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlInitializePredefinedEntities", libxml_xmlInitializePredefinedEntities, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlIsBaseChar", libxml_xmlIsBaseChar, METH_VARARGS, NULL },
+    { (char *)"xmlIsBlank", libxml_xmlIsBlank, METH_VARARGS, NULL },
+    { (char *)"xmlIsBlankNode", libxml_xmlIsBlankNode, METH_VARARGS, NULL },
+    { (char *)"xmlIsChar", libxml_xmlIsChar, METH_VARARGS, NULL },
+    { (char *)"xmlIsCombining", libxml_xmlIsCombining, METH_VARARGS, NULL },
+    { (char *)"xmlIsDigit", libxml_xmlIsDigit, METH_VARARGS, NULL },
+    { (char *)"xmlIsExtender", libxml_xmlIsExtender, METH_VARARGS, NULL },
+    { (char *)"xmlIsID", libxml_xmlIsID, METH_VARARGS, NULL },
+    { (char *)"xmlIsIdeographic", libxml_xmlIsIdeographic, METH_VARARGS, NULL },
+    { (char *)"xmlIsLetter", libxml_xmlIsLetter, METH_VARARGS, NULL },
+    { (char *)"xmlIsMixedElement", libxml_xmlIsMixedElement, METH_VARARGS, NULL },
+    { (char *)"xmlIsPubidChar", libxml_xmlIsPubidChar, METH_VARARGS, NULL },
+    { (char *)"xmlIsRef", libxml_xmlIsRef, METH_VARARGS, NULL },
+    { (char *)"xmlIsXHTML", libxml_xmlIsXHTML, METH_VARARGS, NULL },
+    { (char *)"xmlKeepBlanksDefault", libxml_xmlKeepBlanksDefault, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlLastElementChild", libxml_xmlLastElementChild, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlLineNumbersDefault", libxml_xmlLineNumbersDefault, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlLoadACatalog", libxml_xmlLoadACatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlLoadCatalog", libxml_xmlLoadCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlLoadCatalogs", libxml_xmlLoadCatalogs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlLoadSGMLSuperCatalog", libxml_xmlLoadSGMLSuperCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlLsCountNode", libxml_xmlLsCountNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+    { (char *)"xmlLsOneNode", libxml_xmlLsOneNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+    { (char *)"xmlMemoryUsed", libxml_xmlMemoryUsed, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlNamespaceParseNCName", libxml_xmlNamespaceParseNCName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlNamespaceParseNSDef", libxml_xmlNamespaceParseNSDef, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+    { (char *)"xmlNanoFTPCleanup", libxml_xmlNanoFTPCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+    { (char *)"xmlNanoFTPInit", libxml_xmlNanoFTPInit, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+    { (char *)"xmlNanoFTPProxy", libxml_xmlNanoFTPProxy, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+    { (char *)"xmlNanoFTPScanProxy", libxml_xmlNanoFTPScanProxy, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+    { (char *)"xmlNanoHTTPCleanup", libxml_xmlNanoHTTPCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+    { (char *)"xmlNanoHTTPInit", libxml_xmlNanoHTTPInit, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+    { (char *)"xmlNanoHTTPScanProxy", libxml_xmlNanoHTTPScanProxy, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+    { (char *)"xmlNewCDataBlock", libxml_xmlNewCDataBlock, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlNewCatalog", libxml_xmlNewCatalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlNewCharRef", libxml_xmlNewCharRef, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlNewChild", libxml_xmlNewChild, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+    { (char *)"xmlNewComment", libxml_xmlNewComment, METH_VARARGS, NULL },
+    { (char *)"xmlNewDoc", libxml_xmlNewDoc, METH_VARARGS, NULL },
+    { (char *)"xmlNewDocComment", libxml_xmlNewDocComment, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNewDocFragment", libxml_xmlNewDocFragment, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNewDocNode", libxml_xmlNewDocNode, METH_VARARGS, NULL },
+    { (char *)"xmlNewDocNodeEatName", libxml_xmlNewDocNodeEatName, METH_VARARGS, NULL },
+    { (char *)"xmlNewDocPI", libxml_xmlNewDocPI, METH_VARARGS, NULL },
+    { (char *)"xmlNewDocProp", libxml_xmlNewDocProp, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNewDocRawNode", libxml_xmlNewDocRawNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNewDocText", libxml_xmlNewDocText, METH_VARARGS, NULL },
+    { (char *)"xmlNewDocTextLen", libxml_xmlNewDocTextLen, METH_VARARGS, NULL },
+    { (char *)"xmlNewDtd", libxml_xmlNewDtd, METH_VARARGS, NULL },
+    { (char *)"xmlNewEntity", libxml_xmlNewEntity, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlNewGlobalNs", libxml_xmlNewGlobalNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL },
+    { (char *)"xmlNewNodeEatName", libxml_xmlNewNodeEatName, METH_VARARGS, NULL },
+    { (char *)"xmlNewNs", libxml_xmlNewNs, METH_VARARGS, NULL },
+    { (char *)"xmlNewNsProp", libxml_xmlNewNsProp, METH_VARARGS, NULL },
+    { (char *)"xmlNewNsPropEatName", libxml_xmlNewNsPropEatName, METH_VARARGS, NULL },
+    { (char *)"xmlNewPI", libxml_xmlNewPI, METH_VARARGS, NULL },
+    { (char *)"xmlNewParserCtxt", libxml_xmlNewParserCtxt, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlNewProp", libxml_xmlNewProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+    { (char *)"xmlNewReference", libxml_xmlNewReference, METH_VARARGS, NULL },
+    { (char *)"xmlNewText", libxml_xmlNewText, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNewTextChild", libxml_xmlNewTextChild, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNewTextLen", libxml_xmlNewTextLen, METH_VARARGS, NULL },
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlNewTextReader", libxml_xmlNewTextReader, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlNewTextReaderFilename", libxml_xmlNewTextReaderFilename, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlNewValidCtxt", libxml_xmlNewValidCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+    { (char *)"xmlNextChar", libxml_xmlNextChar, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNextElementSibling", libxml_xmlNextElementSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNodeAddContent", libxml_xmlNodeAddContent, METH_VARARGS, NULL },
+    { (char *)"xmlNodeAddContentLen", libxml_xmlNodeAddContentLen, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlNodeDumpOutput", libxml_xmlNodeDumpOutput, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+    { (char *)"xmlNodeGetBase", libxml_xmlNodeGetBase, METH_VARARGS, NULL },
+    { (char *)"xmlNodeGetContent", libxml_xmlNodeGetContent, METH_VARARGS, NULL },
+    { (char *)"xmlNodeGetLang", libxml_xmlNodeGetLang, METH_VARARGS, NULL },
+    { (char *)"xmlNodeGetNs", libxml_xmlNodeGetNs, METH_VARARGS, NULL },
+    { (char *)"xmlNodeGetNsDefs", libxml_xmlNodeGetNsDefs, METH_VARARGS, NULL },
+    { (char *)"xmlNodeGetSpacePreserve", libxml_xmlNodeGetSpacePreserve, METH_VARARGS, NULL },
+    { (char *)"xmlNodeIsText", libxml_xmlNodeIsText, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNodeListGetRawString", libxml_xmlNodeListGetRawString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNodeListGetString", libxml_xmlNodeListGetString, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlNodeSetBase", libxml_xmlNodeSetBase, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+    { (char *)"xmlNodeSetContent", libxml_xmlNodeSetContent, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNodeSetContentLen", libxml_xmlNodeSetContentLen, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNodeSetLang", libxml_xmlNodeSetLang, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNodeSetName", libxml_xmlNodeSetName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlNodeSetSpacePreserve", libxml_xmlNodeSetSpacePreserve, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlNormalizeURIPath", libxml_xmlNormalizeURIPath, METH_VARARGS, NULL },
+    { (char *)"xmlNormalizeWindowsPath", libxml_xmlNormalizeWindowsPath, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlOutputBufferGetContent", libxml_xmlOutputBufferGetContent, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlOutputBufferWrite", libxml_xmlOutputBufferWrite, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlOutputBufferWriteString", libxml_xmlOutputBufferWriteString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+    { (char *)"xmlParseAttValue", libxml_xmlParseAttValue, METH_VARARGS, NULL },
+    { (char *)"xmlParseAttributeListDecl", libxml_xmlParseAttributeListDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParseCDSect", libxml_xmlParseCDSect, METH_VARARGS, NULL },
+#if defined(LIBXML_CATALOG_ENABLED)
+    { (char *)"xmlParseCatalogFile", libxml_xmlParseCatalogFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+    { (char *)"xmlParseCharData", libxml_xmlParseCharData, METH_VARARGS, NULL },
+    { (char *)"xmlParseCharRef", libxml_xmlParseCharRef, METH_VARARGS, NULL },
+#if defined(LIBXML_PUSH_ENABLED)
+    { (char *)"xmlParseChunk", libxml_xmlParseChunk, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_PUSH_ENABLED) */
+    { (char *)"xmlParseComment", libxml_xmlParseComment, METH_VARARGS, NULL },
+    { (char *)"xmlParseContent", libxml_xmlParseContent, METH_VARARGS, NULL },
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlParseDTD", libxml_xmlParseDTD, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseDoc", libxml_xmlParseDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlParseDocTypeDecl", libxml_xmlParseDocTypeDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParseDocument", libxml_xmlParseDocument, METH_VARARGS, NULL },
+    { (char *)"xmlParseElement", libxml_xmlParseElement, METH_VARARGS, NULL },
+    { (char *)"xmlParseElementDecl", libxml_xmlParseElementDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParseEncName", libxml_xmlParseEncName, METH_VARARGS, NULL },
+    { (char *)"xmlParseEncodingDecl", libxml_xmlParseEncodingDecl, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseEndTag", libxml_xmlParseEndTag, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseEntity", libxml_xmlParseEntity, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlParseEntityDecl", libxml_xmlParseEntityDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParseEntityRef", libxml_xmlParseEntityRef, METH_VARARGS, NULL },
+    { (char *)"xmlParseExtParsedEnt", libxml_xmlParseExtParsedEnt, METH_VARARGS, NULL },
+    { (char *)"xmlParseExternalSubset", libxml_xmlParseExternalSubset, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseFile", libxml_xmlParseFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlParseMarkupDecl", libxml_xmlParseMarkupDecl, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseMemory", libxml_xmlParseMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlParseMisc", libxml_xmlParseMisc, METH_VARARGS, NULL },
+    { (char *)"xmlParseName", libxml_xmlParseName, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlParseNamespace", libxml_xmlParseNamespace, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlParseNmtoken", libxml_xmlParseNmtoken, METH_VARARGS, NULL },
+    { (char *)"xmlParseNotationDecl", libxml_xmlParseNotationDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParsePEReference", libxml_xmlParsePEReference, METH_VARARGS, NULL },
+    { (char *)"xmlParsePI", libxml_xmlParsePI, METH_VARARGS, NULL },
+    { (char *)"xmlParsePITarget", libxml_xmlParsePITarget, METH_VARARGS, NULL },
+    { (char *)"xmlParsePubidLiteral", libxml_xmlParsePubidLiteral, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlParseQuotedString", libxml_xmlParseQuotedString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlParseReference", libxml_xmlParseReference, METH_VARARGS, NULL },
+    { (char *)"xmlParseSDDecl", libxml_xmlParseSDDecl, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlParseStartTag", libxml_xmlParseStartTag, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlParseSystemLiteral", libxml_xmlParseSystemLiteral, METH_VARARGS, NULL },
+    { (char *)"xmlParseTextDecl", libxml_xmlParseTextDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParseURI", libxml_xmlParseURI, METH_VARARGS, NULL },
+    { (char *)"xmlParseURIRaw", libxml_xmlParseURIRaw, METH_VARARGS, NULL },
+    { (char *)"xmlParseURIReference", libxml_xmlParseURIReference, METH_VARARGS, NULL },
+    { (char *)"xmlParseVersionInfo", libxml_xmlParseVersionInfo, METH_VARARGS, NULL },
+    { (char *)"xmlParseVersionNum", libxml_xmlParseVersionNum, METH_VARARGS, NULL },
+    { (char *)"xmlParseXMLDecl", libxml_xmlParseXMLDecl, METH_VARARGS, NULL },
+    { (char *)"xmlParserGetDirectory", libxml_xmlParserGetDirectory, METH_VARARGS, NULL },
+    { (char *)"xmlParserGetDoc", libxml_xmlParserGetDoc, METH_VARARGS, NULL },
+    { (char *)"xmlParserGetIsValid", libxml_xmlParserGetIsValid, METH_VARARGS, NULL },
+    { (char *)"xmlParserGetWellFormed", libxml_xmlParserGetWellFormed, METH_VARARGS, NULL },
+    { (char *)"xmlParserHandlePEReference", libxml_xmlParserHandlePEReference, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlParserHandleReference", libxml_xmlParserHandleReference, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+    { (char *)"xmlParserInputBufferGrow", libxml_xmlParserInputBufferGrow, METH_VARARGS, NULL },
+    { (char *)"xmlParserInputBufferPush", libxml_xmlParserInputBufferPush, METH_VARARGS, NULL },
+    { (char *)"xmlParserInputBufferRead", libxml_xmlParserInputBufferRead, METH_VARARGS, NULL },
+    { (char *)"xmlParserSetLineNumbers", libxml_xmlParserSetLineNumbers, METH_VARARGS, NULL },
+    { (char *)"xmlParserSetLoadSubset", libxml_xmlParserSetLoadSubset, METH_VARARGS, NULL },
+    { (char *)"xmlParserSetPedantic", libxml_xmlParserSetPedantic, METH_VARARGS, NULL },
+    { (char *)"xmlParserSetReplaceEntities", libxml_xmlParserSetReplaceEntities, METH_VARARGS, NULL },
+    { (char *)"xmlParserSetValidate", libxml_xmlParserSetValidate, METH_VARARGS, NULL },
+    { (char *)"xmlPathToURI", libxml_xmlPathToURI, METH_VARARGS, NULL },
+    { (char *)"xmlPedanticParserDefault", libxml_xmlPedanticParserDefault, METH_VARARGS, NULL },
+    { (char *)"xmlPopInput", libxml_xmlPopInput, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlPreviousElementSibling", libxml_xmlPreviousElementSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+    { (char *)"xmlPrintURI", libxml_xmlPrintURI, METH_VARARGS, NULL },
+    { (char *)"xmlPythonCleanupParser", libxml_xmlPythonCleanupParser, METH_VARARGS, NULL },
+    { (char *)"xmlReadDoc", libxml_xmlReadDoc, METH_VARARGS, NULL },
+    { (char *)"xmlReadFd", libxml_xmlReadFd, METH_VARARGS, NULL },
+    { (char *)"xmlReadFile", libxml_xmlReadFile, METH_VARARGS, NULL },
+    { (char *)"xmlReadMemory", libxml_xmlReadMemory, METH_VARARGS, NULL },
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderForDoc", libxml_xmlReaderForDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderForFd", libxml_xmlReaderForFd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderForFile", libxml_xmlReaderForFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderForMemory", libxml_xmlReaderForMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderNewDoc", libxml_xmlReaderNewDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderNewFd", libxml_xmlReaderNewFd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderNewFile", libxml_xmlReaderNewFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderNewMemory", libxml_xmlReaderNewMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderNewWalker", libxml_xmlReaderNewWalker, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlReaderWalker", libxml_xmlReaderWalker, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+    { (char *)"xmlReconciliateNs", libxml_xmlReconciliateNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlRecoverDoc", libxml_xmlRecoverDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlRecoverFile", libxml_xmlRecoverFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlRecoverMemory", libxml_xmlRecoverMemory, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlRegFreeRegexp", libxml_xmlRegFreeRegexp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlRegexpCompile", libxml_xmlRegexpCompile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlRegexpExec", libxml_xmlRegexpExec, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlRegexpIsDeterminist", libxml_xmlRegexpIsDeterminist, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlRegexpPrint", libxml_xmlRegexpPrint, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+    { (char *)"xmlRegisterDefaultInputCallbacks", libxml_xmlRegisterDefaultInputCallbacks, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlRegisterDefaultOutputCallbacks", libxml_xmlRegisterDefaultOutputCallbacks, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED)
+    { (char *)"xmlRegisterHTTPPostCallbacks", libxml_xmlRegisterHTTPPostCallbacks, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlRegisterXPathFunction", libxml_xmlRegisterXPathFunction, METH_VARARGS, NULL },
+#endif
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGCleanupTypes", libxml_xmlRelaxNGCleanupTypes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlRelaxNGDump", libxml_xmlRelaxNGDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlRelaxNGDumpTree", libxml_xmlRelaxNGDumpTree, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGFree", libxml_xmlRelaxNGFree, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGFreeParserCtxt", libxml_xmlRelaxNGFreeParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGInitTypes", libxml_xmlRelaxNGInitTypes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGNewDocParserCtxt", libxml_xmlRelaxNGNewDocParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGNewMemParserCtxt", libxml_xmlRelaxNGNewMemParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGNewParserCtxt", libxml_xmlRelaxNGNewParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGNewValidCtxt", libxml_xmlRelaxNGNewValidCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGParse", libxml_xmlRelaxNGParse, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGValidateDoc", libxml_xmlRelaxNGValidateDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGValidateFullElement", libxml_xmlRelaxNGValidateFullElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGValidatePopElement", libxml_xmlRelaxNGValidatePopElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGValidatePushCData", libxml_xmlRelaxNGValidatePushCData, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxNGValidatePushElement", libxml_xmlRelaxNGValidatePushElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlRelaxParserSetFlag", libxml_xmlRelaxParserSetFlag, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+    { (char *)"xmlRemoveID", libxml_xmlRemoveID, METH_VARARGS, NULL },
+    { (char *)"xmlRemoveProp", libxml_xmlRemoveProp, METH_VARARGS, NULL },
+    { (char *)"xmlRemoveRef", libxml_xmlRemoveRef, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+    { (char *)"xmlReplaceNode", libxml_xmlReplaceNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+    { (char *)"xmlResetError", libxml_xmlResetError, METH_VARARGS, NULL },
+    { (char *)"xmlResetLastError", libxml_xmlResetLastError, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlSAXDefaultVersion", libxml_xmlSAXDefaultVersion, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+    { (char *)"xmlSAXParseFile", libxml_xmlSAXParseFile, METH_VARARGS, NULL },
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlSaveFile", libxml_xmlSaveFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlSaveFileEnc", libxml_xmlSaveFileEnc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlSaveFormatFile", libxml_xmlSaveFormatFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlSaveFormatFileEnc", libxml_xmlSaveFormatFileEnc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+    { (char *)"xmlSaveUri", libxml_xmlSaveUri, METH_VARARGS, NULL },
+#if defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlScanName", libxml_xmlScanName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaCleanupTypes", libxml_xmlSchemaCleanupTypes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaCollapseString", libxml_xmlSchemaCollapseString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlSchemaDump", libxml_xmlSchemaDump, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaFree", libxml_xmlSchemaFree, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaFreeParserCtxt", libxml_xmlSchemaFreeParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaInitTypes", libxml_xmlSchemaInitTypes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaIsValid", libxml_xmlSchemaIsValid, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaNewDocParserCtxt", libxml_xmlSchemaNewDocParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaNewMemParserCtxt", libxml_xmlSchemaNewMemParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaNewParserCtxt", libxml_xmlSchemaNewParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaNewValidCtxt", libxml_xmlSchemaNewValidCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaParse", libxml_xmlSchemaParse, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaSetValidOptions", libxml_xmlSchemaSetValidOptions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidCtxtGetOptions", libxml_xmlSchemaValidCtxtGetOptions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidCtxtGetParserCtxt", libxml_xmlSchemaValidCtxtGetParserCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidateDoc", libxml_xmlSchemaValidateDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidateFile", libxml_xmlSchemaValidateFile, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidateOneElement", libxml_xmlSchemaValidateOneElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaValidateSetFilename", libxml_xmlSchemaValidateSetFilename, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlSchemaWhiteSpaceReplace", libxml_xmlSchemaWhiteSpaceReplace, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+    { (char *)"xmlSearchNs", libxml_xmlSearchNs, METH_VARARGS, NULL },
+    { (char *)"xmlSearchNsByHref", libxml_xmlSearchNsByHref, METH_VARARGS, NULL },
+    { (char *)"xmlSetCompressMode", libxml_xmlSetCompressMode, METH_VARARGS, NULL },
+    { (char *)"xmlSetDocCompressMode", libxml_xmlSetDocCompressMode, METH_VARARGS, NULL },
+    { (char *)"xmlSetEntityLoader", libxml_xmlSetEntityLoader, METH_VARARGS, NULL },
+    { (char *)"xmlSetListDoc", libxml_xmlSetListDoc, METH_VARARGS, NULL },
+    { (char *)"xmlSetNs", libxml_xmlSetNs, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+    { (char *)"xmlSetNsProp", libxml_xmlSetNsProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+    { (char *)"xmlSetProp", libxml_xmlSetProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+    { (char *)"xmlSetTreeDoc", libxml_xmlSetTreeDoc, METH_VARARGS, NULL },
+#if defined(LIBXML_SAX1_ENABLED)
+    { (char *)"xmlSetupParserForBuffer", libxml_xmlSetupParserForBuffer, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+    { (char *)"xmlShellPrintNode", libxml_xmlShellPrintNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlShellPrintXPathError", libxml_xmlShellPrintXPathError, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) */
+    { (char *)"xmlSkipBlankChars", libxml_xmlSkipBlankChars, METH_VARARGS, NULL },
+    { (char *)"xmlStopParser", libxml_xmlStopParser, METH_VARARGS, NULL },
+    { (char *)"xmlStrEqual", libxml_xmlStrEqual, METH_VARARGS, NULL },
+    { (char *)"xmlStrQEqual", libxml_xmlStrQEqual, METH_VARARGS, NULL },
+    { (char *)"xmlStrcasecmp", libxml_xmlStrcasecmp, METH_VARARGS, NULL },
+    { (char *)"xmlStrcasestr", libxml_xmlStrcasestr, METH_VARARGS, NULL },
+    { (char *)"xmlStrcat", libxml_xmlStrcat, METH_VARARGS, NULL },
+    { (char *)"xmlStrchr", libxml_xmlStrchr, METH_VARARGS, NULL },
+    { (char *)"xmlStrcmp", libxml_xmlStrcmp, METH_VARARGS, NULL },
+    { (char *)"xmlStrdup", libxml_xmlStrdup, METH_VARARGS, NULL },
+    { (char *)"xmlStringDecodeEntities", libxml_xmlStringDecodeEntities, METH_VARARGS, NULL },
+    { (char *)"xmlStringGetNodeList", libxml_xmlStringGetNodeList, METH_VARARGS, NULL },
+    { (char *)"xmlStringLenDecodeEntities", libxml_xmlStringLenDecodeEntities, METH_VARARGS, NULL },
+    { (char *)"xmlStringLenGetNodeList", libxml_xmlStringLenGetNodeList, METH_VARARGS, NULL },
+    { (char *)"xmlStrlen", libxml_xmlStrlen, METH_VARARGS, NULL },
+    { (char *)"xmlStrncasecmp", libxml_xmlStrncasecmp, METH_VARARGS, NULL },
+    { (char *)"xmlStrncat", libxml_xmlStrncat, METH_VARARGS, NULL },
+    { (char *)"xmlStrncatNew", libxml_xmlStrncatNew, METH_VARARGS, NULL },
+    { (char *)"xmlStrncmp", libxml_xmlStrncmp, METH_VARARGS, NULL },
+    { (char *)"xmlStrndup", libxml_xmlStrndup, METH_VARARGS, NULL },
+    { (char *)"xmlStrstr", libxml_xmlStrstr, METH_VARARGS, NULL },
+    { (char *)"xmlStrsub", libxml_xmlStrsub, METH_VARARGS, NULL },
+    { (char *)"xmlSubstituteEntitiesDefault", libxml_xmlSubstituteEntitiesDefault, METH_VARARGS, NULL },
+    { (char *)"xmlTextConcat", libxml_xmlTextConcat, METH_VARARGS, NULL },
+    { (char *)"xmlTextMerge", libxml_xmlTextMerge, METH_VARARGS, NULL },
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderAttributeCount", libxml_xmlTextReaderAttributeCount, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderByteConsumed", libxml_xmlTextReaderByteConsumed, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderClose", libxml_xmlTextReaderClose, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstBaseUri", libxml_xmlTextReaderConstBaseUri, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstEncoding", libxml_xmlTextReaderConstEncoding, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstLocalName", libxml_xmlTextReaderConstLocalName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstName", libxml_xmlTextReaderConstName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstNamespaceUri", libxml_xmlTextReaderConstNamespaceUri, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstPrefix", libxml_xmlTextReaderConstPrefix, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstString", libxml_xmlTextReaderConstString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstValue", libxml_xmlTextReaderConstValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstXmlLang", libxml_xmlTextReaderConstXmlLang, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderConstXmlVersion", libxml_xmlTextReaderConstXmlVersion, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderCurrentDoc", libxml_xmlTextReaderCurrentDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderCurrentNode", libxml_xmlTextReaderCurrentNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderDepth", libxml_xmlTextReaderDepth, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderExpand", libxml_xmlTextReaderExpand, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetAttribute", libxml_xmlTextReaderGetAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetAttributeNo", libxml_xmlTextReaderGetAttributeNo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetAttributeNs", libxml_xmlTextReaderGetAttributeNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetParserColumnNumber", libxml_xmlTextReaderGetParserColumnNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetParserLineNumber", libxml_xmlTextReaderGetParserLineNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetParserProp", libxml_xmlTextReaderGetParserProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderGetRemainder", libxml_xmlTextReaderGetRemainder, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderHasAttributes", libxml_xmlTextReaderHasAttributes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderHasValue", libxml_xmlTextReaderHasValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderIsDefault", libxml_xmlTextReaderIsDefault, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderIsEmptyElement", libxml_xmlTextReaderIsEmptyElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderIsNamespaceDecl", libxml_xmlTextReaderIsNamespaceDecl, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderIsValid", libxml_xmlTextReaderIsValid, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderLocatorBaseURI", libxml_xmlTextReaderLocatorBaseURI, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderLocatorLineNumber", libxml_xmlTextReaderLocatorLineNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderLookupNamespace", libxml_xmlTextReaderLookupNamespace, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToAttribute", libxml_xmlTextReaderMoveToAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToAttributeNo", libxml_xmlTextReaderMoveToAttributeNo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToAttributeNs", libxml_xmlTextReaderMoveToAttributeNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToElement", libxml_xmlTextReaderMoveToElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToFirstAttribute", libxml_xmlTextReaderMoveToFirstAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderMoveToNextAttribute", libxml_xmlTextReaderMoveToNextAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderNext", libxml_xmlTextReaderNext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderNextSibling", libxml_xmlTextReaderNextSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderNodeType", libxml_xmlTextReaderNodeType, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderNormalization", libxml_xmlTextReaderNormalization, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderPreserve", libxml_xmlTextReaderPreserve, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderQuoteChar", libxml_xmlTextReaderQuoteChar, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderRead", libxml_xmlTextReaderRead, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderReadAttributeValue", libxml_xmlTextReaderReadAttributeValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+    { (char *)"xmlTextReaderReadInnerXml", libxml_xmlTextReaderReadInnerXml, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+    { (char *)"xmlTextReaderReadOuterXml", libxml_xmlTextReaderReadOuterXml, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderReadState", libxml_xmlTextReaderReadState, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderReadString", libxml_xmlTextReaderReadString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderRelaxNGSetSchema", libxml_xmlTextReaderRelaxNGSetSchema, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderRelaxNGValidate", libxml_xmlTextReaderRelaxNGValidate, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderRelaxNGValidateCtxt", libxml_xmlTextReaderRelaxNGValidateCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderSchemaValidate", libxml_xmlTextReaderSchemaValidate, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderSchemaValidateCtxt", libxml_xmlTextReaderSchemaValidateCtxt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderSetParserProp", libxml_xmlTextReaderSetParserProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlTextReaderSetSchema", libxml_xmlTextReaderSetSchema, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderSetup", libxml_xmlTextReaderSetup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+    { (char *)"xmlTextReaderStandalone", libxml_xmlTextReaderStandalone, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_READER_ENABLED) */
+    { (char *)"xmlThrDefDefaultBufferSize", libxml_xmlThrDefDefaultBufferSize, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefDoValidityCheckingDefaultValue", libxml_xmlThrDefDoValidityCheckingDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefGetWarningsDefaultValue", libxml_xmlThrDefGetWarningsDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefIndentTreeOutput", libxml_xmlThrDefIndentTreeOutput, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefKeepBlanksDefaultValue", libxml_xmlThrDefKeepBlanksDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefLineNumbersDefaultValue", libxml_xmlThrDefLineNumbersDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefLoadExtDtdDefaultValue", libxml_xmlThrDefLoadExtDtdDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefParserDebugEntities", libxml_xmlThrDefParserDebugEntities, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefPedanticParserDefaultValue", libxml_xmlThrDefPedanticParserDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefSaveNoEmptyTags", libxml_xmlThrDefSaveNoEmptyTags, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefSubstituteEntitiesDefaultValue", libxml_xmlThrDefSubstituteEntitiesDefaultValue, METH_VARARGS, NULL },
+    { (char *)"xmlThrDefTreeIndentString", libxml_xmlThrDefTreeIndentString, METH_VARARGS, NULL },
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsAegeanNumbers", libxml_xmlUCSIsAegeanNumbers, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsAlphabeticPresentationForms", libxml_xmlUCSIsAlphabeticPresentationForms, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsArabic", libxml_xmlUCSIsArabic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsArabicPresentationFormsA", libxml_xmlUCSIsArabicPresentationFormsA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsArabicPresentationFormsB", libxml_xmlUCSIsArabicPresentationFormsB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsArmenian", libxml_xmlUCSIsArmenian, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsArrows", libxml_xmlUCSIsArrows, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBasicLatin", libxml_xmlUCSIsBasicLatin, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBengali", libxml_xmlUCSIsBengali, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBlock", libxml_xmlUCSIsBlock, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBlockElements", libxml_xmlUCSIsBlockElements, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBopomofo", libxml_xmlUCSIsBopomofo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBopomofoExtended", libxml_xmlUCSIsBopomofoExtended, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBoxDrawing", libxml_xmlUCSIsBoxDrawing, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBraillePatterns", libxml_xmlUCSIsBraillePatterns, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsBuhid", libxml_xmlUCSIsBuhid, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsByzantineMusicalSymbols", libxml_xmlUCSIsByzantineMusicalSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKCompatibility", libxml_xmlUCSIsCJKCompatibility, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKCompatibilityForms", libxml_xmlUCSIsCJKCompatibilityForms, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKCompatibilityIdeographs", libxml_xmlUCSIsCJKCompatibilityIdeographs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKCompatibilityIdeographsSupplement", libxml_xmlUCSIsCJKCompatibilityIdeographsSupplement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKRadicalsSupplement", libxml_xmlUCSIsCJKRadicalsSupplement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKSymbolsandPunctuation", libxml_xmlUCSIsCJKSymbolsandPunctuation, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKUnifiedIdeographs", libxml_xmlUCSIsCJKUnifiedIdeographs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKUnifiedIdeographsExtensionA", libxml_xmlUCSIsCJKUnifiedIdeographsExtensionA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCJKUnifiedIdeographsExtensionB", libxml_xmlUCSIsCJKUnifiedIdeographsExtensionB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCat", libxml_xmlUCSIsCat, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatC", libxml_xmlUCSIsCatC, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatCc", libxml_xmlUCSIsCatCc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatCf", libxml_xmlUCSIsCatCf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatCo", libxml_xmlUCSIsCatCo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatCs", libxml_xmlUCSIsCatCs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatL", libxml_xmlUCSIsCatL, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatLl", libxml_xmlUCSIsCatLl, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatLm", libxml_xmlUCSIsCatLm, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatLo", libxml_xmlUCSIsCatLo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatLt", libxml_xmlUCSIsCatLt, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatLu", libxml_xmlUCSIsCatLu, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatM", libxml_xmlUCSIsCatM, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatMc", libxml_xmlUCSIsCatMc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatMe", libxml_xmlUCSIsCatMe, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatMn", libxml_xmlUCSIsCatMn, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatN", libxml_xmlUCSIsCatN, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatNd", libxml_xmlUCSIsCatNd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatNl", libxml_xmlUCSIsCatNl, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatNo", libxml_xmlUCSIsCatNo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatP", libxml_xmlUCSIsCatP, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPc", libxml_xmlUCSIsCatPc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPd", libxml_xmlUCSIsCatPd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPe", libxml_xmlUCSIsCatPe, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPf", libxml_xmlUCSIsCatPf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPi", libxml_xmlUCSIsCatPi, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPo", libxml_xmlUCSIsCatPo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatPs", libxml_xmlUCSIsCatPs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatS", libxml_xmlUCSIsCatS, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatSc", libxml_xmlUCSIsCatSc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatSk", libxml_xmlUCSIsCatSk, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatSm", libxml_xmlUCSIsCatSm, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatSo", libxml_xmlUCSIsCatSo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatZ", libxml_xmlUCSIsCatZ, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatZl", libxml_xmlUCSIsCatZl, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatZp", libxml_xmlUCSIsCatZp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCatZs", libxml_xmlUCSIsCatZs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCherokee", libxml_xmlUCSIsCherokee, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCombiningDiacriticalMarks", libxml_xmlUCSIsCombiningDiacriticalMarks, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCombiningDiacriticalMarksforSymbols", libxml_xmlUCSIsCombiningDiacriticalMarksforSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCombiningHalfMarks", libxml_xmlUCSIsCombiningHalfMarks, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCombiningMarksforSymbols", libxml_xmlUCSIsCombiningMarksforSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsControlPictures", libxml_xmlUCSIsControlPictures, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCurrencySymbols", libxml_xmlUCSIsCurrencySymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCypriotSyllabary", libxml_xmlUCSIsCypriotSyllabary, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCyrillic", libxml_xmlUCSIsCyrillic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsCyrillicSupplement", libxml_xmlUCSIsCyrillicSupplement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsDeseret", libxml_xmlUCSIsDeseret, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsDevanagari", libxml_xmlUCSIsDevanagari, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsDingbats", libxml_xmlUCSIsDingbats, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsEnclosedAlphanumerics", libxml_xmlUCSIsEnclosedAlphanumerics, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsEnclosedCJKLettersandMonths", libxml_xmlUCSIsEnclosedCJKLettersandMonths, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsEthiopic", libxml_xmlUCSIsEthiopic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGeneralPunctuation", libxml_xmlUCSIsGeneralPunctuation, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGeometricShapes", libxml_xmlUCSIsGeometricShapes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGeorgian", libxml_xmlUCSIsGeorgian, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGothic", libxml_xmlUCSIsGothic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGreek", libxml_xmlUCSIsGreek, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGreekExtended", libxml_xmlUCSIsGreekExtended, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGreekandCoptic", libxml_xmlUCSIsGreekandCoptic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGujarati", libxml_xmlUCSIsGujarati, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsGurmukhi", libxml_xmlUCSIsGurmukhi, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHalfwidthandFullwidthForms", libxml_xmlUCSIsHalfwidthandFullwidthForms, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHangulCompatibilityJamo", libxml_xmlUCSIsHangulCompatibilityJamo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHangulJamo", libxml_xmlUCSIsHangulJamo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHangulSyllables", libxml_xmlUCSIsHangulSyllables, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHanunoo", libxml_xmlUCSIsHanunoo, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHebrew", libxml_xmlUCSIsHebrew, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHighPrivateUseSurrogates", libxml_xmlUCSIsHighPrivateUseSurrogates, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHighSurrogates", libxml_xmlUCSIsHighSurrogates, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsHiragana", libxml_xmlUCSIsHiragana, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsIPAExtensions", libxml_xmlUCSIsIPAExtensions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsIdeographicDescriptionCharacters", libxml_xmlUCSIsIdeographicDescriptionCharacters, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKanbun", libxml_xmlUCSIsKanbun, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKangxiRadicals", libxml_xmlUCSIsKangxiRadicals, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKannada", libxml_xmlUCSIsKannada, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKatakana", libxml_xmlUCSIsKatakana, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKatakanaPhoneticExtensions", libxml_xmlUCSIsKatakanaPhoneticExtensions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKhmer", libxml_xmlUCSIsKhmer, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsKhmerSymbols", libxml_xmlUCSIsKhmerSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLao", libxml_xmlUCSIsLao, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLatin1Supplement", libxml_xmlUCSIsLatin1Supplement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLatinExtendedA", libxml_xmlUCSIsLatinExtendedA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLatinExtendedAdditional", libxml_xmlUCSIsLatinExtendedAdditional, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLatinExtendedB", libxml_xmlUCSIsLatinExtendedB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLetterlikeSymbols", libxml_xmlUCSIsLetterlikeSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLimbu", libxml_xmlUCSIsLimbu, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLinearBIdeograms", libxml_xmlUCSIsLinearBIdeograms, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLinearBSyllabary", libxml_xmlUCSIsLinearBSyllabary, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsLowSurrogates", libxml_xmlUCSIsLowSurrogates, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMalayalam", libxml_xmlUCSIsMalayalam, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMathematicalAlphanumericSymbols", libxml_xmlUCSIsMathematicalAlphanumericSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMathematicalOperators", libxml_xmlUCSIsMathematicalOperators, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMiscellaneousMathematicalSymbolsA", libxml_xmlUCSIsMiscellaneousMathematicalSymbolsA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMiscellaneousMathematicalSymbolsB", libxml_xmlUCSIsMiscellaneousMathematicalSymbolsB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMiscellaneousSymbols", libxml_xmlUCSIsMiscellaneousSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMiscellaneousSymbolsandArrows", libxml_xmlUCSIsMiscellaneousSymbolsandArrows, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMiscellaneousTechnical", libxml_xmlUCSIsMiscellaneousTechnical, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMongolian", libxml_xmlUCSIsMongolian, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMusicalSymbols", libxml_xmlUCSIsMusicalSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsMyanmar", libxml_xmlUCSIsMyanmar, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsNumberForms", libxml_xmlUCSIsNumberForms, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsOgham", libxml_xmlUCSIsOgham, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsOldItalic", libxml_xmlUCSIsOldItalic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsOpticalCharacterRecognition", libxml_xmlUCSIsOpticalCharacterRecognition, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsOriya", libxml_xmlUCSIsOriya, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsOsmanya", libxml_xmlUCSIsOsmanya, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsPhoneticExtensions", libxml_xmlUCSIsPhoneticExtensions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsPrivateUse", libxml_xmlUCSIsPrivateUse, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsPrivateUseArea", libxml_xmlUCSIsPrivateUseArea, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsRunic", libxml_xmlUCSIsRunic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsShavian", libxml_xmlUCSIsShavian, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSinhala", libxml_xmlUCSIsSinhala, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSmallFormVariants", libxml_xmlUCSIsSmallFormVariants, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSpacingModifierLetters", libxml_xmlUCSIsSpacingModifierLetters, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSpecials", libxml_xmlUCSIsSpecials, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSuperscriptsandSubscripts", libxml_xmlUCSIsSuperscriptsandSubscripts, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSupplementalArrowsA", libxml_xmlUCSIsSupplementalArrowsA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSupplementalArrowsB", libxml_xmlUCSIsSupplementalArrowsB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSupplementalMathematicalOperators", libxml_xmlUCSIsSupplementalMathematicalOperators, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSupplementaryPrivateUseAreaA", libxml_xmlUCSIsSupplementaryPrivateUseAreaA, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSupplementaryPrivateUseAreaB", libxml_xmlUCSIsSupplementaryPrivateUseAreaB, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsSyriac", libxml_xmlUCSIsSyriac, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTagalog", libxml_xmlUCSIsTagalog, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTagbanwa", libxml_xmlUCSIsTagbanwa, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTags", libxml_xmlUCSIsTags, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTaiLe", libxml_xmlUCSIsTaiLe, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTaiXuanJingSymbols", libxml_xmlUCSIsTaiXuanJingSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTamil", libxml_xmlUCSIsTamil, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTelugu", libxml_xmlUCSIsTelugu, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsThaana", libxml_xmlUCSIsThaana, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsThai", libxml_xmlUCSIsThai, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsTibetan", libxml_xmlUCSIsTibetan, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsUgaritic", libxml_xmlUCSIsUgaritic, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsUnifiedCanadianAboriginalSyllabics", libxml_xmlUCSIsUnifiedCanadianAboriginalSyllabics, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsVariationSelectors", libxml_xmlUCSIsVariationSelectors, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsVariationSelectorsSupplement", libxml_xmlUCSIsVariationSelectorsSupplement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsYiRadicals", libxml_xmlUCSIsYiRadicals, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsYiSyllables", libxml_xmlUCSIsYiSyllables, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+    { (char *)"xmlUCSIsYijingHexagramSymbols", libxml_xmlUCSIsYijingHexagramSymbols, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+    { (char *)"xmlURIEscape", libxml_xmlURIEscape, METH_VARARGS, NULL },
+    { (char *)"xmlURIEscapeStr", libxml_xmlURIEscapeStr, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetAuthority", libxml_xmlURIGetAuthority, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetFragment", libxml_xmlURIGetFragment, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetOpaque", libxml_xmlURIGetOpaque, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetPath", libxml_xmlURIGetPath, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetPort", libxml_xmlURIGetPort, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetQuery", libxml_xmlURIGetQuery, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetQueryRaw", libxml_xmlURIGetQueryRaw, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetScheme", libxml_xmlURIGetScheme, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetServer", libxml_xmlURIGetServer, METH_VARARGS, NULL },
+    { (char *)"xmlURIGetUser", libxml_xmlURIGetUser, METH_VARARGS, NULL },
+    { (char *)"xmlURISetAuthority", libxml_xmlURISetAuthority, METH_VARARGS, NULL },
+    { (char *)"xmlURISetFragment", libxml_xmlURISetFragment, METH_VARARGS, NULL },
+    { (char *)"xmlURISetOpaque", libxml_xmlURISetOpaque, METH_VARARGS, NULL },
+    { (char *)"xmlURISetPath", libxml_xmlURISetPath, METH_VARARGS, NULL },
+    { (char *)"xmlURISetPort", libxml_xmlURISetPort, METH_VARARGS, NULL },
+    { (char *)"xmlURISetQuery", libxml_xmlURISetQuery, METH_VARARGS, NULL },
+    { (char *)"xmlURISetQueryRaw", libxml_xmlURISetQueryRaw, METH_VARARGS, NULL },
+    { (char *)"xmlURISetScheme", libxml_xmlURISetScheme, METH_VARARGS, NULL },
+    { (char *)"xmlURISetServer", libxml_xmlURISetServer, METH_VARARGS, NULL },
+    { (char *)"xmlURISetUser", libxml_xmlURISetUser, METH_VARARGS, NULL },
+    { (char *)"xmlURIUnescapeString", libxml_xmlURIUnescapeString, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Charcmp", libxml_xmlUTF8Charcmp, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Size", libxml_xmlUTF8Size, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strlen", libxml_xmlUTF8Strlen, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strloc", libxml_xmlUTF8Strloc, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strndup", libxml_xmlUTF8Strndup, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strpos", libxml_xmlUTF8Strpos, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strsize", libxml_xmlUTF8Strsize, METH_VARARGS, NULL },
+    { (char *)"xmlUTF8Strsub", libxml_xmlUTF8Strsub, METH_VARARGS, NULL },
+    { (char *)"xmlUnlinkNode", libxml_xmlUnlinkNode, METH_VARARGS, NULL },
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlUnsetNsProp", libxml_xmlUnsetNsProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlUnsetProp", libxml_xmlUnsetProp, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidCtxtNormalizeAttributeValue", libxml_xmlValidCtxtNormalizeAttributeValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidNormalizeAttributeValue", libxml_xmlValidNormalizeAttributeValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateDocument", libxml_xmlValidateDocument, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateDocumentFinal", libxml_xmlValidateDocumentFinal, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateDtd", libxml_xmlValidateDtd, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateDtdFinal", libxml_xmlValidateDtdFinal, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateElement", libxml_xmlValidateElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
+    { (char *)"xmlValidateNCName", libxml_xmlValidateNCName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlValidateNMToken", libxml_xmlValidateNMToken, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlValidateName", libxml_xmlValidateName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateNameValue", libxml_xmlValidateNameValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateNamesValue", libxml_xmlValidateNamesValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateNmtokenValue", libxml_xmlValidateNmtokenValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateNmtokensValue", libxml_xmlValidateNmtokensValue, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlValidateNotationUse", libxml_xmlValidateNotationUse, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateOneAttribute", libxml_xmlValidateOneAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateOneElement", libxml_xmlValidateOneElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateOneNamespace", libxml_xmlValidateOneNamespace, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlValidatePopElement", libxml_xmlValidatePopElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlValidatePushCData", libxml_xmlValidatePushCData, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+    { (char *)"xmlValidatePushElement", libxml_xmlValidatePushElement, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlValidateQName", libxml_xmlValidateQName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+    { (char *)"xmlValidateRoot", libxml_xmlValidateRoot, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlXIncludeProcess", libxml_xmlXIncludeProcess, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlXIncludeProcessFlags", libxml_xmlXIncludeProcessFlags, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlXIncludeProcessTree", libxml_xmlXIncludeProcessTree, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+    { (char *)"xmlXIncludeProcessTreeFlags", libxml_xmlXIncludeProcessTreeFlags, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathAddValues", libxml_xmlXPathAddValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathBooleanFunction", libxml_xmlXPathBooleanFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastBooleanToNumber", libxml_xmlXPathCastBooleanToNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastBooleanToString", libxml_xmlXPathCastBooleanToString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastNodeToNumber", libxml_xmlXPathCastNodeToNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastNodeToString", libxml_xmlXPathCastNodeToString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastNumberToBoolean", libxml_xmlXPathCastNumberToBoolean, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastNumberToString", libxml_xmlXPathCastNumberToString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastStringToBoolean", libxml_xmlXPathCastStringToBoolean, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCastStringToNumber", libxml_xmlXPathCastStringToNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCeilingFunction", libxml_xmlXPathCeilingFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCmpNodes", libxml_xmlXPathCmpNodes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCompareValues", libxml_xmlXPathCompareValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathConcatFunction", libxml_xmlXPathConcatFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathContainsFunction", libxml_xmlXPathContainsFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathContextSetCache", libxml_xmlXPathContextSetCache, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathCountFunction", libxml_xmlXPathCountFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathDivValues", libxml_xmlXPathDivValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathEqualValues", libxml_xmlXPathEqualValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathErr", libxml_xmlXPathErr, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathEval", libxml_xmlXPathEval, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathEvalExpr", libxml_xmlXPathEvalExpr, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathEvalExpression", libxml_xmlXPathEvalExpression, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathFalseFunction", libxml_xmlXPathFalseFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathFloorFunction", libxml_xmlXPathFloorFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathFreeContext", libxml_xmlXPathFreeContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathFreeParserContext", libxml_xmlXPathFreeParserContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetContextDoc", libxml_xmlXPathGetContextDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetContextNode", libxml_xmlXPathGetContextNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetContextPosition", libxml_xmlXPathGetContextPosition, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetContextSize", libxml_xmlXPathGetContextSize, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetFunction", libxml_xmlXPathGetFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathGetFunctionURI", libxml_xmlXPathGetFunctionURI, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathIdFunction", libxml_xmlXPathIdFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlXPathInit", libxml_xmlXPathInit, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlXPathIsInf", libxml_xmlXPathIsInf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+    { (char *)"xmlXPathIsNaN", libxml_xmlXPathIsNaN, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathIsNodeType", libxml_xmlXPathIsNodeType, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathLangFunction", libxml_xmlXPathLangFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathLastFunction", libxml_xmlXPathLastFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathLocalNameFunction", libxml_xmlXPathLocalNameFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathModValues", libxml_xmlXPathModValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathMultValues", libxml_xmlXPathMultValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNamespaceURIFunction", libxml_xmlXPathNamespaceURIFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewBoolean", libxml_xmlXPathNewBoolean, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewCString", libxml_xmlXPathNewCString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewContext", libxml_xmlXPathNewContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewFloat", libxml_xmlXPathNewFloat, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewNodeSet", libxml_xmlXPathNewNodeSet, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewParserContext", libxml_xmlXPathNewParserContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewString", libxml_xmlXPathNewString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNewValueTree", libxml_xmlXPathNewValueTree, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextAncestor", libxml_xmlXPathNextAncestor, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextAncestorOrSelf", libxml_xmlXPathNextAncestorOrSelf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextAttribute", libxml_xmlXPathNextAttribute, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextChild", libxml_xmlXPathNextChild, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextDescendant", libxml_xmlXPathNextDescendant, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextDescendantOrSelf", libxml_xmlXPathNextDescendantOrSelf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextFollowing", libxml_xmlXPathNextFollowing, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextFollowingSibling", libxml_xmlXPathNextFollowingSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextNamespace", libxml_xmlXPathNextNamespace, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextParent", libxml_xmlXPathNextParent, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextPreceding", libxml_xmlXPathNextPreceding, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextPrecedingSibling", libxml_xmlXPathNextPrecedingSibling, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNextSelf", libxml_xmlXPathNextSelf, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNodeEval", libxml_xmlXPathNodeEval, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNodeSetFreeNs", libxml_xmlXPathNodeSetFreeNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNormalizeFunction", libxml_xmlXPathNormalizeFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNotEqualValues", libxml_xmlXPathNotEqualValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNotFunction", libxml_xmlXPathNotFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNsLookup", libxml_xmlXPathNsLookup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathNumberFunction", libxml_xmlXPathNumberFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathOrderDocElems", libxml_xmlXPathOrderDocElems, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathParseNCName", libxml_xmlXPathParseNCName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathParseName", libxml_xmlXPathParseName, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathParserGetContext", libxml_xmlXPathParserGetContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathPopBoolean", libxml_xmlXPathPopBoolean, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathPopNumber", libxml_xmlXPathPopNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathPopString", libxml_xmlXPathPopString, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathPositionFunction", libxml_xmlXPathPositionFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisterAllFunctions", libxml_xmlXPathRegisterAllFunctions, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisterNs", libxml_xmlXPathRegisterNs, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisterVariable", libxml_xmlXPathRegisterVariable, METH_VARARGS, NULL },
+#endif
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisteredFuncsCleanup", libxml_xmlXPathRegisteredFuncsCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisteredNsCleanup", libxml_xmlXPathRegisteredNsCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRegisteredVariablesCleanup", libxml_xmlXPathRegisteredVariablesCleanup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRoot", libxml_xmlXPathRoot, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathRoundFunction", libxml_xmlXPathRoundFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSetContextDoc", libxml_xmlXPathSetContextDoc, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSetContextNode", libxml_xmlXPathSetContextNode, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathStartsWithFunction", libxml_xmlXPathStartsWithFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathStringEvalNumber", libxml_xmlXPathStringEvalNumber, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathStringFunction", libxml_xmlXPathStringFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathStringLengthFunction", libxml_xmlXPathStringLengthFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSubValues", libxml_xmlXPathSubValues, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSubstringAfterFunction", libxml_xmlXPathSubstringAfterFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSubstringBeforeFunction", libxml_xmlXPathSubstringBeforeFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSubstringFunction", libxml_xmlXPathSubstringFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathSumFunction", libxml_xmlXPathSumFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathTranslateFunction", libxml_xmlXPathTranslateFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathTrueFunction", libxml_xmlXPathTrueFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathValueFlipSign", libxml_xmlXPathValueFlipSign, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathVariableLookup", libxml_xmlXPathVariableLookup, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPathVariableLookupNS", libxml_xmlXPathVariableLookupNS, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+    { (char *)"xmlXPatherror", libxml_xmlXPatherror, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrEval", libxml_xmlXPtrEval, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrEvalRangePredicate", libxml_xmlXPtrEvalRangePredicate, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrNewCollapsedRange", libxml_xmlXPtrNewCollapsedRange, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrNewContext", libxml_xmlXPtrNewContext, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrNewLocationSetNodes", libxml_xmlXPtrNewLocationSetNodes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrNewRange", libxml_xmlXPtrNewRange, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrNewRangeNodes", libxml_xmlXPtrNewRangeNodes, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+    { (char *)"xmlXPtrRangeToFunction", libxml_xmlXPtrRangeToFunction, METH_VARARGS, NULL },
+#endif /* defined(LIBXML_XPTR_ENABLED) */
diff --git a/python/libxml2-py.c b/python/libxml2-py.c
new file mode 100644 (file)
index 0000000..705c171
--- /dev/null
@@ -0,0 +1,14789 @@
+/* Generated */
+
+#include <Python.h>
+#include <libxml/xmlversion.h>
+#include <libxml/tree.h>
+#include <libxml/xmlschemastypes.h>
+#include "libxml_wrap.h"
+#include "libxml2-py.h"
+
+#if defined(LIBXML_DOCB_ENABLED)
+PyObject *
+libxml_docbDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    docbDefaultSAXHandlerInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DOCB_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlAutoCloseTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    htmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OzO:htmlAutoCloseTag", &pyobj_doc, &name, &pyobj_elem))
+        return(NULL);
+    doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (htmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = htmlAutoCloseTag(doc, name, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCreateFileParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlParserCtxtPtr c_retval;
+    char * filename;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:htmlCreateFileParserCtxt", &filename, &encoding))
+        return(NULL);
+
+    c_retval = htmlCreateFileParserCtxt(filename, encoding);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCreateMemoryParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlParserCtxtPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#i:htmlCreateMemoryParserCtxt", &buffer, &py_buffsize0, &size))
+        return(NULL);
+
+    c_retval = htmlCreateMemoryParserCtxt(buffer, size);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+#endif
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzzi:htmlCtxtReadDoc", &pyobj_ctxt, &cur, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlCtxtReadDoc(ctxt, cur, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oizzi:htmlCtxtReadFd", &pyobj_ctxt, &fd, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlCtxtReadFd(ctxt, fd, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzi:htmlCtxtReadFile", &pyobj_ctxt, &filename, &encoding, &options))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlCtxtReadFile(ctxt, filename, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os#izzi:htmlCtxtReadMemory", &pyobj_ctxt, &buffer, &py_buffsize0, &size, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlCtxtReadMemory(ctxt, buffer, size, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtReset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlCtxtReset", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    htmlCtxtReset(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlCtxtUseOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:htmlCtxtUseOptions", &pyobj_ctxt, &options))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlCtxtUseOptions(ctxt, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    htmlDefaultSAXHandlerInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlDocContentDumpFormatOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzi:htmlDocContentDumpFormatOutput", &pyobj_buf, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    htmlDocContentDumpFormatOutput(buf, cur, encoding, format);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlDocContentDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:htmlDocContentDumpOutput", &pyobj_buf, &pyobj_cur, &encoding))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    htmlDocContentDumpOutput(buf, cur, encoding);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlDocDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    FILE * f;
+    PyObject *pyobj_f;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:htmlDocDump", &pyobj_f, &pyobj_cur))
+        return(NULL);
+    f = (FILE *) PyFile_Get(pyobj_f);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = htmlDocDump(f, cur);
+    PyFile_Release(f);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlFreeParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlFreeParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    htmlFreeParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlGetMetaEncoding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    htmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlGetMetaEncoding", &pyobj_doc))
+        return(NULL);
+    doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = htmlGetMetaEncoding(doc);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlHandleOmittedElem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:htmlHandleOmittedElem", &val))
+        return(NULL);
+
+    c_retval = htmlHandleOmittedElem(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlInitAutoClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    htmlInitAutoClose();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlIsAutoClosed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlDocPtr doc;
+    PyObject *pyobj_doc;
+    htmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:htmlIsAutoClosed", &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (htmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = htmlIsAutoClosed(doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlIsBooleanAttr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:htmlIsBooleanAttr", &name))
+        return(NULL);
+
+    c_retval = htmlIsBooleanAttr(name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlIsScriptAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:htmlIsScriptAttribute", &name))
+        return(NULL);
+
+    c_retval = htmlIsScriptAttribute(name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    xmlChar * URI;
+    xmlChar * ExternalID;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:htmlNewDoc", &URI, &ExternalID))
+        return(NULL);
+
+    c_retval = htmlNewDoc(URI, ExternalID);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlNewDocNoDtD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    xmlChar * URI;
+    xmlChar * ExternalID;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:htmlNewDocNoDtD", &URI, &ExternalID))
+        return(NULL);
+
+    c_retval = htmlNewDocNoDtD(URI, ExternalID);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    htmlParserCtxtPtr c_retval;
+
+    c_retval = htmlNewParserCtxt();
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlNodeDumpFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * out;
+    PyObject *pyobj_out;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:htmlNodeDumpFile", &pyobj_out, &pyobj_doc, &pyobj_cur))
+        return(NULL);
+    out = (FILE *) PyFile_Get(pyobj_out);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    htmlNodeDumpFile(out, doc, cur);
+    PyFile_Release(out);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlNodeDumpFileFormat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    FILE * out;
+    PyObject *pyobj_out;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOzi:htmlNodeDumpFileFormat", &pyobj_out, &pyobj_doc, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    out = (FILE *) PyFile_Get(pyobj_out);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = htmlNodeDumpFileFormat(out, doc, cur, encoding, format);
+    PyFile_Release(out);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlNodeDumpFormatOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOzi:htmlNodeDumpFormatOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlNodeDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOz:htmlNodeDumpOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &encoding))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    htmlNodeDumpOutput(buf, doc, cur, encoding);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlParseCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlParseCharRef", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlParseCharRef(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
+PyObject *
+libxml_htmlParseChunk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * chunk;
+    int py_buffsize0;
+    int size;
+    int terminate;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os#ii:htmlParseChunk", &pyobj_ctxt, &chunk, &py_buffsize0, &size, &terminate))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlParseChunk(ctxt, chunk, size, terminate);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlParseDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    xmlChar * cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:htmlParseDoc", &cur, &encoding))
+        return(NULL);
+
+    c_retval = htmlParseDoc(cur, encoding);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlParseDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlParseDocument", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = htmlParseDocument(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlParseElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    htmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:htmlParseElement", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (htmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    htmlParseElement(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlParseFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    char * filename;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:htmlParseFile", &filename, &encoding))
+        return(NULL);
+
+    c_retval = htmlParseFile(filename, encoding);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzzi:htmlReadDoc", &cur, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = htmlReadDoc(cur, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"izzi:htmlReadFd", &fd, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = htmlReadFd(fd, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:htmlReadFile", &filename, &encoding, &options))
+        return(NULL);
+
+    c_retval = htmlReadFile(filename, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    htmlDocPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#izzi:htmlReadMemory", &buffer, &py_buffsize0, &size, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = htmlReadMemory(buffer, size, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+#endif
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlSaveFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:htmlSaveFile", &filename, &pyobj_cur))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = htmlSaveFile(filename, cur);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlSaveFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"zOz:htmlSaveFileEnc", &filename, &pyobj_cur, &encoding))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = htmlSaveFileEnc(filename, cur, encoding);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_htmlSaveFileFormat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"zOzi:htmlSaveFileFormat", &filename, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = htmlSaveFileFormat(filename, cur, encoding, format);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_htmlSetMetaEncoding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    htmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:htmlSetMetaEncoding", &pyobj_doc, &encoding))
+        return(NULL);
+    doc = (htmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = htmlSetMetaEncoding(doc, encoding);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTML_ENABLED) */
+PyObject *
+libxml_namePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:namePop", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = namePop(ctxt);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_namePush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:namePush", &pyobj_ctxt, &value))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = namePush(ctxt, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_nodePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:nodePop", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = nodePop(ctxt);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_nodePush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr value;
+    PyObject *pyobj_value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:nodePush", &pyobj_ctxt, &pyobj_value))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+    value = (xmlNodePtr) PyxmlNode_Get(pyobj_value);
+
+    c_retval = nodePush(ctxt, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_valuePop(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:valuePop", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = valuePop(ctxt);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogAdd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * type;
+    xmlChar * orig;
+    xmlChar * replace;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlACatalogAdd", &pyobj_catal, &type, &orig, &replace))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogAdd(catal, type, orig, replace);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlACatalogDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    FILE * out;
+    PyObject *pyobj_out;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlACatalogDump", &pyobj_catal, &pyobj_out))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+    out = (FILE *) PyFile_Get(pyobj_out);
+
+    xmlACatalogDump(catal, out);
+    PyFile_Release(out);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogRemove(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogRemove", &pyobj_catal, &value))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogRemove(catal, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogResolve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * pubID;
+    xmlChar * sysID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlACatalogResolve", &pyobj_catal, &pubID, &sysID))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogResolve(catal, pubID, sysID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogResolvePublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * pubID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolvePublic", &pyobj_catal, &pubID))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogResolvePublic(catal, pubID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogResolveSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * sysID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolveSystem", &pyobj_catal, &sysID))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogResolveSystem(catal, sysID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlACatalogResolveURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+    xmlChar * URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlACatalogResolveURI", &pyobj_catal, &URI))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlACatalogResolveURI(catal, URI);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlAddChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddChild", &pyobj_parent, &pyobj_cur))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlAddChild(parent, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddChildList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddChildList", &pyobj_parent, &pyobj_cur))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlAddChildList(parent, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddDocEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    int type;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozizzz:xmlAddDocEntity", &pyobj_doc, &name, &type, &ExternalID, &SystemID, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlAddDocEntity(doc, name, type, ExternalID, SystemID, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddDtdEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    int type;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozizzz:xmlAddDtdEntity", &pyobj_doc, &name, &type, &ExternalID, &SystemID, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlAddDtdEntity(doc, name, type, ExternalID, SystemID, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * name;
+    char * alias;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlAddEncodingAlias", &name, &alias))
+        return(NULL);
+
+    c_retval = xmlAddEncodingAlias(name, alias);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlAddNextSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddNextSibling", &pyobj_cur, &pyobj_elem))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlAddNextSibling(cur, elem);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlAddPrevSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddPrevSibling", &pyobj_cur, &pyobj_elem))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlAddPrevSibling(cur, elem);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+PyObject *
+libxml_xmlAddSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlAddSibling", &pyobj_cur, &pyobj_elem))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlAddSibling(cur, elem);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlBoolToText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    int boolval;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlBoolToText", &boolval))
+        return(NULL);
+
+    c_retval = xmlBoolToText(boolval);
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+PyObject *
+libxml_xmlBuildQName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * ncname;
+    xmlChar * prefix;
+    xmlChar * memory;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlBuildQName", &ncname, &prefix, &memory, &len))
+        return(NULL);
+
+    c_retval = xmlBuildQName(ncname, prefix, memory, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlBuildRelativeURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * URI;
+    xmlChar * base;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlBuildRelativeURI", &URI, &base))
+        return(NULL);
+
+    c_retval = xmlBuildRelativeURI(URI, base);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlBuildURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * URI;
+    xmlChar * base;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlBuildURI", &URI, &base))
+        return(NULL);
+
+    c_retval = xmlBuildURI(URI, base);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlByteConsumed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    long c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlByteConsumed", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlByteConsumed(ctxt);
+    py_retval = libxml_longWrap((long) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCanonicPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCanonicPath", &path))
+        return(NULL);
+
+    c_retval = xmlCanonicPath(path);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogAdd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * type;
+    xmlChar * orig;
+    xmlChar * replace;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzz:xmlCatalogAdd", &type, &orig, &replace))
+        return(NULL);
+
+    c_retval = xmlCatalogAdd(type, orig, replace);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCatalogCleanup();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogConvert(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    int c_retval;
+
+    c_retval = xmlCatalogConvert();
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlCatalogDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * out;
+    PyObject *pyobj_out;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCatalogDump", &pyobj_out))
+        return(NULL);
+    out = (FILE *) PyFile_Get(pyobj_out);
+
+    xmlCatalogDump(out);
+    PyFile_Release(out);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogGetPublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * pubID;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogGetPublic", &pubID))
+        return(NULL);
+
+    c_retval = xmlCatalogGetPublic(pubID);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogGetSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * sysID;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogGetSystem", &sysID))
+        return(NULL);
+
+    c_retval = xmlCatalogGetSystem(sysID);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogIsEmpty(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCatalogIsEmpty", &pyobj_catal))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlCatalogIsEmpty(catal);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogRemove(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogRemove", &value))
+        return(NULL);
+
+    c_retval = xmlCatalogRemove(value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogResolve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * pubID;
+    xmlChar * sysID;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlCatalogResolve", &pubID, &sysID))
+        return(NULL);
+
+    c_retval = xmlCatalogResolve(pubID, sysID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogResolvePublic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * pubID;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolvePublic", &pubID))
+        return(NULL);
+
+    c_retval = xmlCatalogResolvePublic(pubID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogResolveSystem(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * sysID;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolveSystem", &sysID))
+        return(NULL);
+
+    c_retval = xmlCatalogResolveSystem(sysID);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogResolveURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCatalogResolveURI", &URI))
+        return(NULL);
+
+    c_retval = xmlCatalogResolveURI(URI);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlCatalogSetDebug(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int level;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlCatalogSetDebug", &level))
+        return(NULL);
+
+    c_retval = xmlCatalogSetDebug(level);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlCharStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    char * cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCharStrdup", &cur))
+        return(NULL);
+
+    c_retval = xmlCharStrdup(cur);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCharStrndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    char * cur;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlCharStrndup", &cur, &len))
+        return(NULL);
+
+    c_retval = xmlCharStrndup(cur, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCheckFilename(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckFilename", &path))
+        return(NULL);
+
+    c_retval = xmlCheckFilename(path);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCheckLanguageID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * lang;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckLanguageID", &lang))
+        return(NULL);
+
+    c_retval = xmlCheckLanguageID(lang);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCheckUTF8(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned char * utf;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCheckUTF8", &utf))
+        return(NULL);
+
+    c_retval = xmlCheckUTF8(utf);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCheckVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    int version;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlCheckVersion", &version))
+        return(NULL);
+
+    xmlCheckVersion(version);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlCleanupCharEncodingHandlers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupCharEncodingHandlers();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlCleanupEncodingAliases(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupEncodingAliases();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlCleanupGlobals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupGlobals();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlCleanupInputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupInputCallbacks();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlCleanupOutputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupOutputCallbacks();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlCleanupPredefinedEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlCleanupPredefinedEntities();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlClearParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlClearParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlClearParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlConvertSGMLCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlConvertSGMLCatalog", &pyobj_catal))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    c_retval = xmlConvertSGMLCatalog(catal);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlCopyChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int len;
+    xmlChar * out;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"izi:xmlCopyChar", &len, &out, &val))
+        return(NULL);
+
+    c_retval = xmlCopyChar(len, out, val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyCharMultiByte(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * out;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlCopyCharMultiByte", &out, &val))
+        return(NULL);
+
+    c_retval = xmlCopyCharMultiByte(out, val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlCopyDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    int recursive;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCopyDoc", &pyobj_doc, &recursive))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlCopyDoc(doc, recursive);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlCopyDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDtdPtr c_retval;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyDtd", &pyobj_dtd))
+        return(NULL);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlCopyDtd(dtd);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlCopyError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlErrorPtr from;
+    PyObject *pyobj_from;
+    xmlErrorPtr to;
+    PyObject *pyobj_to;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyError", &pyobj_from, &pyobj_to))
+        return(NULL);
+    from = (xmlErrorPtr) PyError_Get(pyobj_from);
+    to = (xmlErrorPtr) PyError_Get(pyobj_to);
+
+    c_retval = xmlCopyError(from, to);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlNsPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNamespace", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlCopyNamespace(cur);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNamespaceList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlNsPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNamespaceList", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlCopyNamespaceList(cur);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    int extended;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCopyNode", &pyobj_node, &extended))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlCopyNode(node, extended);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCopyNodeList", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlCopyNodeList(node);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr target;
+    PyObject *pyobj_target;
+    xmlAttrPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyProp", &pyobj_target, &pyobj_cur))
+        return(NULL);
+    target = (xmlNodePtr) PyxmlNode_Get(pyobj_target);
+    cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlCopyProp(target, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCopyPropList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr target;
+    PyObject *pyobj_target;
+    xmlAttrPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlCopyPropList", &pyobj_target, &pyobj_cur))
+        return(NULL);
+    target = (xmlNodePtr) PyxmlNode_Get(pyobj_target);
+    cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlCopyPropList(target, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateDocParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    xmlChar * cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCreateDocParserCtxt", &cur))
+        return(NULL);
+
+    c_retval = xmlCreateDocParserCtxt(cur);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateEntityParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    xmlChar * URL;
+    xmlChar * ID;
+    xmlChar * base;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzz:xmlCreateEntityParserCtxt", &URL, &ID, &base))
+        return(NULL);
+
+    c_retval = xmlCreateEntityParserCtxt(URL, ID, base);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateFileParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlCreateFileParserCtxt", &filename))
+        return(NULL);
+
+    c_retval = xmlCreateFileParserCtxt(filename);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateIntSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDtdPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlCreateIntSubset", &pyobj_doc, &name, &ExternalID, &SystemID))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlCreateIntSubset(doc, name, ExternalID, SystemID);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateMemoryParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#i:xmlCreateMemoryParserCtxt", &buffer, &py_buffsize0, &size))
+        return(NULL);
+
+    c_retval = xmlCreateMemoryParserCtxt(buffer, size);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    xmlURIPtr c_retval;
+
+    c_retval = xmlCreateURI();
+    py_retval = libxml_xmlURIPtrWrap((xmlURIPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCreateURLParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    char * filename;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlCreateURLParserCtxt", &filename, &options))
+        return(NULL);
+
+    c_retval = xmlCreateURLParserCtxt(filename, options);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzzi:xmlCtxtReadDoc", &pyobj_ctxt, &cur, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtReadDoc(ctxt, cur, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oizzi:xmlCtxtReadFd", &pyobj_ctxt, &fd, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtReadFd(ctxt, fd, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzi:xmlCtxtReadFile", &pyobj_ctxt, &filename, &encoding, &options))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtReadFile(ctxt, filename, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os#izzi:xmlCtxtReadMemory", &pyobj_ctxt, &buffer, &py_buffsize0, &size, &URL, &encoding, &options))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtReadMemory(ctxt, buffer, size, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtReset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlCtxtReset", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlCtxtReset(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlCtxtResetPush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * chunk;
+    int py_buffsize0;
+    int size;
+    char * filename;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os#izz:xmlCtxtResetPush", &pyobj_ctxt, &chunk, &py_buffsize0, &size, &filename, &encoding))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtResetPush(ctxt, chunk, size, filename, encoding);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlCtxtUseOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlCtxtUseOptions", &pyobj_ctxt, &options))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlCtxtUseOptions(ctxt, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugCheckDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugCheckDocument", &pyobj_output, &pyobj_doc))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlDebugCheckDocument(output, doc);
+    PyFile_Release(output);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpAttr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+    int depth;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpAttr", &pyobj_output, &pyobj_attr, &depth))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    xmlDebugDumpAttr(output, attr, depth);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpAttrList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+    int depth;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpAttrList", &pyobj_output, &pyobj_attr, &depth))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    xmlDebugDumpAttrList(output, attr, depth);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpDTD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDTD", &pyobj_output, &pyobj_dtd))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    xmlDebugDumpDTD(output, dtd);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDocument", &pyobj_output, &pyobj_doc))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlDebugDumpDocument(output, doc);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpDocumentHead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpDocumentHead", &pyobj_output, &pyobj_doc))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlDebugDumpDocumentHead(output, doc);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDebugDumpEntities", &pyobj_output, &pyobj_doc))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlDebugDumpEntities(output, doc);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    int depth;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpNode", &pyobj_output, &pyobj_node, &depth))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    xmlDebugDumpNode(output, node, depth);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    int depth;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpNodeList", &pyobj_output, &pyobj_node, &depth))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    xmlDebugDumpNodeList(output, node, depth);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpOneNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    int depth;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDebugDumpOneNode", &pyobj_output, &pyobj_node, &depth))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    xmlDebugDumpOneNode(output, node, depth);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlDebugDumpString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlDebugDumpString", &pyobj_output, &str))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+
+    xmlDebugDumpString(output, str);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int len;
+    int what;
+    xmlChar end;
+    xmlChar end2;
+    xmlChar end3;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oiiccc:xmlDecodeEntities", &pyobj_ctxt, &len, &what, &end, &end2, &end3))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlDecodeEntities(ctxt, len, what, end, end2, end3);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlDefaultSAXHandlerInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlDefaultSAXHandlerInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlDelEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * alias;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlDelEncodingAlias", &alias))
+        return(NULL);
+
+    c_retval = xmlDelEncodingAlias(alias);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlDictCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlDictCleanup();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlDocCopyNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    int extended;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDocCopyNode", &pyobj_node, &pyobj_doc, &extended))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlDocCopyNode(node, doc, extended);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlDocCopyNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDocCopyNodeList", &pyobj_doc, &pyobj_node))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlDocCopyNodeList(doc, node);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlDocDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    FILE * f;
+    PyObject *pyobj_f;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDocDump", &pyobj_f, &pyobj_cur))
+        return(NULL);
+    f = (FILE *) PyFile_Get(pyobj_f);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlDocDump(f, cur);
+    PyFile_Release(f);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlDocFormatDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    FILE * f;
+    PyObject *pyobj_f;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlDocFormatDump", &pyobj_f, &pyobj_cur, &format))
+        return(NULL);
+    f = (FILE *) PyFile_Get(pyobj_f);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlDocFormatDump(f, cur, format);
+    PyFile_Release(f);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject *
+libxml_xmlDocGetRootElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlDocGetRootElement", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlDocGetRootElement(doc);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+PyObject *
+libxml_xmlDocSetRootElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr root;
+    PyObject *pyobj_root;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlDocSetRootElement", &pyobj_doc, &pyobj_root))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    root = (xmlNodePtr) PyxmlNode_Get(pyobj_root);
+
+    c_retval = xmlDocSetRootElement(doc, root);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlElemDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * f;
+    PyObject *pyobj_f;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlElemDump", &pyobj_f, &pyobj_doc, &pyobj_cur))
+        return(NULL);
+    f = (FILE *) PyFile_Get(pyobj_f);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlElemDump(f, doc, cur);
+    PyFile_Release(f);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlEncodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * input;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeEntities", &pyobj_doc, &input))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlEncodeEntities(doc, input);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlEncodeEntitiesReentrant(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * input;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeEntitiesReentrant", &pyobj_doc, &input))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlEncodeEntitiesReentrant(doc, input);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlEncodeSpecialChars(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * input;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlEncodeSpecialChars", &pyobj_doc, &input))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlEncodeSpecialChars(doc, input);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetCode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetCode", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->code;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetDomain(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetDomain", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->domain;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetFile", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->file;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetLevel(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetLevel", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->level;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetLine(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetLine", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->line;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlErrorGetMessage(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlErrorPtr Error;
+    PyObject *pyobj_Error;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlErrorGetMessage", &pyobj_Error))
+        return(NULL);
+    Error = (xmlErrorPtr) PyError_Get(pyobj_Error);
+
+    c_retval = Error->message;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlFileMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlFileMatch", &filename))
+        return(NULL);
+
+    c_retval = xmlFileMatch(filename);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlFirstElementChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFirstElementChild", &pyobj_parent))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+
+    c_retval = xmlFirstElementChild(parent);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlFreeCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlCatalogPtr catal;
+    PyObject *pyobj_catal;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeCatalog", &pyobj_catal))
+        return(NULL);
+    catal = (xmlCatalogPtr) Pycatalog_Get(pyobj_catal);
+
+    xmlFreeCatalog(catal);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlFreeDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeDoc", &pyobj_cur))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeDoc(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlDtdPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeDtd", &pyobj_cur))
+        return(NULL);
+    cur = (xmlDtdPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeDtd(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNode", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeNode(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNodeList", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeNodeList(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNsPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNs", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeNs(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeNsList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNsPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeNsList", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNsPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeNsList(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeParserInputBuffer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserInputBufferPtr in;
+    PyObject *pyobj_in;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeParserInputBuffer", &pyobj_in))
+        return(NULL);
+    in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+    xmlFreeParserInputBuffer(in);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlAttrPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeProp", &pyobj_cur))
+        return(NULL);
+    cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreeProp(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreePropList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlAttrPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreePropList", &pyobj_cur))
+        return(NULL);
+    cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlFreePropList(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlFreeURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr uri;
+    PyObject *pyobj_uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeURI", &pyobj_uri))
+        return(NULL);
+    uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+    xmlFreeURI(uri);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlGetCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    int c_retval;
+
+    c_retval = xmlGetCompressMode();
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDocCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlGetDocCompressMode", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetDocCompressMode(doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDocEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDocEntity", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetDocEntity(doc, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdAttrDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttributePtr c_retval;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+    xmlChar * elem;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetDtdAttrDesc", &pyobj_dtd, &elem, &name))
+        return(NULL);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlGetDtdAttrDesc(dtd, elem, name);
+    py_retval = libxml_xmlAttributePtrWrap((xmlAttributePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdElementDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlElementPtr c_retval;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDtdElementDesc", &pyobj_dtd, &name))
+        return(NULL);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlGetDtdElementDesc(dtd, name);
+    py_retval = libxml_xmlElementPtrWrap((xmlElementPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetDtdEntity", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetDtdEntity(doc, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdQAttrDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttributePtr c_retval;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+    xmlChar * elem;
+    xmlChar * name;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlGetDtdQAttrDesc", &pyobj_dtd, &elem, &name, &prefix))
+        return(NULL);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlGetDtdQAttrDesc(dtd, elem, name, prefix);
+    py_retval = libxml_xmlAttributePtrWrap((xmlAttributePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetDtdQElementDesc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlElementPtr c_retval;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+    xmlChar * name;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetDtdQElementDesc", &pyobj_dtd, &name, &prefix))
+        return(NULL);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlGetDtdQElementDesc(dtd, name, prefix);
+    py_retval = libxml_xmlElementPtrWrap((xmlElementPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetEncodingAlias(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    char * alias;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlGetEncodingAlias", &alias))
+        return(NULL);
+
+    c_retval = xmlGetEncodingAlias(alias);
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * ID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetID", &pyobj_doc, &ID))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetID(doc, ID);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetIntSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDtdPtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlGetIntSubset", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetIntSubset(doc);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetLastChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNode * parent;
+    PyObject *pyobj_parent;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlGetLastChild", &pyobj_parent))
+        return(NULL);
+    parent = (xmlNode *) PyxmlNode_Get(pyobj_parent);
+
+    c_retval = xmlGetLastChild(parent);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    xmlErrorPtr c_retval;
+
+    c_retval = xmlGetLastError();
+    py_retval = libxml_xmlErrorPtrWrap((xmlErrorPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetLineNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    long c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlGetLineNo", &pyobj_node))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlGetLineNo(node);
+    py_retval = libxml_longWrap((long) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetNoNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetNoNsProp", &pyobj_node, &name))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlGetNoNsProp(node, name);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlGetNodePath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlGetNodePath", &pyobj_node))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlGetNodePath(node);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
+PyObject *
+libxml_xmlGetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+    xmlChar * nameSpace;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlGetNsProp", &pyobj_node, &name, &nameSpace))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlGetNsProp(node, name, nameSpace);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetParameterEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetParameterEntity", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlGetParameterEntity(doc, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetPredefinedEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlGetPredefinedEntity", &name))
+        return(NULL);
+
+    c_retval = xmlGetPredefinedEntity(name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlGetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlGetProp", &pyobj_node, &name))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlGetProp(node, name);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlHandleEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlEntityPtr entity;
+    PyObject *pyobj_entity;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlHandleEntity", &pyobj_ctxt, &pyobj_entity))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+    entity = (xmlEntityPtr) PyxmlNode_Get(pyobj_entity);
+
+    xmlHandleEntity(ctxt, entity);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlHasNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+    xmlChar * nameSpace;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlHasNsProp", &pyobj_node, &name, &nameSpace))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlHasNsProp(node, name, nameSpace);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlHasProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlHasProp", &pyobj_node, &name))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlHasProp(node, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_FTP_ENABLED)
+PyObject *
+libxml_xmlIOFTPMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlIOFTPMatch", &filename))
+        return(NULL);
+
+    c_retval = xmlIOFTPMatch(filename);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject *
+libxml_xmlIOHTTPMatch(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlIOHTTPMatch", &filename))
+        return(NULL);
+
+    c_retval = xmlIOHTTPMatch(filename);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+PyObject *
+libxml_xmlInitCharEncodingHandlers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlInitCharEncodingHandlers();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlInitGlobals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlInitGlobals();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlInitParser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlInitParser();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlInitParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlInitParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlInitParserCtxt(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlInitializeCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlInitializeCatalog();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlInitializeDict(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    int c_retval;
+
+    c_retval = xmlInitializeDict();
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlInitializePredefinedEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlInitializePredefinedEntities();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlIsBaseChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsBaseChar", &ch))
+        return(NULL);
+
+    c_retval = xmlIsBaseChar(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsBlank(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsBlank", &ch))
+        return(NULL);
+
+    c_retval = xmlIsBlank(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsBlankNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlIsBlankNode", &pyobj_node))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlIsBlankNode(node);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsChar", &ch))
+        return(NULL);
+
+    c_retval = xmlIsChar(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsCombining(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsCombining", &ch))
+        return(NULL);
+
+    c_retval = xmlIsCombining(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsDigit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsDigit", &ch))
+        return(NULL);
+
+    c_retval = xmlIsDigit(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsExtender(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsExtender", &ch))
+        return(NULL);
+
+    c_retval = xmlIsExtender(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlIsID", &pyobj_doc, &pyobj_elem, &pyobj_attr))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    c_retval = xmlIsID(doc, elem, attr);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsIdeographic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsIdeographic", &ch))
+        return(NULL);
+
+    c_retval = xmlIsIdeographic(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsLetter(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int c;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsLetter", &c))
+        return(NULL);
+
+    c_retval = xmlIsLetter(c);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsMixedElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlIsMixedElement", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlIsMixedElement(doc, name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsPubidChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    unsigned int ch;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlIsPubidChar", &ch))
+        return(NULL);
+
+    c_retval = xmlIsPubidChar(ch);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlIsRef", &pyobj_doc, &pyobj_elem, &pyobj_attr))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    c_retval = xmlIsRef(doc, elem, attr);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlIsXHTML(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * systemID;
+    xmlChar * publicID;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlIsXHTML", &systemID, &publicID))
+        return(NULL);
+
+    c_retval = xmlIsXHTML(systemID, publicID);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlKeepBlanksDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlKeepBlanksDefault", &val))
+        return(NULL);
+
+    c_retval = xmlKeepBlanksDefault(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlLastElementChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlLastElementChild", &pyobj_parent))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+
+    c_retval = xmlLastElementChild(parent);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlLineNumbersDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlLineNumbersDefault", &val))
+        return(NULL);
+
+    c_retval = xmlLineNumbersDefault(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlLoadACatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlCatalogPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadACatalog", &filename))
+        return(NULL);
+
+    c_retval = xmlLoadACatalog(filename);
+    py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlLoadCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadCatalog", &filename))
+        return(NULL);
+
+    c_retval = xmlLoadCatalog(filename);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlLoadCatalogs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    char * pathss;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadCatalogs", &pathss))
+        return(NULL);
+
+    xmlLoadCatalogs(pathss);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlLoadSGMLSuperCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlCatalogPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlLoadSGMLSuperCatalog", &filename))
+        return(NULL);
+
+    c_retval = xmlLoadSGMLSuperCatalog(filename);
+    py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlLsCountNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlLsCountNode", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlLsCountNode(node);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject *
+libxml_xmlLsOneNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlLsOneNode", &pyobj_output, &pyobj_node))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    xmlLsOneNode(output, node);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlNamespaceParseNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNamespaceParseNCName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlNamespaceParseNCName(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlNamespaceParseNSDef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNamespaceParseNSDef", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlNamespaceParseNSDef(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject *
+libxml_xmlNanoFTPCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlNanoFTPCleanup();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject *
+libxml_xmlNanoFTPInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlNanoFTPInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject *
+libxml_xmlNanoFTPProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    char * host;
+    int port;
+    char * user;
+    char * passwd;
+    int type;
+
+    if (!PyArg_ParseTuple(args, (char *)"zizzi:xmlNanoFTPProxy", &host, &port, &user, &passwd, &type))
+        return(NULL);
+
+    xmlNanoFTPProxy(host, port, user, passwd, type);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject *
+libxml_xmlNanoFTPScanProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    char * URL;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNanoFTPScanProxy", &URL))
+        return(NULL);
+
+    xmlNanoFTPScanProxy(URL);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject *
+libxml_xmlNanoHTTPCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlNanoHTTPCleanup();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject *
+libxml_xmlNanoHTTPInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlNanoHTTPInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject *
+libxml_xmlNanoHTTPScanProxy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    char * URL;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNanoHTTPScanProxy", &URL))
+        return(NULL);
+
+    xmlNanoHTTPScanProxy(URL);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+PyObject *
+libxml_xmlNewCDataBlock(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNewCDataBlock", &pyobj_doc, &content, &len))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewCDataBlock(doc, content, len);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlNewCatalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlCatalogPtr c_retval;
+    int sgml;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlNewCatalog", &sgml))
+        return(NULL);
+
+    c_retval = xmlNewCatalog(sgml);
+    py_retval = libxml_xmlCatalogPtrWrap((xmlCatalogPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlNewCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewCharRef", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewCharRef(doc, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlNewChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewChild", &pyobj_parent, &pyobj_ns, &name, &content))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewChild(parent, ns, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject *
+libxml_xmlNewComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNewComment", &content))
+        return(NULL);
+
+    c_retval = xmlNewComment(content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlChar * version;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNewDoc", &version))
+        return(NULL);
+
+    c_retval = xmlNewDoc(version);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewDocComment", &pyobj_doc, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocComment(doc, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNewDocFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNewDocFragment", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocFragment(doc);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNewDocNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocNode", &pyobj_doc, &pyobj_ns, &name, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewDocNode(doc, ns, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocNodeEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocNodeEatName", &pyobj_doc, &pyobj_ns, &name, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewDocNodeEatName(doc, ns, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocPI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewDocPI", &pyobj_doc, &name, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocPI(doc, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewDocProp", &pyobj_doc, &name, &value))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocProp(doc, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNewDocRawNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewDocRawNode", &pyobj_doc, &pyobj_ns, &name, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewDocRawNode(doc, ns, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNewDocText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewDocText", &pyobj_doc, &content))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocText(doc, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDocTextLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNewDocTextLen", &pyobj_doc, &content, &len))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDocTextLen(doc, content, len);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDtdPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzz:xmlNewDtd", &pyobj_doc, &name, &ExternalID, &SystemID))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewDtd(doc, name, ExternalID, SystemID);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+    int type;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozizzz:xmlNewEntity", &pyobj_doc, &name, &type, &ExternalID, &SystemID, &content))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewEntity(doc, name, type, ExternalID, SystemID, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlNewGlobalNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * href;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewGlobalNs", &pyobj_doc, &href, &prefix))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewGlobalNs(doc, href, prefix);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlNewNodeEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewNodeEatName", &pyobj_ns, &name))
+        return(NULL);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewNodeEatName(ns, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * href;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewNs", &pyobj_node, &href, &prefix))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlNewNs(node, href, prefix);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewNsProp", &pyobj_node, &pyobj_ns, &name, &value))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewNsProp(node, ns, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewNsPropEatName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewNsPropEatName", &pyobj_node, &pyobj_ns, &name, &value))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewNsPropEatName(node, ns, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewPI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlNewPI", &name, &content))
+        return(NULL);
+
+    c_retval = xmlNewPI(name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+
+    c_retval = xmlNewParserCtxt();
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlNewProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlNewProp", &pyobj_node, &name, &value))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlNewProp(node, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject *
+libxml_xmlNewReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewReference", &pyobj_doc, &name))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlNewReference(doc, name);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNewText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNewText", &content))
+        return(NULL);
+
+    c_retval = xmlNewText(content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNewTextChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr parent;
+    PyObject *pyobj_parent;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlNewTextChild", &pyobj_parent, &pyobj_ns, &name, &content))
+        return(NULL);
+    parent = (xmlNodePtr) PyxmlNode_Get(pyobj_parent);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlNewTextChild(parent, ns, name, content);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNewTextLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlNewTextLen", &content, &len))
+        return(NULL);
+
+    c_retval = xmlNewTextLen(content, len);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlNewTextReader(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    xmlParserInputBufferPtr input;
+    PyObject *pyobj_input;
+    char * URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNewTextReader", &pyobj_input, &URI))
+        return(NULL);
+    input = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_input);
+
+    c_retval = xmlNewTextReader(input, URI);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlNewTextReaderFilename(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    char * URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNewTextReaderFilename", &URI))
+        return(NULL);
+
+    c_retval = xmlNewTextReaderFilename(URI);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlNewValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    xmlValidCtxtPtr c_retval;
+
+    c_retval = xmlNewValidCtxt();
+    py_retval = libxml_xmlValidCtxtPtrWrap((xmlValidCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+PyObject *
+libxml_xmlNextChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNextChar", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlNextChar(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNextElementSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNextElementSibling", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlNextElementSibling(node);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNodeAddContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeAddContent", &pyobj_cur, &content))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeAddContent(cur, content);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlNodeAddContentLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNodeAddContentLen", &pyobj_cur, &content, &len))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeAddContentLen(cur, content, len);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlNodeDumpOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlOutputBufferPtr buf;
+    PyObject *pyobj_buf;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    int level;
+    int format;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOiiz:xmlNodeDumpOutput", &pyobj_buf, &pyobj_doc, &pyobj_cur, &level, &format, &encoding))
+        return(NULL);
+    buf = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_buf);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeDumpOutput(buf, doc, cur, level, format, encoding);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject *
+libxml_xmlNodeGetBase(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlNode * cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlNodeGetBase", &pyobj_doc, &pyobj_cur))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+    cur = (xmlNode *) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlNodeGetBase(doc, cur);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetContent", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNode *) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlNodeGetContent(cur);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNode * cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetLang", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNode *) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlNodeGetLang(cur);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeGetSpacePreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNode * cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeGetSpacePreserve", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNode *) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlNodeGetSpacePreserve(cur);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNodeIsText(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNode * node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlNodeIsText", &pyobj_node))
+        return(NULL);
+    node = (xmlNode *) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlNodeIsText(node);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNodeListGetRawString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlNode * list;
+    PyObject *pyobj_list;
+    int inLine;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlNodeListGetRawString", &pyobj_doc, &pyobj_list, &inLine))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+    list = (xmlNode *) PyxmlNode_Get(pyobj_list);
+
+    c_retval = xmlNodeListGetRawString(doc, list, inLine);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNodeListGetString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNode * list;
+    PyObject *pyobj_list;
+    int inLine;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlNodeListGetString", &pyobj_doc, &pyobj_list, &inLine))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    list = (xmlNode *) PyxmlNode_Get(pyobj_list);
+
+    c_retval = xmlNodeListGetString(doc, list, inLine);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlNodeSetBase(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetBase", &pyobj_cur, &uri))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetBase(cur, uri);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+PyObject *
+libxml_xmlNodeSetContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetContent", &pyobj_cur, &content))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetContent(cur, content);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNodeSetContentLen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlNodeSetContentLen", &pyobj_cur, &content, &len))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetContentLen(cur, content, len);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNodeSetLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * lang;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetLang", &pyobj_cur, &lang))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetLang(cur, lang);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNodeSetName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlNodeSetName", &pyobj_cur, &name))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetName(cur, name);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlNodeSetSpacePreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlNodeSetSpacePreserve", &pyobj_cur, &val))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlNodeSetSpacePreserve(cur, val);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlNormalizeURIPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNormalizeURIPath", &path))
+        return(NULL);
+
+    c_retval = xmlNormalizeURIPath(path);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlNormalizeWindowsPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlNormalizeWindowsPath", &path))
+        return(NULL);
+
+    c_retval = xmlNormalizeWindowsPath(path);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlOutputBufferGetContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlOutputBufferPtr out;
+    PyObject *pyobj_out;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlOutputBufferGetContent", &pyobj_out))
+        return(NULL);
+    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+    c_retval = xmlOutputBufferGetContent(out);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlOutputBufferWrite(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr out;
+    PyObject *pyobj_out;
+    int len;
+    char * buf;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oiz:xmlOutputBufferWrite", &pyobj_out, &len, &buf))
+        return(NULL);
+    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+    c_retval = xmlOutputBufferWrite(out, len, buf);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlOutputBufferWriteString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlOutputBufferPtr out;
+    PyObject *pyobj_out;
+    char * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlOutputBufferWriteString", &pyobj_out, &str))
+        return(NULL);
+    out = (xmlOutputBufferPtr) PyoutputBuffer_Get(pyobj_out);
+
+    c_retval = xmlOutputBufferWriteString(out, str);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject *
+libxml_xmlParseAttValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseAttValue", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseAttValue(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseAttributeListDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseAttributeListDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseAttributeListDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseCDSect(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseCDSect", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseCDSect(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject *
+libxml_xmlParseCatalogFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParseCatalogFile", &filename))
+        return(NULL);
+
+    c_retval = xmlParseCatalogFile(filename);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject *
+libxml_xmlParseCharData(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int cdata;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParseCharData", &pyobj_ctxt, &cdata))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseCharData(ctxt, cdata);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseCharRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseCharRef", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseCharRef(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_PUSH_ENABLED)
+PyObject *
+libxml_xmlParseChunk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * chunk;
+    int py_buffsize0;
+    int size;
+    int terminate;
+
+    if (!PyArg_ParseTuple(args, (char *)"Os#ii:xmlParseChunk", &pyobj_ctxt, &chunk, &py_buffsize0, &size, &terminate))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseChunk(ctxt, chunk, size, terminate);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_PUSH_ENABLED) */
+PyObject *
+libxml_xmlParseComment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseComment", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseComment(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseContent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseContent", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseContent(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlParseDTD(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDtdPtr c_retval;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlParseDTD", &ExternalID, &SystemID))
+        return(NULL);
+
+    c_retval = xmlParseDTD(ExternalID, SystemID);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlChar * cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParseDoc", &cur))
+        return(NULL);
+
+    c_retval = xmlParseDoc(cur);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject *
+libxml_xmlParseDocTypeDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseDocTypeDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseDocTypeDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseDocument", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseDocument(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseElement", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseElement(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseElementDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseElementDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseElementDecl(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseEncName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEncName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseEncName(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseEncodingDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEncodingDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseEncodingDecl(ctxt);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseEndTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEndTag", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseEndTag(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseEntity(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParseEntity", &filename))
+        return(NULL);
+
+    c_retval = xmlParseEntity(filename);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject *
+libxml_xmlParseEntityDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEntityDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseEntityDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseEntityRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlEntityPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseEntityRef", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseEntityRef(ctxt);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseExtParsedEnt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseExtParsedEnt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseExtParsedEnt(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseExternalSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * ExternalID;
+    xmlChar * SystemID;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlParseExternalSubset", &pyobj_ctxt, &ExternalID, &SystemID))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseExternalSubset(ctxt, ExternalID, SystemID);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParseFile", &filename))
+        return(NULL);
+
+    c_retval = xmlParseFile(filename);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject *
+libxml_xmlParseMarkupDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseMarkupDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseMarkupDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#i:xmlParseMemory", &buffer, &py_buffsize0, &size))
+        return(NULL);
+
+    c_retval = xmlParseMemory(buffer, size);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject *
+libxml_xmlParseMisc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseMisc", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseMisc(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseName(ctxt);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlParseNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNamespace", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseNamespace(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlParseNmtoken(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNmtoken", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseNmtoken(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseNotationDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseNotationDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseNotationDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParsePEReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePEReference", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParsePEReference(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParsePI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePI", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParsePI(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParsePITarget(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePITarget", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParsePITarget(ctxt);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParsePubidLiteral(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParsePubidLiteral", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParsePubidLiteral(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlParseQuotedString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseQuotedString", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseQuotedString(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlParseReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseReference", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseReference(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseSDDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseSDDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseSDDecl(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlParseStartTag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseStartTag", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseStartTag(ctxt);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject *
+libxml_xmlParseSystemLiteral(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseSystemLiteral", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseSystemLiteral(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseTextDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseTextDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseTextDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParseURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlURIPtr c_retval;
+    char * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParseURI", &str))
+        return(NULL);
+
+    c_retval = xmlParseURI(str);
+    py_retval = libxml_xmlURIPtrWrap((xmlURIPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseURIRaw(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlURIPtr c_retval;
+    char * str;
+    int raw;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlParseURIRaw", &str, &raw))
+        return(NULL);
+
+    c_retval = xmlParseURIRaw(str, raw);
+    py_retval = libxml_xmlURIPtrWrap((xmlURIPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseURIReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlURIPtr uri;
+    PyObject *pyobj_uri;
+    char * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlParseURIReference", &pyobj_uri, &str))
+        return(NULL);
+    uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+    c_retval = xmlParseURIReference(uri, str);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseVersionInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseVersionInfo", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseVersionInfo(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseVersionNum(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseVersionNum", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlParseVersionNum(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParseXMLDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParseXMLDecl", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParseXMLDecl(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserGetDirectory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    char * c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlParserGetDirectory", &filename))
+        return(NULL);
+
+    c_retval = xmlParserGetDirectory(filename);
+    py_retval = libxml_charPtrWrap((char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetDoc", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = ctxt->myDoc;
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetIsValid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetIsValid", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = ctxt->valid;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserGetWellFormed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserGetWellFormed", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = ctxt->wellFormed;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserHandlePEReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserHandlePEReference", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParserHandlePEReference(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlParserHandleReference(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlParserHandleReference", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlParserHandleReference(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject *
+libxml_xmlParserInputBufferGrow(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserInputBufferPtr in;
+    PyObject *pyobj_in;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserInputBufferGrow", &pyobj_in, &len))
+        return(NULL);
+    in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+    c_retval = xmlParserInputBufferGrow(in, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserInputBufferPush(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserInputBufferPtr in;
+    PyObject *pyobj_in;
+    int len;
+    char * buf;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oiz:xmlParserInputBufferPush", &pyobj_in, &len, &buf))
+        return(NULL);
+    in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+    c_retval = xmlParserInputBufferPush(in, len, buf);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserInputBufferRead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserInputBufferPtr in;
+    PyObject *pyobj_in;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserInputBufferRead", &pyobj_in, &len))
+        return(NULL);
+    in = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_in);
+
+    c_retval = xmlParserInputBufferRead(in, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlParserSetLineNumbers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int linenumbers;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetLineNumbers", &pyobj_ctxt, &linenumbers))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    ctxt->linenumbers = linenumbers;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserSetLoadSubset(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int loadsubset;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetLoadSubset", &pyobj_ctxt, &loadsubset))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    ctxt->loadsubset = loadsubset;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserSetPedantic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int pedantic;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetPedantic", &pyobj_ctxt, &pedantic))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    ctxt->pedantic = pedantic;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserSetReplaceEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int replaceEntities;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetReplaceEntities", &pyobj_ctxt, &replaceEntities))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    ctxt->replaceEntities = replaceEntities;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlParserSetValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int validate;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlParserSetValidate", &pyobj_ctxt, &validate))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    ctxt->validate = validate;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlPathToURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlPathToURI", &path))
+        return(NULL);
+
+    c_retval = xmlPathToURI(path);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlPedanticParserDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlPedanticParserDefault", &val))
+        return(NULL);
+
+    c_retval = xmlPedanticParserDefault(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlPopInput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlPopInput", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlPopInput(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlPreviousElementSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlPreviousElementSibling", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlPreviousElementSibling(node);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject *
+libxml_xmlPrintURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * stream;
+    PyObject *pyobj_stream;
+    xmlURIPtr uri;
+    PyObject *pyobj_uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlPrintURI", &pyobj_stream, &pyobj_uri))
+        return(NULL);
+    stream = (FILE *) PyFile_Get(pyobj_stream);
+    uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+    xmlPrintURI(stream, uri);
+    PyFile_Release(stream);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlReadDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlReadDoc", &cur, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReadDoc(cur, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlReadFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"izzi:xmlReadFd", &fd, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReadFd(fd, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlReadFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlReadFile", &filename, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReadFile(filename, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlReadMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#izzi:xmlReadMemory", &buffer, &py_buffsize0, &size, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReadMemory(buffer, size, URL, encoding, options);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderForDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzzi:xmlReaderForDoc", &cur, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReaderForDoc(cur, URL, encoding, options);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderForFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"izzi:xmlReaderForFd", &fd, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReaderForFd(fd, URL, encoding, options);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderForFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlReaderForFile", &filename, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReaderForFile(filename, encoding, options);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderForMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    char * buffer;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"zizzi:xmlReaderForMemory", &buffer, &size, &URL, &encoding, &options))
+        return(NULL);
+
+    c_retval = xmlReaderForMemory(buffer, size, URL, encoding, options);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderNewDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * cur;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzzi:xmlReaderNewDoc", &pyobj_reader, &cur, &URL, &encoding, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlReaderNewDoc(reader, cur, URL, encoding, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderNewFd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    int fd;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oizzi:xmlReaderNewFd", &pyobj_reader, &fd, &URL, &encoding, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlReaderNewFd(reader, fd, URL, encoding, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderNewFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    char * filename;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozzi:xmlReaderNewFile", &pyobj_reader, &filename, &encoding, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlReaderNewFile(reader, filename, encoding, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderNewMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    char * buffer;
+    int size;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozizzi:xmlReaderNewMemory", &pyobj_reader, &buffer, &size, &URL, &encoding, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlReaderNewMemory(reader, buffer, size, URL, encoding, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderNewWalker(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlReaderNewWalker", &pyobj_reader, &pyobj_doc))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlReaderNewWalker(reader, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlReaderWalker(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlTextReaderPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlReaderWalker", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlReaderWalker(doc);
+    py_retval = libxml_xmlTextReaderPtrWrap((xmlTextReaderPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject *
+libxml_xmlReconciliateNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr tree;
+    PyObject *pyobj_tree;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlReconciliateNs", &pyobj_doc, &pyobj_tree))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+    c_retval = xmlReconciliateNs(doc, tree);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlRecoverDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlChar * cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlRecoverDoc", &cur))
+        return(NULL);
+
+    c_retval = xmlRecoverDoc(cur);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlRecoverFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlRecoverFile", &filename))
+        return(NULL);
+
+    c_retval = xmlRecoverFile(filename);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlRecoverMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    char * buffer;
+    int py_buffsize0;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"s#i:xmlRecoverMemory", &buffer, &py_buffsize0, &size))
+        return(NULL);
+
+    c_retval = xmlRecoverMemory(buffer, size);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlRegFreeRegexp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlRegexpPtr regexp;
+    PyObject *pyobj_regexp;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRegFreeRegexp", &pyobj_regexp))
+        return(NULL);
+    regexp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_regexp);
+
+    xmlRegFreeRegexp(regexp);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlRegexpCompile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRegexpPtr c_retval;
+    xmlChar * regexp;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlRegexpCompile", &regexp))
+        return(NULL);
+
+    c_retval = xmlRegexpCompile(regexp);
+    py_retval = libxml_xmlRegexpPtrWrap((xmlRegexpPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlRegexpExec(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRegexpPtr comp;
+    PyObject *pyobj_comp;
+    xmlChar * content;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlRegexpExec", &pyobj_comp, &content))
+        return(NULL);
+    comp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_comp);
+
+    c_retval = xmlRegexpExec(comp, content);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlRegexpIsDeterminist(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRegexpPtr comp;
+    PyObject *pyobj_comp;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRegexpIsDeterminist", &pyobj_comp))
+        return(NULL);
+    comp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_comp);
+
+    c_retval = xmlRegexpIsDeterminist(comp);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlRegexpPrint(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlRegexpPtr regexp;
+    PyObject *pyobj_regexp;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRegexpPrint", &pyobj_output, &pyobj_regexp))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    regexp = (xmlRegexpPtr) PyxmlReg_Get(pyobj_regexp);
+
+    xmlRegexpPrint(output, regexp);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+PyObject *
+libxml_xmlRegisterDefaultInputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlRegisterDefaultInputCallbacks();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlRegisterDefaultOutputCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlRegisterDefaultOutputCallbacks();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED)
+PyObject *
+libxml_xmlRegisterHTTPPostCallbacks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlRegisterHTTPPostCallbacks();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+#endif
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlRelaxNGCleanupTypes();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlRelaxNGDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlRelaxNGPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGDump", &pyobj_output, &pyobj_schema))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+    xmlRelaxNGDump(output, schema);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlRelaxNGDumpTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlRelaxNGPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGDumpTree", &pyobj_output, &pyobj_schema))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+    xmlRelaxNGDumpTree(output, schema);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGFree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlRelaxNGPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFree", &pyobj_schema))
+        return(NULL);
+    schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+    xmlRelaxNGFree(schema);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGFreeParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlRelaxNGParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGFreeParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+    xmlRelaxNGFreeParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGInitTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+    PyObject *py_retval;
+    int c_retval;
+
+    c_retval = xmlRelaxNGInitTypes();
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGNewDocParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRelaxNGParserCtxtPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGNewDocParserCtxt", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlRelaxNGNewDocParserCtxt(doc);
+    py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGNewMemParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRelaxNGParserCtxtPtr c_retval;
+    char * buffer;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlRelaxNGNewMemParserCtxt", &buffer, &size))
+        return(NULL);
+
+    c_retval = xmlRelaxNGNewMemParserCtxt(buffer, size);
+    py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRelaxNGParserCtxtPtr c_retval;
+    char * URL;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlRelaxNGNewParserCtxt", &URL))
+        return(NULL);
+
+    c_retval = xmlRelaxNGNewParserCtxt(URL);
+    py_retval = libxml_xmlRelaxNGParserCtxtPtrWrap((xmlRelaxNGParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGNewValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRelaxNGValidCtxtPtr c_retval;
+    xmlRelaxNGPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGNewValidCtxt", &pyobj_schema))
+        return(NULL);
+    schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+    c_retval = xmlRelaxNGNewValidCtxt(schema);
+    py_retval = libxml_xmlRelaxNGValidCtxtPtrWrap((xmlRelaxNGValidCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGParse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlRelaxNGPtr c_retval;
+    xmlRelaxNGParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRelaxNGParse", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlRelaxNGParse(ctxt);
+    py_retval = libxml_xmlRelaxNGPtrWrap((xmlRelaxNGPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGValidateDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRelaxNGValidateDoc", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlRelaxNGValidateDoc(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGValidateFullElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidateFullElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlRelaxNGValidateFullElement(ctxt, doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGValidatePopElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidatePopElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlRelaxNGValidatePopElement(ctxt, doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGValidatePushCData(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * data;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlRelaxNGValidatePushCData", &pyobj_ctxt, &data, &len))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlRelaxNGValidatePushCData(ctxt, data, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxNGValidatePushElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlRelaxNGValidatePushElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlRelaxNGValidatePushElement(ctxt, doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlRelaxParserSetFlag(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlRelaxNGParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int flags;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlRelaxParserSetFlag", &pyobj_ctxt, &flags))
+        return(NULL);
+    ctxt = (xmlRelaxNGParserCtxtPtr) PyrelaxNgParserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlRelaxParserSetFlag(ctxt, flags);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject *
+libxml_xmlRemoveID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRemoveID", &pyobj_doc, &pyobj_attr))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    c_retval = xmlRemoveID(doc, attr);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlRemoveProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlAttrPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlRemoveProp", &pyobj_cur))
+        return(NULL);
+    cur = (xmlAttrPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlRemoveProp(cur);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlRemoveRef(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlRemoveRef", &pyobj_doc, &pyobj_attr))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    c_retval = xmlRemoveRef(doc, attr);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+PyObject *
+libxml_xmlReplaceNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr old;
+    PyObject *pyobj_old;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlReplaceNode", &pyobj_old, &pyobj_cur))
+        return(NULL);
+    old = (xmlNodePtr) PyxmlNode_Get(pyobj_old);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlReplaceNode(old, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+PyObject *
+libxml_xmlResetError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlErrorPtr err;
+    PyObject *pyobj_err;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlResetError", &pyobj_err))
+        return(NULL);
+    err = (xmlErrorPtr) PyError_Get(pyobj_err);
+
+    xmlResetError(err);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlResetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlResetLastError();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlSAXDefaultVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int version;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlSAXDefaultVersion", &version))
+        return(NULL);
+
+    c_retval = xmlSAXDefaultVersion(version);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlSaveFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:xmlSaveFile", &filename, &pyobj_cur))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFile(filename, cur);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlSaveFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+
+    if (!PyArg_ParseTuple(args, (char *)"zOz:xmlSaveFileEnc", &filename, &pyobj_cur, &encoding))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFileEnc(filename, cur, encoding);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlSaveFormatFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"zOi:xmlSaveFormatFile", &filename, &pyobj_cur, &format))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFormatFile(filename, cur, format);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlSaveFormatFileEnc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    char * filename;
+    xmlDocPtr cur;
+    PyObject *pyobj_cur;
+    char * encoding;
+    int format;
+
+    if (!PyArg_ParseTuple(args, (char *)"zOzi:xmlSaveFormatFileEnc", &filename, &pyobj_cur, &encoding, &format))
+        return(NULL);
+    cur = (xmlDocPtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlSaveFormatFileEnc(filename, cur, encoding, format);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject *
+libxml_xmlSaveUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlURIPtr uri;
+    PyObject *pyobj_uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSaveUri", &pyobj_uri))
+        return(NULL);
+    uri = (xmlURIPtr) PyURI_Get(pyobj_uri);
+
+    c_retval = xmlSaveUri(uri);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlScanName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlScanName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlScanName(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaCleanupTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlSchemaCleanupTypes();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaCollapseString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlSchemaCollapseString", &value))
+        return(NULL);
+
+    c_retval = xmlSchemaCollapseString(value);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlSchemaDump(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    FILE * output;
+    PyObject *pyobj_output;
+    xmlSchemaPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSchemaDump", &pyobj_output, &pyobj_schema))
+        return(NULL);
+    output = (FILE *) PyFile_Get(pyobj_output);
+    schema = (xmlSchemaPtr) PySchema_Get(pyobj_schema);
+
+    xmlSchemaDump(output, schema);
+    PyFile_Release(output);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaFree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlSchemaPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaFree", &pyobj_schema))
+        return(NULL);
+    schema = (xmlSchemaPtr) PySchema_Get(pyobj_schema);
+
+    xmlSchemaFree(schema);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaFreeParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlSchemaParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaFreeParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlSchemaParserCtxtPtr) PySchemaParserCtxt_Get(pyobj_ctxt);
+
+    xmlSchemaFreeParserCtxt(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaInitTypes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlSchemaInitTypes();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaIsValid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaIsValid", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaIsValid(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaNewDocParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlSchemaParserCtxtPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaNewDocParserCtxt", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlSchemaNewDocParserCtxt(doc);
+    py_retval = libxml_xmlSchemaParserCtxtPtrWrap((xmlSchemaParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaNewMemParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlSchemaParserCtxtPtr c_retval;
+    char * buffer;
+    int size;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlSchemaNewMemParserCtxt", &buffer, &size))
+        return(NULL);
+
+    c_retval = xmlSchemaNewMemParserCtxt(buffer, size);
+    py_retval = libxml_xmlSchemaParserCtxtPtrWrap((xmlSchemaParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaNewParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlSchemaParserCtxtPtr c_retval;
+    char * URL;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlSchemaNewParserCtxt", &URL))
+        return(NULL);
+
+    c_retval = xmlSchemaNewParserCtxt(URL);
+    py_retval = libxml_xmlSchemaParserCtxtPtrWrap((xmlSchemaParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaNewValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlSchemaValidCtxtPtr c_retval;
+    xmlSchemaPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaNewValidCtxt", &pyobj_schema))
+        return(NULL);
+    schema = (xmlSchemaPtr) PySchema_Get(pyobj_schema);
+
+    c_retval = xmlSchemaNewValidCtxt(schema);
+    py_retval = libxml_xmlSchemaValidCtxtPtrWrap((xmlSchemaValidCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaParse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlSchemaPtr c_retval;
+    xmlSchemaParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaParse", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlSchemaParserCtxtPtr) PySchemaParserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaParse(ctxt);
+    py_retval = libxml_xmlSchemaPtrWrap((xmlSchemaPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaSetValidOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlSchemaSetValidOptions", &pyobj_ctxt, &options))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaSetValidOptions(ctxt, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidCtxtGetOptions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaValidCtxtGetOptions", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaValidCtxtGetOptions(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidCtxtGetParserCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserCtxtPtr c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSchemaValidCtxtGetParserCtxt", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaValidCtxtGetParserCtxt(ctxt);
+    py_retval = libxml_xmlParserCtxtPtrWrap((xmlParserCtxtPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidateDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSchemaValidateDoc", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlSchemaValidateDoc(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidateFile(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * filename;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlSchemaValidateFile", &pyobj_ctxt, &filename, &options))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSchemaValidateFile(ctxt, filename, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidateOneElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSchemaValidateOneElement", &pyobj_ctxt, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlSchemaValidateOneElement(ctxt, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaValidateSetFilename(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlSchemaValidCtxtPtr vctxt;
+    PyObject *pyobj_vctxt;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlSchemaValidateSetFilename", &pyobj_vctxt, &filename))
+        return(NULL);
+    vctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_vctxt);
+
+    xmlSchemaValidateSetFilename(vctxt, filename);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlSchemaWhiteSpaceReplace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlSchemaWhiteSpaceReplace", &value))
+        return(NULL);
+
+    c_retval = xmlSchemaWhiteSpaceReplace(value);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject *
+libxml_xmlSearchNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * nameSpace;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSearchNs", &pyobj_doc, &pyobj_node, &nameSpace))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlSearchNs(doc, node, nameSpace);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlSearchNsByHref(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNsPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * href;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlSearchNsByHref", &pyobj_doc, &pyobj_node, &href))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlSearchNsByHref(doc, node, href);
+    py_retval = libxml_xmlNsPtrWrap((xmlNsPtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlSetCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    int mode;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlSetCompressMode", &mode))
+        return(NULL);
+
+    xmlSetCompressMode(mode);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlSetDocCompressMode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    int mode;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlSetDocCompressMode", &pyobj_doc, &mode))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlSetDocCompressMode(doc, mode);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlSetListDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr list;
+    PyObject *pyobj_list;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetListDoc", &pyobj_list, &pyobj_doc))
+        return(NULL);
+    list = (xmlNodePtr) PyxmlNode_Get(pyobj_list);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlSetListDoc(list, doc);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlSetNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetNs", &pyobj_node, &pyobj_ns))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    xmlSetNs(node, ns);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_xmlSetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlSetNsProp", &pyobj_node, &pyobj_ns, &name, &value))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlSetNsProp(node, ns, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+PyObject *
+libxml_xmlSetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlAttrPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlSetProp", &pyobj_node, &name, &value))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlSetProp(node, name, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+PyObject *
+libxml_xmlSetTreeDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr tree;
+    PyObject *pyobj_tree;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlSetTreeDoc", &pyobj_tree, &pyobj_doc))
+        return(NULL);
+    tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    xmlSetTreeDoc(tree, doc);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject *
+libxml_xmlSetupParserForBuffer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * buffer;
+    char * filename;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlSetupParserForBuffer", &pyobj_ctxt, &buffer, &filename))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlSetupParserForBuffer(ctxt, buffer, filename);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject *
+libxml_xmlShellPrintNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlShellPrintNode", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    xmlShellPrintNode(node);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlShellPrintXPathError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    int errorType;
+    char * arg;
+
+    if (!PyArg_ParseTuple(args, (char *)"iz:xmlShellPrintXPathError", &errorType, &arg))
+        return(NULL);
+
+    xmlShellPrintXPathError(errorType, arg);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) */
+PyObject *
+libxml_xmlSkipBlankChars(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlSkipBlankChars", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlSkipBlankChars(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStopParser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlStopParser", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    xmlStopParser(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlStrEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrEqual", &str1, &str2))
+        return(NULL);
+
+    c_retval = xmlStrEqual(str1, str2);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrQEqual(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * pref;
+    xmlChar * name;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzz:xmlStrQEqual", &pref, &name, &str))
+        return(NULL);
+
+    c_retval = xmlStrQEqual(pref, name, str);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrcasecmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcasecmp", &str1, &str2))
+        return(NULL);
+
+    c_retval = xmlStrcasecmp(str1, str2);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrcasestr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * str;
+    xmlChar * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcasestr", &str, &val))
+        return(NULL);
+
+    c_retval = xmlStrcasestr(str, val);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrcat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * cur;
+    xmlChar * add;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcat", &cur, &add))
+        return(NULL);
+
+    c_retval = xmlStrcat(cur, add);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrchr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * str;
+    xmlChar val;
+
+    if (!PyArg_ParseTuple(args, (char *)"zc:xmlStrchr", &str, &val))
+        return(NULL);
+
+    c_retval = xmlStrchr(str, val);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrcmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrcmp", &str1, &str2))
+        return(NULL);
+
+    c_retval = xmlStrcmp(str1, str2);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrdup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlStrdup", &cur))
+        return(NULL);
+
+    c_retval = xmlStrdup(cur);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * str;
+    int what;
+    xmlChar end;
+    xmlChar end2;
+    xmlChar end3;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oziccc:xmlStringDecodeEntities", &pyobj_ctxt, &str, &what, &end, &end2, &end3))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlStringDecodeEntities(ctxt, str, what, end, end2, end3);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringGetNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlStringGetNodeList", &pyobj_doc, &value))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlStringGetNodeList(doc, value);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringLenDecodeEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlParserCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * str;
+    int len;
+    int what;
+    xmlChar end;
+    xmlChar end2;
+    xmlChar end3;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oziiccc:xmlStringLenDecodeEntities", &pyobj_ctxt, &str, &len, &what, &end, &end2, &end3))
+        return(NULL);
+    ctxt = (xmlParserCtxtPtr) PyparserCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlStringLenDecodeEntities(ctxt, str, len, what, end, end2, end3);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStringLenGetNodeList(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlDoc * doc;
+    PyObject *pyobj_doc;
+    xmlChar * value;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlStringLenGetNodeList", &pyobj_doc, &value, &len))
+        return(NULL);
+    doc = (xmlDoc *) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlStringLenGetNodeList(doc, value, len);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrlen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlStrlen", &str))
+        return(NULL);
+
+    c_retval = xmlStrlen(str);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncasecmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncasecmp", &str1, &str2, &len))
+        return(NULL);
+
+    c_retval = xmlStrncasecmp(str1, str2, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * cur;
+    xmlChar * add;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncat", &cur, &add, &len))
+        return(NULL);
+
+    c_retval = xmlStrncat(cur, add, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncatNew(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncatNew", &str1, &str2, &len))
+        return(NULL);
+
+    c_retval = xmlStrncatNew(str1, str2, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrncmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * str1;
+    xmlChar * str2;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zzi:xmlStrncmp", &str1, &str2, &len))
+        return(NULL);
+
+    c_retval = xmlStrncmp(str1, str2, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * cur;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlStrndup", &cur, &len))
+        return(NULL);
+
+    c_retval = xmlStrndup(cur, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrstr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * str;
+    xmlChar * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlStrstr", &str, &val))
+        return(NULL);
+
+    c_retval = xmlStrstr(str, val);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlStrsub(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * str;
+    int start;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zii:xmlStrsub", &str, &start, &len))
+        return(NULL);
+
+    c_retval = xmlStrsub(str, start, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlSubstituteEntitiesDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlSubstituteEntitiesDefault", &val))
+        return(NULL);
+
+    c_retval = xmlSubstituteEntitiesDefault(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextConcat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * content;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlTextConcat", &pyobj_node, &content, &len))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlTextConcat(node, content, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlTextMerge(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlNodePtr first;
+    PyObject *pyobj_first;
+    xmlNodePtr second;
+    PyObject *pyobj_second;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlTextMerge", &pyobj_first, &pyobj_second))
+        return(NULL);
+    first = (xmlNodePtr) PyxmlNode_Get(pyobj_first);
+    second = (xmlNodePtr) PyxmlNode_Get(pyobj_second);
+
+    c_retval = xmlTextMerge(first, second);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderAttributeCount(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderAttributeCount", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderAttributeCount(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderByteConsumed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    long c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderByteConsumed", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderByteConsumed(reader);
+    py_retval = libxml_longWrap((long) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderClose(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderClose", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderClose(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstBaseUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstBaseUri", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstBaseUri(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstEncoding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstEncoding", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstEncoding(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstLocalName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstLocalName", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstLocalName(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstName", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstName(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstNamespaceUri(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstNamespaceUri", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstNamespaceUri(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstPrefix(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstPrefix", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstPrefix(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderConstString", &pyobj_reader, &str))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstString(reader, str);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstValue", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstValue(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstXmlLang(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstXmlLang", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstXmlLang(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderConstXmlVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderConstXmlVersion", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderConstXmlVersion(reader);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderCurrentDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderCurrentDoc", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderCurrentDoc(reader);
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderCurrentNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderCurrentNode", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderCurrentNode(reader);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderDepth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderDepth", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderDepth(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderExpand(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderExpand", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderExpand(reader);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderGetAttribute", &pyobj_reader, &name))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetAttribute(reader, name);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetAttributeNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    int no;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderGetAttributeNo", &pyobj_reader, &no))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetAttributeNo(reader, no);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetAttributeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * localName;
+    xmlChar * namespaceURI;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlTextReaderGetAttributeNs", &pyobj_reader, &localName, &namespaceURI))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetAttributeNs(reader, localName, namespaceURI);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetParserColumnNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderGetParserColumnNumber", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetParserColumnNumber(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetParserLineNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderGetParserLineNumber", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetParserLineNumber(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetParserProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    int prop;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderGetParserProp", &pyobj_reader, &prop))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetParserProp(reader, prop);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderGetRemainder(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlParserInputBufferPtr c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderGetRemainder", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderGetRemainder(reader);
+    py_retval = libxml_xmlParserInputBufferPtrWrap((xmlParserInputBufferPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderHasAttributes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderHasAttributes", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderHasAttributes(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderHasValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderHasValue", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderHasValue(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderIsDefault(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsDefault", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderIsDefault(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderIsEmptyElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsEmptyElement", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderIsEmptyElement(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderIsNamespaceDecl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsNamespaceDecl", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderIsNamespaceDecl(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderIsValid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderIsValid", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderIsValid(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderLocatorBaseURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderLocatorPtr locator;
+    PyObject *pyobj_locator;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderLocatorBaseURI", &pyobj_locator))
+        return(NULL);
+    locator = (xmlTextReaderLocatorPtr) PyxmlTextReaderLocator_Get(pyobj_locator);
+
+    c_retval = xmlTextReaderLocatorBaseURI(locator);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderLocatorLineNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderLocatorPtr locator;
+    PyObject *pyobj_locator;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderLocatorLineNumber", &pyobj_locator))
+        return(NULL);
+    locator = (xmlTextReaderLocatorPtr) PyxmlTextReaderLocator_Get(pyobj_locator);
+
+    c_retval = xmlTextReaderLocatorLineNumber(locator);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderLookupNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderLookupNamespace", &pyobj_reader, &prefix))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderLookupNamespace(reader, prefix);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderMoveToAttribute", &pyobj_reader, &name))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToAttribute(reader, name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToAttributeNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    int no;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlTextReaderMoveToAttributeNo", &pyobj_reader, &no))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToAttributeNo(reader, no);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToAttributeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlChar * localName;
+    xmlChar * namespaceURI;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlTextReaderMoveToAttributeNs", &pyobj_reader, &localName, &namespaceURI))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToAttributeNs(reader, localName, namespaceURI);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToElement", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToElement(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToFirstAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToFirstAttribute", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToFirstAttribute(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderMoveToNextAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderMoveToNextAttribute", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderMoveToNextAttribute(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderNext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNext", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderNext(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderNextSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNextSibling", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderNextSibling(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderNodeType(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNodeType", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderNodeType(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderNormalization(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderNormalization", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderNormalization(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderPreserve(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderPreserve", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderPreserve(reader);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderQuoteChar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderQuoteChar", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderQuoteChar(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderRead(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderRead", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderRead(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderReadAttributeValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadAttributeValue", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderReadAttributeValue(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+PyObject *
+libxml_xmlTextReaderReadInnerXml(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadInnerXml", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderReadInnerXml(reader);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+PyObject *
+libxml_xmlTextReaderReadOuterXml(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadOuterXml", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderReadOuterXml(reader);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderReadState(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadState", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderReadState(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderReadString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderReadString", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderReadString(reader);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderRelaxNGSetSchema(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlRelaxNGPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlTextReaderRelaxNGSetSchema", &pyobj_reader, &pyobj_schema))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    schema = (xmlRelaxNGPtr) PyrelaxNgSchema_Get(pyobj_schema);
+
+    c_retval = xmlTextReaderRelaxNGSetSchema(reader, schema);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderRelaxNGValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    char * rng;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderRelaxNGValidate", &pyobj_reader, &rng))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderRelaxNGValidate(reader, rng);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderRelaxNGValidateCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlRelaxNGValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlTextReaderRelaxNGValidateCtxt", &pyobj_reader, &pyobj_ctxt, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    ctxt = (xmlRelaxNGValidCtxtPtr) PyrelaxNgValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlTextReaderRelaxNGValidateCtxt(reader, ctxt, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderSchemaValidate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    char * xsd;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlTextReaderSchemaValidate", &pyobj_reader, &xsd))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderSchemaValidate(reader, xsd);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderSchemaValidateCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlSchemaValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOi:xmlTextReaderSchemaValidateCtxt", &pyobj_reader, &pyobj_ctxt, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    ctxt = (xmlSchemaValidCtxtPtr) PySchemaValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlTextReaderSchemaValidateCtxt(reader, ctxt, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderSetParserProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    int prop;
+    int value;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oii:xmlTextReaderSetParserProp", &pyobj_reader, &prop, &value))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderSetParserProp(reader, prop, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlTextReaderSetSchema(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlSchemaPtr schema;
+    PyObject *pyobj_schema;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlTextReaderSetSchema", &pyobj_reader, &pyobj_schema))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    schema = (xmlSchemaPtr) PySchema_Get(pyobj_schema);
+
+    c_retval = xmlTextReaderSetSchema(reader, schema);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderSetup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+    xmlParserInputBufferPtr input;
+    PyObject *pyobj_input;
+    char * URL;
+    char * encoding;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzzi:xmlTextReaderSetup", &pyobj_reader, &pyobj_input, &URL, &encoding, &options))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+    input = (xmlParserInputBufferPtr) PyinputBuffer_Get(pyobj_input);
+
+    c_retval = xmlTextReaderSetup(reader, input, URL, encoding, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject *
+libxml_xmlTextReaderStandalone(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlTextReaderPtr reader;
+    PyObject *pyobj_reader;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlTextReaderStandalone", &pyobj_reader))
+        return(NULL);
+    reader = (xmlTextReaderPtr) PyxmlTextReader_Get(pyobj_reader);
+
+    c_retval = xmlTextReaderStandalone(reader);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_READER_ENABLED) */
+PyObject *
+libxml_xmlThrDefDefaultBufferSize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefDefaultBufferSize", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefDefaultBufferSize(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefDoValidityCheckingDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefDoValidityCheckingDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefDoValidityCheckingDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefGetWarningsDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefGetWarningsDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefGetWarningsDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefIndentTreeOutput(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefIndentTreeOutput", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefIndentTreeOutput(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefKeepBlanksDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefKeepBlanksDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefKeepBlanksDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefLineNumbersDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefLineNumbersDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefLineNumbersDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefLoadExtDtdDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefLoadExtDtdDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefLoadExtDtdDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefParserDebugEntities(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefParserDebugEntities", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefParserDebugEntities(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefPedanticParserDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefPedanticParserDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefPedanticParserDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefSaveNoEmptyTags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefSaveNoEmptyTags", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefSaveNoEmptyTags(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefSubstituteEntitiesDefaultValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int v;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlThrDefSubstituteEntitiesDefaultValue", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefSubstituteEntitiesDefaultValue(v);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlThrDefTreeIndentString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    char * v;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlThrDefTreeIndentString", &v))
+        return(NULL);
+
+    c_retval = xmlThrDefTreeIndentString(v);
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsAegeanNumbers(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsAegeanNumbers", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsAegeanNumbers(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsAlphabeticPresentationForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsAlphabeticPresentationForms", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsAlphabeticPresentationForms(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsArabic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsArabic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsArabicPresentationFormsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabicPresentationFormsA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsArabicPresentationFormsA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsArabicPresentationFormsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArabicPresentationFormsB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsArabicPresentationFormsB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsArmenian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArmenian", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsArmenian(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsArrows(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsArrows", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsArrows(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBasicLatin(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBasicLatin", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBasicLatin(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBengali(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBengali", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBengali(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBlock(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+    char * block;
+
+    if (!PyArg_ParseTuple(args, (char *)"iz:xmlUCSIsBlock", &code, &block))
+        return(NULL);
+
+    c_retval = xmlUCSIsBlock(code, block);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBlockElements(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBlockElements", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBlockElements(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBopomofo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBopomofo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBopomofo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBopomofoExtended(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBopomofoExtended", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBopomofoExtended(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBoxDrawing(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBoxDrawing", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBoxDrawing(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBraillePatterns(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBraillePatterns", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBraillePatterns(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsBuhid(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsBuhid", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsBuhid(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsByzantineMusicalSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsByzantineMusicalSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsByzantineMusicalSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKCompatibility(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibility", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKCompatibility(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityForms", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKCompatibilityForms(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityIdeographs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityIdeographs", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKCompatibilityIdeographs(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKCompatibilityIdeographsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKCompatibilityIdeographsSupplement", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKCompatibilityIdeographsSupplement(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKRadicalsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKRadicalsSupplement", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKRadicalsSupplement(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKSymbolsandPunctuation(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKSymbolsandPunctuation", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKSymbolsandPunctuation(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographs", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKUnifiedIdeographs(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographsExtensionA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographsExtensionA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKUnifiedIdeographsExtensionA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCJKUnifiedIdeographsExtensionB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCJKUnifiedIdeographsExtensionB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCJKUnifiedIdeographsExtensionB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+    char * cat;
+
+    if (!PyArg_ParseTuple(args, (char *)"iz:xmlUCSIsCat", &code, &cat))
+        return(NULL);
+
+    c_retval = xmlUCSIsCat(code, cat);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatC(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatC", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatC(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatCc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCc", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatCc(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatCf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCf", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatCf(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatCo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatCo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatCs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatCs", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatCs(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatL(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatL", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatL(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatLl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLl", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatLl(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatLm(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLm", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatLm(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatLo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatLo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatLt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLt", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatLt(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatLu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatLu", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatLu(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatM(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatM", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatM(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatMc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMc", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatMc(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatMe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMe", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatMe(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatMn(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatMn", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatMn(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatN(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatN", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatN(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatNd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNd", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatNd(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatNl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNl", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatNl(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatNo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatNo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatNo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatP(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatP", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatP(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPc", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPc(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPd", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPd(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPe", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPe(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPf", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPf(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPi(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPi", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPi(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatPs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatPs", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatPs(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatS(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatS", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatS(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatSc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSc", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatSc(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatSk(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSk", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatSk(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatSm(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSm", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatSm(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatSo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatSo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatSo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatZ(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZ", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatZ(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatZl(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZl", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatZl(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatZp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZp", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatZp(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCatZs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCatZs", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCatZs(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCherokee(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCherokee", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCherokee(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCombiningDiacriticalMarks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningDiacriticalMarks", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCombiningDiacriticalMarks(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCombiningDiacriticalMarksforSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningDiacriticalMarksforSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCombiningDiacriticalMarksforSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCombiningHalfMarks(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningHalfMarks", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCombiningHalfMarks(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCombiningMarksforSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCombiningMarksforSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCombiningMarksforSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsControlPictures(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsControlPictures", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsControlPictures(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCurrencySymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCurrencySymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCurrencySymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCypriotSyllabary(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCypriotSyllabary", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCypriotSyllabary(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCyrillic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCyrillic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCyrillic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsCyrillicSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsCyrillicSupplement", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsCyrillicSupplement(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsDeseret(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDeseret", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsDeseret(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsDevanagari(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDevanagari", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsDevanagari(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsDingbats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsDingbats", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsDingbats(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsEnclosedAlphanumerics(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEnclosedAlphanumerics", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsEnclosedAlphanumerics(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsEnclosedCJKLettersandMonths(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEnclosedCJKLettersandMonths", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsEnclosedCJKLettersandMonths(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsEthiopic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsEthiopic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsEthiopic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGeneralPunctuation(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeneralPunctuation", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGeneralPunctuation(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGeometricShapes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeometricShapes", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGeometricShapes(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGeorgian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGeorgian", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGeorgian(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGothic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGothic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGothic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGreek(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreek", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGreek(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGreekExtended(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreekExtended", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGreekExtended(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGreekandCoptic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGreekandCoptic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGreekandCoptic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGujarati(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGujarati", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGujarati(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsGurmukhi(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsGurmukhi", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsGurmukhi(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHalfwidthandFullwidthForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHalfwidthandFullwidthForms", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHalfwidthandFullwidthForms(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHangulCompatibilityJamo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulCompatibilityJamo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHangulCompatibilityJamo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHangulJamo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulJamo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHangulJamo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHangulSyllables(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHangulSyllables", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHangulSyllables(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHanunoo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHanunoo", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHanunoo(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHebrew(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHebrew", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHebrew(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHighPrivateUseSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHighPrivateUseSurrogates", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHighPrivateUseSurrogates(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHighSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHighSurrogates", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHighSurrogates(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsHiragana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsHiragana", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsHiragana(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsIPAExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsIPAExtensions", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsIPAExtensions(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsIdeographicDescriptionCharacters(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsIdeographicDescriptionCharacters", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsIdeographicDescriptionCharacters(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKanbun(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKanbun", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKanbun(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKangxiRadicals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKangxiRadicals", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKangxiRadicals(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKannada(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKannada", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKannada(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKatakana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKatakana", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKatakana(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKatakanaPhoneticExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKatakanaPhoneticExtensions", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKatakanaPhoneticExtensions(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKhmer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmer", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKhmer(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsKhmerSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsKhmerSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsKhmerSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLao(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLao", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLao(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLatin1Supplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatin1Supplement", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLatin1Supplement(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLatinExtendedA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLatinExtendedA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLatinExtendedAdditional(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedAdditional", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLatinExtendedAdditional(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLatinExtendedB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLatinExtendedB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLatinExtendedB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLetterlikeSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLetterlikeSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLetterlikeSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLimbu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLimbu", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLimbu(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLinearBIdeograms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLinearBIdeograms", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLinearBIdeograms(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLinearBSyllabary(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLinearBSyllabary", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLinearBSyllabary(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsLowSurrogates(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsLowSurrogates", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsLowSurrogates(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMalayalam(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMalayalam", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMalayalam(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMathematicalAlphanumericSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMathematicalAlphanumericSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMathematicalAlphanumericSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMathematicalOperators(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMathematicalOperators", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMathematicalOperators(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMiscellaneousMathematicalSymbolsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousMathematicalSymbolsA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMiscellaneousMathematicalSymbolsA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMiscellaneousMathematicalSymbolsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousMathematicalSymbolsB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMiscellaneousMathematicalSymbolsB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMiscellaneousSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMiscellaneousSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMiscellaneousSymbolsandArrows(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousSymbolsandArrows", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMiscellaneousSymbolsandArrows(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMiscellaneousTechnical(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMiscellaneousTechnical", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMiscellaneousTechnical(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMongolian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMongolian", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMongolian(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMusicalSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMusicalSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMusicalSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsMyanmar(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsMyanmar", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsMyanmar(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsNumberForms(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsNumberForms", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsNumberForms(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsOgham(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOgham", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsOgham(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsOldItalic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOldItalic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsOldItalic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsOpticalCharacterRecognition(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOpticalCharacterRecognition", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsOpticalCharacterRecognition(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsOriya(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOriya", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsOriya(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsOsmanya(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsOsmanya", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsOsmanya(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsPhoneticExtensions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPhoneticExtensions", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsPhoneticExtensions(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsPrivateUse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPrivateUse", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsPrivateUse(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsPrivateUseArea(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsPrivateUseArea", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsPrivateUseArea(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsRunic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsRunic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsRunic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsShavian(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsShavian", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsShavian(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSinhala(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSinhala", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSinhala(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSmallFormVariants(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSmallFormVariants", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSmallFormVariants(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSpacingModifierLetters(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSpacingModifierLetters", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSpacingModifierLetters(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSpecials(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSpecials", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSpecials(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSuperscriptsandSubscripts(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSuperscriptsandSubscripts", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSuperscriptsandSubscripts(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSupplementalArrowsA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalArrowsA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSupplementalArrowsA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSupplementalArrowsB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalArrowsB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSupplementalArrowsB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSupplementalMathematicalOperators(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementalMathematicalOperators", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSupplementalMathematicalOperators(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSupplementaryPrivateUseAreaA(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementaryPrivateUseAreaA", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSupplementaryPrivateUseAreaA(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSupplementaryPrivateUseAreaB(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSupplementaryPrivateUseAreaB", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSupplementaryPrivateUseAreaB(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsSyriac(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsSyriac", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsSyriac(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTagalog(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTagalog", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTagalog(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTagbanwa(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTagbanwa", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTagbanwa(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTags", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTags(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTaiLe(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTaiLe", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTaiLe(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTaiXuanJingSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTaiXuanJingSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTaiXuanJingSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTamil(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTamil", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTamil(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTelugu(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTelugu", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTelugu(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsThaana(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsThaana", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsThaana(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsThai(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsThai", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsThai(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsTibetan(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsTibetan", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsTibetan(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsUgaritic(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsUgaritic", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsUgaritic(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsUnifiedCanadianAboriginalSyllabics(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsUnifiedCanadianAboriginalSyllabics", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsUnifiedCanadianAboriginalSyllabics(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsVariationSelectors(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsVariationSelectors", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsVariationSelectors(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsVariationSelectorsSupplement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsVariationSelectorsSupplement", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsVariationSelectorsSupplement(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsYiRadicals(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYiRadicals", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsYiRadicals(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsYiSyllables(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYiSyllables", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsYiSyllables(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject *
+libxml_xmlUCSIsYijingHexagramSymbols(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    int code;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlUCSIsYijingHexagramSymbols", &code))
+        return(NULL);
+
+    c_retval = xmlUCSIsYijingHexagramSymbols(code);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+PyObject *
+libxml_xmlURIEscape(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlURIEscape", &str))
+        return(NULL);
+
+    c_retval = xmlURIEscape(str);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIEscapeStr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * str;
+    xmlChar * list;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlURIEscapeStr", &str, &list))
+        return(NULL);
+
+    c_retval = xmlURIEscapeStr(str, list);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetAuthority(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetAuthority", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->authority;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetFragment", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->fragment;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetOpaque(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetOpaque", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->opaque;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetPath", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->path;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetPort(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetPort", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->port;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetQuery(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetQuery", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->query;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetQueryRaw(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetQueryRaw", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->query_raw;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetScheme(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetScheme", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->scheme;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetServer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetServer", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->server;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURIGetUser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const char * c_retval;
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlURIGetUser", &pyobj_URI))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    c_retval = URI->user;
+    py_retval = libxml_charPtrConstWrap((const char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlURISetAuthority(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * authority;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetAuthority", &pyobj_URI, &authority))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->authority != NULL) xmlFree(URI->authority);
+    URI->authority = (char *)xmlStrdup((const xmlChar *)authority);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetFragment(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * fragment;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetFragment", &pyobj_URI, &fragment))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->fragment != NULL) xmlFree(URI->fragment);
+    URI->fragment = (char *)xmlStrdup((const xmlChar *)fragment);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetOpaque(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * opaque;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetOpaque", &pyobj_URI, &opaque))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->opaque != NULL) xmlFree(URI->opaque);
+    URI->opaque = (char *)xmlStrdup((const xmlChar *)opaque);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetPath(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * path;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetPath", &pyobj_URI, &path))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->path != NULL) xmlFree(URI->path);
+    URI->path = (char *)xmlStrdup((const xmlChar *)path);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetPort(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    int port;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlURISetPort", &pyobj_URI, &port))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    URI->port = port;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetQuery(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * query;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetQuery", &pyobj_URI, &query))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->query != NULL) xmlFree(URI->query);
+    URI->query = (char *)xmlStrdup((const xmlChar *)query);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetQueryRaw(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * query_raw;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetQueryRaw", &pyobj_URI, &query_raw))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->query_raw != NULL) xmlFree(URI->query_raw);
+    URI->query_raw = (char *)xmlStrdup((const xmlChar *)query_raw);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetScheme(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * scheme;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetScheme", &pyobj_URI, &scheme))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->scheme != NULL) xmlFree(URI->scheme);
+    URI->scheme = (char *)xmlStrdup((const xmlChar *)scheme);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetServer(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * server;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetServer", &pyobj_URI, &server))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->server != NULL) xmlFree(URI->server);
+    URI->server = (char *)xmlStrdup((const xmlChar *)server);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURISetUser(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlURIPtr URI;
+    PyObject *pyobj_URI;
+    char * user;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlURISetUser", &pyobj_URI, &user))
+        return(NULL);
+    URI = (xmlURIPtr) PyURI_Get(pyobj_URI);
+
+    if (URI->user != NULL) xmlFree(URI->user);
+    URI->user = (char *)xmlStrdup((const xmlChar *)user);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+PyObject *
+libxml_xmlURIUnescapeString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    char * c_retval;
+    char * str;
+    int len;
+    char * target;
+
+    if (!PyArg_ParseTuple(args, (char *)"ziz:xmlURIUnescapeString", &str, &len, &target))
+        return(NULL);
+
+    c_retval = xmlURIUnescapeString(str, len, target);
+    py_retval = libxml_charPtrWrap((char *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Charcmp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * utf1;
+    xmlChar * utf2;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlUTF8Charcmp", &utf1, &utf2))
+        return(NULL);
+
+    c_retval = xmlUTF8Charcmp(utf1, utf2);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Size(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * utf;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlUTF8Size", &utf))
+        return(NULL);
+
+    c_retval = xmlUTF8Size(utf);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strlen(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * utf;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlUTF8Strlen", &utf))
+        return(NULL);
+
+    c_retval = xmlUTF8Strlen(utf);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strloc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * utf;
+    xmlChar * utfchar;
+
+    if (!PyArg_ParseTuple(args, (char *)"zz:xmlUTF8Strloc", &utf, &utfchar))
+        return(NULL);
+
+    c_retval = xmlUTF8Strloc(utf, utfchar);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strndup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * utf;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strndup", &utf, &len))
+        return(NULL);
+
+    c_retval = xmlUTF8Strndup(utf, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strpos(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlChar * utf;
+    int pos;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strpos", &utf, &pos))
+        return(NULL);
+
+    c_retval = xmlUTF8Strpos(utf, pos);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strsize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * utf;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlUTF8Strsize", &utf, &len))
+        return(NULL);
+
+    c_retval = xmlUTF8Strsize(utf, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUTF8Strsub(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlChar * utf;
+    int start;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"zii:xmlUTF8Strsub", &utf, &start, &len))
+        return(NULL);
+
+    c_retval = xmlUTF8Strsub(utf, start, len);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+PyObject *
+libxml_xmlUnlinkNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlUnlinkNode", &pyobj_cur))
+        return(NULL);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    xmlUnlinkNode(cur);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlUnsetNsProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlUnsetNsProp", &pyobj_node, &pyobj_ns, &name))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlUnsetNsProp(node, ns, name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlUnsetProp(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlUnsetProp", &pyobj_node, &name))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlUnsetProp(node, name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidCtxtNormalizeAttributeValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOzz:xmlValidCtxtNormalizeAttributeValue", &pyobj_ctxt, &pyobj_doc, &pyobj_elem, &name, &value))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidCtxtNormalizeAttributeValue(ctxt, doc, elem, name, value);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidNormalizeAttributeValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlChar * name;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOzz:xmlValidNormalizeAttributeValue", &pyobj_doc, &pyobj_elem, &name, &value))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidNormalizeAttributeValue(doc, elem, name, value);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateDocument(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlValidateDocument", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlValidateDocument(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateDocumentFinal(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlValidateDocumentFinal", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlValidateDocumentFinal(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateDtd(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlDtdPtr dtd;
+    PyObject *pyobj_dtd;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlValidateDtd", &pyobj_ctxt, &pyobj_doc, &pyobj_dtd))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    dtd = (xmlDtdPtr) PyxmlNode_Get(pyobj_dtd);
+
+    c_retval = xmlValidateDtd(ctxt, doc, dtd);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateDtdFinal(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlValidateDtdFinal", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlValidateDtdFinal(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlValidateElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidateElement(ctxt, doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
+PyObject *
+libxml_xmlValidateNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+    int space;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateNCName", &value, &space))
+        return(NULL);
+
+    c_retval = xmlValidateNCName(value, space);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlValidateNMToken(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+    int space;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateNMToken", &value, &space))
+        return(NULL);
+
+    c_retval = xmlValidateNMToken(value, space);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlValidateName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+    int space;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateName", &value, &space))
+        return(NULL);
+
+    c_retval = xmlValidateName(value, space);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateNameValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNameValue", &value))
+        return(NULL);
+
+    c_retval = xmlValidateNameValue(value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateNamesValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNamesValue", &value))
+        return(NULL);
+
+    c_retval = xmlValidateNamesValue(value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateNmtokenValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNmtokenValue", &value))
+        return(NULL);
+
+    c_retval = xmlValidateNmtokenValue(value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateNmtokensValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlValidateNmtokensValue", &value))
+        return(NULL);
+
+    c_retval = xmlValidateNmtokensValue(value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlValidateNotationUse(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlChar * notationName;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOz:xmlValidateNotationUse", &pyobj_ctxt, &pyobj_doc, &notationName))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlValidateNotationUse(ctxt, doc, notationName);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateOneAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlAttrPtr attr;
+    PyObject *pyobj_attr;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOOz:xmlValidateOneAttribute", &pyobj_ctxt, &pyobj_doc, &pyobj_elem, &pyobj_attr, &value))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+    attr = (xmlAttrPtr) PyxmlNode_Get(pyobj_attr);
+
+    c_retval = xmlValidateOneAttribute(ctxt, doc, elem, attr, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateOneElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlValidateOneElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidateOneElement(ctxt, doc, elem);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateOneNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlChar * prefix;
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+    xmlChar * value;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOzOz:xmlValidateOneNamespace", &pyobj_ctxt, &pyobj_doc, &pyobj_elem, &prefix, &pyobj_ns, &value))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    c_retval = xmlValidateOneNamespace(ctxt, doc, elem, prefix, ns, value);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlValidatePopElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlChar * qname;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOz:xmlValidatePopElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem, &qname))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidatePopElement(ctxt, doc, elem, qname);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlValidatePushCData(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * data;
+    int len;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozi:xmlValidatePushCData", &pyobj_ctxt, &data, &len))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+
+    c_retval = xmlValidatePushCData(ctxt, data, len);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject *
+libxml_xmlValidatePushElement(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr elem;
+    PyObject *pyobj_elem;
+    xmlChar * qname;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOOz:xmlValidatePushElement", &pyobj_ctxt, &pyobj_doc, &pyobj_elem, &qname))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    elem = (xmlNodePtr) PyxmlNode_Get(pyobj_elem);
+
+    c_retval = xmlValidatePushElement(ctxt, doc, elem, qname);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlValidateQName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * value;
+    int space;
+
+    if (!PyArg_ParseTuple(args, (char *)"zi:xmlValidateQName", &value, &space))
+        return(NULL);
+
+    c_retval = xmlValidateQName(value, space);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject *
+libxml_xmlValidateRoot(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlValidCtxtPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlValidateRoot", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlValidateRoot(ctxt, doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlXIncludeProcess(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXIncludeProcess", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlXIncludeProcess(doc);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlXIncludeProcessFlags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    int flags;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXIncludeProcessFlags", &pyobj_doc, &flags))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlXIncludeProcessFlags(doc, flags);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlXIncludeProcessTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr tree;
+    PyObject *pyobj_tree;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXIncludeProcessTree", &pyobj_tree))
+        return(NULL);
+    tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+    c_retval = xmlXIncludeProcessTree(tree);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject *
+libxml_xmlXIncludeProcessTreeFlags(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr tree;
+    PyObject *pyobj_tree;
+    int flags;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXIncludeProcessTreeFlags", &pyobj_tree, &flags))
+        return(NULL);
+    tree = (xmlNodePtr) PyxmlNode_Get(pyobj_tree);
+
+    c_retval = xmlXIncludeProcessTreeFlags(tree, flags);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathAddValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathAddValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathAddValues(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathBooleanFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathBooleanFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathBooleanFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastBooleanToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    double c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathCastBooleanToNumber", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastBooleanToNumber(val);
+    py_retval = libxml_doubleWrap((double) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastBooleanToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathCastBooleanToString", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastBooleanToString(val);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastNodeToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    double c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathCastNodeToNumber", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlXPathCastNodeToNumber(node);
+    py_retval = libxml_doubleWrap((double) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastNodeToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathCastNodeToString", &pyobj_node))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    c_retval = xmlXPathCastNodeToString(node);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastNumberToBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    double val;
+
+    if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathCastNumberToBoolean", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastNumberToBoolean(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastNumberToString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    double val;
+
+    if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathCastNumberToString", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastNumberToString(val);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastStringToBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathCastStringToBoolean", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastStringToBoolean(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCastStringToNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    double c_retval;
+    xmlChar * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathCastStringToNumber", &val))
+        return(NULL);
+
+    c_retval = xmlXPathCastStringToNumber(val);
+    py_retval = libxml_doubleWrap((double) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCeilingFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathCeilingFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathCeilingFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCmpNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlNodePtr node1;
+    PyObject *pyobj_node1;
+    xmlNodePtr node2;
+    PyObject *pyobj_node2;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathCmpNodes", &pyobj_node1, &pyobj_node2))
+        return(NULL);
+    node1 = (xmlNodePtr) PyxmlNode_Get(pyobj_node1);
+    node2 = (xmlNodePtr) PyxmlNode_Get(pyobj_node2);
+
+    c_retval = xmlXPathCmpNodes(node1, node2);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCompareValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int inf;
+    int strict;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oii:xmlXPathCompareValues", &pyobj_ctxt, &inf, &strict))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathCompareValues(ctxt, inf, strict);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathConcatFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathConcatFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathConcatFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathContainsFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathContainsFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathContainsFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathContextSetCache(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int active;
+    int value;
+    int options;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oiii:xmlXPathContextSetCache", &pyobj_ctxt, &active, &value, &options))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathContextSetCache(ctxt, active, value, options);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathCountFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathCountFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathCountFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathDivValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathDivValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathDivValues(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathEqualValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathEqualValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathEqualValues(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathErr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int error;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathErr", &pyobj_ctxt, &error))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathErr(ctxt, error);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathEval(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlChar * str;
+    xmlXPathContextPtr ctx;
+    PyObject *pyobj_ctx;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathEval", &str, &pyobj_ctx))
+        return(NULL);
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+
+    c_retval = xmlXPathEval(str, ctx);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathEvalExpr(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathEvalExpr", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathEvalExpr(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathEvalExpression(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlChar * str;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathEvalExpression", &str, &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathEvalExpression(str, ctxt);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathFalseFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathFalseFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathFalseFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathFloorFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathFloorFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathFloorFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathFreeContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathFreeContext", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    xmlXPathFreeContext(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathFreeParserContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathFreeParserContext", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathFreeParserContext(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetContextDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlDocPtr c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextDoc", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->doc;
+    py_retval = libxml_xmlDocPtrWrap((xmlDocPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetContextNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextNode", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->node;
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetContextPosition(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextPosition", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->proximityPosition;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetContextSize(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetContextSize", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->contextSize;
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetFunction", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->function;
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathGetFunctionURI(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathGetFunctionURI", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->functionURI;
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathIdFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathIdFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathIdFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlXPathInit(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) {
+
+    xmlXPathInit();
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlXPathIsInf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    double val;
+
+    if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathIsInf", &val))
+        return(NULL);
+
+    c_retval = xmlXPathIsInf(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject *
+libxml_xmlXPathIsNaN(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    double val;
+
+    if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathIsNaN", &val))
+        return(NULL);
+
+    c_retval = xmlXPathIsNaN(val);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathIsNodeType(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathIsNodeType", &name))
+        return(NULL);
+
+    c_retval = xmlXPathIsNodeType(name);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathLangFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLangFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathLangFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathLastFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLastFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathLastFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathLocalNameFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathLocalNameFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathLocalNameFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathModValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathModValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathModValues(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathMultValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathMultValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathMultValues(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNamespaceURIFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNamespaceURIFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathNamespaceURIFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    int val;
+
+    if (!PyArg_ParseTuple(args, (char *)"i:xmlXPathNewBoolean", &val))
+        return(NULL);
+
+    c_retval = xmlXPathNewBoolean(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewCString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    char * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathNewCString", &val))
+        return(NULL);
+
+    c_retval = xmlXPathNewCString(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathContextPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewContext", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlXPathNewContext(doc);
+    py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewFloat(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    double val;
+
+    if (!PyArg_ParseTuple(args, (char *)"d:xmlXPathNewFloat", &val))
+        return(NULL);
+
+    c_retval = xmlXPathNewFloat(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewNodeSet(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr val;
+    PyObject *pyobj_val;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewNodeSet", &pyobj_val))
+        return(NULL);
+    val = (xmlNodePtr) PyxmlNode_Get(pyobj_val);
+
+    c_retval = xmlXPathNewNodeSet(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewParserContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathParserContextPtr c_retval;
+    xmlChar * str;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPathNewParserContext", &str, &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathNewParserContext(str, ctxt);
+    py_retval = libxml_xmlXPathParserContextPtrWrap((xmlXPathParserContextPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlChar * val;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathNewString", &val))
+        return(NULL);
+
+    c_retval = xmlXPathNewString(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNewValueTree(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr val;
+    PyObject *pyobj_val;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNewValueTree", &pyobj_val))
+        return(NULL);
+    val = (xmlNodePtr) PyxmlNode_Get(pyobj_val);
+
+    c_retval = xmlXPathNewValueTree(val);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextAncestor(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAncestor", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextAncestor(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextAncestorOrSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAncestorOrSelf", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextAncestorOrSelf(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextAttribute(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextAttribute", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextAttribute(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextChild(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextChild", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextChild(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextDescendant(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextDescendant", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextDescendant(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextDescendantOrSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextDescendantOrSelf", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextDescendantOrSelf(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextFollowing(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextFollowing", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextFollowing(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextFollowingSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextFollowingSibling", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextFollowingSibling(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextNamespace(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextNamespace", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextNamespace(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextParent(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextParent", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextParent(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextPreceding(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextPreceding", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextPreceding(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextPrecedingSibling(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextPrecedingSibling", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextPrecedingSibling(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNextSelf(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlNodePtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr cur;
+    PyObject *pyobj_cur;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathNextSelf", &pyobj_ctxt, &pyobj_cur))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+    cur = (xmlNodePtr) PyxmlNode_Get(pyobj_cur);
+
+    c_retval = xmlXPathNextSelf(ctxt, cur);
+    py_retval = libxml_xmlNodePtrWrap((xmlNodePtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNodeEval(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+    xmlChar * str;
+    xmlXPathContextPtr ctx;
+    PyObject *pyobj_ctx;
+
+    if (!PyArg_ParseTuple(args, (char *)"OzO:xmlXPathNodeEval", &pyobj_node, &str, &pyobj_ctx))
+        return(NULL);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+
+    c_retval = xmlXPathNodeEval(node, str, ctx);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNodeSetFreeNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlNsPtr ns;
+    PyObject *pyobj_ns;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNodeSetFreeNs", &pyobj_ns))
+        return(NULL);
+    ns = (xmlNsPtr) PyxmlNode_Get(pyobj_ns);
+
+    xmlXPathNodeSetFreeNs(ns);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNormalizeFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNormalizeFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathNormalizeFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNotEqualValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathNotEqualValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathNotEqualValues(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNotFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNotFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathNotFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNsLookup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    const xmlChar * c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * prefix;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlXPathNsLookup", &pyobj_ctxt, &prefix))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathNsLookup(ctxt, prefix);
+    py_retval = libxml_xmlCharPtrConstWrap((const xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathNumberFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathNumberFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathNumberFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathOrderDocElems(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    long c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathOrderDocElems", &pyobj_doc))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    c_retval = xmlXPathOrderDocElems(doc);
+    py_retval = libxml_longWrap((long) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathParseNCName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParseNCName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathParseNCName(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathParseName(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParseName", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathParseName(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathParserGetContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathContextPtr c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathParserGetContext", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = ctxt->context;
+    py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathPopBoolean(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopBoolean", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathPopBoolean(ctxt);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathPopNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    double c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopNumber", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathPopNumber(ctxt);
+    py_retval = libxml_doubleWrap((double) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathPopString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlChar * c_retval;
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathPopString", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathPopString(ctxt);
+    py_retval = libxml_xmlCharPtrWrap((xmlChar *) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathPositionFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathPositionFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathPositionFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRegisterAllFunctions(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisterAllFunctions", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    xmlXPathRegisterAllFunctions(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRegisterNs(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    int c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * prefix;
+    xmlChar * ns_uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlXPathRegisterNs", &pyobj_ctxt, &prefix, &ns_uri))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathRegisterNs(ctxt, prefix, ns_uri);
+    py_retval = libxml_intWrap((int) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+#endif
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRegisteredFuncsCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredFuncsCleanup", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    xmlXPathRegisteredFuncsCleanup(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRegisteredNsCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredNsCleanup", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    xmlXPathRegisteredNsCleanup(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRegisteredVariablesCleanup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRegisteredVariablesCleanup", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    xmlXPathRegisteredVariablesCleanup(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRoot(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathRoot", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathRoot(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathRoundFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathRoundFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathRoundFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSetContextDoc(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathSetContextDoc", &pyobj_ctxt, &pyobj_doc))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+
+    ctxt->doc = doc;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSetContextNode(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlNodePtr node;
+    PyObject *pyobj_node;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPathSetContextNode", &pyobj_ctxt, &pyobj_node))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+    node = (xmlNodePtr) PyxmlNode_Get(pyobj_node);
+
+    ctxt->node = node;
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathStartsWithFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStartsWithFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathStartsWithFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathStringEvalNumber(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    double c_retval;
+    xmlChar * str;
+
+    if (!PyArg_ParseTuple(args, (char *)"z:xmlXPathStringEvalNumber", &str))
+        return(NULL);
+
+    c_retval = xmlXPathStringEvalNumber(str);
+    py_retval = libxml_doubleWrap((double) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathStringFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStringFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathStringFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathStringLengthFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathStringLengthFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathStringLengthFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSubValues(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathSubValues", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathSubValues(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSubstringAfterFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringAfterFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathSubstringAfterFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSubstringBeforeFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringBeforeFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathSubstringBeforeFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSubstringFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSubstringFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathSubstringFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathSumFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathSumFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathSumFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathTranslateFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathTranslateFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathTranslateFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathTrueFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPathTrueFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathTrueFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathValueFlipSign(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPathValueFlipSign", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPathValueFlipSign(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathVariableLookup(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * name;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oz:xmlXPathVariableLookup", &pyobj_ctxt, &name))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathVariableLookup(ctxt, name);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPathVariableLookupNS(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlXPathContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    xmlChar * name;
+    xmlChar * ns_uri;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozz:xmlXPathVariableLookupNS", &pyobj_ctxt, &name, &ns_uri))
+        return(NULL);
+    ctxt = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctxt);
+
+    c_retval = xmlXPathVariableLookupNS(ctxt, name, ns_uri);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject *
+libxml_xmlXPatherror(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    char * file;
+    int line;
+    int no;
+
+    if (!PyArg_ParseTuple(args, (char *)"Ozii:xmlXPatherror", &pyobj_ctxt, &file, &line, &no))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPatherror(ctxt, file, line, no);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrEval(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlChar * str;
+    xmlXPathContextPtr ctx;
+    PyObject *pyobj_ctx;
+
+    if (!PyArg_ParseTuple(args, (char *)"zO:xmlXPtrEval", &str, &pyobj_ctx))
+        return(NULL);
+    ctx = (xmlXPathContextPtr) PyxmlXPathContext_Get(pyobj_ctx);
+
+    c_retval = xmlXPtrEval(str, ctx);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrEvalRangePredicate(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPtrEvalRangePredicate", &pyobj_ctxt))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPtrEvalRangePredicate(ctxt);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrNewCollapsedRange(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr start;
+    PyObject *pyobj_start;
+
+    if (!PyArg_ParseTuple(args, (char *)"O:xmlXPtrNewCollapsedRange", &pyobj_start))
+        return(NULL);
+    start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+
+    c_retval = xmlXPtrNewCollapsedRange(start);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrNewContext(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathContextPtr c_retval;
+    xmlDocPtr doc;
+    PyObject *pyobj_doc;
+    xmlNodePtr here;
+    PyObject *pyobj_here;
+    xmlNodePtr origin;
+    PyObject *pyobj_origin;
+
+    if (!PyArg_ParseTuple(args, (char *)"OOO:xmlXPtrNewContext", &pyobj_doc, &pyobj_here, &pyobj_origin))
+        return(NULL);
+    doc = (xmlDocPtr) PyxmlNode_Get(pyobj_doc);
+    here = (xmlNodePtr) PyxmlNode_Get(pyobj_here);
+    origin = (xmlNodePtr) PyxmlNode_Get(pyobj_origin);
+
+    c_retval = xmlXPtrNewContext(doc, here, origin);
+    py_retval = libxml_xmlXPathContextPtrWrap((xmlXPathContextPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrNewLocationSetNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr start;
+    PyObject *pyobj_start;
+    xmlNodePtr end;
+    PyObject *pyobj_end;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPtrNewLocationSetNodes", &pyobj_start, &pyobj_end))
+        return(NULL);
+    start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+    end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+    c_retval = xmlXPtrNewLocationSetNodes(start, end);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrNewRange(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr start;
+    PyObject *pyobj_start;
+    int startindex;
+    xmlNodePtr end;
+    PyObject *pyobj_end;
+    int endindex;
+
+    if (!PyArg_ParseTuple(args, (char *)"OiOi:xmlXPtrNewRange", &pyobj_start, &startindex, &pyobj_end, &endindex))
+        return(NULL);
+    start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+    end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+    c_retval = xmlXPtrNewRange(start, startindex, end, endindex);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrNewRangeNodes(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    PyObject *py_retval;
+    xmlXPathObjectPtr c_retval;
+    xmlNodePtr start;
+    PyObject *pyobj_start;
+    xmlNodePtr end;
+    PyObject *pyobj_end;
+
+    if (!PyArg_ParseTuple(args, (char *)"OO:xmlXPtrNewRangeNodes", &pyobj_start, &pyobj_end))
+        return(NULL);
+    start = (xmlNodePtr) PyxmlNode_Get(pyobj_start);
+    end = (xmlNodePtr) PyxmlNode_Get(pyobj_end);
+
+    c_retval = xmlXPtrNewRangeNodes(start, end);
+    py_retval = libxml_xmlXPathObjectPtrWrap((xmlXPathObjectPtr) c_retval);
+    return(py_retval);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject *
+libxml_xmlXPtrRangeToFunction(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
+    xmlXPathParserContextPtr ctxt;
+    PyObject *pyobj_ctxt;
+    int nargs;
+
+    if (!PyArg_ParseTuple(args, (char *)"Oi:xmlXPtrRangeToFunction", &pyobj_ctxt, &nargs))
+        return(NULL);
+    ctxt = (xmlXPathParserContextPtr) PyxmlXPathParserContext_Get(pyobj_ctxt);
+
+    xmlXPtrRangeToFunction(ctxt, nargs);
+    Py_INCREF(Py_None);
+    return(Py_None);
+}
+
+#endif /* defined(LIBXML_XPTR_ENABLED) */
diff --git a/python/libxml2-py.h b/python/libxml2-py.h
new file mode 100644 (file)
index 0000000..9787b0d
--- /dev/null
@@ -0,0 +1,2063 @@
+/* Generated */
+
+#if defined(LIBXML_DOCB_ENABLED)
+PyObject * libxml_docbDefaultSAXHandlerInit(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DOCB_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlAutoCloseTag(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCreateFileParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCreateMemoryParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCreatePushParser(PyObject *self, PyObject *args);
+#endif
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtReadDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtReadFd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtReadFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtReadMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtReset(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlCtxtUseOptions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlDefaultSAXHandlerInit(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlDocContentDumpFormatOutput(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlDocContentDumpOutput(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlDocDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlFreeParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlGetMetaEncoding(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlHandleOmittedElem(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlInitAutoClose(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlIsAutoClosed(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlIsBooleanAttr(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlIsScriptAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlNewDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlNewDocNoDtD(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlNewParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlNodeDumpFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlNodeDumpFileFormat(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlNodeDumpFormatOutput(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlNodeDumpOutput(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlParseCharRef(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
+PyObject * libxml_htmlParseChunk(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlParseDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlParseDocument(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlParseElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlParseFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlReadDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlReadFd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlReadFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlReadMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlSAXParseFile(PyObject *self, PyObject *args);
+#endif
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlSaveFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlSaveFileEnc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_htmlSaveFileFormat(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_htmlSetMetaEncoding(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTML_ENABLED) */
+PyObject * libxml_namePop(PyObject *self, PyObject *args);
+PyObject * libxml_namePush(PyObject *self, PyObject *args);
+PyObject * libxml_nodePop(PyObject *self, PyObject *args);
+PyObject * libxml_nodePush(PyObject *self, PyObject *args);
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_valuePop(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogAdd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlACatalogDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogRemove(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogResolve(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogResolvePublic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogResolveSystem(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlACatalogResolveURI(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlAddChild(PyObject *self, PyObject *args);
+PyObject * libxml_xmlAddChildList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlAddDocEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlAddDtdEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlAddEncodingAlias(PyObject *self, PyObject *args);
+PyObject * libxml_xmlAddNextSibling(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlAddPrevSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+PyObject * libxml_xmlAddSibling(PyObject *self, PyObject *args);
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlBoolToText(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+PyObject * libxml_xmlBuildQName(PyObject *self, PyObject *args);
+PyObject * libxml_xmlBuildRelativeURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlBuildURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlByteConsumed(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCanonicPath(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogAdd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogConvert(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlCatalogDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogGetPublic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogGetSystem(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogIsEmpty(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogRemove(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogResolve(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogResolvePublic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogResolveSystem(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogResolveURI(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlCatalogSetDebug(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlCharStrdup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCharStrndup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCheckFilename(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCheckLanguageID(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCheckUTF8(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCheckVersion(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCleanupCharEncodingHandlers(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCleanupEncodingAliases(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCleanupGlobals(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCleanupInputCallbacks(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlCleanupOutputCallbacks(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlCleanupPredefinedEntities(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlClearParserCtxt(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlConvertSGMLCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlCopyChar(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyCharMultiByte(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlCopyDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlCopyDtd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlCopyError(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyNamespace(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyNamespaceList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyNodeList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCopyPropList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateDocParserCtxt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateEntityParserCtxt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateFileParserCtxt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateInputBuffer(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateIntSubset(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateMemoryParserCtxt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateOutputBuffer(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreatePushParser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCreateURLParserCtxt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtReadDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtReadFd(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtReadFile(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtReadMemory(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtReset(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtResetPush(PyObject *self, PyObject *args);
+PyObject * libxml_xmlCtxtUseOptions(PyObject *self, PyObject *args);
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugCheckDocument(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpAttr(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpAttrList(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpDTD(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpDocument(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpDocumentHead(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpEntities(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpNodeList(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpOneNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlDebugDumpString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+PyObject * libxml_xmlDebugMemory(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlDecodeEntities(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlDefaultSAXHandlerInit(PyObject *self, PyObject *args);
+PyObject * libxml_xmlDelEncodingAlias(PyObject *self, PyObject *args);
+PyObject * libxml_xmlDictCleanup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlDocCopyNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlDocCopyNodeList(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlDocDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlDocFormatDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject * libxml_xmlDocGetRootElement(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+PyObject * libxml_xmlDocSetRootElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+PyObject * libxml_xmlDumpMemory(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlElemDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlEncodeEntities(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlEncodeEntitiesReentrant(PyObject *self, PyObject *args);
+PyObject * libxml_xmlEncodeSpecialChars(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetCode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetDomain(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetFile(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetLevel(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetLine(PyObject *self, PyObject *args);
+PyObject * libxml_xmlErrorGetMessage(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFileMatch(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlFirstElementChild(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlFreeCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlFreeDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeDtd(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeNodeList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeNs(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeNsList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeParserInputBuffer(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreePropList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlFreeURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetCompressMode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDocCompressMode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDocEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDtdAttrDesc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDtdElementDesc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDtdEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDtdQAttrDesc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetDtdQElementDesc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetEncodingAlias(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetID(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetIntSubset(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetLastChild(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetLastError(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetLineNo(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetNoNsProp(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlGetNodePath(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
+PyObject * libxml_xmlGetNsProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetParameterEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetPredefinedEntity(PyObject *self, PyObject *args);
+PyObject * libxml_xmlGetProp(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlHandleEntity(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlHasNsProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlHasProp(PyObject *self, PyObject *args);
+#if defined(LIBXML_FTP_ENABLED)
+PyObject * libxml_xmlIOFTPMatch(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject * libxml_xmlIOHTTPMatch(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+PyObject * libxml_xmlInitCharEncodingHandlers(PyObject *self, PyObject *args);
+PyObject * libxml_xmlInitGlobals(PyObject *self, PyObject *args);
+PyObject * libxml_xmlInitParser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlInitParserCtxt(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlInitializeCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlInitializeDict(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlInitializePredefinedEntities(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlIsBaseChar(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsBlank(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsBlankNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsChar(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsCombining(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsDigit(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsExtender(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsID(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsIdeographic(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsLetter(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsMixedElement(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsPubidChar(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsRef(PyObject *self, PyObject *args);
+PyObject * libxml_xmlIsXHTML(PyObject *self, PyObject *args);
+PyObject * libxml_xmlKeepBlanksDefault(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlLastElementChild(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlLineNumbersDefault(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlLoadACatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlLoadCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlLoadCatalogs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlLoadSGMLSuperCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlLsCountNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED)
+PyObject * libxml_xmlLsOneNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) */
+PyObject * libxml_xmlMemoryUsed(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlNamespaceParseNCName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlNamespaceParseNSDef(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject * libxml_xmlNanoFTPCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject * libxml_xmlNanoFTPInit(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject * libxml_xmlNanoFTPProxy(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_FTP_ENABLED)
+PyObject * libxml_xmlNanoFTPScanProxy(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_FTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject * libxml_xmlNanoHTTPCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject * libxml_xmlNanoHTTPInit(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_HTTP_ENABLED)
+PyObject * libxml_xmlNanoHTTPScanProxy(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_HTTP_ENABLED) */
+PyObject * libxml_xmlNewCDataBlock(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlNewCatalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlNewCharRef(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlNewChild(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject * libxml_xmlNewComment(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDocComment(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNewDocFragment(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNewDocNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDocNodeEatName(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDocPI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDocProp(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNewDocRawNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNewDocText(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDocTextLen(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewDtd(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewEntity(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlNewGlobalNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlNewNode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewNodeEatName(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewNs(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewNsProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewNsPropEatName(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewPI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewParserCtxt(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlNewProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject * libxml_xmlNewReference(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNewText(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNewTextChild(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNewTextLen(PyObject *self, PyObject *args);
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlNewTextReader(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlNewTextReaderFilename(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlNewValidCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+PyObject * libxml_xmlNextChar(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNextElementSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNodeAddContent(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeAddContentLen(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlNodeDumpOutput(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject * libxml_xmlNodeGetBase(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeGetContent(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeGetLang(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeGetNs(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeGetNsDefs(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeGetSpacePreserve(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeIsText(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNodeListGetRawString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNodeListGetString(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlNodeSetBase(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) */
+PyObject * libxml_xmlNodeSetContent(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNodeSetContentLen(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNodeSetLang(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNodeSetName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlNodeSetSpacePreserve(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlNormalizeURIPath(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNormalizeWindowsPath(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlOutputBufferGetContent(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlOutputBufferWrite(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlOutputBufferWriteString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject * libxml_xmlParseAttValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseAttributeListDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseCDSect(PyObject *self, PyObject *args);
+#if defined(LIBXML_CATALOG_ENABLED)
+PyObject * libxml_xmlParseCatalogFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_CATALOG_ENABLED) */
+PyObject * libxml_xmlParseCharData(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseCharRef(PyObject *self, PyObject *args);
+#if defined(LIBXML_PUSH_ENABLED)
+PyObject * libxml_xmlParseChunk(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_PUSH_ENABLED) */
+PyObject * libxml_xmlParseComment(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseContent(PyObject *self, PyObject *args);
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlParseDTD(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlParseDocTypeDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseDocument(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseElement(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseElementDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseEncName(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseEncodingDecl(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseEndTag(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseEntity(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlParseEntityDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseEntityRef(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseExtParsedEnt(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseExternalSubset(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlParseMarkupDecl(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlParseMisc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseName(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlParseNamespace(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlParseNmtoken(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseNotationDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParsePEReference(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParsePI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParsePITarget(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParsePubidLiteral(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlParseQuotedString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlParseReference(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseSDDecl(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlParseStartTag(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlParseSystemLiteral(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseTextDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseURIRaw(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseURIReference(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseVersionInfo(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseVersionNum(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParseXMLDecl(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserGetDirectory(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserGetDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserGetIsValid(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserGetWellFormed(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserHandlePEReference(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlParserHandleReference(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+PyObject * libxml_xmlParserInputBufferGrow(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserInputBufferPush(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserInputBufferRead(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserSetLineNumbers(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserSetLoadSubset(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserSetPedantic(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserSetReplaceEntities(PyObject *self, PyObject *args);
+PyObject * libxml_xmlParserSetValidate(PyObject *self, PyObject *args);
+PyObject * libxml_xmlPathToURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlPedanticParserDefault(PyObject *self, PyObject *args);
+PyObject * libxml_xmlPopInput(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlPreviousElementSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+PyObject * libxml_xmlPrintURI(PyObject *self, PyObject *args);
+PyObject * libxml_xmlPythonCleanupParser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlReadDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlReadFd(PyObject *self, PyObject *args);
+PyObject * libxml_xmlReadFile(PyObject *self, PyObject *args);
+PyObject * libxml_xmlReadMemory(PyObject *self, PyObject *args);
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderForDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderForFd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderForFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderForMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderNewDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderNewFd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderNewFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderNewMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderNewWalker(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlReaderWalker(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED)
+PyObject * libxml_xmlReconciliateNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlRecoverDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlRecoverFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlRecoverMemory(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlRegFreeRegexp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlRegexpCompile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlRegexpExec(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlRegexpIsDeterminist(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlRegexpPrint(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_REGEXP_ENABLED) */
+PyObject * libxml_xmlRegisterDefaultInputCallbacks(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlRegisterDefaultOutputCallbacks(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED)
+PyObject * libxml_xmlRegisterHTTPPostCallbacks(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlRegisterXPathFunction(PyObject *self, PyObject *args);
+#endif
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGCleanupTypes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlRelaxNGDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlRelaxNGDumpTree(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGFree(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGFreeParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGInitTypes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGNewDocParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGNewMemParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGNewParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGNewValidCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGParse(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGValidateDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGValidateFullElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGValidatePopElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGValidatePushCData(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxNGValidatePushElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlRelaxParserSetFlag(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject * libxml_xmlRemoveID(PyObject *self, PyObject *args);
+PyObject * libxml_xmlRemoveProp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlRemoveRef(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
+PyObject * libxml_xmlReplaceNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
+PyObject * libxml_xmlResetError(PyObject *self, PyObject *args);
+PyObject * libxml_xmlResetLastError(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlSAXDefaultVersion(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+PyObject * libxml_xmlSAXParseFile(PyObject *self, PyObject *args);
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlSaveFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlSaveFileEnc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlSaveFormatFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlSaveFormatFileEnc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_OUTPUT_ENABLED) */
+PyObject * libxml_xmlSaveUri(PyObject *self, PyObject *args);
+#if defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlScanName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaCleanupTypes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaCollapseString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlSchemaDump(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaFree(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaFreeParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaInitTypes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaIsValid(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaNewDocParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaNewMemParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaNewParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaNewValidCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaParse(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaSetValidOptions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidCtxtGetOptions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidCtxtGetParserCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidateDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidateFile(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidateOneElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaValidateSetFilename(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlSchemaWhiteSpaceReplace(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SCHEMAS_ENABLED) */
+PyObject * libxml_xmlSearchNs(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSearchNsByHref(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSetCompressMode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSetDocCompressMode(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSetEntityLoader(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSetListDoc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSetNs(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_xmlSetNsProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
+PyObject * libxml_xmlSetProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
+PyObject * libxml_xmlSetTreeDoc(PyObject *self, PyObject *args);
+#if defined(LIBXML_SAX1_ENABLED)
+PyObject * libxml_xmlSetupParserForBuffer(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_SAX1_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
+PyObject * libxml_xmlShellPrintNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED) */
+#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlShellPrintXPathError(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) */
+PyObject * libxml_xmlSkipBlankChars(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStopParser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrEqual(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrQEqual(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrcasecmp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrcasestr(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrcat(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrchr(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrcmp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrdup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStringDecodeEntities(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStringGetNodeList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStringLenDecodeEntities(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStringLenGetNodeList(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrlen(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrncasecmp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrncat(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrncatNew(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrncmp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrndup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrstr(PyObject *self, PyObject *args);
+PyObject * libxml_xmlStrsub(PyObject *self, PyObject *args);
+PyObject * libxml_xmlSubstituteEntitiesDefault(PyObject *self, PyObject *args);
+PyObject * libxml_xmlTextConcat(PyObject *self, PyObject *args);
+PyObject * libxml_xmlTextMerge(PyObject *self, PyObject *args);
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderAttributeCount(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderByteConsumed(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderClose(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstBaseUri(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstEncoding(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstLocalName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstNamespaceUri(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstPrefix(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstXmlLang(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderConstXmlVersion(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderCurrentDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderCurrentNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderDepth(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderExpand(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetAttributeNo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetAttributeNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetParserColumnNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetParserLineNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetParserProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderGetRemainder(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderHasAttributes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderHasValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderIsDefault(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderIsEmptyElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderIsNamespaceDecl(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderIsValid(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderLocatorBaseURI(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderLocatorLineNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderLookupNamespace(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToAttributeNo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToAttributeNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToFirstAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderMoveToNextAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderNext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderNextSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderNodeType(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderNormalization(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderPreserve(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderQuoteChar(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderRead(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderReadAttributeValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+PyObject * libxml_xmlTextReaderReadInnerXml(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
+PyObject * libxml_xmlTextReaderReadOuterXml(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderReadState(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderReadString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderRelaxNGSetSchema(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderRelaxNGValidate(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderRelaxNGValidateCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderSchemaValidate(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderSchemaValidateCtxt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderSetParserProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlTextReaderSetSchema(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderSetup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+#if defined(LIBXML_READER_ENABLED)
+PyObject * libxml_xmlTextReaderStandalone(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_READER_ENABLED) */
+PyObject * libxml_xmlThrDefDefaultBufferSize(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefDoValidityCheckingDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefGetWarningsDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefIndentTreeOutput(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefKeepBlanksDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefLineNumbersDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefLoadExtDtdDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefParserDebugEntities(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefPedanticParserDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefSaveNoEmptyTags(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefSubstituteEntitiesDefaultValue(PyObject *self, PyObject *args);
+PyObject * libxml_xmlThrDefTreeIndentString(PyObject *self, PyObject *args);
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsAegeanNumbers(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsAlphabeticPresentationForms(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsArabic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsArabicPresentationFormsA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsArabicPresentationFormsB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsArmenian(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsArrows(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBasicLatin(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBengali(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBlock(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBlockElements(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBopomofo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBopomofoExtended(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBoxDrawing(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBraillePatterns(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsBuhid(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsByzantineMusicalSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKCompatibility(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKCompatibilityForms(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKCompatibilityIdeographs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKCompatibilityIdeographsSupplement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKRadicalsSupplement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKSymbolsandPunctuation(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKUnifiedIdeographs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKUnifiedIdeographsExtensionA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCJKUnifiedIdeographsExtensionB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCat(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatC(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatCc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatCf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatCo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatCs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatL(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatLl(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatLm(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatLo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatLt(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatLu(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatM(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatMc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatMe(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatMn(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatN(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatNd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatNl(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatNo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatP(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPe(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPi(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatPs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatS(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatSc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatSk(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatSm(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatSo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatZ(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatZl(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatZp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCatZs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCherokee(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCombiningDiacriticalMarks(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCombiningDiacriticalMarksforSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCombiningHalfMarks(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCombiningMarksforSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsControlPictures(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCurrencySymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCypriotSyllabary(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCyrillic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsCyrillicSupplement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsDeseret(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsDevanagari(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsDingbats(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsEnclosedAlphanumerics(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsEnclosedCJKLettersandMonths(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsEthiopic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGeneralPunctuation(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGeometricShapes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGeorgian(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGothic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGreek(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGreekExtended(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGreekandCoptic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGujarati(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsGurmukhi(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHalfwidthandFullwidthForms(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHangulCompatibilityJamo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHangulJamo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHangulSyllables(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHanunoo(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHebrew(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHighPrivateUseSurrogates(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHighSurrogates(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsHiragana(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsIPAExtensions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsIdeographicDescriptionCharacters(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKanbun(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKangxiRadicals(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKannada(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKatakana(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKatakanaPhoneticExtensions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKhmer(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsKhmerSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLao(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLatin1Supplement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLatinExtendedA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLatinExtendedAdditional(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLatinExtendedB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLetterlikeSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLimbu(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLinearBIdeograms(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLinearBSyllabary(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsLowSurrogates(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMalayalam(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMathematicalAlphanumericSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMathematicalOperators(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMiscellaneousMathematicalSymbolsA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMiscellaneousMathematicalSymbolsB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMiscellaneousSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMiscellaneousSymbolsandArrows(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMiscellaneousTechnical(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMongolian(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMusicalSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsMyanmar(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsNumberForms(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsOgham(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsOldItalic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsOpticalCharacterRecognition(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsOriya(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsOsmanya(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsPhoneticExtensions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsPrivateUse(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsPrivateUseArea(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsRunic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsShavian(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSinhala(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSmallFormVariants(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSpacingModifierLetters(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSpecials(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSuperscriptsandSubscripts(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSupplementalArrowsA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSupplementalArrowsB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSupplementalMathematicalOperators(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSupplementaryPrivateUseAreaA(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSupplementaryPrivateUseAreaB(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsSyriac(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTagalog(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTagbanwa(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTags(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTaiLe(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTaiXuanJingSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTamil(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTelugu(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsThaana(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsThai(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsTibetan(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsUgaritic(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsUnifiedCanadianAboriginalSyllabics(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsVariationSelectors(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsVariationSelectorsSupplement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsYiRadicals(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsYiSyllables(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+#if defined(LIBXML_UNICODE_ENABLED)
+PyObject * libxml_xmlUCSIsYijingHexagramSymbols(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_UNICODE_ENABLED) */
+PyObject * libxml_xmlURIEscape(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIEscapeStr(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetAuthority(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetFragment(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetOpaque(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetPath(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetPort(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetQuery(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetQueryRaw(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetScheme(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetServer(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIGetUser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetAuthority(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetFragment(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetOpaque(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetPath(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetPort(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetQuery(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetQueryRaw(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetScheme(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetServer(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURISetUser(PyObject *self, PyObject *args);
+PyObject * libxml_xmlURIUnescapeString(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Charcmp(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Size(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strlen(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strloc(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strndup(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strpos(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strsize(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUTF8Strsub(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUnlinkNode(PyObject *self, PyObject *args);
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlUnsetNsProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlUnsetProp(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidCtxtNormalizeAttributeValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidNormalizeAttributeValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateDocument(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateDocumentFinal(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateDtd(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateDtdFinal(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
+PyObject * libxml_xmlValidateNCName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlValidateNMToken(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlValidateName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateNameValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateNamesValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateNmtokenValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateNmtokensValue(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlValidateNotationUse(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateOneAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateOneElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateOneNamespace(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlValidatePopElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlValidatePushCData(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
+PyObject * libxml_xmlValidatePushElement(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED) */
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlValidateQName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_VALID_ENABLED)
+PyObject * libxml_xmlValidateRoot(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_VALID_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlXIncludeProcess(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlXIncludeProcessFlags(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlXIncludeProcessTree(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XINCLUDE_ENABLED)
+PyObject * libxml_xmlXIncludeProcessTreeFlags(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XINCLUDE_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathAddValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathBooleanFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastBooleanToNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastBooleanToString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastNodeToNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastNodeToString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastNumberToBoolean(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastNumberToString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastStringToBoolean(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCastStringToNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCeilingFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCmpNodes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCompareValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathConcatFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathContainsFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathContextSetCache(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathCountFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathDivValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathEqualValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathErr(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathEval(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathEvalExpr(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathEvalExpression(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathFalseFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathFloorFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathFreeContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathFreeParserContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetContextDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetContextNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetContextPosition(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetContextSize(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathGetFunctionURI(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathIdFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlXPathInit(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlXPathIsInf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+PyObject * libxml_xmlXPathIsNaN(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathIsNodeType(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathLangFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathLastFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathLocalNameFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathModValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathMultValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNamespaceURIFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewBoolean(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewCString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewFloat(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewNodeSet(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewParserContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNewValueTree(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextAncestor(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextAncestorOrSelf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextAttribute(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextChild(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextDescendant(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextDescendantOrSelf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextFollowing(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextFollowingSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextNamespace(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextParent(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextPreceding(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextPrecedingSibling(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNextSelf(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNodeEval(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNodeSetFreeNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNormalizeFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNotEqualValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNotFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNsLookup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathNumberFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathOrderDocElems(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathParseNCName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathParseName(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathParserGetContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathPopBoolean(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathPopNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathPopString(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathPositionFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisterAllFunctions(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisterNs(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisterVariable(PyObject *self, PyObject *args);
+#endif
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisteredFuncsCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisteredNsCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRegisteredVariablesCleanup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRoot(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathRoundFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSetContextDoc(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSetContextNode(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathStartsWithFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathStringEvalNumber(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathStringFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathStringLengthFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSubValues(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSubstringAfterFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSubstringBeforeFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSubstringFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathSumFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathTranslateFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathTrueFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathValueFlipSign(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathVariableLookup(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPathVariableLookupNS(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPATH_ENABLED)
+PyObject * libxml_xmlXPatherror(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPATH_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrEval(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrEvalRangePredicate(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrNewCollapsedRange(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrNewContext(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrNewLocationSetNodes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrNewRange(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrNewRangeNodes(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
+#if defined(LIBXML_XPTR_ENABLED)
+PyObject * libxml_xmlXPtrRangeToFunction(PyObject *self, PyObject *args);
+#endif /* defined(LIBXML_XPTR_ENABLED) */
index 42f661d..032b44b 100644 (file)
       <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
       <arg name='f' type='pythonObject' info='the python function'/>
     </function>
+    <function name='xmlXPathRegisterVariable' file='python'>
+      <cond>defined(LIBXML_XPATH_ENABLED)</cond>
+      <info>Register a variable with the XPath context</info>
+      <return type='int' info="1 in case of success, 0 or -1 in case of error"/>
+      <arg name='ctx' type='xmlXPathContextPtr' info='the xpathContext'/>
+      <arg name='name' type='xmlChar *' info='the variable name'/>
+      <arg name='ns_uri' type='xmlChar *' info='the namespace or NULL'/>
+      <arg name='value' type='pythonObject' info='the value'/>
+    </function>
     <function name='xmlNewNode' file='python'>
       <info>Create a new Node</info>
       <return type='xmlNodePtr' info="A new element node"/>
diff --git a/python/libxml2.py b/python/libxml2.py
new file mode 100644 (file)
index 0000000..76b8dcd
--- /dev/null
@@ -0,0 +1,9319 @@
+import libxml2mod
+import types
+import sys
+
+# The root of all libxml2 errors.
+class libxmlError(Exception): pass
+
+# Type of the wrapper class for the C objects wrappers
+def checkWrapper(obj):
+    try:
+        n = type(_obj).__name__
+        if n != 'PyCObject' and n != 'PyCapsule':
+            return 1
+    except:
+        return 0
+    return 0
+
+#
+# id() is sometimes negative ...
+#
+def pos_id(o):
+    i = id(o)
+    if (i < 0):
+        return (sys.maxsize - i)
+    return i
+
+#
+# Errors raised by the wrappers when some tree handling failed.
+#
+class treeError(libxmlError):
+    def __init__(self, msg):
+        self.msg = msg
+    def __str__(self):
+        return self.msg
+
+class parserError(libxmlError):
+    def __init__(self, msg):
+        self.msg = msg
+    def __str__(self):
+        return self.msg
+
+class uriError(libxmlError):
+    def __init__(self, msg):
+        self.msg = msg
+    def __str__(self):
+        return self.msg
+
+class xpathError(libxmlError):
+    def __init__(self, msg):
+        self.msg = msg
+    def __str__(self):
+        return self.msg
+
+class ioWrapper:
+    def __init__(self, _obj):
+        self.__io = _obj
+        self._o = None
+
+    def io_close(self):
+        if self.__io == None:
+            return(-1)
+        self.__io.close()
+        self.__io = None
+        return(0)
+
+    def io_flush(self):
+        if self.__io == None:
+            return(-1)
+        self.__io.flush()
+        return(0)
+
+    def io_read(self, len = -1):
+        if self.__io == None:
+            return(-1)
+        try:
+            if len < 0:
+                ret = self.__io.read()
+            else:
+                ret = self.__io.read(len)
+        except Exception:
+            import sys
+            e = sys.exc_info()[1]
+            print("failed to read from Python:", type(e))
+            print("on IO:", self.__io)
+            self.__io == None
+            return(-1)
+
+        return(ret)
+
+    def io_write(self, str, len = -1):
+        if self.__io == None:
+            return(-1)
+        if len < 0:
+            return(self.__io.write(str))
+        return(self.__io.write(str, len))
+
+class ioReadWrapper(ioWrapper):
+    def __init__(self, _obj, enc = ""):
+        ioWrapper.__init__(self, _obj)
+        self._o = libxml2mod.xmlCreateInputBuffer(self, enc)
+
+    def __del__(self):
+        print("__del__")
+        self.io_close()
+        if self._o != None:
+            libxml2mod.xmlFreeParserInputBuffer(self._o)
+        self._o = None
+
+    def close(self):
+        self.io_close()
+        if self._o != None:
+            libxml2mod.xmlFreeParserInputBuffer(self._o)
+        self._o = None
+
+class ioWriteWrapper(ioWrapper):
+    def __init__(self, _obj, enc = ""):
+#        print "ioWriteWrapper.__init__", _obj
+        if type(_obj) == type(''):
+            print("write io from a string")
+            self.o = None
+        elif type(_obj).__name__ == 'PyCapsule':
+            file = libxml2mod.outputBufferGetPythonFile(_obj)
+            if file != None:
+                ioWrapper.__init__(self, file)
+            else:
+                ioWrapper.__init__(self, _obj)
+            self._o = _obj
+#        elif type(_obj) == types.InstanceType:
+#            print(("write io from instance of %s" % (_obj.__class__)))
+#            ioWrapper.__init__(self, _obj)
+#            self._o = libxml2mod.xmlCreateOutputBuffer(self, enc)
+        else:
+            file = libxml2mod.outputBufferGetPythonFile(_obj)
+            if file != None:
+                ioWrapper.__init__(self, file)
+            else:
+                ioWrapper.__init__(self, _obj)
+            self._o = _obj
+
+    def __del__(self):
+#        print "__del__"
+        self.io_close()
+        if self._o != None:
+            libxml2mod.xmlOutputBufferClose(self._o)
+        self._o = None
+
+    def flush(self):
+        self.io_flush()
+        if self._o != None:
+            libxml2mod.xmlOutputBufferClose(self._o)
+        self._o = None
+
+    def close(self):
+        self.io_flush()
+        if self._o != None:
+            libxml2mod.xmlOutputBufferClose(self._o)
+        self._o = None
+
+#
+# Example of a class to handle SAX events
+#
+class SAXCallback:
+    """Base class for SAX handlers"""
+    def startDocument(self):
+        """called at the start of the document"""
+        pass
+
+    def endDocument(self):
+        """called at the end of the document"""
+        pass
+
+    def startElement(self, tag, attrs):
+        """called at the start of every element, tag is the name of
+           the element, attrs is a dictionary of the element's attributes"""
+        pass
+
+    def endElement(self, tag):
+        """called at the start of every element, tag is the name of
+           the element"""
+        pass
+
+    def characters(self, data):
+        """called when character data have been read, data is the string
+           containing the data, multiple consecutive characters() callback
+           are possible."""
+        pass
+
+    def cdataBlock(self, data):
+        """called when CDATA section have been read, data is the string
+           containing the data, multiple consecutive cdataBlock() callback
+           are possible."""
+        pass
+
+    def reference(self, name):
+        """called when an entity reference has been found"""
+        pass
+
+    def ignorableWhitespace(self, data):
+        """called when potentially ignorable white spaces have been found"""
+        pass
+
+    def processingInstruction(self, target, data):
+        """called when a PI has been found, target contains the PI name and
+           data is the associated data in the PI"""
+        pass
+
+    def comment(self, content):
+        """called when a comment has been found, content contains the comment"""
+        pass
+
+    def externalSubset(self, name, externalID, systemID):
+        """called when a DOCTYPE declaration has been found, name is the
+           DTD name and externalID, systemID are the DTD public and system
+           identifier for that DTd if available"""
+        pass
+
+    def internalSubset(self, name, externalID, systemID):
+        """called when a DOCTYPE declaration has been found, name is the
+           DTD name and externalID, systemID are the DTD public and system
+           identifier for that DTD if available"""
+        pass
+
+    def entityDecl(self, name, type, externalID, systemID, content):
+        """called when an ENTITY declaration has been found, name is the
+           entity name and externalID, systemID are the entity public and
+           system identifier for that entity if available, type indicates
+           the entity type, and content reports it's string content"""
+        pass
+
+    def notationDecl(self, name, externalID, systemID):
+        """called when an NOTATION declaration has been found, name is the
+           notation name and externalID, systemID are the notation public and
+           system identifier for that notation if available"""
+        pass
+
+    def attributeDecl(self, elem, name, type, defi, defaultValue, nameList):
+        """called when an ATTRIBUTE definition has been found"""
+        pass
+
+    def elementDecl(self, name, type, content):
+        """called when an ELEMENT definition has been found"""
+        pass
+
+    def entityDecl(self, name, publicId, systemID, notationName):
+        """called when an unparsed ENTITY declaration has been found,
+           name is the entity name and publicId,, systemID are the entity
+           public and system identifier for that entity if available,
+           and notationName indicate the associated NOTATION"""
+        pass
+
+    def warning(self, msg):
+        #print msg
+        pass
+
+    def error(self, msg):
+        raise parserError(msg)
+
+    def fatalError(self, msg):
+        raise parserError(msg)
+
+#
+# This class is the ancestor of all the Node classes. It provides
+# the basic functionalities shared by all nodes (and handle
+# gracefylly the exception), like name, navigation in the tree,
+# doc reference, content access and serializing to a string or URI
+#
+class xmlCore:
+    def __init__(self, _obj=None):
+        if _obj != None: 
+            self._o = _obj;
+            return
+        self._o = None
+
+    def __eq__(self, other):
+        if other == None:
+            return False
+        ret = libxml2mod.compareNodesEqual(self._o, other._o)
+        if ret == None:
+            return False
+        return ret == True
+    def __ne__(self, other):
+        if other == None:
+            return True
+        ret = libxml2mod.compareNodesEqual(self._o, other._o)
+        return not ret
+    def __hash__(self):
+        ret = libxml2mod.nodeHash(self._o)
+        return ret
+
+    def __str__(self):
+        return self.serialize()
+    def get_parent(self):
+        ret = libxml2mod.parent(self._o)
+        if ret == None:
+            return None
+        return nodeWrap(ret)
+    def get_children(self):
+        ret = libxml2mod.children(self._o)
+        if ret == None:
+            return None
+        return nodeWrap(ret)
+    def get_last(self):
+        ret = libxml2mod.last(self._o)
+        if ret == None:
+            return None
+        return nodeWrap(ret)
+    def get_next(self):
+        ret = libxml2mod.next(self._o)
+        if ret == None:
+            return None
+        return nodeWrap(ret)
+    def get_properties(self):
+        ret = libxml2mod.properties(self._o)
+        if ret == None:
+            return None
+        return xmlAttr(_obj=ret)
+    def get_prev(self):
+        ret = libxml2mod.prev(self._o)
+        if ret == None:
+            return None
+        return nodeWrap(ret)
+    def get_content(self):
+        return libxml2mod.xmlNodeGetContent(self._o)
+    getContent = get_content  # why is this duplicate naming needed ?
+    def get_name(self):
+        return libxml2mod.name(self._o)
+    def get_type(self):
+        return libxml2mod.type(self._o)
+    def get_doc(self):
+        ret = libxml2mod.doc(self._o)
+        if ret == None:
+            if self.type in ["document_xml", "document_html"]:
+                return xmlDoc(_obj=self._o)
+            else:
+                return None
+        return xmlDoc(_obj=ret)
+    #
+    # Those are common attributes to nearly all type of nodes
+    # defined as python2 properties
+    # 
+    import sys
+    if float(sys.version[0:3]) < 2.2:
+        def __getattr__(self, attr):
+            if attr == "parent":
+                ret = libxml2mod.parent(self._o)
+                if ret == None:
+                    return None
+                return nodeWrap(ret)
+            elif attr == "properties":
+                ret = libxml2mod.properties(self._o)
+                if ret == None:
+                    return None
+                return xmlAttr(_obj=ret)
+            elif attr == "children":
+                ret = libxml2mod.children(self._o)
+                if ret == None:
+                    return None
+                return nodeWrap(ret)
+            elif attr == "last":
+                ret = libxml2mod.last(self._o)
+                if ret == None:
+                    return None
+                return nodeWrap(ret)
+            elif attr == "next":
+                ret = libxml2mod.next(self._o)
+                if ret == None:
+                    return None
+                return nodeWrap(ret)
+            elif attr == "prev":
+                ret = libxml2mod.prev(self._o)
+                if ret == None:
+                    return None
+                return nodeWrap(ret)
+            elif attr == "content":
+                return libxml2mod.xmlNodeGetContent(self._o)
+            elif attr == "name":
+                return libxml2mod.name(self._o)
+            elif attr == "type":
+                return libxml2mod.type(self._o)
+            elif attr == "doc":
+                ret = libxml2mod.doc(self._o)
+                if ret == None:
+                    if self.type == "document_xml" or self.type == "document_html":
+                        return xmlDoc(_obj=self._o)
+                    else:
+                        return None
+                return xmlDoc(_obj=ret)
+            raise AttributeError(attr)
+    else:
+        parent = property(get_parent, None, None, "Parent node")
+        children = property(get_children, None, None, "First child node")
+        last = property(get_last, None, None, "Last sibling node")
+        next = property(get_next, None, None, "Next sibling node")
+        prev = property(get_prev, None, None, "Previous sibling node")
+        properties = property(get_properties, None, None, "List of properies")
+        content = property(get_content, None, None, "Content of this node")
+        name = property(get_name, None, None, "Node name")
+        type = property(get_type, None, None, "Node type")
+        doc = property(get_doc, None, None, "The document this node belongs to")
+
+    #
+    # Serialization routines, the optional arguments have the following
+    # meaning:
+    #     encoding: string to ask saving in a specific encoding
+    #     indent: if 1 the serializer is asked to indent the output
+    #
+    def serialize(self, encoding = None, format = 0):
+        return libxml2mod.serializeNode(self._o, encoding, format)
+    def saveTo(self, file, encoding = None, format = 0):
+        return libxml2mod.saveNodeTo(self._o, file, encoding, format)
+            
+    #
+    # Canonicalization routines:
+    #
+    #   nodes: the node set (tuple or list) to be included in the
+    #     canonized image or None if all document nodes should be
+    #     included.
+    #   exclusive: the exclusive flag (0 - non-exclusive
+    #     canonicalization; otherwise - exclusive canonicalization)
+    #   prefixes: the list of inclusive namespace prefixes (strings),
+    #     or None if there is no inclusive namespaces (only for
+    #     exclusive canonicalization, ignored otherwise)
+    #   with_comments: include comments in the result (!=0) or not
+    #     (==0)
+    def c14nMemory(self,
+                   nodes=None,
+                   exclusive=0,
+                   prefixes=None,
+                   with_comments=0):
+        if nodes:
+            nodes = [n._o for n in nodes]
+        return libxml2mod.xmlC14NDocDumpMemory(
+            self.get_doc()._o,
+            nodes,
+            exclusive != 0,
+            prefixes,
+            with_comments != 0)
+    def c14nSaveTo(self,
+                   file,
+                   nodes=None,
+                   exclusive=0,
+                   prefixes=None,
+                   with_comments=0):
+        if nodes:
+            nodes = [n._o for n in nodes]
+        return libxml2mod.xmlC14NDocSaveTo(
+            self.get_doc()._o,
+            nodes,
+            exclusive != 0,
+            prefixes,
+            with_comments != 0,
+            file)
+
+    #
+    # Selecting nodes using XPath, a bit slow because the context
+    # is allocated/freed every time but convenient.
+    #
+    def xpathEval(self, expr):
+        doc = self.doc
+        if doc == None:
+            return None
+        ctxt = doc.xpathNewContext()
+        ctxt.setContextNode(self)
+        res = ctxt.xpathEval(expr)
+        ctxt.xpathFreeContext()
+        return res
+
+#    #
+#    # Selecting nodes using XPath, faster because the context
+#    # is allocated just once per xmlDoc.
+#    #
+#    # Removed: DV memleaks c.f. #126735
+#    #
+#    def xpathEval2(self, expr):
+#        doc = self.doc
+#        if doc == None:
+#            return None
+#        try:
+#            doc._ctxt.setContextNode(self)
+#        except:
+#            doc._ctxt = doc.xpathNewContext()
+#            doc._ctxt.setContextNode(self)
+#        res = doc._ctxt.xpathEval(expr)
+#        return res
+    def xpathEval2(self, expr):
+        return self.xpathEval(expr)
+
+    # Remove namespaces
+    def removeNsDef(self, href):
+        """
+        Remove a namespace definition from a node.  If href is None,
+        remove all of the ns definitions on that node.  The removed
+        namespaces are returned as a linked list.
+
+        Note: If any child nodes referred to the removed namespaces,
+        they will be left with dangling links.  You should call
+        renconciliateNs() to fix those pointers.
+
+        Note: This method does not free memory taken by the ns
+        definitions.  You will need to free it manually with the
+        freeNsList() method on the returns xmlNs object.
+        """
+
+        ret = libxml2mod.xmlNodeRemoveNsDef(self._o, href)
+        if ret is None:return None
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    # support for python2 iterators
+    def walk_depth_first(self):
+        return xmlCoreDepthFirstItertor(self)
+    def walk_breadth_first(self):
+        return xmlCoreBreadthFirstItertor(self)
+    __iter__ = walk_depth_first
+
+    def free(self):
+        try:
+            self.doc._ctxt.xpathFreeContext()
+        except:
+            pass
+        libxml2mod.xmlFreeDoc(self._o)
+
+
+#
+# implements the depth-first iterator for libxml2 DOM tree
+#
+class xmlCoreDepthFirstItertor:
+    def __init__(self, node):
+        self.node = node
+        self.parents = []
+    def __iter__(self):
+        return self
+    def __next__(self):
+        while 1:
+            if self.node:
+                ret = self.node
+                self.parents.append(self.node)
+                self.node = self.node.children
+                return ret
+            try:
+                parent = self.parents.pop()
+            except IndexError:
+                raise StopIteration
+            self.node = parent.next
+    next = __next__
+
+#
+# implements the breadth-first iterator for libxml2 DOM tree
+#
+class xmlCoreBreadthFirstItertor:
+    def __init__(self, node):
+        self.node = node
+        self.parents = []
+    def __iter__(self):
+        return self
+    def __next__(self):
+        while 1:
+            if self.node:
+                ret = self.node
+                self.parents.append(self.node)
+                self.node = self.node.next
+                return ret
+            try:
+                parent = self.parents.pop()
+            except IndexError:
+                raise StopIteration
+            self.node = parent.children
+    next = __next__
+
+#
+# converters to present a nicer view of the XPath returns
+#
+def nodeWrap(o):
+    # TODO try to cast to the most appropriate node class
+    name = libxml2mod.type(o)
+    if name == "element" or name == "text":
+        return xmlNode(_obj=o)
+    if name == "attribute":
+        return xmlAttr(_obj=o)
+    if name[0:8] == "document":
+        return xmlDoc(_obj=o)
+    if name == "namespace":
+        return xmlNs(_obj=o)
+    if name == "elem_decl":
+        return xmlElement(_obj=o)
+    if name == "attribute_decl":
+        return xmlAttribute(_obj=o)
+    if name == "entity_decl":
+        return xmlEntity(_obj=o)
+    if name == "dtd":
+        return xmlDtd(_obj=o)
+    return xmlNode(_obj=o)
+
+def xpathObjectRet(o):
+    otype = type(o)
+    if otype == type([]):
+        ret = list(map(xpathObjectRet, o))
+        return ret
+    elif otype == type(()):
+        ret = list(map(xpathObjectRet, o))
+        return tuple(ret)
+    elif otype == type('') or otype == type(0) or otype == type(0.0):
+        return o
+    else:
+        return nodeWrap(o)
+
+#
+# register an XPath function
+#
+def registerXPathFunction(ctxt, name, ns_uri, f):
+    ret = libxml2mod.xmlRegisterXPathFunction(ctxt, name, ns_uri, f)
+
+#
+# For the xmlTextReader parser configuration
+#
+PARSER_LOADDTD=1
+PARSER_DEFAULTATTRS=2
+PARSER_VALIDATE=3
+PARSER_SUBST_ENTITIES=4
+
+#
+# For the error callback severities
+#
+PARSER_SEVERITY_VALIDITY_WARNING=1
+PARSER_SEVERITY_VALIDITY_ERROR=2
+PARSER_SEVERITY_WARNING=3
+PARSER_SEVERITY_ERROR=4
+
+#
+# register the libxml2 error handler
+#
+def registerErrorHandler(f, ctx):
+    """Register a Python written function to for error reporting.
+       The function is called back as f(ctx, error). """
+    import sys
+    if 'libxslt' not in sys.modules:
+        # normal behaviour when libxslt is not imported
+        ret = libxml2mod.xmlRegisterErrorHandler(f,ctx)
+    else:
+        # when libxslt is already imported, one must
+        # use libxst's error handler instead
+        import libxslt
+        ret = libxslt.registerErrorHandler(f,ctx)
+    return ret
+
+class parserCtxtCore:
+
+    def __init__(self, _obj=None):
+        if _obj != None: 
+            self._o = _obj;
+            return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeParserCtxt(self._o)
+        self._o = None
+
+    def setErrorHandler(self,f,arg):
+        """Register an error handler that will be called back as
+           f(arg,msg,severity,reserved).
+           
+           @reserved is currently always None."""
+        libxml2mod.xmlParserCtxtSetErrorHandler(self._o,f,arg)
+
+    def getErrorHandler(self):
+        """Return (f,arg) as previously registered with setErrorHandler
+           or (None,None)."""
+        return libxml2mod.xmlParserCtxtGetErrorHandler(self._o)
+
+    def addLocalCatalog(self, uri):
+        """Register a local catalog with the parser"""
+        return libxml2mod.addLocalCatalog(self._o, uri)
+    
+
+class ValidCtxtCore:
+
+    def __init__(self, *args, **kw):
+        pass
+
+    def setValidityErrorHandler(self, err_func, warn_func, arg=None):
+        """
+        Register error and warning handlers for DTD validation.
+        These will be called back as f(msg,arg)
+        """
+        libxml2mod.xmlSetValidErrors(self._o, err_func, warn_func, arg)
+    
+
+class SchemaValidCtxtCore:
+
+    def __init__(self, *args, **kw):
+        pass
+
+    def setValidityErrorHandler(self, err_func, warn_func, arg=None):
+        """
+        Register error and warning handlers for Schema validation.
+        These will be called back as f(msg,arg)
+        """
+        libxml2mod.xmlSchemaSetValidErrors(self._o, err_func, warn_func, arg)
+
+
+class relaxNgValidCtxtCore:
+
+    def __init__(self, *args, **kw):
+        pass
+
+    def setValidityErrorHandler(self, err_func, warn_func, arg=None):
+        """
+        Register error and warning handlers for RelaxNG validation.
+        These will be called back as f(msg,arg)
+        """
+        libxml2mod.xmlRelaxNGSetValidErrors(self._o, err_func, warn_func, arg)
+
+    
+def _xmlTextReaderErrorFunc(xxx_todo_changeme,msg,severity,locator):
+    """Intermediate callback to wrap the locator"""
+    (f,arg) = xxx_todo_changeme
+    return f(arg,msg,severity,xmlTextReaderLocator(locator))
+
+class xmlTextReaderCore:
+
+    def __init__(self, _obj=None):
+        self.input = None
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeTextReader(self._o)
+        self._o = None
+
+    def SetErrorHandler(self,f,arg):
+        """Register an error handler that will be called back as
+           f(arg,msg,severity,locator)."""
+        if f is None:
+            libxml2mod.xmlTextReaderSetErrorHandler(\
+                self._o,None,None)
+        else:
+            libxml2mod.xmlTextReaderSetErrorHandler(\
+                self._o,_xmlTextReaderErrorFunc,(f,arg))
+
+    def GetErrorHandler(self):
+        """Return (f,arg) as previously registered with setErrorHandler
+           or (None,None)."""
+        f,arg = libxml2mod.xmlTextReaderGetErrorHandler(self._o)
+        if f is None:
+            return None,None
+        else:
+            # assert f is _xmlTextReaderErrorFunc
+            return arg
+
+#
+# The cleanup now goes though a wrapper in libxml.c
+#
+def cleanupParser():
+    libxml2mod.xmlPythonCleanupParser()
+
+#
+# The interface to xmlRegisterInputCallbacks.
+# Since this API does not allow to pass a data object along with
+# match/open callbacks, it is necessary to maintain a list of all
+# Python callbacks.
+#
+__input_callbacks = []
+def registerInputCallback(func):
+    def findOpenCallback(URI):
+        for cb in reversed(__input_callbacks):
+            o = cb(URI)
+            if o is not None:
+                return o
+    libxml2mod.xmlRegisterInputCallback(findOpenCallback)
+    __input_callbacks.append(func)
+
+def popInputCallbacks():
+    # First pop python-level callbacks, when no more available - start
+    # popping built-in ones.
+    if len(__input_callbacks) > 0:
+        __input_callbacks.pop()
+    if len(__input_callbacks) == 0:
+        libxml2mod.xmlUnregisterInputCallback()
+
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+#
+# Everything before this line comes from libxml.py 
+# Everything after this line is automatically generated
+#
+# WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
+
+#
+# Functions from module HTMLparser
+#
+
+def htmlCreateMemoryParserCtxt(buffer, size):
+    """Create a parser context for an HTML in-memory document. """
+    ret = libxml2mod.htmlCreateMemoryParserCtxt(buffer, size)
+    if ret is None:raise parserError('htmlCreateMemoryParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlHandleOmittedElem(val):
+    """Set and return the previous value for handling HTML omitted
+       tags. """
+    ret = libxml2mod.htmlHandleOmittedElem(val)
+    return ret
+
+def htmlIsScriptAttribute(name):
+    """Check if an attribute is of content type Script """
+    ret = libxml2mod.htmlIsScriptAttribute(name)
+    return ret
+
+def htmlNewParserCtxt():
+    """Allocate and initialize a new parser context. """
+    ret = libxml2mod.htmlNewParserCtxt()
+    if ret is None:raise parserError('htmlNewParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlParseDoc(cur, encoding):
+    """parse an HTML in-memory document and build a tree. """
+    ret = libxml2mod.htmlParseDoc(cur, encoding)
+    if ret is None:raise parserError('htmlParseDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlParseFile(filename, encoding):
+    """parse an HTML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+       found at compile-time. """
+    ret = libxml2mod.htmlParseFile(filename, encoding)
+    if ret is None:raise parserError('htmlParseFile() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadDoc(cur, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.htmlReadDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadFd(fd, URL, encoding, options):
+    """parse an XML from a file descriptor and build a tree. """
+    ret = libxml2mod.htmlReadFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadFd() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. """
+    ret = libxml2mod.htmlReadFile(filename, encoding, options)
+    if ret is None:raise treeError('htmlReadFile() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadMemory(buffer, size, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.htmlReadMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadMemory() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module HTMLtree
+#
+
+def htmlIsBooleanAttr(name):
+    """Determine if a given attribute is a boolean attribute. """
+    ret = libxml2mod.htmlIsBooleanAttr(name)
+    return ret
+
+def htmlNewDoc(URI, ExternalID):
+    """Creates a new HTML document """
+    ret = libxml2mod.htmlNewDoc(URI, ExternalID)
+    if ret is None:raise treeError('htmlNewDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlNewDocNoDtD(URI, ExternalID):
+    """Creates a new HTML document without a DTD node if @URI and
+       @ExternalID are None """
+    ret = libxml2mod.htmlNewDocNoDtD(URI, ExternalID)
+    if ret is None:raise treeError('htmlNewDocNoDtD() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module SAX2
+#
+
+def SAXDefaultVersion(version):
+    """Set the default version of SAX used globally by the
+      library. By default, during initialization the default is
+      set to 2. Note that it is generally a better coding style
+      to use xmlSAXVersion() to set up the version explicitly for
+       a given parsing context. """
+    ret = libxml2mod.xmlSAXDefaultVersion(version)
+    return ret
+
+def defaultSAXHandlerInit():
+    """Initialize the default SAX2 handler """
+    libxml2mod.xmlDefaultSAXHandlerInit()
+
+def docbDefaultSAXHandlerInit():
+    """Initialize the default SAX handler """
+    libxml2mod.docbDefaultSAXHandlerInit()
+
+def htmlDefaultSAXHandlerInit():
+    """Initialize the default SAX handler """
+    libxml2mod.htmlDefaultSAXHandlerInit()
+
+#
+# Functions from module catalog
+#
+
+def catalogAdd(type, orig, replace):
+    """Add an entry in the catalog, it may overwrite existing but
+      different entries. If called before any other catalog
+      routine, allows to override the default shared catalog put
+       in place by xmlInitializeCatalog(); """
+    ret = libxml2mod.xmlCatalogAdd(type, orig, replace)
+    return ret
+
+def catalogCleanup():
+    """Free up all the memory associated with catalogs """
+    libxml2mod.xmlCatalogCleanup()
+
+def catalogConvert():
+    """Convert all the SGML catalog entries as XML ones """
+    ret = libxml2mod.xmlCatalogConvert()
+    return ret
+
+def catalogDump(out):
+    """Dump all the global catalog content to the given file. """
+    if out is not None: out.flush()
+    libxml2mod.xmlCatalogDump(out)
+
+def catalogGetPublic(pubID):
+    """Try to lookup the catalog reference associated to a public
+       ID DEPRECATED, use xmlCatalogResolvePublic() """
+    ret = libxml2mod.xmlCatalogGetPublic(pubID)
+    return ret
+
+def catalogGetSystem(sysID):
+    """Try to lookup the catalog reference associated to a system
+       ID DEPRECATED, use xmlCatalogResolveSystem() """
+    ret = libxml2mod.xmlCatalogGetSystem(sysID)
+    return ret
+
+def catalogRemove(value):
+    """Remove an entry from the catalog """
+    ret = libxml2mod.xmlCatalogRemove(value)
+    return ret
+
+def catalogResolve(pubID, sysID):
+    """Do a complete resolution lookup of an External Identifier """
+    ret = libxml2mod.xmlCatalogResolve(pubID, sysID)
+    return ret
+
+def catalogResolvePublic(pubID):
+    """Try to lookup the catalog reference associated to a public
+       ID """
+    ret = libxml2mod.xmlCatalogResolvePublic(pubID)
+    return ret
+
+def catalogResolveSystem(sysID):
+    """Try to lookup the catalog resource for a system ID """
+    ret = libxml2mod.xmlCatalogResolveSystem(sysID)
+    return ret
+
+def catalogResolveURI(URI):
+    """Do a complete resolution lookup of an URI """
+    ret = libxml2mod.xmlCatalogResolveURI(URI)
+    return ret
+
+def catalogSetDebug(level):
+    """Used to set the debug level for catalog operation, 0
+       disable debugging, 1 enable it """
+    ret = libxml2mod.xmlCatalogSetDebug(level)
+    return ret
+
+def initializeCatalog():
+    """Do the catalog initialization. this function is not thread
+      safe, catalog initialization should preferably be done once
+       at startup """
+    libxml2mod.xmlInitializeCatalog()
+
+def loadACatalog(filename):
+    """Load the catalog and build the associated data structures.
+      This can be either an XML Catalog or an SGML Catalog It
+      will recurse in SGML CATALOG entries. On the other hand XML
+       Catalogs are not handled recursively. """
+    ret = libxml2mod.xmlLoadACatalog(filename)
+    if ret is None:raise treeError('xmlLoadACatalog() failed')
+    return catalog(_obj=ret)
+
+def loadCatalog(filename):
+    """Load the catalog and makes its definitions effective for
+      the default external entity loader. It will recurse in SGML
+      CATALOG entries. this function is not thread safe, catalog
+       initialization should preferably be done once at startup """
+    ret = libxml2mod.xmlLoadCatalog(filename)
+    return ret
+
+def loadCatalogs(pathss):
+    """Load the catalogs and makes their definitions effective for
+      the default external entity loader. this function is not
+      thread safe, catalog initialization should preferably be
+       done once at startup """
+    libxml2mod.xmlLoadCatalogs(pathss)
+
+def loadSGMLSuperCatalog(filename):
+    """Load an SGML super catalog. It won't expand CATALOG or
+      DELEGATE references. This is only needed for manipulating
+      SGML Super Catalogs like adding and removing CATALOG or
+       DELEGATE entries. """
+    ret = libxml2mod.xmlLoadSGMLSuperCatalog(filename)
+    if ret is None:raise treeError('xmlLoadSGMLSuperCatalog() failed')
+    return catalog(_obj=ret)
+
+def newCatalog(sgml):
+    """create a new Catalog. """
+    ret = libxml2mod.xmlNewCatalog(sgml)
+    if ret is None:raise treeError('xmlNewCatalog() failed')
+    return catalog(_obj=ret)
+
+def parseCatalogFile(filename):
+    """parse an XML file and build a tree. It's like
+       xmlParseFile() except it bypass all catalog lookups. """
+    ret = libxml2mod.xmlParseCatalogFile(filename)
+    if ret is None:raise parserError('xmlParseCatalogFile() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module chvalid
+#
+
+def isBaseChar(ch):
+    """This function is DEPRECATED. Use xmlIsBaseChar_ch or
+       xmlIsBaseCharQ instead """
+    ret = libxml2mod.xmlIsBaseChar(ch)
+    return ret
+
+def isBlank(ch):
+    """This function is DEPRECATED. Use xmlIsBlank_ch or
+       xmlIsBlankQ instead """
+    ret = libxml2mod.xmlIsBlank(ch)
+    return ret
+
+def isChar(ch):
+    """This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ
+       instead """
+    ret = libxml2mod.xmlIsChar(ch)
+    return ret
+
+def isCombining(ch):
+    """This function is DEPRECATED. Use xmlIsCombiningQ instead """
+    ret = libxml2mod.xmlIsCombining(ch)
+    return ret
+
+def isDigit(ch):
+    """This function is DEPRECATED. Use xmlIsDigit_ch or
+       xmlIsDigitQ instead """
+    ret = libxml2mod.xmlIsDigit(ch)
+    return ret
+
+def isExtender(ch):
+    """This function is DEPRECATED. Use xmlIsExtender_ch or
+       xmlIsExtenderQ instead """
+    ret = libxml2mod.xmlIsExtender(ch)
+    return ret
+
+def isIdeographic(ch):
+    """This function is DEPRECATED. Use xmlIsIdeographicQ instead """
+    ret = libxml2mod.xmlIsIdeographic(ch)
+    return ret
+
+def isPubidChar(ch):
+    """This function is DEPRECATED. Use xmlIsPubidChar_ch or
+       xmlIsPubidCharQ instead """
+    ret = libxml2mod.xmlIsPubidChar(ch)
+    return ret
+
+#
+# Functions from module debugXML
+#
+
+def boolToText(boolval):
+    """Convenient way to turn bool into text """
+    ret = libxml2mod.xmlBoolToText(boolval)
+    return ret
+
+def debugDumpString(output, str):
+    """Dumps informations about the string, shorten it if necessary """
+    if output is not None: output.flush()
+    libxml2mod.xmlDebugDumpString(output, str)
+
+def shellPrintXPathError(errorType, arg):
+    """Print the xpath error to libxml default error channel """
+    libxml2mod.xmlShellPrintXPathError(errorType, arg)
+
+#
+# Functions from module dict
+#
+
+def dictCleanup():
+    """Free the dictionary mutex. Do not call unless sure the
+       library is not in use anymore ! """
+    libxml2mod.xmlDictCleanup()
+
+def initializeDict():
+    """Do the dictionary mutex initialization. this function is
+       deprecated """
+    ret = libxml2mod.xmlInitializeDict()
+    return ret
+
+#
+# Functions from module encoding
+#
+
+def addEncodingAlias(name, alias):
+    """Registers an alias @alias for an encoding named @name.
+       Existing alias will be overwritten. """
+    ret = libxml2mod.xmlAddEncodingAlias(name, alias)
+    return ret
+
+def cleanupCharEncodingHandlers():
+    """Cleanup the memory allocated for the char encoding support,
+       it unregisters all the encoding handlers and the aliases. """
+    libxml2mod.xmlCleanupCharEncodingHandlers()
+
+def cleanupEncodingAliases():
+    """Unregisters all aliases """
+    libxml2mod.xmlCleanupEncodingAliases()
+
+def delEncodingAlias(alias):
+    """Unregisters an encoding alias @alias """
+    ret = libxml2mod.xmlDelEncodingAlias(alias)
+    return ret
+
+def encodingAlias(alias):
+    """Lookup an encoding name for the given alias. """
+    ret = libxml2mod.xmlGetEncodingAlias(alias)
+    return ret
+
+def initCharEncodingHandlers():
+    """Initialize the char encoding support, it registers the
+      default encoding supported. NOTE: while public, this
+      function usually doesn't need to be called in normal
+       processing. """
+    libxml2mod.xmlInitCharEncodingHandlers()
+
+#
+# Functions from module entities
+#
+
+def cleanupPredefinedEntities():
+    """Cleanup up the predefined entities table. Deprecated call """
+    libxml2mod.xmlCleanupPredefinedEntities()
+
+def initializePredefinedEntities():
+    """Set up the predefined entities. Deprecated call """
+    libxml2mod.xmlInitializePredefinedEntities()
+
+def predefinedEntity(name):
+    """Check whether this name is an predefined entity. """
+    ret = libxml2mod.xmlGetPredefinedEntity(name)
+    if ret is None:raise treeError('xmlGetPredefinedEntity() failed')
+    return xmlEntity(_obj=ret)
+
+#
+# Functions from module globals
+#
+
+def cleanupGlobals():
+    """Additional cleanup for multi-threading """
+    libxml2mod.xmlCleanupGlobals()
+
+def initGlobals():
+    """Additional initialisation for multi-threading """
+    libxml2mod.xmlInitGlobals()
+
+def thrDefDefaultBufferSize(v):
+    ret = libxml2mod.xmlThrDefDefaultBufferSize(v)
+    return ret
+
+def thrDefDoValidityCheckingDefaultValue(v):
+    ret = libxml2mod.xmlThrDefDoValidityCheckingDefaultValue(v)
+    return ret
+
+def thrDefGetWarningsDefaultValue(v):
+    ret = libxml2mod.xmlThrDefGetWarningsDefaultValue(v)
+    return ret
+
+def thrDefIndentTreeOutput(v):
+    ret = libxml2mod.xmlThrDefIndentTreeOutput(v)
+    return ret
+
+def thrDefKeepBlanksDefaultValue(v):
+    ret = libxml2mod.xmlThrDefKeepBlanksDefaultValue(v)
+    return ret
+
+def thrDefLineNumbersDefaultValue(v):
+    ret = libxml2mod.xmlThrDefLineNumbersDefaultValue(v)
+    return ret
+
+def thrDefLoadExtDtdDefaultValue(v):
+    ret = libxml2mod.xmlThrDefLoadExtDtdDefaultValue(v)
+    return ret
+
+def thrDefParserDebugEntities(v):
+    ret = libxml2mod.xmlThrDefParserDebugEntities(v)
+    return ret
+
+def thrDefPedanticParserDefaultValue(v):
+    ret = libxml2mod.xmlThrDefPedanticParserDefaultValue(v)
+    return ret
+
+def thrDefSaveNoEmptyTags(v):
+    ret = libxml2mod.xmlThrDefSaveNoEmptyTags(v)
+    return ret
+
+def thrDefSubstituteEntitiesDefaultValue(v):
+    ret = libxml2mod.xmlThrDefSubstituteEntitiesDefaultValue(v)
+    return ret
+
+def thrDefTreeIndentString(v):
+    ret = libxml2mod.xmlThrDefTreeIndentString(v)
+    return ret
+
+#
+# Functions from module nanoftp
+#
+
+def nanoFTPCleanup():
+    """Cleanup the FTP protocol layer. This cleanup proxy
+       informations. """
+    libxml2mod.xmlNanoFTPCleanup()
+
+def nanoFTPInit():
+    """Initialize the FTP protocol layer. Currently it just checks
+       for proxy informations, and get the hostname """
+    libxml2mod.xmlNanoFTPInit()
+
+def nanoFTPProxy(host, port, user, passwd, type):
+    """Setup the FTP proxy informations. This can also be done by
+      using ftp_proxy ftp_proxy_user and ftp_proxy_password
+       environment variables. """
+    libxml2mod.xmlNanoFTPProxy(host, port, user, passwd, type)
+
+def nanoFTPScanProxy(URL):
+    """(Re)Initialize the FTP Proxy context by parsing the URL and
+      finding the protocol host port it indicates. Should be like
+      ftp://myproxy/ or ftp://myproxy:3128/ A None URL cleans up
+       proxy informations. """
+    libxml2mod.xmlNanoFTPScanProxy(URL)
+
+#
+# Functions from module nanohttp
+#
+
+def nanoHTTPCleanup():
+    """Cleanup the HTTP protocol layer. """
+    libxml2mod.xmlNanoHTTPCleanup()
+
+def nanoHTTPInit():
+    """Initialize the HTTP protocol layer. Currently it just
+       checks for proxy informations """
+    libxml2mod.xmlNanoHTTPInit()
+
+def nanoHTTPScanProxy(URL):
+    """(Re)Initialize the HTTP Proxy context by parsing the URL
+      and finding the protocol host port it indicates. Should be
+      like http://myproxy/ or http://myproxy:3128/ A None URL
+       cleans up proxy informations. """
+    libxml2mod.xmlNanoHTTPScanProxy(URL)
+
+#
+# Functions from module parser
+#
+
+def createDocParserCtxt(cur):
+    """Creates a parser context for an XML in-memory document. """
+    ret = libxml2mod.xmlCreateDocParserCtxt(cur)
+    if ret is None:raise parserError('xmlCreateDocParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def initParser():
+    """Initialization function for the XML parser. This is not
+      reentrant. Call once before processing in case of use in
+       multithreaded programs. """
+    libxml2mod.xmlInitParser()
+
+def keepBlanksDefault(val):
+    """Set and return the previous value for default blanks text
+      nodes support. The 1.x version of the parser used an
+      heuristic to try to detect ignorable white spaces. As a
+      result the SAX callback was generating
+      xmlSAX2IgnorableWhitespace() callbacks instead of
+      characters() one, and when using the DOM output text nodes
+      containing those blanks were not generated. The 2.x and
+      later version will switch to the XML standard way and
+      ignorableWhitespace() are only generated when running the
+      parser in validating mode and when the current element
+      doesn't allow CDATA or mixed content. This function is
+      provided as a way to force the standard behavior on 1.X
+      libs and to switch back to the old mode for compatibility
+      when running 1.X client code on 2.X . Upgrade of 1.X code
+      should be done by using xmlIsBlankNode() commodity function
+      to detect the "empty" nodes generated. This value also
+      affect autogeneration of indentation when saving code if
+       blanks sections are kept, indentation is not generated. """
+    ret = libxml2mod.xmlKeepBlanksDefault(val)
+    return ret
+
+def lineNumbersDefault(val):
+    """Set and return the previous value for enabling line numbers
+      in elements contents. This may break on old application and
+       is turned off by default. """
+    ret = libxml2mod.xmlLineNumbersDefault(val)
+    return ret
+
+def newParserCtxt():
+    """Allocate and initialize a new parser context. """
+    ret = libxml2mod.xmlNewParserCtxt()
+    if ret is None:raise parserError('xmlNewParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def parseDTD(ExternalID, SystemID):
+    """Load and parse an external subset. """
+    ret = libxml2mod.xmlParseDTD(ExternalID, SystemID)
+    if ret is None:raise parserError('xmlParseDTD() failed')
+    return xmlDtd(_obj=ret)
+
+def parseDoc(cur):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlParseDoc(cur)
+    if ret is None:raise parserError('xmlParseDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def parseEntity(filename):
+    """parse an XML external entity out of context and build a
+      tree.  [78] extParsedEnt ::= TextDecl? content  This
+       correspond to a "Well Balanced" chunk """
+    ret = libxml2mod.xmlParseEntity(filename)
+    if ret is None:raise parserError('xmlParseEntity() failed')
+    return xmlDoc(_obj=ret)
+
+def parseFile(filename):
+    """parse an XML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+       found at compile-time. """
+    ret = libxml2mod.xmlParseFile(filename)
+    if ret is None:raise parserError('xmlParseFile() failed')
+    return xmlDoc(_obj=ret)
+
+def parseMemory(buffer, size):
+    """parse an XML in-memory block and build a tree. """
+    ret = libxml2mod.xmlParseMemory(buffer, size)
+    if ret is None:raise parserError('xmlParseMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def pedanticParserDefault(val):
+    """Set and return the previous value for enabling pedantic
+       warnings. """
+    ret = libxml2mod.xmlPedanticParserDefault(val)
+    return ret
+
+def readDoc(cur, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlReadDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def readFd(fd, URL, encoding, options):
+    """parse an XML from a file descriptor and build a tree. NOTE
+      that the file descriptor will not be closed when the reader
+       is closed or reset. """
+    ret = libxml2mod.xmlReadFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadFd() failed')
+    return xmlDoc(_obj=ret)
+
+def readFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. """
+    ret = libxml2mod.xmlReadFile(filename, encoding, options)
+    if ret is None:raise treeError('xmlReadFile() failed')
+    return xmlDoc(_obj=ret)
+
+def readMemory(buffer, size, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlReadMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverDoc(cur):
+    """parse an XML in-memory document and build a tree. In the
+      case the document is not Well Formed, a attempt to build a
+       tree is tried anyway """
+    ret = libxml2mod.xmlRecoverDoc(cur)
+    if ret is None:raise treeError('xmlRecoverDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverFile(filename):
+    """parse an XML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+      found at compile-time. In the case the document is not Well
+       Formed, it attempts to build a tree anyway """
+    ret = libxml2mod.xmlRecoverFile(filename)
+    if ret is None:raise treeError('xmlRecoverFile() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverMemory(buffer, size):
+    """parse an XML in-memory block and build a tree. In the case
+      the document is not Well Formed, an attempt to build a tree
+       is tried anyway """
+    ret = libxml2mod.xmlRecoverMemory(buffer, size)
+    if ret is None:raise treeError('xmlRecoverMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def substituteEntitiesDefault(val):
+    """Set and return the previous value for default entity
+      support. Initially the parser always keep entity references
+      instead of substituting entity values in the output. This
+      function has to be used to change the default parser
+      behavior SAX::substituteEntities() has to be used for
+       changing that on a file by file basis. """
+    ret = libxml2mod.xmlSubstituteEntitiesDefault(val)
+    return ret
+
+#
+# Functions from module parserInternals
+#
+
+def checkLanguageID(lang):
+    """Checks that the value conforms to the LanguageID
+      production:  NOTE: this is somewhat deprecated, those
+      productions were removed from the XML Second edition.  [33]
+      LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::=
+      ISO639Code |  IanaCode |  UserCode [35] ISO639Code ::=
+      ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' |
+      'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-'
+      ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+  The
+      current REC reference the sucessors of RFC 1766, currently
+      5646  http://www.rfc-editor.org/rfc/rfc5646.txt langtag    
+      = language ["-" script] ["-" region] *("-" variant) *("-"
+      extension) ["-" privateuse] language      = 2*3ALPHA       
+      ; shortest ISO 639 code ["-" extlang]       ; sometimes
+      followed by ; extended language subtags / 4ALPHA           
+      ; or reserved for future use / 5*8ALPHA            ; or
+      registered language subtag  extlang       = 3ALPHA         
+      ; selected ISO 639 codes *2("-" 3ALPHA)      ; permanently
+      reserved  script        = 4ALPHA              ; ISO 15924
+      code  region        = 2ALPHA              ; ISO 3166-1 code
+      / 3DIGIT              ; UN M.49 code  variant       =
+      5*8alphanum         ; registered variants / (DIGIT
+      3alphanum)  extension     = singleton 1*("-" (2*8alphanum))
+      ; Single alphanumerics ; "x" reserved for private use
+      singleton     = DIGIT               ; 0 - 9 / %x41-57      
+      ; A - W / %x59-5A             ; Y - Z / %x61-77            
+      ; a - w / %x79-7A             ; y - z  it sounds right to
+      still allow Irregular i-xxx IANA and user codes too The
+      parser below doesn't try to cope with extension or
+      privateuse that could be added but that's not interoperable
+       anyway """
+    ret = libxml2mod.xmlCheckLanguageID(lang)
+    return ret
+
+def copyChar(len, out, val):
+    """append the char value in the array """
+    ret = libxml2mod.xmlCopyChar(len, out, val)
+    return ret
+
+def copyCharMultiByte(out, val):
+    """append the char value in the array """
+    ret = libxml2mod.xmlCopyCharMultiByte(out, val)
+    return ret
+
+def createEntityParserCtxt(URL, ID, base):
+    """Create a parser context for an external entity Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.xmlCreateEntityParserCtxt(URL, ID, base)
+    if ret is None:raise parserError('xmlCreateEntityParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createFileParserCtxt(filename):
+    """Create a parser context for a file content. Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.xmlCreateFileParserCtxt(filename)
+    if ret is None:raise parserError('xmlCreateFileParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createMemoryParserCtxt(buffer, size):
+    """Create a parser context for an XML in-memory document. """
+    ret = libxml2mod.xmlCreateMemoryParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlCreateMemoryParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createURLParserCtxt(filename, options):
+    """Create a parser context for a file or URL content.
+      Automatic support for ZLIB/Compress compressed document is
+      provided by default if found at compile-time and for file
+       accesses """
+    ret = libxml2mod.xmlCreateURLParserCtxt(filename, options)
+    if ret is None:raise parserError('xmlCreateURLParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlCreateFileParserCtxt(filename, encoding):
+    """Create a parser context for a file content. Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.htmlCreateFileParserCtxt(filename, encoding)
+    if ret is None:raise parserError('htmlCreateFileParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlInitAutoClose():
+    """Initialize the htmlStartCloseIndex for fast lookup of
+      closing tags names. This is not reentrant. Call
+      xmlInitParser() once before processing in case of use in
+       multithreaded programs. """
+    libxml2mod.htmlInitAutoClose()
+
+def isLetter(c):
+    """Check whether the character is allowed by the production
+       [84] Letter ::= BaseChar | Ideographic """
+    ret = libxml2mod.xmlIsLetter(c)
+    return ret
+
+def namePop(ctxt):
+    """Pops the top element name from the name stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.namePop(ctxt__o)
+    return ret
+
+def namePush(ctxt, value):
+    """Pushes a new element name on top of the name stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.namePush(ctxt__o, value)
+    return ret
+
+def nodePop(ctxt):
+    """Pops the top element node from the node stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.nodePop(ctxt__o)
+    if ret is None:raise treeError('nodePop() failed')
+    return xmlNode(_obj=ret)
+
+def nodePush(ctxt, value):
+    """Pushes a new element node on top of the node stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    if value is None: value__o = None
+    else: value__o = value._o
+    ret = libxml2mod.nodePush(ctxt__o, value__o)
+    return ret
+
+#
+# Functions from module python
+#
+
+def SAXParseFile(SAX, URI, recover):
+    """Interface to parse an XML file or resource pointed by an
+       URI to build an event flow to the SAX object """
+    libxml2mod.xmlSAXParseFile(SAX, URI, recover)
+
+def createInputBuffer(file, encoding):
+    """Create a libxml2 input buffer from a Python file """
+    ret = libxml2mod.xmlCreateInputBuffer(file, encoding)
+    if ret is None:raise treeError('xmlCreateInputBuffer() failed')
+    return inputBuffer(_obj=ret)
+
+def createOutputBuffer(file, encoding):
+    """Create a libxml2 output buffer from a Python file """
+    ret = libxml2mod.xmlCreateOutputBuffer(file, encoding)
+    if ret is None:raise treeError('xmlCreateOutputBuffer() failed')
+    return outputBuffer(_obj=ret)
+
+def createPushParser(SAX, chunk, size, URI):
+    """Create a progressive XML parser context to build either an
+      event flow if the SAX object is not None, or a DOM tree
+       otherwise. """
+    ret = libxml2mod.xmlCreatePushParser(SAX, chunk, size, URI)
+    if ret is None:raise parserError('xmlCreatePushParser() failed')
+    return parserCtxt(_obj=ret)
+
+def debugMemory(activate):
+    """Switch on the generation of line number for elements nodes.
+      Also returns the number of bytes allocated and not freed by
+       libxml2 since memory debugging was switched on. """
+    ret = libxml2mod.xmlDebugMemory(activate)
+    return ret
+
+def dumpMemory():
+    """dump the memory allocated in the file .memdump """
+    libxml2mod.xmlDumpMemory()
+
+def htmlCreatePushParser(SAX, chunk, size, URI):
+    """Create a progressive HTML parser context to build either an
+      event flow if the SAX object is not None, or a DOM tree
+       otherwise. """
+    ret = libxml2mod.htmlCreatePushParser(SAX, chunk, size, URI)
+    if ret is None:raise parserError('htmlCreatePushParser() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlSAXParseFile(SAX, URI, encoding):
+    """Interface to parse an HTML file or resource pointed by an
+       URI to build an event flow to the SAX object """
+    libxml2mod.htmlSAXParseFile(SAX, URI, encoding)
+
+def memoryUsed():
+    """Returns the total amount of memory allocated by libxml2 """
+    ret = libxml2mod.xmlMemoryUsed()
+    return ret
+
+def newNode(name):
+    """Create a new Node """
+    ret = libxml2mod.xmlNewNode(name)
+    if ret is None:raise treeError('xmlNewNode() failed')
+    return xmlNode(_obj=ret)
+
+def pythonCleanupParser():
+    """Cleanup function for the XML library. It tries to reclaim
+      all parsing related global memory allocated for the library
+      processing. It doesn't deallocate any document related
+      memory. Calling this function should not prevent reusing
+      the library but one should call xmlCleanupParser() only
+      when the process has finished using the library or XML
+       document built with it. """
+    libxml2mod.xmlPythonCleanupParser()
+
+def setEntityLoader(resolver):
+    """Set the entity resolver as a python function """
+    ret = libxml2mod.xmlSetEntityLoader(resolver)
+    return ret
+
+#
+# Functions from module relaxng
+#
+
+def relaxNGCleanupTypes():
+    """Cleanup the default Schemas type library associated to
+       RelaxNG """
+    libxml2mod.xmlRelaxNGCleanupTypes()
+
+def relaxNGInitTypes():
+    """Initilize the default type libraries. """
+    ret = libxml2mod.xmlRelaxNGInitTypes()
+    return ret
+
+def relaxNGNewMemParserCtxt(buffer, size):
+    """Create an XML RelaxNGs parse context for that memory buffer
+       expected to contain an XML RelaxNGs file. """
+    ret = libxml2mod.xmlRelaxNGNewMemParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlRelaxNGNewMemParserCtxt() failed')
+    return relaxNgParserCtxt(_obj=ret)
+
+def relaxNGNewParserCtxt(URL):
+    """Create an XML RelaxNGs parse context for that file/resource
+       expected to contain an XML RelaxNGs file. """
+    ret = libxml2mod.xmlRelaxNGNewParserCtxt(URL)
+    if ret is None:raise parserError('xmlRelaxNGNewParserCtxt() failed')
+    return relaxNgParserCtxt(_obj=ret)
+
+#
+# Functions from module tree
+#
+
+def buildQName(ncname, prefix, memory, len):
+    """Builds the QName @prefix:@ncname in @memory if there is
+      enough space and prefix is not None nor empty, otherwise
+      allocate a new string. If prefix is None or empty it
+       returns ncname. """
+    ret = libxml2mod.xmlBuildQName(ncname, prefix, memory, len)
+    return ret
+
+def compressMode():
+    """get the default compression mode used, ZLIB based. """
+    ret = libxml2mod.xmlGetCompressMode()
+    return ret
+
+def isXHTML(systemID, publicID):
+    """Try to find if the document correspond to an XHTML DTD """
+    ret = libxml2mod.xmlIsXHTML(systemID, publicID)
+    return ret
+
+def newComment(content):
+    """Creation of a new node containing a comment. """
+    ret = libxml2mod.xmlNewComment(content)
+    if ret is None:raise treeError('xmlNewComment() failed')
+    return xmlNode(_obj=ret)
+
+def newDoc(version):
+    """Creates a new XML document """
+    ret = libxml2mod.xmlNewDoc(version)
+    if ret is None:raise treeError('xmlNewDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def newPI(name, content):
+    """Creation of a processing instruction element. Use
+       xmlDocNewPI preferably to get string interning """
+    ret = libxml2mod.xmlNewPI(name, content)
+    if ret is None:raise treeError('xmlNewPI() failed')
+    return xmlNode(_obj=ret)
+
+def newText(content):
+    """Creation of a new text node. """
+    ret = libxml2mod.xmlNewText(content)
+    if ret is None:raise treeError('xmlNewText() failed')
+    return xmlNode(_obj=ret)
+
+def newTextLen(content, len):
+    """Creation of a new text node with an extra parameter for the
+       content's length """
+    ret = libxml2mod.xmlNewTextLen(content, len)
+    if ret is None:raise treeError('xmlNewTextLen() failed')
+    return xmlNode(_obj=ret)
+
+def setCompressMode(mode):
+    """set the default compression mode used, ZLIB based Correct
+       values: 0 (uncompressed) to 9 (max compression) """
+    libxml2mod.xmlSetCompressMode(mode)
+
+def validateNCName(value, space):
+    """Check that a value conforms to the lexical space of NCName """
+    ret = libxml2mod.xmlValidateNCName(value, space)
+    return ret
+
+def validateNMToken(value, space):
+    """Check that a value conforms to the lexical space of NMToken """
+    ret = libxml2mod.xmlValidateNMToken(value, space)
+    return ret
+
+def validateName(value, space):
+    """Check that a value conforms to the lexical space of Name """
+    ret = libxml2mod.xmlValidateName(value, space)
+    return ret
+
+def validateQName(value, space):
+    """Check that a value conforms to the lexical space of QName """
+    ret = libxml2mod.xmlValidateQName(value, space)
+    return ret
+
+#
+# Functions from module uri
+#
+
+def URIEscape(str):
+    """Escaping routine, does not do validity checks ! It will try
+      to escape the chars needing this, but this is heuristic
+       based it's impossible to be sure. """
+    ret = libxml2mod.xmlURIEscape(str)
+    return ret
+
+def URIEscapeStr(str, list):
+    """This routine escapes a string to hex, ignoring reserved
+       characters (a-z) and the characters in the exception list. """
+    ret = libxml2mod.xmlURIEscapeStr(str, list)
+    return ret
+
+def URIUnescapeString(str, len, target):
+    """Unescaping routine, but does not check that the string is
+      an URI. The output is a direct unsigned char translation of
+      %XX values (no encoding) Note that the length of the result
+       can only be smaller or same size as the input string. """
+    ret = libxml2mod.xmlURIUnescapeString(str, len, target)
+    return ret
+
+def buildRelativeURI(URI, base):
+    """Expresses the URI of the reference in terms relative to the
+      base.  Some examples of this operation include: base =
+      "http://site1.com/docs/book1.html" URI input               
+      URI returned docs/pic1.gif                    pic1.gif
+      docs/img/pic1.gif                img/pic1.gif img/pic1.gif 
+      ../img/pic1.gif http://site1.com/docs/pic1.gif   pic1.gif
+      http://site2.com/docs/pic1.gif  
+      http://site2.com/docs/pic1.gif  base = "docs/book1.html"
+      URI input                        URI returned docs/pic1.gif
+      pic1.gif docs/img/pic1.gif                img/pic1.gif
+      img/pic1.gif                     ../img/pic1.gif
+      http://site1.com/docs/pic1.gif  
+      http://site1.com/docs/pic1.gif   Note: if the URI reference
+      is really wierd or complicated, it may be worthwhile to
+      first convert it into a "nice" one by calling xmlBuildURI
+      (using 'base') before calling this routine, since this
+      routine (for reasonable efficiency) assumes URI has already
+       been through some validation. """
+    ret = libxml2mod.xmlBuildRelativeURI(URI, base)
+    return ret
+
+def buildURI(URI, base):
+    """Computes he final URI of the reference done by checking
+      that the given URI is valid, and building the final URI
+      using the base URI. This is processed according to section
+      5.2 of the RFC 2396  5.2. Resolving Relative References to
+       Absolute Form """
+    ret = libxml2mod.xmlBuildURI(URI, base)
+    return ret
+
+def canonicPath(path):
+    """Constructs a canonic path from the specified path. """
+    ret = libxml2mod.xmlCanonicPath(path)
+    return ret
+
+def createURI():
+    """Simply creates an empty xmlURI """
+    ret = libxml2mod.xmlCreateURI()
+    if ret is None:raise uriError('xmlCreateURI() failed')
+    return URI(_obj=ret)
+
+def normalizeURIPath(path):
+    """Applies the 5 normalization steps to a path string--that
+      is, RFC 2396 Section 5.2, steps 6.c through 6.g. 
+      Normalization occurs directly on the string, no new
+       allocation is done """
+    ret = libxml2mod.xmlNormalizeURIPath(path)
+    return ret
+
+def parseURI(str):
+    """Parse an URI based on RFC 3986  URI-reference = [
+       absoluteURI | relativeURI ] [ "#" fragment ] """
+    ret = libxml2mod.xmlParseURI(str)
+    if ret is None:raise uriError('xmlParseURI() failed')
+    return URI(_obj=ret)
+
+def parseURIRaw(str, raw):
+    """Parse an URI but allows to keep intact the original
+       fragments.  URI-reference = URI / relative-ref """
+    ret = libxml2mod.xmlParseURIRaw(str, raw)
+    if ret is None:raise uriError('xmlParseURIRaw() failed')
+    return URI(_obj=ret)
+
+def pathToURI(path):
+    """Constructs an URI expressing the existing path """
+    ret = libxml2mod.xmlPathToURI(path)
+    return ret
+
+#
+# Functions from module valid
+#
+
+def newValidCtxt():
+    """Allocate a validation context structure. """
+    ret = libxml2mod.xmlNewValidCtxt()
+    if ret is None:raise treeError('xmlNewValidCtxt() failed')
+    return ValidCtxt(_obj=ret)
+
+def validateNameValue(value):
+    """Validate that the given value match Name production """
+    ret = libxml2mod.xmlValidateNameValue(value)
+    return ret
+
+def validateNamesValue(value):
+    """Validate that the given value match Names production """
+    ret = libxml2mod.xmlValidateNamesValue(value)
+    return ret
+
+def validateNmtokenValue(value):
+    """Validate that the given value match Nmtoken production  [
+       VC: Name Token ] """
+    ret = libxml2mod.xmlValidateNmtokenValue(value)
+    return ret
+
+def validateNmtokensValue(value):
+    """Validate that the given value match Nmtokens production  [
+       VC: Name Token ] """
+    ret = libxml2mod.xmlValidateNmtokensValue(value)
+    return ret
+
+#
+# Functions from module xmlIO
+#
+
+def checkFilename(path):
+    """function checks to see if @path is a valid source (file,
+      socket...) for XML.  if stat is not available on the target
+       machine, """
+    ret = libxml2mod.xmlCheckFilename(path)
+    return ret
+
+def cleanupInputCallbacks():
+    """clears the entire input callback table. this includes the
+       compiled-in I/O. """
+    libxml2mod.xmlCleanupInputCallbacks()
+
+def cleanupOutputCallbacks():
+    """clears the entire output callback table. this includes the
+       compiled-in I/O callbacks. """
+    libxml2mod.xmlCleanupOutputCallbacks()
+
+def fileMatch(filename):
+    """input from FILE * """
+    ret = libxml2mod.xmlFileMatch(filename)
+    return ret
+
+def iOFTPMatch(filename):
+    """check if the URI matches an FTP one """
+    ret = libxml2mod.xmlIOFTPMatch(filename)
+    return ret
+
+def iOHTTPMatch(filename):
+    """check if the URI matches an HTTP one """
+    ret = libxml2mod.xmlIOHTTPMatch(filename)
+    return ret
+
+def normalizeWindowsPath(path):
+    """This function is obsolete. Please see xmlURIFromPath in
+       uri.c for a better solution. """
+    ret = libxml2mod.xmlNormalizeWindowsPath(path)
+    return ret
+
+def parserGetDirectory(filename):
+    """lookup the directory for that file """
+    ret = libxml2mod.xmlParserGetDirectory(filename)
+    return ret
+
+def registerDefaultInputCallbacks():
+    """Registers the default compiled-in I/O handlers. """
+    libxml2mod.xmlRegisterDefaultInputCallbacks()
+
+def registerDefaultOutputCallbacks():
+    """Registers the default compiled-in I/O handlers. """
+    libxml2mod.xmlRegisterDefaultOutputCallbacks()
+
+def registerHTTPPostCallbacks():
+    """By default, libxml submits HTTP output requests using the
+      "PUT" method. Calling this method changes the HTTP output
+       method to use the "POST" method instead. """
+    libxml2mod.xmlRegisterHTTPPostCallbacks()
+
+#
+# Functions from module xmlerror
+#
+
+def lastError():
+    """Get the last global error registered. This is per thread if
+       compiled with thread support. """
+    ret = libxml2mod.xmlGetLastError()
+    if ret is None:raise treeError('xmlGetLastError() failed')
+    return Error(_obj=ret)
+
+def resetLastError():
+    """Cleanup the last global error registered. For parsing error
+       this does not change the well-formedness result. """
+    libxml2mod.xmlResetLastError()
+
+#
+# Functions from module xmlreader
+#
+
+def newTextReaderFilename(URI):
+    """Create an xmlTextReader structure fed with the resource at
+       @URI """
+    ret = libxml2mod.xmlNewTextReaderFilename(URI)
+    if ret is None:raise treeError('xmlNewTextReaderFilename() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForDoc(cur, URL, encoding, options):
+    """Create an xmltextReader for an XML in-memory document. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForDoc() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForFd(fd, URL, encoding, options):
+    """Create an xmltextReader for an XML from a file descriptor.
+      The parsing flags @options are a combination of
+      xmlParserOption. NOTE that the file descriptor will not be
+       closed when the reader is closed or reset. """
+    ret = libxml2mod.xmlReaderForFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForFd() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForFile(filename, encoding, options)
+    if ret is None:raise treeError('xmlReaderForFile() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForMemory(buffer, size, URL, encoding, options):
+    """Create an xmltextReader for an XML in-memory document. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForMemory() failed')
+    return xmlTextReader(_obj=ret)
+
+#
+# Functions from module xmlregexp
+#
+
+def regexpCompile(regexp):
+    """Parses a regular expression conforming to XML Schemas Part
+      2 Datatype Appendix F and builds an automata suitable for
+       testing strings against that regular expression """
+    ret = libxml2mod.xmlRegexpCompile(regexp)
+    if ret is None:raise treeError('xmlRegexpCompile() failed')
+    return xmlReg(_obj=ret)
+
+#
+# Functions from module xmlschemas
+#
+
+def schemaNewMemParserCtxt(buffer, size):
+    """Create an XML Schemas parse context for that memory buffer
+       expected to contain an XML Schemas file. """
+    ret = libxml2mod.xmlSchemaNewMemParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlSchemaNewMemParserCtxt() failed')
+    return SchemaParserCtxt(_obj=ret)
+
+def schemaNewParserCtxt(URL):
+    """Create an XML Schemas parse context for that file/resource
+       expected to contain an XML Schemas file. """
+    ret = libxml2mod.xmlSchemaNewParserCtxt(URL)
+    if ret is None:raise parserError('xmlSchemaNewParserCtxt() failed')
+    return SchemaParserCtxt(_obj=ret)
+
+#
+# Functions from module xmlschemastypes
+#
+
+def schemaCleanupTypes():
+    """Cleanup the default XML Schemas type library """
+    libxml2mod.xmlSchemaCleanupTypes()
+
+def schemaCollapseString(value):
+    """Removes and normalize white spaces in the string """
+    ret = libxml2mod.xmlSchemaCollapseString(value)
+    return ret
+
+def schemaInitTypes():
+    """Initialize the default XML Schemas type library """
+    libxml2mod.xmlSchemaInitTypes()
+
+def schemaWhiteSpaceReplace(value):
+    """Replaces 0xd, 0x9 and 0xa with a space. """
+    ret = libxml2mod.xmlSchemaWhiteSpaceReplace(value)
+    return ret
+
+#
+# Functions from module xmlstring
+#
+
+def UTF8Charcmp(utf1, utf2):
+    """compares the two UCS4 values """
+    ret = libxml2mod.xmlUTF8Charcmp(utf1, utf2)
+    return ret
+
+def UTF8Size(utf):
+    """calculates the internal size of a UTF8 character """
+    ret = libxml2mod.xmlUTF8Size(utf)
+    return ret
+
+def UTF8Strlen(utf):
+    """compute the length of an UTF8 string, it doesn't do a full
+       UTF8 checking of the content of the string. """
+    ret = libxml2mod.xmlUTF8Strlen(utf)
+    return ret
+
+def UTF8Strloc(utf, utfchar):
+    """a function to provide the relative location of a UTF8 char """
+    ret = libxml2mod.xmlUTF8Strloc(utf, utfchar)
+    return ret
+
+def UTF8Strndup(utf, len):
+    """a strndup for array of UTF8's """
+    ret = libxml2mod.xmlUTF8Strndup(utf, len)
+    return ret
+
+def UTF8Strpos(utf, pos):
+    """a function to provide the equivalent of fetching a
+       character from a string array """
+    ret = libxml2mod.xmlUTF8Strpos(utf, pos)
+    return ret
+
+def UTF8Strsize(utf, len):
+    """storage size of an UTF8 string the behaviour is not
+       garanteed if the input string is not UTF-8 """
+    ret = libxml2mod.xmlUTF8Strsize(utf, len)
+    return ret
+
+def UTF8Strsub(utf, start, len):
+    """Create a substring from a given UTF-8 string Note: 
+       positions are given in units of UTF-8 chars """
+    ret = libxml2mod.xmlUTF8Strsub(utf, start, len)
+    return ret
+
+def checkUTF8(utf):
+    """Checks @utf for being valid UTF-8. @utf is assumed to be
+      null-terminated. This function is not super-strict, as it
+      will allow longer UTF-8 sequences than necessary. Note that
+      Java is capable of producing these sequences if provoked.
+      Also note, this routine checks for the 4-byte maximum size,
+       but does not check for 0x10ffff maximum value. """
+    ret = libxml2mod.xmlCheckUTF8(utf)
+    return ret
+
+#
+# Functions from module xmlunicode
+#
+
+def uCSIsAegeanNumbers(code):
+    """Check whether the character is part of AegeanNumbers UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsAegeanNumbers(code)
+    return ret
+
+def uCSIsAlphabeticPresentationForms(code):
+    """Check whether the character is part of
+       AlphabeticPresentationForms UCS Block """
+    ret = libxml2mod.xmlUCSIsAlphabeticPresentationForms(code)
+    return ret
+
+def uCSIsArabic(code):
+    """Check whether the character is part of Arabic UCS Block """
+    ret = libxml2mod.xmlUCSIsArabic(code)
+    return ret
+
+def uCSIsArabicPresentationFormsA(code):
+    """Check whether the character is part of
+       ArabicPresentationForms-A UCS Block """
+    ret = libxml2mod.xmlUCSIsArabicPresentationFormsA(code)
+    return ret
+
+def uCSIsArabicPresentationFormsB(code):
+    """Check whether the character is part of
+       ArabicPresentationForms-B UCS Block """
+    ret = libxml2mod.xmlUCSIsArabicPresentationFormsB(code)
+    return ret
+
+def uCSIsArmenian(code):
+    """Check whether the character is part of Armenian UCS Block """
+    ret = libxml2mod.xmlUCSIsArmenian(code)
+    return ret
+
+def uCSIsArrows(code):
+    """Check whether the character is part of Arrows UCS Block """
+    ret = libxml2mod.xmlUCSIsArrows(code)
+    return ret
+
+def uCSIsBasicLatin(code):
+    """Check whether the character is part of BasicLatin UCS Block """
+    ret = libxml2mod.xmlUCSIsBasicLatin(code)
+    return ret
+
+def uCSIsBengali(code):
+    """Check whether the character is part of Bengali UCS Block """
+    ret = libxml2mod.xmlUCSIsBengali(code)
+    return ret
+
+def uCSIsBlock(code, block):
+    """Check whether the character is part of the UCS Block """
+    ret = libxml2mod.xmlUCSIsBlock(code, block)
+    return ret
+
+def uCSIsBlockElements(code):
+    """Check whether the character is part of BlockElements UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBlockElements(code)
+    return ret
+
+def uCSIsBopomofo(code):
+    """Check whether the character is part of Bopomofo UCS Block """
+    ret = libxml2mod.xmlUCSIsBopomofo(code)
+    return ret
+
+def uCSIsBopomofoExtended(code):
+    """Check whether the character is part of BopomofoExtended UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBopomofoExtended(code)
+    return ret
+
+def uCSIsBoxDrawing(code):
+    """Check whether the character is part of BoxDrawing UCS Block """
+    ret = libxml2mod.xmlUCSIsBoxDrawing(code)
+    return ret
+
+def uCSIsBraillePatterns(code):
+    """Check whether the character is part of BraillePatterns UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBraillePatterns(code)
+    return ret
+
+def uCSIsBuhid(code):
+    """Check whether the character is part of Buhid UCS Block """
+    ret = libxml2mod.xmlUCSIsBuhid(code)
+    return ret
+
+def uCSIsByzantineMusicalSymbols(code):
+    """Check whether the character is part of
+       ByzantineMusicalSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsByzantineMusicalSymbols(code)
+    return ret
+
+def uCSIsCJKCompatibility(code):
+    """Check whether the character is part of CJKCompatibility UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibility(code)
+    return ret
+
+def uCSIsCJKCompatibilityForms(code):
+    """Check whether the character is part of
+       CJKCompatibilityForms UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityForms(code)
+    return ret
+
+def uCSIsCJKCompatibilityIdeographs(code):
+    """Check whether the character is part of
+       CJKCompatibilityIdeographs UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityIdeographs(code)
+    return ret
+
+def uCSIsCJKCompatibilityIdeographsSupplement(code):
+    """Check whether the character is part of
+       CJKCompatibilityIdeographsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityIdeographsSupplement(code)
+    return ret
+
+def uCSIsCJKRadicalsSupplement(code):
+    """Check whether the character is part of
+       CJKRadicalsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKRadicalsSupplement(code)
+    return ret
+
+def uCSIsCJKSymbolsandPunctuation(code):
+    """Check whether the character is part of
+       CJKSymbolsandPunctuation UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKSymbolsandPunctuation(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographs(code):
+    """Check whether the character is part of CJKUnifiedIdeographs
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographs(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographsExtensionA(code):
+    """Check whether the character is part of
+       CJKUnifiedIdeographsExtensionA UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographsExtensionA(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographsExtensionB(code):
+    """Check whether the character is part of
+       CJKUnifiedIdeographsExtensionB UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographsExtensionB(code)
+    return ret
+
+def uCSIsCat(code, cat):
+    """Check whether the character is part of the UCS Category """
+    ret = libxml2mod.xmlUCSIsCat(code, cat)
+    return ret
+
+def uCSIsCatC(code):
+    """Check whether the character is part of C UCS Category """
+    ret = libxml2mod.xmlUCSIsCatC(code)
+    return ret
+
+def uCSIsCatCc(code):
+    """Check whether the character is part of Cc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCc(code)
+    return ret
+
+def uCSIsCatCf(code):
+    """Check whether the character is part of Cf UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCf(code)
+    return ret
+
+def uCSIsCatCo(code):
+    """Check whether the character is part of Co UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCo(code)
+    return ret
+
+def uCSIsCatCs(code):
+    """Check whether the character is part of Cs UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCs(code)
+    return ret
+
+def uCSIsCatL(code):
+    """Check whether the character is part of L UCS Category """
+    ret = libxml2mod.xmlUCSIsCatL(code)
+    return ret
+
+def uCSIsCatLl(code):
+    """Check whether the character is part of Ll UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLl(code)
+    return ret
+
+def uCSIsCatLm(code):
+    """Check whether the character is part of Lm UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLm(code)
+    return ret
+
+def uCSIsCatLo(code):
+    """Check whether the character is part of Lo UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLo(code)
+    return ret
+
+def uCSIsCatLt(code):
+    """Check whether the character is part of Lt UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLt(code)
+    return ret
+
+def uCSIsCatLu(code):
+    """Check whether the character is part of Lu UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLu(code)
+    return ret
+
+def uCSIsCatM(code):
+    """Check whether the character is part of M UCS Category """
+    ret = libxml2mod.xmlUCSIsCatM(code)
+    return ret
+
+def uCSIsCatMc(code):
+    """Check whether the character is part of Mc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMc(code)
+    return ret
+
+def uCSIsCatMe(code):
+    """Check whether the character is part of Me UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMe(code)
+    return ret
+
+def uCSIsCatMn(code):
+    """Check whether the character is part of Mn UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMn(code)
+    return ret
+
+def uCSIsCatN(code):
+    """Check whether the character is part of N UCS Category """
+    ret = libxml2mod.xmlUCSIsCatN(code)
+    return ret
+
+def uCSIsCatNd(code):
+    """Check whether the character is part of Nd UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNd(code)
+    return ret
+
+def uCSIsCatNl(code):
+    """Check whether the character is part of Nl UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNl(code)
+    return ret
+
+def uCSIsCatNo(code):
+    """Check whether the character is part of No UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNo(code)
+    return ret
+
+def uCSIsCatP(code):
+    """Check whether the character is part of P UCS Category """
+    ret = libxml2mod.xmlUCSIsCatP(code)
+    return ret
+
+def uCSIsCatPc(code):
+    """Check whether the character is part of Pc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPc(code)
+    return ret
+
+def uCSIsCatPd(code):
+    """Check whether the character is part of Pd UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPd(code)
+    return ret
+
+def uCSIsCatPe(code):
+    """Check whether the character is part of Pe UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPe(code)
+    return ret
+
+def uCSIsCatPf(code):
+    """Check whether the character is part of Pf UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPf(code)
+    return ret
+
+def uCSIsCatPi(code):
+    """Check whether the character is part of Pi UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPi(code)
+    return ret
+
+def uCSIsCatPo(code):
+    """Check whether the character is part of Po UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPo(code)
+    return ret
+
+def uCSIsCatPs(code):
+    """Check whether the character is part of Ps UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPs(code)
+    return ret
+
+def uCSIsCatS(code):
+    """Check whether the character is part of S UCS Category """
+    ret = libxml2mod.xmlUCSIsCatS(code)
+    return ret
+
+def uCSIsCatSc(code):
+    """Check whether the character is part of Sc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSc(code)
+    return ret
+
+def uCSIsCatSk(code):
+    """Check whether the character is part of Sk UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSk(code)
+    return ret
+
+def uCSIsCatSm(code):
+    """Check whether the character is part of Sm UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSm(code)
+    return ret
+
+def uCSIsCatSo(code):
+    """Check whether the character is part of So UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSo(code)
+    return ret
+
+def uCSIsCatZ(code):
+    """Check whether the character is part of Z UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZ(code)
+    return ret
+
+def uCSIsCatZl(code):
+    """Check whether the character is part of Zl UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZl(code)
+    return ret
+
+def uCSIsCatZp(code):
+    """Check whether the character is part of Zp UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZp(code)
+    return ret
+
+def uCSIsCatZs(code):
+    """Check whether the character is part of Zs UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZs(code)
+    return ret
+
+def uCSIsCherokee(code):
+    """Check whether the character is part of Cherokee UCS Block """
+    ret = libxml2mod.xmlUCSIsCherokee(code)
+    return ret
+
+def uCSIsCombiningDiacriticalMarks(code):
+    """Check whether the character is part of
+       CombiningDiacriticalMarks UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningDiacriticalMarks(code)
+    return ret
+
+def uCSIsCombiningDiacriticalMarksforSymbols(code):
+    """Check whether the character is part of
+       CombiningDiacriticalMarksforSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningDiacriticalMarksforSymbols(code)
+    return ret
+
+def uCSIsCombiningHalfMarks(code):
+    """Check whether the character is part of CombiningHalfMarks
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningHalfMarks(code)
+    return ret
+
+def uCSIsCombiningMarksforSymbols(code):
+    """Check whether the character is part of
+       CombiningMarksforSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningMarksforSymbols(code)
+    return ret
+
+def uCSIsControlPictures(code):
+    """Check whether the character is part of ControlPictures UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsControlPictures(code)
+    return ret
+
+def uCSIsCurrencySymbols(code):
+    """Check whether the character is part of CurrencySymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCurrencySymbols(code)
+    return ret
+
+def uCSIsCypriotSyllabary(code):
+    """Check whether the character is part of CypriotSyllabary UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCypriotSyllabary(code)
+    return ret
+
+def uCSIsCyrillic(code):
+    """Check whether the character is part of Cyrillic UCS Block """
+    ret = libxml2mod.xmlUCSIsCyrillic(code)
+    return ret
+
+def uCSIsCyrillicSupplement(code):
+    """Check whether the character is part of CyrillicSupplement
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCyrillicSupplement(code)
+    return ret
+
+def uCSIsDeseret(code):
+    """Check whether the character is part of Deseret UCS Block """
+    ret = libxml2mod.xmlUCSIsDeseret(code)
+    return ret
+
+def uCSIsDevanagari(code):
+    """Check whether the character is part of Devanagari UCS Block """
+    ret = libxml2mod.xmlUCSIsDevanagari(code)
+    return ret
+
+def uCSIsDingbats(code):
+    """Check whether the character is part of Dingbats UCS Block """
+    ret = libxml2mod.xmlUCSIsDingbats(code)
+    return ret
+
+def uCSIsEnclosedAlphanumerics(code):
+    """Check whether the character is part of
+       EnclosedAlphanumerics UCS Block """
+    ret = libxml2mod.xmlUCSIsEnclosedAlphanumerics(code)
+    return ret
+
+def uCSIsEnclosedCJKLettersandMonths(code):
+    """Check whether the character is part of
+       EnclosedCJKLettersandMonths UCS Block """
+    ret = libxml2mod.xmlUCSIsEnclosedCJKLettersandMonths(code)
+    return ret
+
+def uCSIsEthiopic(code):
+    """Check whether the character is part of Ethiopic UCS Block """
+    ret = libxml2mod.xmlUCSIsEthiopic(code)
+    return ret
+
+def uCSIsGeneralPunctuation(code):
+    """Check whether the character is part of GeneralPunctuation
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsGeneralPunctuation(code)
+    return ret
+
+def uCSIsGeometricShapes(code):
+    """Check whether the character is part of GeometricShapes UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGeometricShapes(code)
+    return ret
+
+def uCSIsGeorgian(code):
+    """Check whether the character is part of Georgian UCS Block """
+    ret = libxml2mod.xmlUCSIsGeorgian(code)
+    return ret
+
+def uCSIsGothic(code):
+    """Check whether the character is part of Gothic UCS Block """
+    ret = libxml2mod.xmlUCSIsGothic(code)
+    return ret
+
+def uCSIsGreek(code):
+    """Check whether the character is part of Greek UCS Block """
+    ret = libxml2mod.xmlUCSIsGreek(code)
+    return ret
+
+def uCSIsGreekExtended(code):
+    """Check whether the character is part of GreekExtended UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGreekExtended(code)
+    return ret
+
+def uCSIsGreekandCoptic(code):
+    """Check whether the character is part of GreekandCoptic UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGreekandCoptic(code)
+    return ret
+
+def uCSIsGujarati(code):
+    """Check whether the character is part of Gujarati UCS Block """
+    ret = libxml2mod.xmlUCSIsGujarati(code)
+    return ret
+
+def uCSIsGurmukhi(code):
+    """Check whether the character is part of Gurmukhi UCS Block """
+    ret = libxml2mod.xmlUCSIsGurmukhi(code)
+    return ret
+
+def uCSIsHalfwidthandFullwidthForms(code):
+    """Check whether the character is part of
+       HalfwidthandFullwidthForms UCS Block """
+    ret = libxml2mod.xmlUCSIsHalfwidthandFullwidthForms(code)
+    return ret
+
+def uCSIsHangulCompatibilityJamo(code):
+    """Check whether the character is part of
+       HangulCompatibilityJamo UCS Block """
+    ret = libxml2mod.xmlUCSIsHangulCompatibilityJamo(code)
+    return ret
+
+def uCSIsHangulJamo(code):
+    """Check whether the character is part of HangulJamo UCS Block """
+    ret = libxml2mod.xmlUCSIsHangulJamo(code)
+    return ret
+
+def uCSIsHangulSyllables(code):
+    """Check whether the character is part of HangulSyllables UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsHangulSyllables(code)
+    return ret
+
+def uCSIsHanunoo(code):
+    """Check whether the character is part of Hanunoo UCS Block """
+    ret = libxml2mod.xmlUCSIsHanunoo(code)
+    return ret
+
+def uCSIsHebrew(code):
+    """Check whether the character is part of Hebrew UCS Block """
+    ret = libxml2mod.xmlUCSIsHebrew(code)
+    return ret
+
+def uCSIsHighPrivateUseSurrogates(code):
+    """Check whether the character is part of
+       HighPrivateUseSurrogates UCS Block """
+    ret = libxml2mod.xmlUCSIsHighPrivateUseSurrogates(code)
+    return ret
+
+def uCSIsHighSurrogates(code):
+    """Check whether the character is part of HighSurrogates UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsHighSurrogates(code)
+    return ret
+
+def uCSIsHiragana(code):
+    """Check whether the character is part of Hiragana UCS Block """
+    ret = libxml2mod.xmlUCSIsHiragana(code)
+    return ret
+
+def uCSIsIPAExtensions(code):
+    """Check whether the character is part of IPAExtensions UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsIPAExtensions(code)
+    return ret
+
+def uCSIsIdeographicDescriptionCharacters(code):
+    """Check whether the character is part of
+       IdeographicDescriptionCharacters UCS Block """
+    ret = libxml2mod.xmlUCSIsIdeographicDescriptionCharacters(code)
+    return ret
+
+def uCSIsKanbun(code):
+    """Check whether the character is part of Kanbun UCS Block """
+    ret = libxml2mod.xmlUCSIsKanbun(code)
+    return ret
+
+def uCSIsKangxiRadicals(code):
+    """Check whether the character is part of KangxiRadicals UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsKangxiRadicals(code)
+    return ret
+
+def uCSIsKannada(code):
+    """Check whether the character is part of Kannada UCS Block """
+    ret = libxml2mod.xmlUCSIsKannada(code)
+    return ret
+
+def uCSIsKatakana(code):
+    """Check whether the character is part of Katakana UCS Block """
+    ret = libxml2mod.xmlUCSIsKatakana(code)
+    return ret
+
+def uCSIsKatakanaPhoneticExtensions(code):
+    """Check whether the character is part of
+       KatakanaPhoneticExtensions UCS Block """
+    ret = libxml2mod.xmlUCSIsKatakanaPhoneticExtensions(code)
+    return ret
+
+def uCSIsKhmer(code):
+    """Check whether the character is part of Khmer UCS Block """
+    ret = libxml2mod.xmlUCSIsKhmer(code)
+    return ret
+
+def uCSIsKhmerSymbols(code):
+    """Check whether the character is part of KhmerSymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsKhmerSymbols(code)
+    return ret
+
+def uCSIsLao(code):
+    """Check whether the character is part of Lao UCS Block """
+    ret = libxml2mod.xmlUCSIsLao(code)
+    return ret
+
+def uCSIsLatin1Supplement(code):
+    """Check whether the character is part of Latin-1Supplement
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsLatin1Supplement(code)
+    return ret
+
+def uCSIsLatinExtendedA(code):
+    """Check whether the character is part of LatinExtended-A UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedA(code)
+    return ret
+
+def uCSIsLatinExtendedAdditional(code):
+    """Check whether the character is part of
+       LatinExtendedAdditional UCS Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedAdditional(code)
+    return ret
+
+def uCSIsLatinExtendedB(code):
+    """Check whether the character is part of LatinExtended-B UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedB(code)
+    return ret
+
+def uCSIsLetterlikeSymbols(code):
+    """Check whether the character is part of LetterlikeSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsLetterlikeSymbols(code)
+    return ret
+
+def uCSIsLimbu(code):
+    """Check whether the character is part of Limbu UCS Block """
+    ret = libxml2mod.xmlUCSIsLimbu(code)
+    return ret
+
+def uCSIsLinearBIdeograms(code):
+    """Check whether the character is part of LinearBIdeograms UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLinearBIdeograms(code)
+    return ret
+
+def uCSIsLinearBSyllabary(code):
+    """Check whether the character is part of LinearBSyllabary UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLinearBSyllabary(code)
+    return ret
+
+def uCSIsLowSurrogates(code):
+    """Check whether the character is part of LowSurrogates UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLowSurrogates(code)
+    return ret
+
+def uCSIsMalayalam(code):
+    """Check whether the character is part of Malayalam UCS Block """
+    ret = libxml2mod.xmlUCSIsMalayalam(code)
+    return ret
+
+def uCSIsMathematicalAlphanumericSymbols(code):
+    """Check whether the character is part of
+       MathematicalAlphanumericSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsMathematicalAlphanumericSymbols(code)
+    return ret
+
+def uCSIsMathematicalOperators(code):
+    """Check whether the character is part of
+       MathematicalOperators UCS Block """
+    ret = libxml2mod.xmlUCSIsMathematicalOperators(code)
+    return ret
+
+def uCSIsMiscellaneousMathematicalSymbolsA(code):
+    """Check whether the character is part of
+       MiscellaneousMathematicalSymbols-A UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousMathematicalSymbolsA(code)
+    return ret
+
+def uCSIsMiscellaneousMathematicalSymbolsB(code):
+    """Check whether the character is part of
+       MiscellaneousMathematicalSymbols-B UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousMathematicalSymbolsB(code)
+    return ret
+
+def uCSIsMiscellaneousSymbols(code):
+    """Check whether the character is part of MiscellaneousSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousSymbols(code)
+    return ret
+
+def uCSIsMiscellaneousSymbolsandArrows(code):
+    """Check whether the character is part of
+       MiscellaneousSymbolsandArrows UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousSymbolsandArrows(code)
+    return ret
+
+def uCSIsMiscellaneousTechnical(code):
+    """Check whether the character is part of
+       MiscellaneousTechnical UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousTechnical(code)
+    return ret
+
+def uCSIsMongolian(code):
+    """Check whether the character is part of Mongolian UCS Block """
+    ret = libxml2mod.xmlUCSIsMongolian(code)
+    return ret
+
+def uCSIsMusicalSymbols(code):
+    """Check whether the character is part of MusicalSymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsMusicalSymbols(code)
+    return ret
+
+def uCSIsMyanmar(code):
+    """Check whether the character is part of Myanmar UCS Block """
+    ret = libxml2mod.xmlUCSIsMyanmar(code)
+    return ret
+
+def uCSIsNumberForms(code):
+    """Check whether the character is part of NumberForms UCS Block """
+    ret = libxml2mod.xmlUCSIsNumberForms(code)
+    return ret
+
+def uCSIsOgham(code):
+    """Check whether the character is part of Ogham UCS Block """
+    ret = libxml2mod.xmlUCSIsOgham(code)
+    return ret
+
+def uCSIsOldItalic(code):
+    """Check whether the character is part of OldItalic UCS Block """
+    ret = libxml2mod.xmlUCSIsOldItalic(code)
+    return ret
+
+def uCSIsOpticalCharacterRecognition(code):
+    """Check whether the character is part of
+       OpticalCharacterRecognition UCS Block """
+    ret = libxml2mod.xmlUCSIsOpticalCharacterRecognition(code)
+    return ret
+
+def uCSIsOriya(code):
+    """Check whether the character is part of Oriya UCS Block """
+    ret = libxml2mod.xmlUCSIsOriya(code)
+    return ret
+
+def uCSIsOsmanya(code):
+    """Check whether the character is part of Osmanya UCS Block """
+    ret = libxml2mod.xmlUCSIsOsmanya(code)
+    return ret
+
+def uCSIsPhoneticExtensions(code):
+    """Check whether the character is part of PhoneticExtensions
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsPhoneticExtensions(code)
+    return ret
+
+def uCSIsPrivateUse(code):
+    """Check whether the character is part of PrivateUse UCS Block """
+    ret = libxml2mod.xmlUCSIsPrivateUse(code)
+    return ret
+
+def uCSIsPrivateUseArea(code):
+    """Check whether the character is part of PrivateUseArea UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsPrivateUseArea(code)
+    return ret
+
+def uCSIsRunic(code):
+    """Check whether the character is part of Runic UCS Block """
+    ret = libxml2mod.xmlUCSIsRunic(code)
+    return ret
+
+def uCSIsShavian(code):
+    """Check whether the character is part of Shavian UCS Block """
+    ret = libxml2mod.xmlUCSIsShavian(code)
+    return ret
+
+def uCSIsSinhala(code):
+    """Check whether the character is part of Sinhala UCS Block """
+    ret = libxml2mod.xmlUCSIsSinhala(code)
+    return ret
+
+def uCSIsSmallFormVariants(code):
+    """Check whether the character is part of SmallFormVariants
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSmallFormVariants(code)
+    return ret
+
+def uCSIsSpacingModifierLetters(code):
+    """Check whether the character is part of
+       SpacingModifierLetters UCS Block """
+    ret = libxml2mod.xmlUCSIsSpacingModifierLetters(code)
+    return ret
+
+def uCSIsSpecials(code):
+    """Check whether the character is part of Specials UCS Block """
+    ret = libxml2mod.xmlUCSIsSpecials(code)
+    return ret
+
+def uCSIsSuperscriptsandSubscripts(code):
+    """Check whether the character is part of
+       SuperscriptsandSubscripts UCS Block """
+    ret = libxml2mod.xmlUCSIsSuperscriptsandSubscripts(code)
+    return ret
+
+def uCSIsSupplementalArrowsA(code):
+    """Check whether the character is part of SupplementalArrows-A
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalArrowsA(code)
+    return ret
+
+def uCSIsSupplementalArrowsB(code):
+    """Check whether the character is part of SupplementalArrows-B
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalArrowsB(code)
+    return ret
+
+def uCSIsSupplementalMathematicalOperators(code):
+    """Check whether the character is part of
+       SupplementalMathematicalOperators UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalMathematicalOperators(code)
+    return ret
+
+def uCSIsSupplementaryPrivateUseAreaA(code):
+    """Check whether the character is part of
+       SupplementaryPrivateUseArea-A UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementaryPrivateUseAreaA(code)
+    return ret
+
+def uCSIsSupplementaryPrivateUseAreaB(code):
+    """Check whether the character is part of
+       SupplementaryPrivateUseArea-B UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementaryPrivateUseAreaB(code)
+    return ret
+
+def uCSIsSyriac(code):
+    """Check whether the character is part of Syriac UCS Block """
+    ret = libxml2mod.xmlUCSIsSyriac(code)
+    return ret
+
+def uCSIsTagalog(code):
+    """Check whether the character is part of Tagalog UCS Block """
+    ret = libxml2mod.xmlUCSIsTagalog(code)
+    return ret
+
+def uCSIsTagbanwa(code):
+    """Check whether the character is part of Tagbanwa UCS Block """
+    ret = libxml2mod.xmlUCSIsTagbanwa(code)
+    return ret
+
+def uCSIsTags(code):
+    """Check whether the character is part of Tags UCS Block """
+    ret = libxml2mod.xmlUCSIsTags(code)
+    return ret
+
+def uCSIsTaiLe(code):
+    """Check whether the character is part of TaiLe UCS Block """
+    ret = libxml2mod.xmlUCSIsTaiLe(code)
+    return ret
+
+def uCSIsTaiXuanJingSymbols(code):
+    """Check whether the character is part of TaiXuanJingSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsTaiXuanJingSymbols(code)
+    return ret
+
+def uCSIsTamil(code):
+    """Check whether the character is part of Tamil UCS Block """
+    ret = libxml2mod.xmlUCSIsTamil(code)
+    return ret
+
+def uCSIsTelugu(code):
+    """Check whether the character is part of Telugu UCS Block """
+    ret = libxml2mod.xmlUCSIsTelugu(code)
+    return ret
+
+def uCSIsThaana(code):
+    """Check whether the character is part of Thaana UCS Block """
+    ret = libxml2mod.xmlUCSIsThaana(code)
+    return ret
+
+def uCSIsThai(code):
+    """Check whether the character is part of Thai UCS Block """
+    ret = libxml2mod.xmlUCSIsThai(code)
+    return ret
+
+def uCSIsTibetan(code):
+    """Check whether the character is part of Tibetan UCS Block """
+    ret = libxml2mod.xmlUCSIsTibetan(code)
+    return ret
+
+def uCSIsUgaritic(code):
+    """Check whether the character is part of Ugaritic UCS Block """
+    ret = libxml2mod.xmlUCSIsUgaritic(code)
+    return ret
+
+def uCSIsUnifiedCanadianAboriginalSyllabics(code):
+    """Check whether the character is part of
+       UnifiedCanadianAboriginalSyllabics UCS Block """
+    ret = libxml2mod.xmlUCSIsUnifiedCanadianAboriginalSyllabics(code)
+    return ret
+
+def uCSIsVariationSelectors(code):
+    """Check whether the character is part of VariationSelectors
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsVariationSelectors(code)
+    return ret
+
+def uCSIsVariationSelectorsSupplement(code):
+    """Check whether the character is part of
+       VariationSelectorsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsVariationSelectorsSupplement(code)
+    return ret
+
+def uCSIsYiRadicals(code):
+    """Check whether the character is part of YiRadicals UCS Block """
+    ret = libxml2mod.xmlUCSIsYiRadicals(code)
+    return ret
+
+def uCSIsYiSyllables(code):
+    """Check whether the character is part of YiSyllables UCS Block """
+    ret = libxml2mod.xmlUCSIsYiSyllables(code)
+    return ret
+
+def uCSIsYijingHexagramSymbols(code):
+    """Check whether the character is part of
+       YijingHexagramSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsYijingHexagramSymbols(code)
+    return ret
+
+#
+# Functions from module xmlversion
+#
+
+def checkVersion(version):
+    """check the compiled lib version against the include one.
+       This can warn or immediately kill the application """
+    libxml2mod.xmlCheckVersion(version)
+
+#
+# Functions from module xpathInternals
+#
+
+def valuePop(ctxt):
+    """Pops the top XPath object from the value stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.valuePop(ctxt__o)
+    return ret
+
+class xmlNode(xmlCore):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlNode got a wrong wrapper object type')
+        self._o = _obj
+        xmlCore.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlNode (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    # accessors for xmlNode
+    def ns(self):
+        """Get the namespace of a node """
+        ret = libxml2mod.xmlNodeGetNs(self._o)
+        if ret is None:return None
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def nsDefs(self):
+        """Get the namespace of a node """
+        ret = libxml2mod.xmlNodeGetNsDefs(self._o)
+        if ret is None:return None
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    #
+    # xmlNode functions from module debugXML
+    #
+
+    def debugDumpNode(self, output, depth):
+        """Dumps debug information for the element node, it is
+           recursive """
+        libxml2mod.xmlDebugDumpNode(output, self._o, depth)
+
+    def debugDumpNodeList(self, output, depth):
+        """Dumps debug information for the list of element node, it is
+           recursive """
+        libxml2mod.xmlDebugDumpNodeList(output, self._o, depth)
+
+    def debugDumpOneNode(self, output, depth):
+        """Dumps debug information for the element node, it is not
+           recursive """
+        libxml2mod.xmlDebugDumpOneNode(output, self._o, depth)
+
+    def lsCountNode(self):
+        """Count the children of @node. """
+        ret = libxml2mod.xmlLsCountNode(self._o)
+        return ret
+
+    def lsOneNode(self, output):
+        """Dump to @output the type and name of @node. """
+        libxml2mod.xmlLsOneNode(output, self._o)
+
+    def shellPrintNode(self):
+        """Print node to the output FILE """
+        libxml2mod.xmlShellPrintNode(self._o)
+
+    #
+    # xmlNode functions from module tree
+    #
+
+    def addChild(self, cur):
+        """Add a new node to @parent, at the end of the child (or
+          property) list merging adjacent TEXT nodes (in which case
+          @cur is freed) If the new node is ATTRIBUTE, it is added
+          into properties instead of children. If there is an
+           attribute with equal name, it is first destroyed. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlAddChild(self._o, cur__o)
+        if ret is None:raise treeError('xmlAddChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addChildList(self, cur):
+        """Add a list of node at the end of the child list of the
+           parent merging adjacent TEXT nodes (@cur may be freed) """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlAddChildList(self._o, cur__o)
+        if ret is None:raise treeError('xmlAddChildList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addContent(self, content):
+        """Append the extra substring to the node content. NOTE: In
+          contrast to xmlNodeSetContent(), @content is supposed to be
+          raw text, so unescaped XML special chars are allowed,
+           entity references are not supported. """
+        libxml2mod.xmlNodeAddContent(self._o, content)
+
+    def addContentLen(self, content, len):
+        """Append the extra substring to the node content. NOTE: In
+          contrast to xmlNodeSetContentLen(), @content is supposed to
+          be raw text, so unescaped XML special chars are allowed,
+           entity references are not supported. """
+        libxml2mod.xmlNodeAddContentLen(self._o, content, len)
+
+    def addNextSibling(self, elem):
+        """Add a new node @elem as the next sibling of @cur If the new
+          node was already inserted in a document it is first
+          unlinked from its existing context. As a result of text
+          merging @elem may be freed. If the new node is ATTRIBUTE,
+          it is added into properties instead of children. If there
+           is an attribute with equal name, it is first destroyed. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddNextSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddNextSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addPrevSibling(self, elem):
+        """Add a new node @elem as the previous sibling of @cur
+          merging adjacent TEXT nodes (@elem may be freed) If the new
+          node was already inserted in a document it is first
+          unlinked from its existing context. If the new node is
+          ATTRIBUTE, it is added into properties instead of children.
+          If there is an attribute with equal name, it is first
+           destroyed. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddPrevSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddPrevSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addSibling(self, elem):
+        """Add a new element @elem to the list of siblings of @cur
+          merging adjacent TEXT nodes (@elem may be freed) If the new
+          element was already inserted in a document it is first
+           unlinked from its existing context. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNode(self, extended):
+        """Do a copy of the node. """
+        ret = libxml2mod.xmlCopyNode(self._o, extended)
+        if ret is None:raise treeError('xmlCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNodeList(self):
+        """Do a recursive copy of the node list. Use
+          xmlDocCopyNodeList() if possible to ensure string interning. """
+        ret = libxml2mod.xmlCopyNodeList(self._o)
+        if ret is None:raise treeError('xmlCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyProp(self, cur):
+        """Do a copy of the attribute. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlCopyProp(self._o, cur__o)
+        if ret is None:raise treeError('xmlCopyProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def copyPropList(self, cur):
+        """Do a copy of an attribute list. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlCopyPropList(self._o, cur__o)
+        if ret is None:raise treeError('xmlCopyPropList() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def docCopyNode(self, doc, extended):
+        """Do a copy of the node to a given document. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocCopyNode(self._o, doc__o, extended)
+        if ret is None:raise treeError('xmlDocCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def docCopyNodeList(self, doc):
+        """Do a recursive copy of the node list. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocCopyNodeList(doc__o, self._o)
+        if ret is None:raise treeError('xmlDocCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def docSetRootElement(self, doc):
+        """Set the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocSetRootElement(doc__o, self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def firstElementChild(self):
+        """Finds the first child node of that element which is a
+          Element node Note the handling of entities references is
+          different than in the W3C DOM element traversal spec since
+          we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlFirstElementChild(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def freeNode(self):
+        """Free a node, this is a recursive behaviour, all the
+          children are freed too. This doesn't unlink the child from
+           the list, use xmlUnlinkNode() first. """
+        libxml2mod.xmlFreeNode(self._o)
+
+    def freeNodeList(self):
+        """Free a node and all its siblings, this is a recursive
+           behaviour, all the children are freed too. """
+        libxml2mod.xmlFreeNodeList(self._o)
+
+    def getBase(self, doc):
+        """Searches for the BASE URL. The code should work on both XML
+          and HTML document even if base mechanisms are completely
+          different. It returns the base as defined in RFC 2396
+          sections 5.1.1. Base URI within Document Content and 5.1.2.
+          Base URI from the Encapsulating Entity However it does not
+           return the document base (5.1.3), use doc->URL in this case """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeGetBase(doc__o, self._o)
+        return ret
+
+    def getContent(self):
+        """Read the value of a node, this can be either the text
+          carried directly by this node if it's a TEXT node or the
+          aggregate string of the values carried by this node child's
+           (TEXT and ENTITY_REF). Entity references are substituted. """
+        ret = libxml2mod.xmlNodeGetContent(self._o)
+        return ret
+
+    def getLang(self):
+        """Searches the language of a node, i.e. the values of the
+          xml:lang attribute or the one carried by the nearest
+           ancestor. """
+        ret = libxml2mod.xmlNodeGetLang(self._o)
+        return ret
+
+    def getSpacePreserve(self):
+        """Searches the space preserving behaviour of a node, i.e. the
+          values of the xml:space attribute or the one carried by the
+           nearest ancestor. """
+        ret = libxml2mod.xmlNodeGetSpacePreserve(self._o)
+        return ret
+
+    def hasNsProp(self, name, nameSpace):
+        """Search for an attribute associated to a node This attribute
+          has to be anchored in the namespace specified. This does
+          the entity substitution. This function looks in DTD
+          attribute declaration for #FIXED or default declaration
+          values unless DTD use has been turned off. Note that a
+           namespace of None indicates to use the default namespace. """
+        ret = libxml2mod.xmlHasNsProp(self._o, name, nameSpace)
+        if ret is None:return None
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def hasProp(self, name):
+        """Search an attribute associated to a node This function also
+          looks in DTD attribute declaration for #FIXED or default
+           declaration values unless DTD use has been turned off. """
+        ret = libxml2mod.xmlHasProp(self._o, name)
+        if ret is None:return None
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def isBlankNode(self):
+        """Checks whether this node is an empty or whitespace only
+           (and possibly ignorable) text-node. """
+        ret = libxml2mod.xmlIsBlankNode(self._o)
+        return ret
+
+    def isText(self):
+        """Is this node a Text node ? """
+        ret = libxml2mod.xmlNodeIsText(self._o)
+        return ret
+
+    def lastChild(self):
+        """Search the last child of a node. """
+        ret = libxml2mod.xmlGetLastChild(self._o)
+        if ret is None:raise treeError('xmlGetLastChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def lastElementChild(self):
+        """Finds the last child node of that element which is a
+          Element node Note the handling of entities references is
+          different than in the W3C DOM element traversal spec since
+          we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlLastElementChild(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def lineNo(self):
+        """Get line number of @node. Try to override the limitation of
+          lines being store in 16 bits ints if XML_PARSE_BIG_LINES
+           parser option was used """
+        ret = libxml2mod.xmlGetLineNo(self._o)
+        return ret
+
+    def listGetRawString(self, doc, inLine):
+        """Builds the string equivalent to the text contained in the
+          Node list made of TEXTs and ENTITY_REFs, contrary to
+          xmlNodeListGetString() this function doesn't do any
+           character encoding handling. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeListGetRawString(doc__o, self._o, inLine)
+        return ret
+
+    def listGetString(self, doc, inLine):
+        """Build the string equivalent to the text contained in the
+           Node list made of TEXTs and ENTITY_REFs """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeListGetString(doc__o, self._o, inLine)
+        return ret
+
+    def newChild(self, ns, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child list containing the TEXTs and ENTITY_REFs node will
+          be created. NOTE: @content is supposed to be a piece of XML
+          CDATA, so it allows entity references. XML special chars
+          must be escaped first by using
+          xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should
+           be used. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewChild(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNs(self, href, prefix):
+        """Creation of a new Namespace. This function will refuse to
+          create a namespace with a similar prefix than an existing
+          one present on this node. Note that for a default
+          namespace, @prefix should be None.  We use href==None in
+          the case of an element creation where the namespace was not
+           defined. """
+        ret = libxml2mod.xmlNewNs(self._o, href, prefix)
+        if ret is None:raise treeError('xmlNewNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def newNsProp(self, ns, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewNsProp(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlNewNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newNsPropEatName(self, ns, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewNsPropEatName(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlNewNsPropEatName() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newProp(self, name, value):
+        """Create a new property carried by a node. """
+        ret = libxml2mod.xmlNewProp(self._o, name, value)
+        if ret is None:raise treeError('xmlNewProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newTextChild(self, ns, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child TEXT node will be created containing the string
+          @content. NOTE: Use xmlNewChild() if @content will contain
+          entities that need to be preserved. Use this function,
+          xmlNewTextChild(), if you need to ensure that reserved XML
+          chars that might appear in @content, such as the ampersand,
+          greater-than or less-than signs, are automatically replaced
+           by their XML escaped entity representations. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewTextChild(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewTextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def nextElementSibling(self):
+        """Finds the first closest next sibling of the node which is
+          an element node. Note the handling of entities references
+          is different than in the W3C DOM element traversal spec
+          since we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlNextElementSibling(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def noNsProp(self, name):
+        """Search and get the value of an attribute associated to a
+          node This does the entity substitution. This function looks
+          in DTD attribute declaration for #FIXED or default
+          declaration values unless DTD use has been turned off. This
+          function is similar to xmlGetProp except it will accept
+           only an attribute in no namespace. """
+        ret = libxml2mod.xmlGetNoNsProp(self._o, name)
+        return ret
+
+    def nodePath(self):
+        """Build a structure based Path for the given node """
+        ret = libxml2mod.xmlGetNodePath(self._o)
+        return ret
+
+    def nsProp(self, name, nameSpace):
+        """Search and get the value of an attribute associated to a
+          node This attribute has to be anchored in the namespace
+          specified. This does the entity substitution. This function
+          looks in DTD attribute declaration for #FIXED or default
+           declaration values unless DTD use has been turned off. """
+        ret = libxml2mod.xmlGetNsProp(self._o, name, nameSpace)
+        return ret
+
+    def previousElementSibling(self):
+        """Finds the first closest previous sibling of the node which
+          is an element node. Note the handling of entities
+          references is different than in the W3C DOM element
+          traversal spec since we don't have back reference from
+           entities content to entities references. """
+        ret = libxml2mod.xmlPreviousElementSibling(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def prop(self, name):
+        """Search and get the value of an attribute associated to a
+          node This does the entity substitution. This function looks
+          in DTD attribute declaration for #FIXED or default
+          declaration values unless DTD use has been turned off.
+          NOTE: this function acts independently of namespaces
+          associated to the attribute. Use xmlGetNsProp() or
+           xmlGetNoNsProp() for namespace aware processing. """
+        ret = libxml2mod.xmlGetProp(self._o, name)
+        return ret
+
+    def reconciliateNs(self, doc):
+        """This function checks that all the namespaces declared
+          within the given tree are properly declared. This is needed
+          for example after Copy or Cut and then paste operations.
+          The subtree may still hold pointers to namespace
+          declarations outside the subtree or invalid/masked. As much
+          as possible the function try to reuse the existing
+          namespaces found in the new environment. If not possible
+          the new namespaces are redeclared on @tree at the top of
+           the given subtree. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlReconciliateNs(doc__o, self._o)
+        return ret
+
+    def replaceNode(self, cur):
+        """Unlink the old node from its current context, prune the new
+          one at the same place. If @cur was already inserted in a
+           document it is first unlinked from its existing context. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlReplaceNode(self._o, cur__o)
+        if ret is None:raise treeError('xmlReplaceNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def searchNs(self, doc, nameSpace):
+        """Search a Ns registered under a given name space for a
+          document. recurse on the parents until it finds the defined
+          namespace or return None otherwise. @nameSpace can be None,
+          this is a search for the default namespace. We don't allow
+          to cross entities boundaries. If you don't declare the
+          namespace within those you will be in troubles !!! A
+           warning is generated to cover this case. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSearchNs(doc__o, self._o, nameSpace)
+        if ret is None:raise treeError('xmlSearchNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def searchNsByHref(self, doc, href):
+        """Search a Ns aliasing a given URI. Recurse on the parents
+          until it finds the defined namespace or return None
+           otherwise. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSearchNsByHref(doc__o, self._o, href)
+        if ret is None:raise treeError('xmlSearchNsByHref() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def setBase(self, uri):
+        """Set (or reset) the base URI of a node, i.e. the value of
+           the xml:base attribute. """
+        libxml2mod.xmlNodeSetBase(self._o, uri)
+
+    def setContent(self, content):
+        """Replace the content of a node. NOTE: @content is supposed
+          to be a piece of XML CDATA, so it allows entity references,
+          but XML special chars need to be escaped first by using
+           xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). """
+        libxml2mod.xmlNodeSetContent(self._o, content)
+
+    def setContentLen(self, content, len):
+        """Replace the content of a node. NOTE: @content is supposed
+          to be a piece of XML CDATA, so it allows entity references,
+          but XML special chars need to be escaped first by using
+           xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). """
+        libxml2mod.xmlNodeSetContentLen(self._o, content, len)
+
+    def setLang(self, lang):
+        """Set the language of a node, i.e. the values of the xml:lang
+           attribute. """
+        libxml2mod.xmlNodeSetLang(self._o, lang)
+
+    def setListDoc(self, doc):
+        """update all nodes in the list to point to the right document """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlSetListDoc(self._o, doc__o)
+
+    def setName(self, name):
+        """Set (or reset) the name of a node. """
+        libxml2mod.xmlNodeSetName(self._o, name)
+
+    def setNs(self, ns):
+        """Associate a namespace to a node, a posteriori. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        libxml2mod.xmlSetNs(self._o, ns__o)
+
+    def setNsProp(self, ns, name, value):
+        """Set (or reset) an attribute carried by a node. The ns
+           structure must be in scope, this is not checked """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlSetNsProp(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlSetNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def setProp(self, name, value):
+        """Set (or reset) an attribute carried by a node. If @name has
+          a prefix, then the corresponding namespace-binding will be
+          used, if in scope; it is an error it there's no such
+           ns-binding for the prefix in scope. """
+        ret = libxml2mod.xmlSetProp(self._o, name, value)
+        if ret is None:raise treeError('xmlSetProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def setSpacePreserve(self, val):
+        """Set (or reset) the space preserving behaviour of a node,
+           i.e. the value of the xml:space attribute. """
+        libxml2mod.xmlNodeSetSpacePreserve(self._o, val)
+
+    def setTreeDoc(self, doc):
+        """update all nodes under the tree to point to the right
+           document """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlSetTreeDoc(self._o, doc__o)
+
+    def textConcat(self, content, len):
+        """Concat the given string at the end of the existing node
+           content """
+        ret = libxml2mod.xmlTextConcat(self._o, content, len)
+        return ret
+
+    def textMerge(self, second):
+        """Merge two text nodes into one """
+        if second is None: second__o = None
+        else: second__o = second._o
+        ret = libxml2mod.xmlTextMerge(self._o, second__o)
+        if ret is None:raise treeError('xmlTextMerge() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def unlinkNode(self):
+        """Unlink a node from it's current context, the node is not
+          freed If one need to free the node, use xmlFreeNode()
+          routine after the unlink to discard it. Note that namespace
+          nodes can't be unlinked as they do not have pointer to
+           their parent. """
+        libxml2mod.xmlUnlinkNode(self._o)
+
+    def unsetNsProp(self, ns, name):
+        """Remove an attribute carried by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlUnsetNsProp(self._o, ns__o, name)
+        return ret
+
+    def unsetProp(self, name):
+        """Remove an attribute carried by a node. This handles only
+           attributes in no namespace. """
+        ret = libxml2mod.xmlUnsetProp(self._o, name)
+        return ret
+
+    #
+    # xmlNode functions from module valid
+    #
+
+    def isID(self, doc, attr):
+        """Determine whether an attribute is of type ID. In case we
+          have DTD(s) then this is done if DTD loading has been
+          requested. In the case of HTML documents parsed with the
+           HTML parser, then ID detection is done systematically. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsID(doc__o, self._o, attr__o)
+        return ret
+
+    def isRef(self, doc, attr):
+        """Determine whether an attribute is of type Ref. In case we
+          have DTD(s) then this is simple, otherwise we use an
+           heuristic: name Ref (upper or lowercase). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsRef(doc__o, self._o, attr__o)
+        return ret
+
+    def validNormalizeAttributeValue(self, doc, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+           space (#x20) characters by single space (#x20) character. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidNormalizeAttributeValue(doc__o, self._o, name, value)
+        return ret
+
+    #
+    # xmlNode functions from module xinclude
+    #
+
+    def xincludeProcessTree(self):
+        """Implement the XInclude substitution for the given subtree """
+        ret = libxml2mod.xmlXIncludeProcessTree(self._o)
+        return ret
+
+    def xincludeProcessTreeFlags(self, flags):
+        """Implement the XInclude substitution for the given subtree """
+        ret = libxml2mod.xmlXIncludeProcessTreeFlags(self._o, flags)
+        return ret
+
+    #
+    # xmlNode functions from module xmlschemas
+    #
+
+    def schemaValidateOneElement(self, ctxt):
+        """Validate a branch of a tree, starting with the given @elem. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlSchemaValidateOneElement(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlNode functions from module xpath
+    #
+
+    def xpathCastNodeToNumber(self):
+        """Converts a node to its number value """
+        ret = libxml2mod.xmlXPathCastNodeToNumber(self._o)
+        return ret
+
+    def xpathCastNodeToString(self):
+        """Converts a node to its string value. """
+        ret = libxml2mod.xmlXPathCastNodeToString(self._o)
+        return ret
+
+    def xpathCmpNodes(self, node2):
+        """Compare two nodes w.r.t document order """
+        if node2 is None: node2__o = None
+        else: node2__o = node2._o
+        ret = libxml2mod.xmlXPathCmpNodes(self._o, node2__o)
+        return ret
+
+    def xpathNodeEval(self, str, ctx):
+        """Evaluate the XPath Location Path in the given context. The
+          node 'node' is set as the context node. The context node is
+           not restored. """
+        if ctx is None: ctx__o = None
+        else: ctx__o = ctx._o
+        ret = libxml2mod.xmlXPathNodeEval(self._o, str, ctx__o)
+        if ret is None:raise xpathError('xmlXPathNodeEval() failed')
+        return xpathObjectRet(ret)
+
+    #
+    # xmlNode functions from module xpathInternals
+    #
+
+    def xpathNewNodeSet(self):
+        """Create a new xmlXPathObjectPtr of type NodeSet and
+           initialize it with the single Node @val """
+        ret = libxml2mod.xmlXPathNewNodeSet(self._o)
+        if ret is None:raise xpathError('xmlXPathNewNodeSet() failed')
+        return xpathObjectRet(ret)
+
+    def xpathNewValueTree(self):
+        """Create a new xmlXPathObjectPtr of type Value Tree (XSLT)
+           and initialize it with the tree root @val """
+        ret = libxml2mod.xmlXPathNewValueTree(self._o)
+        if ret is None:raise xpathError('xmlXPathNewValueTree() failed')
+        return xpathObjectRet(ret)
+
+    def xpathNextAncestor(self, ctxt):
+        """Traversal function for the "ancestor" direction the
+          ancestor axis contains the ancestors of the context node;
+          the ancestors of the context node consist of the parent of
+          context node and the parent's parent and so on; the nodes
+          are ordered in reverse document order; thus the parent is
+          the first node on the axis, and the parent's parent is the
+           second node on the axis """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAncestor(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAncestor() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAncestorOrSelf(self, ctxt):
+        """Traversal function for the "ancestor-or-self" direction he
+          ancestor-or-self axis contains the context node and
+          ancestors of the context node in reverse document order;
+          thus the context node is the first node on the axis, and
+          the context node's parent the second; parent here is
+           defined the same as with the parent axis. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAncestorOrSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAncestorOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAttribute(self, ctxt):
+        """Traversal function for the "attribute" direction TODO:
+           support DTD inherited default attributes """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAttribute(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAttribute() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextChild(self, ctxt):
+        """Traversal function for the "child" direction The child axis
+          contains the children of the context node in document order. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextChild(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendant(self, ctxt):
+        """Traversal function for the "descendant" direction the
+          descendant axis contains the descendants of the context
+          node in document order; a descendant is a child or a child
+           of a child and so on. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextDescendant(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextDescendant() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendantOrSelf(self, ctxt):
+        """Traversal function for the "descendant-or-self" direction
+          the descendant-or-self axis contains the context node and
+          the descendants of the context node in document order; thus
+          the context node is the first node on the axis, and the
+          first child of the context node is the second node on the
+           axis """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextDescendantOrSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextDescendantOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowing(self, ctxt):
+        """Traversal function for the "following" direction The
+          following axis contains all nodes in the same document as
+          the context node that are after the context node in
+          document order, excluding any descendants and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in document order """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextFollowing(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextFollowing() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowingSibling(self, ctxt):
+        """Traversal function for the "following-sibling" direction
+          The following-sibling axis contains the following siblings
+           of the context node in document order. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextFollowingSibling(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextFollowingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextNamespace(self, ctxt):
+        """Traversal function for the "namespace" direction the
+          namespace axis contains the namespace nodes of the context
+          node; the order of nodes on this axis is
+          implementation-defined; the axis will be empty unless the
+          context node is an element  We keep the XML namespace node
+           at the end of the list. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextNamespace(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextNamespace() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextParent(self, ctxt):
+        """Traversal function for the "parent" direction The parent
+          axis contains the parent of the context node, if there is
+           one. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextParent(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextParent() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPreceding(self, ctxt):
+        """Traversal function for the "preceding" direction the
+          preceding axis contains all nodes in the same document as
+          the context node that are before the context node in
+          document order, excluding any ancestors and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in reverse document order """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextPreceding(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextPreceding() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPrecedingSibling(self, ctxt):
+        """Traversal function for the "preceding-sibling" direction
+          The preceding-sibling axis contains the preceding siblings
+          of the context node in reverse document order; the first
+          preceding sibling is first on the axis; the sibling
+           preceding that node is the second on the axis and so on. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextPrecedingSibling(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextPrecedingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextSelf(self, ctxt):
+        """Traversal function for the "self" direction The self axis
+           contains just the context node itself """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    #
+    # xmlNode functions from module xpointer
+    #
+
+    def xpointerNewCollapsedRange(self):
+        """Create a new xmlXPathObjectPtr of type range using a single
+           nodes """
+        ret = libxml2mod.xmlXPtrNewCollapsedRange(self._o)
+        if ret is None:raise treeError('xmlXPtrNewCollapsedRange() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewContext(self, doc, origin):
+        """Create a new XPointer context """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if origin is None: origin__o = None
+        else: origin__o = origin._o
+        ret = libxml2mod.xmlXPtrNewContext(doc__o, self._o, origin__o)
+        if ret is None:raise treeError('xmlXPtrNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    def xpointerNewLocationSetNodes(self, end):
+        """Create a new xmlXPathObjectPtr of type LocationSet and
+          initialize it with the single range made of the two nodes
+           @start and @end """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewLocationSetNodes(self._o, end__o)
+        if ret is None:raise treeError('xmlXPtrNewLocationSetNodes() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewRange(self, startindex, end, endindex):
+        """Create a new xmlXPathObjectPtr of type range """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewRange(self._o, startindex, end__o, endindex)
+        if ret is None:raise treeError('xmlXPtrNewRange() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewRangeNodes(self, end):
+        """Create a new xmlXPathObjectPtr of type range using 2 nodes """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewRangeNodes(self._o, end__o)
+        if ret is None:raise treeError('xmlXPtrNewRangeNodes() failed')
+        return xpathObjectRet(ret)
+
+class xmlDoc(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlDoc got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlDoc (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlDoc functions from module HTMLparser
+    #
+
+    def htmlAutoCloseTag(self, name, elem):
+        """The HTML DTD allows a tag to implicitly close other tags.
+          The list is kept in htmlStartClose array. This function
+          checks if the element or one of it's children would
+           autoclose the given tag. """
+        ret = libxml2mod.htmlAutoCloseTag(self._o, name, elem)
+        return ret
+
+    def htmlIsAutoClosed(self, elem):
+        """The HTML DTD allows a tag to implicitly close other tags.
+          The list is kept in htmlStartClose array. This function
+           checks if a tag is autoclosed by one of it's child """
+        ret = libxml2mod.htmlIsAutoClosed(self._o, elem)
+        return ret
+
+    #
+    # xmlDoc functions from module HTMLtree
+    #
+
+    def htmlDocContentDumpFormatOutput(self, buf, encoding, format):
+        """Dump an HTML document. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        libxml2mod.htmlDocContentDumpFormatOutput(buf__o, self._o, encoding, format)
+
+    def htmlDocContentDumpOutput(self, buf, encoding):
+        """Dump an HTML document. Formating return/spaces are added. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        libxml2mod.htmlDocContentDumpOutput(buf__o, self._o, encoding)
+
+    def htmlDocDump(self, f):
+        """Dump an HTML document to an open FILE. """
+        ret = libxml2mod.htmlDocDump(f, self._o)
+        return ret
+
+    def htmlGetMetaEncoding(self):
+        """Encoding definition lookup in the Meta tags """
+        ret = libxml2mod.htmlGetMetaEncoding(self._o)
+        return ret
+
+    def htmlNodeDumpFile(self, out, cur):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns are added. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFile(out, self._o, cur__o)
+
+    def htmlNodeDumpFileFormat(self, out, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+          too.  TODO: if encoding == None try to save in the doc
+           encoding """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.htmlNodeDumpFileFormat(out, self._o, cur__o, encoding, format)
+        return ret
+
+    def htmlNodeDumpFormatOutput(self, buf, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFormatOutput(buf__o, self._o, cur__o, encoding, format)
+
+    def htmlNodeDumpOutput(self, buf, cur, encoding):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns/spaces are added. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpOutput(buf__o, self._o, cur__o, encoding)
+
+    def htmlSaveFile(self, filename):
+        """Dump an HTML document to a file. If @filename is "-" the
+           stdout file is used. """
+        ret = libxml2mod.htmlSaveFile(filename, self._o)
+        return ret
+
+    def htmlSaveFileEnc(self, filename, encoding):
+        """Dump an HTML document to a file using a given encoding and
+           formatting returns/spaces are added. """
+        ret = libxml2mod.htmlSaveFileEnc(filename, self._o, encoding)
+        return ret
+
+    def htmlSaveFileFormat(self, filename, encoding, format):
+        """Dump an HTML document to a file using a given encoding. """
+        ret = libxml2mod.htmlSaveFileFormat(filename, self._o, encoding, format)
+        return ret
+
+    def htmlSetMetaEncoding(self, encoding):
+        """Sets the current encoding in the Meta tags NOTE: this will
+          not change the document content encoding, just the META
+           flag associated. """
+        ret = libxml2mod.htmlSetMetaEncoding(self._o, encoding)
+        return ret
+
+    #
+    # xmlDoc functions from module debugXML
+    #
+
+    def debugCheckDocument(self, output):
+        """Check the document for potential content problems, and
+           output the errors to @output """
+        ret = libxml2mod.xmlDebugCheckDocument(output, self._o)
+        return ret
+
+    def debugDumpDocument(self, output):
+        """Dumps debug information for the document, it's recursive """
+        libxml2mod.xmlDebugDumpDocument(output, self._o)
+
+    def debugDumpDocumentHead(self, output):
+        """Dumps debug information cncerning the document, not
+           recursive """
+        libxml2mod.xmlDebugDumpDocumentHead(output, self._o)
+
+    def debugDumpEntities(self, output):
+        """Dumps debug information for all the entities in use by the
+           document """
+        libxml2mod.xmlDebugDumpEntities(output, self._o)
+
+    #
+    # xmlDoc functions from module entities
+    #
+
+    def addDocEntity(self, name, type, ExternalID, SystemID, content):
+        """Register a new entity for this document. """
+        ret = libxml2mod.xmlAddDocEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlAddDocEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def addDtdEntity(self, name, type, ExternalID, SystemID, content):
+        """Register a new entity for this document DTD external subset. """
+        ret = libxml2mod.xmlAddDtdEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlAddDtdEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def docEntity(self, name):
+        """Do an entity lookup in the document entity hash table and """
+        ret = libxml2mod.xmlGetDocEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetDocEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def dtdEntity(self, name):
+        """Do an entity lookup in the DTD entity hash table and """
+        ret = libxml2mod.xmlGetDtdEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetDtdEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def encodeEntities(self, input):
+        """TODO: remove xmlEncodeEntities, once we are not afraid of
+          breaking binary compatibility  People must migrate their
+          code to xmlEncodeEntitiesReentrant ! This routine will
+           issue a warning when encountered. """
+        ret = libxml2mod.xmlEncodeEntities(self._o, input)
+        return ret
+
+    def encodeEntitiesReentrant(self, input):
+        """Do a global encoding of a string, replacing the predefined
+          entities and non ASCII values with their entities and
+          CharRef counterparts. Contrary to xmlEncodeEntities, this
+           routine is reentrant, and result must be deallocated. """
+        ret = libxml2mod.xmlEncodeEntitiesReentrant(self._o, input)
+        return ret
+
+    def encodeSpecialChars(self, input):
+        """Do a global encoding of a string, replacing the predefined
+          entities this routine is reentrant, and result must be
+           deallocated. """
+        ret = libxml2mod.xmlEncodeSpecialChars(self._o, input)
+        return ret
+
+    def newEntity(self, name, type, ExternalID, SystemID, content):
+        """Create a new entity, this differs from xmlAddDocEntity()
+          that if the document is None or has no internal subset
+          defined, then an unlinked entity structure will be
+          returned, it is then the responsability of the caller to
+          link it to the document later or free it when not needed
+           anymore. """
+        ret = libxml2mod.xmlNewEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlNewEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def parameterEntity(self, name):
+        """Do an entity lookup in the internal and external subsets and """
+        ret = libxml2mod.xmlGetParameterEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetParameterEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module relaxng
+    #
+
+    def relaxNGNewDocParserCtxt(self):
+        """Create an XML RelaxNGs parser context for that document.
+          Note: since the process of compiling a RelaxNG schemas
+          modifies the document, the @doc parameter is duplicated
+           internally. """
+        ret = libxml2mod.xmlRelaxNGNewDocParserCtxt(self._o)
+        if ret is None:raise parserError('xmlRelaxNGNewDocParserCtxt() failed')
+        __tmp = relaxNgParserCtxt(_obj=ret)
+        return __tmp
+
+    def relaxNGValidateDoc(self, ctxt):
+        """Validate a document tree in memory. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlRelaxNGValidateDoc(ctxt__o, self._o)
+        return ret
+
+    def relaxNGValidateFullElement(self, ctxt, elem):
+        """Validate a full subtree when
+          xmlRelaxNGValidatePushElement() returned 0 and the content
+           of the node has been expanded. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidateFullElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def relaxNGValidatePopElement(self, ctxt, elem):
+        """Pop the element end from the RelaxNG validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePopElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def relaxNGValidatePushElement(self, ctxt, elem):
+        """Push a new element start on the RelaxNG validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePushElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    #
+    # xmlDoc functions from module tree
+    #
+
+    def copyDoc(self, recursive):
+        """Do a copy of the document info. If recursive, the content
+          tree will be copied too as well as DTD, namespaces and
+           entities. """
+        ret = libxml2mod.xmlCopyDoc(self._o, recursive)
+        if ret is None:raise treeError('xmlCopyDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def copyNode(self, node, extended):
+        """Do a copy of the node to a given document. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlDocCopyNode(node__o, self._o, extended)
+        if ret is None:raise treeError('xmlDocCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNodeList(self, node):
+        """Do a recursive copy of the node list. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlDocCopyNodeList(self._o, node__o)
+        if ret is None:raise treeError('xmlDocCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def createIntSubset(self, name, ExternalID, SystemID):
+        """Create the internal subset of a document """
+        ret = libxml2mod.xmlCreateIntSubset(self._o, name, ExternalID, SystemID)
+        if ret is None:raise treeError('xmlCreateIntSubset() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def docCompressMode(self):
+        """get the compression ratio for a document, ZLIB based """
+        ret = libxml2mod.xmlGetDocCompressMode(self._o)
+        return ret
+
+    def dump(self, f):
+        """Dump an XML document to an open FILE. """
+        ret = libxml2mod.xmlDocDump(f, self._o)
+        return ret
+
+    def elemDump(self, f, cur):
+        """Dump an XML/HTML node, recursive behaviour, children are
+           printed too. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlElemDump(f, self._o, cur__o)
+
+    def formatDump(self, f, format):
+        """Dump an XML document to an open FILE. """
+        ret = libxml2mod.xmlDocFormatDump(f, self._o, format)
+        return ret
+
+    def freeDoc(self):
+        """Free up all the structures used by a document, tree
+           included. """
+        libxml2mod.xmlFreeDoc(self._o)
+
+    def getRootElement(self):
+        """Get the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        ret = libxml2mod.xmlDocGetRootElement(self._o)
+        if ret is None:raise treeError('xmlDocGetRootElement() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def intSubset(self):
+        """Get the internal subset of a document """
+        ret = libxml2mod.xmlGetIntSubset(self._o)
+        if ret is None:raise treeError('xmlGetIntSubset() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def newCDataBlock(self, content, len):
+        """Creation of a new node containing a CDATA block. """
+        ret = libxml2mod.xmlNewCDataBlock(self._o, content, len)
+        if ret is None:raise treeError('xmlNewCDataBlock() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newCharRef(self, name):
+        """Creation of a new character reference node. """
+        ret = libxml2mod.xmlNewCharRef(self._o, name)
+        if ret is None:raise treeError('xmlNewCharRef() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocComment(self, content):
+        """Creation of a new node containing a comment within a
+           document. """
+        ret = libxml2mod.xmlNewDocComment(self._o, content)
+        if ret is None:raise treeError('xmlNewDocComment() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocFragment(self):
+        """Creation of a new Fragment node. """
+        ret = libxml2mod.xmlNewDocFragment(self._o)
+        if ret is None:raise treeError('xmlNewDocFragment() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNode(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocNode(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNodeEatName(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocNodeEatName(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocPI(self, name, content):
+        """Creation of a processing instruction element. """
+        ret = libxml2mod.xmlNewDocPI(self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocPI() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocProp(self, name, value):
+        """Create a new property carried by a document. """
+        ret = libxml2mod.xmlNewDocProp(self._o, name, value)
+        if ret is None:raise treeError('xmlNewDocProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newDocRawNode(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+           @content are optional (None). """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocRawNode(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocRawNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocText(self, content):
+        """Creation of a new text node within a document. """
+        ret = libxml2mod.xmlNewDocText(self._o, content)
+        if ret is None:raise treeError('xmlNewDocText() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocTextLen(self, content, len):
+        """Creation of a new text node with an extra content length
+           parameter. The text node pertain to a given document. """
+        ret = libxml2mod.xmlNewDocTextLen(self._o, content, len)
+        if ret is None:raise treeError('xmlNewDocTextLen() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDtd(self, name, ExternalID, SystemID):
+        """Creation of a new DTD for the external subset. To create an
+           internal subset, use xmlCreateIntSubset(). """
+        ret = libxml2mod.xmlNewDtd(self._o, name, ExternalID, SystemID)
+        if ret is None:raise treeError('xmlNewDtd() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def newGlobalNs(self, href, prefix):
+        """Creation of a Namespace, the old way using PI and without
+           scoping DEPRECATED !!! """
+        ret = libxml2mod.xmlNewGlobalNs(self._o, href, prefix)
+        if ret is None:raise treeError('xmlNewGlobalNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def newReference(self, name):
+        """Creation of a new reference node. """
+        ret = libxml2mod.xmlNewReference(self._o, name)
+        if ret is None:raise treeError('xmlNewReference() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def nodeDumpOutput(self, buf, cur, level, format, encoding):
+        """Dump an XML node, recursive behaviour, children are printed
+          too. Note that @format = 1 provide node indenting only if
+          xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was
+           called """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlNodeDumpOutput(buf__o, self._o, cur__o, level, format, encoding)
+
+    def nodeGetBase(self, cur):
+        """Searches for the BASE URL. The code should work on both XML
+          and HTML document even if base mechanisms are completely
+          different. It returns the base as defined in RFC 2396
+          sections 5.1.1. Base URI within Document Content and 5.1.2.
+          Base URI from the Encapsulating Entity However it does not
+           return the document base (5.1.3), use doc->URL in this case """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlNodeGetBase(self._o, cur__o)
+        return ret
+
+    def nodeListGetRawString(self, list, inLine):
+        """Builds the string equivalent to the text contained in the
+          Node list made of TEXTs and ENTITY_REFs, contrary to
+          xmlNodeListGetString() this function doesn't do any
+           character encoding handling. """
+        if list is None: list__o = None
+        else: list__o = list._o
+        ret = libxml2mod.xmlNodeListGetRawString(self._o, list__o, inLine)
+        return ret
+
+    def nodeListGetString(self, list, inLine):
+        """Build the string equivalent to the text contained in the
+           Node list made of TEXTs and ENTITY_REFs """
+        if list is None: list__o = None
+        else: list__o = list._o
+        ret = libxml2mod.xmlNodeListGetString(self._o, list__o, inLine)
+        return ret
+
+    def reconciliateNs(self, tree):
+        """This function checks that all the namespaces declared
+          within the given tree are properly declared. This is needed
+          for example after Copy or Cut and then paste operations.
+          The subtree may still hold pointers to namespace
+          declarations outside the subtree or invalid/masked. As much
+          as possible the function try to reuse the existing
+          namespaces found in the new environment. If not possible
+          the new namespaces are redeclared on @tree at the top of
+           the given subtree. """
+        if tree is None: tree__o = None
+        else: tree__o = tree._o
+        ret = libxml2mod.xmlReconciliateNs(self._o, tree__o)
+        return ret
+
+    def saveFile(self, filename):
+        """Dump an XML document to a file. Will use compression if
+          compiled in and enabled. If @filename is "-" the stdout
+           file is used. """
+        ret = libxml2mod.xmlSaveFile(filename, self._o)
+        return ret
+
+    def saveFileEnc(self, filename, encoding):
+        """Dump an XML document, converting it to the given encoding """
+        ret = libxml2mod.xmlSaveFileEnc(filename, self._o, encoding)
+        return ret
+
+    def saveFileTo(self, buf, encoding):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        ret = libxml2mod.xmlSaveFileTo(buf__o, self._o, encoding)
+        return ret
+
+    def saveFormatFile(self, filename, format):
+        """Dump an XML document to a file. Will use compression if
+          compiled in and enabled. If @filename is "-" the stdout
+          file is used. If @format is set then the document will be
+          indented on output. Note that @format = 1 provide node
+          indenting only if xmlIndentTreeOutput = 1 or
+           xmlKeepBlanksDefault(0) was called """
+        ret = libxml2mod.xmlSaveFormatFile(filename, self._o, format)
+        return ret
+
+    def saveFormatFileEnc(self, filename, encoding, format):
+        """Dump an XML document to a file or an URL. """
+        ret = libxml2mod.xmlSaveFormatFileEnc(filename, self._o, encoding, format)
+        return ret
+
+    def saveFormatFileTo(self, buf, encoding, format):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        ret = libxml2mod.xmlSaveFormatFileTo(buf__o, self._o, encoding, format)
+        return ret
+
+    def searchNs(self, node, nameSpace):
+        """Search a Ns registered under a given name space for a
+          document. recurse on the parents until it finds the defined
+          namespace or return None otherwise. @nameSpace can be None,
+          this is a search for the default namespace. We don't allow
+          to cross entities boundaries. If you don't declare the
+          namespace within those you will be in troubles !!! A
+           warning is generated to cover this case. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSearchNs(self._o, node__o, nameSpace)
+        if ret is None:raise treeError('xmlSearchNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def searchNsByHref(self, node, href):
+        """Search a Ns aliasing a given URI. Recurse on the parents
+          until it finds the defined namespace or return None
+           otherwise. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSearchNsByHref(self._o, node__o, href)
+        if ret is None:raise treeError('xmlSearchNsByHref() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def setDocCompressMode(self, mode):
+        """set the compression ratio for a document, ZLIB based
+           Correct values: 0 (uncompressed) to 9 (max compression) """
+        libxml2mod.xmlSetDocCompressMode(self._o, mode)
+
+    def setListDoc(self, list):
+        """update all nodes in the list to point to the right document """
+        if list is None: list__o = None
+        else: list__o = list._o
+        libxml2mod.xmlSetListDoc(list__o, self._o)
+
+    def setRootElement(self, root):
+        """Set the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        if root is None: root__o = None
+        else: root__o = root._o
+        ret = libxml2mod.xmlDocSetRootElement(self._o, root__o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def setTreeDoc(self, tree):
+        """update all nodes under the tree to point to the right
+           document """
+        if tree is None: tree__o = None
+        else: tree__o = tree._o
+        libxml2mod.xmlSetTreeDoc(tree__o, self._o)
+
+    def stringGetNodeList(self, value):
+        """Parse the value string and build the node list associated.
+           Should produce a flat tree with only TEXTs and ENTITY_REFs. """
+        ret = libxml2mod.xmlStringGetNodeList(self._o, value)
+        if ret is None:raise treeError('xmlStringGetNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def stringLenGetNodeList(self, value, len):
+        """Parse the value string and build the node list associated.
+           Should produce a flat tree with only TEXTs and ENTITY_REFs. """
+        ret = libxml2mod.xmlStringLenGetNodeList(self._o, value, len)
+        if ret is None:raise treeError('xmlStringLenGetNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module valid
+    #
+
+    def ID(self, ID):
+        """Search the attribute declaring the given ID """
+        ret = libxml2mod.xmlGetID(self._o, ID)
+        if ret is None:raise treeError('xmlGetID() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def isID(self, elem, attr):
+        """Determine whether an attribute is of type ID. In case we
+          have DTD(s) then this is done if DTD loading has been
+          requested. In the case of HTML documents parsed with the
+           HTML parser, then ID detection is done systematically. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsID(self._o, elem__o, attr__o)
+        return ret
+
+    def isMixedElement(self, name):
+        """Search in the DtDs whether an element accept Mixed content
+           (or ANY) basically if it is supposed to accept text childs """
+        ret = libxml2mod.xmlIsMixedElement(self._o, name)
+        return ret
+
+    def isRef(self, elem, attr):
+        """Determine whether an attribute is of type Ref. In case we
+          have DTD(s) then this is simple, otherwise we use an
+           heuristic: name Ref (upper or lowercase). """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsRef(self._o, elem__o, attr__o)
+        return ret
+
+    def removeID(self, attr):
+        """Remove the given attribute from the ID table maintained
+           internally. """
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlRemoveID(self._o, attr__o)
+        return ret
+
+    def removeRef(self, attr):
+        """Remove the given attribute from the Ref table maintained
+           internally. """
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlRemoveRef(self._o, attr__o)
+        return ret
+
+    def validCtxtNormalizeAttributeValue(self, ctxt, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+          space (#x20) characters by single space (#x20) character. 
+          Also  check VC: Standalone Document Declaration in P32, and
+           update ctxt->valid accordingly """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidCtxtNormalizeAttributeValue(ctxt__o, self._o, elem__o, name, value)
+        return ret
+
+    def validNormalizeAttributeValue(self, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+           space (#x20) characters by single space (#x20) character. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidNormalizeAttributeValue(self._o, elem__o, name, value)
+        return ret
+
+    def validateDocument(self, ctxt):
+        """Try to validate the document instance  basically it does
+          the all the checks described by the XML Rec i.e. validates
+          the internal and external subset (if present) and validate
+           the document tree. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDocument(ctxt__o, self._o)
+        return ret
+
+    def validateDocumentFinal(self, ctxt):
+        """Does the final step for the document validation once all
+          the incremental validation steps have been completed 
+          basically it does the following checks described by the XML
+          Rec  Check all the IDREF/IDREFS attributes definition for
+           validity """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDocumentFinal(ctxt__o, self._o)
+        return ret
+
+    def validateDtd(self, ctxt, dtd):
+        """Try to validate the document against the dtd instance 
+          Basically it does check all the definitions in the DtD.
+          Note the the internal subset (if present) is de-coupled
+          (i.e. not used), which could give problems if ID or IDREF
+           is present. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if dtd is None: dtd__o = None
+        else: dtd__o = dtd._o
+        ret = libxml2mod.xmlValidateDtd(ctxt__o, self._o, dtd__o)
+        return ret
+
+    def validateDtdFinal(self, ctxt):
+        """Does the final step for the dtds validation once all the
+          subsets have been parsed  basically it does the following
+          checks described by the XML Rec - check that ENTITY and
+          ENTITIES type attributes default or possible values matches
+          one of the defined entities. - check that NOTATION type
+          attributes default or possible values matches one of the
+           defined notations. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDtdFinal(ctxt__o, self._o)
+        return ret
+
+    def validateElement(self, ctxt, elem):
+        """Try to validate the subtree under an element """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def validateNotationUse(self, ctxt, notationName):
+        """Validate that the given name match a notation declaration.
+           - [ VC: Notation Declared ] """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateNotationUse(ctxt__o, self._o, notationName)
+        return ret
+
+    def validateOneAttribute(self, ctxt, elem, attr, value):
+        """Try to validate a single attribute for an element basically
+          it does the following checks as described by the XML-1.0
+          recommendation: - [ VC: Attribute Value Type ] - [ VC:
+          Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC:
+          Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity
+          Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlValidateOneAttribute(ctxt__o, self._o, elem__o, attr__o, value)
+        return ret
+
+    def validateOneElement(self, ctxt, elem):
+        """Try to validate a single element and it's attributes,
+          basically it does the following checks as described by the
+          XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC:
+          Required Attribute ] Then call xmlValidateOneAttribute()
+          for each attribute present.  The ID/IDREF checkings are
+           done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateOneElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def validateOneNamespace(self, ctxt, elem, prefix, ns, value):
+        """Try to validate a single namespace declaration for an
+          element basically it does the following checks as described
+          by the XML-1.0 recommendation: - [ VC: Attribute Value Type
+          ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] -
+          [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC:
+          Entity Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlValidateOneNamespace(ctxt__o, self._o, elem__o, prefix, ns__o, value)
+        return ret
+
+    def validatePopElement(self, ctxt, elem, qname):
+        """Pop the element end from the validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePopElement(ctxt__o, self._o, elem__o, qname)
+        return ret
+
+    def validatePushElement(self, ctxt, elem, qname):
+        """Push a new element start on the validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePushElement(ctxt__o, self._o, elem__o, qname)
+        return ret
+
+    def validateRoot(self, ctxt):
+        """Try to validate a the root element basically it does the
+          following check as described by the XML-1.0 recommendation:
+          - [ VC: Root Element Type ] it doesn't try to recurse or
+           apply other check to the element """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateRoot(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xinclude
+    #
+
+    def xincludeProcess(self):
+        """Implement the XInclude substitution on the XML document @doc """
+        ret = libxml2mod.xmlXIncludeProcess(self._o)
+        return ret
+
+    def xincludeProcessFlags(self, flags):
+        """Implement the XInclude substitution on the XML document @doc """
+        ret = libxml2mod.xmlXIncludeProcessFlags(self._o, flags)
+        return ret
+
+    #
+    # xmlDoc functions from module xmlreader
+    #
+
+    def NewWalker(self, reader):
+        """Setup an xmltextReader to parse a preparsed XML document.
+           This reuses the existing @reader xmlTextReader. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlReaderNewWalker(reader__o, self._o)
+        return ret
+
+    def readerWalker(self):
+        """Create an xmltextReader for a preparsed document. """
+        ret = libxml2mod.xmlReaderWalker(self._o)
+        if ret is None:raise treeError('xmlReaderWalker() failed')
+        __tmp = xmlTextReader(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module xmlschemas
+    #
+
+    def schemaNewDocParserCtxt(self):
+        """Create an XML Schemas parse context for that document. NB.
+           The document may be modified during the parsing process. """
+        ret = libxml2mod.xmlSchemaNewDocParserCtxt(self._o)
+        if ret is None:raise parserError('xmlSchemaNewDocParserCtxt() failed')
+        __tmp = SchemaParserCtxt(_obj=ret)
+        return __tmp
+
+    def schemaValidateDoc(self, ctxt):
+        """Validate a document tree in memory. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlSchemaValidateDoc(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xpath
+    #
+
+    def xpathNewContext(self):
+        """Create a new xmlXPathContext """
+        ret = libxml2mod.xmlXPathNewContext(self._o)
+        if ret is None:raise xpathError('xmlXPathNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    def xpathOrderDocElems(self):
+        """Call this routine to speed up XPath computation on static
+          documents. This stamps all the element nodes with the
+          document order Like for line information, the order is kept
+          in the element->content field, the value stored is actually
+          - the node number (starting at -1) to be able to
+           differentiate from line numbers. """
+        ret = libxml2mod.xmlXPathOrderDocElems(self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xpointer
+    #
+
+    def xpointerNewContext(self, here, origin):
+        """Create a new XPointer context """
+        if here is None: here__o = None
+        else: here__o = here._o
+        if origin is None: origin__o = None
+        else: origin__o = origin._o
+        ret = libxml2mod.xmlXPtrNewContext(self._o, here__o, origin__o)
+        if ret is None:raise treeError('xmlXPtrNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+class parserCtxt(parserCtxtCore):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        parserCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeParserCtxt(self._o)
+        self._o = None
+
+    # accessors for parserCtxt
+    def doc(self):
+        """Get the document tree from a parser context. """
+        ret = libxml2mod.xmlParserGetDoc(self._o)
+        if ret is None:raise parserError('xmlParserGetDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def isValid(self):
+        """Get the validity information from a parser context. """
+        ret = libxml2mod.xmlParserGetIsValid(self._o)
+        return ret
+
+    def lineNumbers(self, linenumbers):
+        """Switch on the generation of line number for elements nodes. """
+        libxml2mod.xmlParserSetLineNumbers(self._o, linenumbers)
+
+    def loadSubset(self, loadsubset):
+        """Switch the parser to load the DTD without validating. """
+        libxml2mod.xmlParserSetLoadSubset(self._o, loadsubset)
+
+    def pedantic(self, pedantic):
+        """Switch the parser to be pedantic. """
+        libxml2mod.xmlParserSetPedantic(self._o, pedantic)
+
+    def replaceEntities(self, replaceEntities):
+        """Switch the parser to replace entities. """
+        libxml2mod.xmlParserSetReplaceEntities(self._o, replaceEntities)
+
+    def validate(self, validate):
+        """Switch the parser to validation mode. """
+        libxml2mod.xmlParserSetValidate(self._o, validate)
+
+    def wellFormed(self):
+        """Get the well formed information from a parser context. """
+        ret = libxml2mod.xmlParserGetWellFormed(self._o)
+        return ret
+
+    #
+    # parserCtxt functions from module HTMLparser
+    #
+
+    def htmlCtxtReadDoc(self, cur, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadDoc(self._o, cur, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadFd(self, fd, URL, encoding, options):
+        """parse an XML from a file descriptor and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadFd(self._o, fd, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadFd() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadFile(self._o, filename, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadFile() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadMemory(self, buffer, size, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadMemory(self._o, buffer, size, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadMemory() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReset(self):
+        """Reset a parser context """
+        libxml2mod.htmlCtxtReset(self._o)
+
+    def htmlCtxtUseOptions(self, options):
+        """Applies the options to the parser context """
+        ret = libxml2mod.htmlCtxtUseOptions(self._o, options)
+        return ret
+
+    def htmlFreeParserCtxt(self):
+        """Free all the memory used by a parser context. However the
+           parsed document in ctxt->myDoc is not freed. """
+        libxml2mod.htmlFreeParserCtxt(self._o)
+
+    def htmlParseCharRef(self):
+        """parse Reference declarations  [66] CharRef ::= '&#' [0-9]+
+           ';' | '&#x' [0-9a-fA-F]+ ';' """
+        ret = libxml2mod.htmlParseCharRef(self._o)
+        return ret
+
+    def htmlParseChunk(self, chunk, size, terminate):
+        """Parse a Chunk of memory """
+        ret = libxml2mod.htmlParseChunk(self._o, chunk, size, terminate)
+        return ret
+
+    def htmlParseDocument(self):
+        """parse an HTML document (and build a tree if using the
+           standard SAX interface). """
+        ret = libxml2mod.htmlParseDocument(self._o)
+        return ret
+
+    def htmlParseElement(self):
+        """parse an HTML element, this is highly recursive this is
+          kept for compatibility with previous code versions  [39]
+          element ::= EmptyElemTag | STag content ETag  [41]
+           Attribute ::= Name Eq AttValue """
+        libxml2mod.htmlParseElement(self._o)
+
+    #
+    # parserCtxt functions from module parser
+    #
+
+    def byteConsumed(self):
+        """This function provides the current index of the parser
+          relative to the start of the current entity. This function
+          is computed in bytes from the beginning starting at zero
+          and finishing at the size in byte of the file if parsing a
+          file. The function is of constant cost if the input is
+           UTF-8 but can be costly if run on non-UTF-8 input. """
+        ret = libxml2mod.xmlByteConsumed(self._o)
+        return ret
+
+    def clearParserCtxt(self):
+        """Clear (release owned resources) and reinitialize a parser
+           context """
+        libxml2mod.xmlClearParserCtxt(self._o)
+
+    def ctxtReadDoc(self, cur, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadDoc(self._o, cur, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadFd(self, fd, URL, encoding, options):
+        """parse an XML from a file descriptor and build a tree. This
+          reuses the existing @ctxt parser context NOTE that the file
+          descriptor will not be closed when the reader is closed or
+           reset. """
+        ret = libxml2mod.xmlCtxtReadFd(self._o, fd, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadFd() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadFile(self._o, filename, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadFile() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadMemory(self, buffer, size, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadMemory(self._o, buffer, size, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadMemory() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReset(self):
+        """Reset a parser context """
+        libxml2mod.xmlCtxtReset(self._o)
+
+    def ctxtResetPush(self, chunk, size, filename, encoding):
+        """Reset a push parser context """
+        ret = libxml2mod.xmlCtxtResetPush(self._o, chunk, size, filename, encoding)
+        return ret
+
+    def ctxtUseOptions(self, options):
+        """Applies the options to the parser context """
+        ret = libxml2mod.xmlCtxtUseOptions(self._o, options)
+        return ret
+
+    def initParserCtxt(self):
+        """Initialize a parser context """
+        ret = libxml2mod.xmlInitParserCtxt(self._o)
+        return ret
+
+    def parseChunk(self, chunk, size, terminate):
+        """Parse a Chunk of memory """
+        ret = libxml2mod.xmlParseChunk(self._o, chunk, size, terminate)
+        return ret
+
+    def parseDocument(self):
+        """parse an XML document (and build a tree if using the
+          standard SAX interface).  [1] document ::= prolog element
+           Misc*  [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? """
+        ret = libxml2mod.xmlParseDocument(self._o)
+        return ret
+
+    def parseExtParsedEnt(self):
+        """parse a general parsed entity An external general parsed
+          entity is well-formed if it matches the production labeled
+           extParsedEnt.  [78] extParsedEnt ::= TextDecl? content """
+        ret = libxml2mod.xmlParseExtParsedEnt(self._o)
+        return ret
+
+    def setupParserForBuffer(self, buffer, filename):
+        """Setup the parser context to parse a new buffer; Clears any
+          prior contents from the parser context. The buffer
+          parameter must not be None, but the filename parameter can
+           be """
+        libxml2mod.xmlSetupParserForBuffer(self._o, buffer, filename)
+
+    def stopParser(self):
+        """Blocks further parser processing """
+        libxml2mod.xmlStopParser(self._o)
+
+    #
+    # parserCtxt functions from module parserInternals
+    #
+
+    def decodeEntities(self, len, what, end, end2, end3):
+        """This function is deprecated, we now always process entities
+          content through xmlStringDecodeEntities  TODO: remove it in
+          next major release.  [67] Reference ::= EntityRef | CharRef
+            [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlDecodeEntities(self._o, len, what, end, end2, end3)
+        return ret
+
+    def handleEntity(self, entity):
+        """Default handling of defined entities, when should we define
+          a new input stream ? When do we just handle that as a set
+           of chars ?  OBSOLETE: to be removed at some point. """
+        if entity is None: entity__o = None
+        else: entity__o = entity._o
+        libxml2mod.xmlHandleEntity(self._o, entity__o)
+
+    def namespaceParseNCName(self):
+        """parse an XML namespace name.  TODO: this seems not in use
+          anymore, the namespace handling is done on top of the SAX
+          interfaces, i.e. not on raw input.  [NS 3] NCName ::=
+          (Letter | '_') (NCNameChar)*  [NS 4] NCNameChar ::= Letter
+           | Digit | '.' | '-' | '_' | CombiningChar | Extender """
+        ret = libxml2mod.xmlNamespaceParseNCName(self._o)
+        return ret
+
+    def namespaceParseNSDef(self):
+        """parse a namespace prefix declaration  TODO: this seems not
+          in use anymore, the namespace handling is done on top of
+          the SAX interfaces, i.e. not on raw input.  [NS 1] NSDef
+          ::= PrefixDef Eq SystemLiteral  [NS 2] PrefixDef ::=
+           'xmlns' (':' NCName)? """
+        ret = libxml2mod.xmlNamespaceParseNSDef(self._o)
+        return ret
+
+    def nextChar(self):
+        """Skip to the next char input char. """
+        libxml2mod.xmlNextChar(self._o)
+
+    def parseAttValue(self):
+        """parse a value for an attribute Note: the parser won't do
+          substitution of entities here, this will be handled later
+          in xmlStringGetNodeList  [10] AttValue ::= '"' ([^<&"] |
+          Reference)* '"' | "'" ([^<&'] | Reference)* "'"  3.3.3
+          Attribute-Value Normalization: Before the value of an
+          attribute is passed to the application or checked for
+          validity, the XML processor must normalize it as follows: -
+          a character reference is processed by appending the
+          referenced character to the attribute value - an entity
+          reference is processed by recursively processing the
+          replacement text of the entity - a whitespace character
+          (#x20, #xD, #xA, #x9) is processed by appending #x20 to the
+          normalized value, except that only a single #x20 is
+          appended for a "#xD#xA" sequence that is part of an
+          external parsed entity or the literal entity value of an
+          internal parsed entity - other characters are processed by
+          appending them to the normalized value If the declared
+          value is not CDATA, then the XML processor must further
+          process the normalized attribute value by discarding any
+          leading and trailing space (#x20) characters, and by
+          replacing sequences of space (#x20) characters by a single
+          space (#x20) character. All attributes for which no
+          declaration has been read should be treated by a
+           non-validating parser as if declared CDATA. """
+        ret = libxml2mod.xmlParseAttValue(self._o)
+        return ret
+
+    def parseAttributeListDecl(self):
+        """: parse the Attribute list def for an element  [52]
+          AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'  [53]
+           AttDef ::= S Name S AttType S DefaultDecl """
+        libxml2mod.xmlParseAttributeListDecl(self._o)
+
+    def parseCDSect(self):
+        """Parse escaped pure raw content.  [18] CDSect ::= CDStart
+          CData CDEnd  [19] CDStart ::= '<![CDATA['  [20] Data ::=
+           (Char* - (Char* ']]>' Char*))  [21] CDEnd ::= ']]>' """
+        libxml2mod.xmlParseCDSect(self._o)
+
+    def parseCharData(self, cdata):
+        """parse a CharData section. if we are within a CDATA section
+          ']]>' marks an end of section.  The right angle bracket (>)
+          may be represented using the string "&gt;", and must, for
+          compatibility, be escaped using "&gt;" or a character
+          reference when it appears in the string "]]>" in content,
+          when that string is not marking the end of a CDATA section.
+            [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) """
+        libxml2mod.xmlParseCharData(self._o, cdata)
+
+    def parseCharRef(self):
+        """parse Reference declarations  [66] CharRef ::= '&#' [0-9]+
+          ';' | '&#x' [0-9a-fA-F]+ ';'  [ WFC: Legal Character ]
+          Characters referred to using character references must
+           match the production for Char. """
+        ret = libxml2mod.xmlParseCharRef(self._o)
+        return ret
+
+    def parseComment(self):
+        """Skip an XML (SGML) comment <!-- .... --> The spec says that
+          "For compatibility, the string "--" (double-hyphen) must
+          not occur within comments. "  [15] Comment ::= '<!--'
+           ((Char - '-') | ('-' (Char - '-')))* '-->' """
+        libxml2mod.xmlParseComment(self._o)
+
+    def parseContent(self):
+        """Parse a content:  [43] content ::= (element | CharData |
+           Reference | CDSect | PI | Comment)* """
+        libxml2mod.xmlParseContent(self._o)
+
+    def parseDocTypeDecl(self):
+        """parse a DOCTYPE declaration  [28] doctypedecl ::=
+          '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl |
+          PEReference | S)* ']' S?)? '>'  [ VC: Root Element Type ]
+          The Name in the document type declaration must match the
+           element type of the root element. """
+        libxml2mod.xmlParseDocTypeDecl(self._o)
+
+    def parseElement(self):
+        """parse an XML element, this is highly recursive  [39]
+          element ::= EmptyElemTag | STag content ETag  [ WFC:
+          Element Type Match ] The Name in an element's end-tag must
+           match the element type in the start-tag. """
+        libxml2mod.xmlParseElement(self._o)
+
+    def parseElementDecl(self):
+        """parse an Element declaration.  [45] elementdecl ::=
+          '<!ELEMENT' S Name S contentspec S? '>'  [ VC: Unique
+          Element Type Declaration ] No element type may be declared
+           more than once """
+        ret = libxml2mod.xmlParseElementDecl(self._o)
+        return ret
+
+    def parseEncName(self):
+        """parse the XML encoding name  [81] EncName ::= [A-Za-z]
+           ([A-Za-z0-9._] | '-')* """
+        ret = libxml2mod.xmlParseEncName(self._o)
+        return ret
+
+    def parseEncodingDecl(self):
+        """parse the XML encoding declaration  [80] EncodingDecl ::= S
+          'encoding' Eq ('"' EncName '"' |  "'" EncName "'")  this
+           setups the conversion filters. """
+        ret = libxml2mod.xmlParseEncodingDecl(self._o)
+        return ret
+
+    def parseEndTag(self):
+        """parse an end of tag  [42] ETag ::= '</' Name S? '>'  With
+           namespace  [NS 9] ETag ::= '</' QName S? '>' """
+        libxml2mod.xmlParseEndTag(self._o)
+
+    def parseEntityDecl(self):
+        """parse <!ENTITY declarations  [70] EntityDecl ::= GEDecl |
+          PEDecl  [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S?
+          '>'  [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
+          [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) 
+          [74] PEDef ::= EntityValue | ExternalID  [76] NDataDecl ::=
+          S 'NDATA' S Name  [ VC: Notation Declared ] The Name must
+           match the declared name of a notation. """
+        libxml2mod.xmlParseEntityDecl(self._o)
+
+    def parseEntityRef(self):
+        """parse ENTITY references declarations  [68] EntityRef ::=
+          '&' Name ';'  [ WFC: Entity Declared ] In a document
+          without any DTD, a document with only an internal DTD
+          subset which contains no parameter entity references, or a
+          document with "standalone='yes'", the Name given in the
+          entity reference must match that in an entity declaration,
+          except that well-formed documents need not declare any of
+          the following entities: amp, lt, gt, apos, quot.  The
+          declaration of a parameter entity must precede any
+          reference to it.  Similarly, the declaration of a general
+          entity must precede any reference to it which appears in a
+          default value in an attribute-list declaration. Note that
+          if entities are declared in the external subset or in
+          external parameter entities, a non-validating processor is
+          not obligated to read and process their declarations; for
+          such documents, the rule that an entity must be declared is
+          a well-formedness constraint only if standalone='yes'.  [
+          WFC: Parsed Entity ] An entity reference must not contain
+           the name of an unparsed entity """
+        ret = libxml2mod.xmlParseEntityRef(self._o)
+        if ret is None:raise parserError('xmlParseEntityRef() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def parseExternalSubset(self, ExternalID, SystemID):
+        """parse Markup declarations from an external subset  [30]
+          extSubset ::= textDecl? extSubsetDecl  [31] extSubsetDecl
+           ::= (markupdecl | conditionalSect | PEReference | S) * """
+        libxml2mod.xmlParseExternalSubset(self._o, ExternalID, SystemID)
+
+    def parseMarkupDecl(self):
+        """parse Markup declarations  [29] markupdecl ::= elementdecl
+          | AttlistDecl | EntityDecl | NotationDecl | PI | Comment  [
+          VC: Proper Declaration/PE Nesting ] Parameter-entity
+          replacement text must be properly nested with markup
+          declarations. That is to say, if either the first character
+          or the last character of a markup declaration (markupdecl
+          above) is contained in the replacement text for a
+          parameter-entity reference, both must be contained in the
+          same replacement text.  [ WFC: PEs in Internal Subset ] In
+          the internal DTD subset, parameter-entity references can
+          occur only where markup declarations can occur, not within
+          markup declarations. (This does not apply to references
+          that occur in external parameter entities or to the
+           external subset.) """
+        libxml2mod.xmlParseMarkupDecl(self._o)
+
+    def parseMisc(self):
+        """parse an XML Misc* optional field.  [27] Misc ::= Comment |
+           PI |  S """
+        libxml2mod.xmlParseMisc(self._o)
+
+    def parseName(self):
+        """parse an XML name.  [4] NameChar ::= Letter | Digit | '.' |
+          '-' | '_' | ':' | CombiningChar | Extender  [5] Name ::=
+          (Letter | '_' | ':') (NameChar)*  [6] Names ::= Name (#x20
+           Name)* """
+        ret = libxml2mod.xmlParseName(self._o)
+        return ret
+
+    def parseNamespace(self):
+        """xmlParseNamespace: parse specific PI '<?namespace ...'
+          constructs.  This is what the older xml-name Working Draft
+          specified, a bunch of other stuff may still rely on it, so
+          support is still here as if it was declared on the root of
+          the Tree:-(  TODO: remove from library  To be removed at
+           next drop of binary compatibility """
+        libxml2mod.xmlParseNamespace(self._o)
+
+    def parseNmtoken(self):
+        """parse an XML Nmtoken.  [7] Nmtoken ::= (NameChar)+  [8]
+           Nmtokens ::= Nmtoken (#x20 Nmtoken)* """
+        ret = libxml2mod.xmlParseNmtoken(self._o)
+        return ret
+
+    def parseNotationDecl(self):
+        """parse a notation declaration  [82] NotationDecl ::=
+          '<!NOTATION' S Name S (ExternalID |  PublicID) S? '>' 
+          Hence there is actually 3 choices: 'PUBLIC' S PubidLiteral
+          'PUBLIC' S PubidLiteral S SystemLiteral and 'SYSTEM' S
+           SystemLiteral  See the NOTE on xmlParseExternalID(). """
+        libxml2mod.xmlParseNotationDecl(self._o)
+
+    def parsePEReference(self):
+        """parse PEReference declarations The entity content is
+          handled directly by pushing it's content as a new input
+          stream.  [69] PEReference ::= '%' Name ';'  [ WFC: No
+          Recursion ] A parsed entity must not contain a recursive
+          reference to itself, either directly or indirectly.  [ WFC:
+          Entity Declared ] In a document without any DTD, a document
+          with only an internal DTD subset which contains no
+          parameter entity references, or a document with
+          "standalone='yes'", ...  ... The declaration of a parameter
+          entity must precede any reference to it...  [ VC: Entity
+          Declared ] In a document with an external subset or
+          external parameter entities with "standalone='no'", ... 
+          ... The declaration of a parameter entity must precede any
+          reference to it...  [ WFC: In DTD ] Parameter-entity
+          references may only appear in the DTD. NOTE: misleading but
+           this is handled. """
+        libxml2mod.xmlParsePEReference(self._o)
+
+    def parsePI(self):
+        """parse an XML Processing Instruction.  [16] PI ::= '<?'
+          PITarget (S (Char* - (Char* '?>' Char*)))? '?>'  The
+           processing is transfered to SAX once parsed. """
+        libxml2mod.xmlParsePI(self._o)
+
+    def parsePITarget(self):
+        """parse the name of a PI  [17] PITarget ::= Name - (('X' |
+           'x') ('M' | 'm') ('L' | 'l')) """
+        ret = libxml2mod.xmlParsePITarget(self._o)
+        return ret
+
+    def parsePubidLiteral(self):
+        """parse an XML public literal  [12] PubidLiteral ::= '"'
+           PubidChar* '"' | "'" (PubidChar - "'")* "'" """
+        ret = libxml2mod.xmlParsePubidLiteral(self._o)
+        return ret
+
+    def parseQuotedString(self):
+        """Parse and return a string between quotes or doublequotes 
+          TODO: Deprecated, to  be removed at next drop of binary
+           compatibility """
+        ret = libxml2mod.xmlParseQuotedString(self._o)
+        return ret
+
+    def parseReference(self):
+        """parse and handle entity references in content, depending on
+          the SAX interface, this may end-up in a call to character()
+          if this is a CharRef, a predefined entity, if there is no
+          reference() callback. or if the parser was asked to switch
+           to that mode.  [67] Reference ::= EntityRef | CharRef """
+        libxml2mod.xmlParseReference(self._o)
+
+    def parseSDDecl(self):
+        """parse the XML standalone declaration  [32] SDDecl ::= S
+          'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' |
+          'no')'"'))  [ VC: Standalone Document Declaration ] TODO
+          The standalone document declaration must have the value
+          "no" if any external markup declarations contain
+          declarations of: - attributes with default values, if
+          elements to which these attributes apply appear in the
+          document without specifications of values for these
+          attributes, or - entities (other than amp, lt, gt, apos,
+          quot), if references to those entities appear in the
+          document, or - attributes with values subject to
+          normalization, where the attribute appears in the document
+          with a value which will change as a result of
+          normalization, or - element types with element content, if
+          white space occurs directly within any instance of those
+           types. """
+        ret = libxml2mod.xmlParseSDDecl(self._o)
+        return ret
+
+    def parseStartTag(self):
+        """parse a start of tag either for rule element or
+          EmptyElement. In both case we don't parse the tag closing
+          chars.  [40] STag ::= '<' Name (S Attribute)* S? '>'  [
+          WFC: Unique Att Spec ] No attribute name may appear more
+          than once in the same start-tag or empty-element tag.  [44]
+          EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'  [ WFC:
+          Unique Att Spec ] No attribute name may appear more than
+          once in the same start-tag or empty-element tag.  With
+          namespace:  [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
+            [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>' """
+        ret = libxml2mod.xmlParseStartTag(self._o)
+        return ret
+
+    def parseSystemLiteral(self):
+        """parse an XML Literal  [11] SystemLiteral ::= ('"' [^"]*
+           '"') | ("'" [^']* "'") """
+        ret = libxml2mod.xmlParseSystemLiteral(self._o)
+        return ret
+
+    def parseTextDecl(self):
+        """parse an XML declaration header for external entities  [77]
+           TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' """
+        libxml2mod.xmlParseTextDecl(self._o)
+
+    def parseVersionInfo(self):
+        """parse the XML version.  [24] VersionInfo ::= S 'version' Eq
+           (' VersionNum ' | " VersionNum ")  [25] Eq ::= S? '=' S? """
+        ret = libxml2mod.xmlParseVersionInfo(self._o)
+        return ret
+
+    def parseVersionNum(self):
+        """parse the XML version value.  [26] VersionNum ::= '1.'
+           [0-9]+  In practice allow [0-9].[0-9]+ at that level """
+        ret = libxml2mod.xmlParseVersionNum(self._o)
+        return ret
+
+    def parseXMLDecl(self):
+        """parse an XML declaration header  [23] XMLDecl ::= '<?xml'
+           VersionInfo EncodingDecl? SDDecl? S? '?>' """
+        libxml2mod.xmlParseXMLDecl(self._o)
+
+    def parserHandlePEReference(self):
+        """[69] PEReference ::= '%' Name ';'  [ WFC: No Recursion ] A
+          parsed entity must not contain a recursive reference to
+          itself, either directly or indirectly.  [ WFC: Entity
+          Declared ] In a document without any DTD, a document with
+          only an internal DTD subset which contains no parameter
+          entity references, or a document with "standalone='yes'",
+          ...  ... The declaration of a parameter entity must precede
+          any reference to it...  [ VC: Entity Declared ] In a
+          document with an external subset or external parameter
+          entities with "standalone='no'", ...  ... The declaration
+          of a parameter entity must precede any reference to it... 
+          [ WFC: In DTD ] Parameter-entity references may only appear
+          in the DTD. NOTE: misleading but this is handled.  A
+          PEReference may have been detected in the current input
+          stream the handling is done accordingly to
+          http://www.w3.org/TR/REC-xml#entproc i.e. - Included in
+          literal in entity values - Included as Parameter Entity
+           reference within DTDs """
+        libxml2mod.xmlParserHandlePEReference(self._o)
+
+    def parserHandleReference(self):
+        """TODO: Remove, now deprecated ... the test is done directly
+          in the content parsing routines.  [67] Reference ::=
+          EntityRef | CharRef  [68] EntityRef ::= '&' Name ';'  [
+          WFC: Entity Declared ] the Name given in the entity
+          reference must match that in an entity declaration, except
+          that well-formed documents need not declare any of the
+          following entities: amp, lt, gt, apos, quot.  [ WFC: Parsed
+          Entity ] An entity reference must not contain the name of
+          an unparsed entity  [66] CharRef ::= '&#' [0-9]+ ';' |
+          '&#x' [0-9a-fA-F]+ ';'  A PEReference may have been
+          detected in the current input stream the handling is done
+           accordingly to http://www.w3.org/TR/REC-xml#entproc """
+        libxml2mod.xmlParserHandleReference(self._o)
+
+    def popInput(self):
+        """xmlPopInput: the current input pointed by ctxt->input came
+           to an end pop it and return the next char. """
+        ret = libxml2mod.xmlPopInput(self._o)
+        return ret
+
+    def scanName(self):
+        """Trickery: parse an XML name but without consuming the input
+          flow Needed for rollback cases. Used only when parsing
+          entities references.  TODO: seems deprecated now, only used
+          in the default part of xmlParserHandleReference  [4]
+          NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+          CombiningChar | Extender  [5] Name ::= (Letter | '_' | ':')
+           (NameChar)*  [6] Names ::= Name (S Name)* """
+        ret = libxml2mod.xmlScanName(self._o)
+        return ret
+
+    def skipBlankChars(self):
+        """skip all blanks character found at that point in the input
+          streams. It pops up finished entities in the process if
+           allowable at that point. """
+        ret = libxml2mod.xmlSkipBlankChars(self._o)
+        return ret
+
+    def stringDecodeEntities(self, str, what, end, end2, end3):
+        """Takes a entity string content and process to do the
+          adequate substitutions.  [67] Reference ::= EntityRef |
+           CharRef  [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlStringDecodeEntities(self._o, str, what, end, end2, end3)
+        return ret
+
+    def stringLenDecodeEntities(self, str, len, what, end, end2, end3):
+        """Takes a entity string content and process to do the
+          adequate substitutions.  [67] Reference ::= EntityRef |
+           CharRef  [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlStringLenDecodeEntities(self._o, str, len, what, end, end2, end3)
+        return ret
+
+class xmlAttr(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlAttr got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlAttr (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlAttr functions from module debugXML
+    #
+
+    def debugDumpAttr(self, output, depth):
+        """Dumps debug information for the attribute """
+        libxml2mod.xmlDebugDumpAttr(output, self._o, depth)
+
+    def debugDumpAttrList(self, output, depth):
+        """Dumps debug information for the attribute list """
+        libxml2mod.xmlDebugDumpAttrList(output, self._o, depth)
+
+    #
+    # xmlAttr functions from module tree
+    #
+
+    def copyProp(self, target):
+        """Do a copy of the attribute. """
+        if target is None: target__o = None
+        else: target__o = target._o
+        ret = libxml2mod.xmlCopyProp(target__o, self._o)
+        if ret is None:raise treeError('xmlCopyProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def copyPropList(self, target):
+        """Do a copy of an attribute list. """
+        if target is None: target__o = None
+        else: target__o = target._o
+        ret = libxml2mod.xmlCopyPropList(target__o, self._o)
+        if ret is None:raise treeError('xmlCopyPropList() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def freeProp(self):
+        """Free one attribute, all the content is freed too """
+        libxml2mod.xmlFreeProp(self._o)
+
+    def freePropList(self):
+        """Free a property and all its siblings, all the children are
+           freed too. """
+        libxml2mod.xmlFreePropList(self._o)
+
+    def removeProp(self):
+        """Unlink and free one attribute, all the content is freed too
+           Note this doesn't work for namespace definition attributes """
+        ret = libxml2mod.xmlRemoveProp(self._o)
+        return ret
+
+    #
+    # xmlAttr functions from module valid
+    #
+
+    def removeID(self, doc):
+        """Remove the given attribute from the ID table maintained
+           internally. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRemoveID(doc__o, self._o)
+        return ret
+
+    def removeRef(self, doc):
+        """Remove the given attribute from the Ref table maintained
+           internally. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRemoveRef(doc__o, self._o)
+        return ret
+
+class xmlAttribute(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlAttribute got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlAttribute (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+class catalog:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeCatalog(self._o)
+        self._o = None
+
+    #
+    # catalog functions from module catalog
+    #
+
+    def add(self, type, orig, replace):
+        """Add an entry in the catalog, it may overwrite existing but
+           different entries. """
+        ret = libxml2mod.xmlACatalogAdd(self._o, type, orig, replace)
+        return ret
+
+    def catalogIsEmpty(self):
+        """Check is a catalog is empty """
+        ret = libxml2mod.xmlCatalogIsEmpty(self._o)
+        return ret
+
+    def convertSGMLCatalog(self):
+        """Convert all the SGML catalog entries as XML ones """
+        ret = libxml2mod.xmlConvertSGMLCatalog(self._o)
+        return ret
+
+    def dump(self, out):
+        """Dump the given catalog to the given file. """
+        libxml2mod.xmlACatalogDump(self._o, out)
+
+    def remove(self, value):
+        """Remove an entry from the catalog """
+        ret = libxml2mod.xmlACatalogRemove(self._o, value)
+        return ret
+
+    def resolve(self, pubID, sysID):
+        """Do a complete resolution lookup of an External Identifier """
+        ret = libxml2mod.xmlACatalogResolve(self._o, pubID, sysID)
+        return ret
+
+    def resolvePublic(self, pubID):
+        """Try to lookup the catalog local reference associated to a
+           public ID in that catalog """
+        ret = libxml2mod.xmlACatalogResolvePublic(self._o, pubID)
+        return ret
+
+    def resolveSystem(self, sysID):
+        """Try to lookup the catalog resource for a system ID """
+        ret = libxml2mod.xmlACatalogResolveSystem(self._o, sysID)
+        return ret
+
+    def resolveURI(self, URI):
+        """Do a complete resolution lookup of an URI """
+        ret = libxml2mod.xmlACatalogResolveURI(self._o, URI)
+        return ret
+
+class xmlDtd(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlDtd got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlDtd (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlDtd functions from module debugXML
+    #
+
+    def debugDumpDTD(self, output):
+        """Dumps debug information for the DTD """
+        libxml2mod.xmlDebugDumpDTD(output, self._o)
+
+    #
+    # xmlDtd functions from module tree
+    #
+
+    def copyDtd(self):
+        """Do a copy of the dtd. """
+        ret = libxml2mod.xmlCopyDtd(self._o)
+        if ret is None:raise treeError('xmlCopyDtd() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def freeDtd(self):
+        """Free a DTD structure. """
+        libxml2mod.xmlFreeDtd(self._o)
+
+    #
+    # xmlDtd functions from module valid
+    #
+
+    def dtdAttrDesc(self, elem, name):
+        """Search the DTD for the description of this attribute on
+           this element. """
+        ret = libxml2mod.xmlGetDtdAttrDesc(self._o, elem, name)
+        if ret is None:raise treeError('xmlGetDtdAttrDesc() failed')
+        __tmp = xmlAttribute(_obj=ret)
+        return __tmp
+
+    def dtdElementDesc(self, name):
+        """Search the DTD for the description of this element """
+        ret = libxml2mod.xmlGetDtdElementDesc(self._o, name)
+        if ret is None:raise treeError('xmlGetDtdElementDesc() failed')
+        __tmp = xmlElement(_obj=ret)
+        return __tmp
+
+    def dtdQAttrDesc(self, elem, name, prefix):
+        """Search the DTD for the description of this qualified
+           attribute on this element. """
+        ret = libxml2mod.xmlGetDtdQAttrDesc(self._o, elem, name, prefix)
+        if ret is None:raise treeError('xmlGetDtdQAttrDesc() failed')
+        __tmp = xmlAttribute(_obj=ret)
+        return __tmp
+
+    def dtdQElementDesc(self, name, prefix):
+        """Search the DTD for the description of this element """
+        ret = libxml2mod.xmlGetDtdQElementDesc(self._o, name, prefix)
+        if ret is None:raise treeError('xmlGetDtdQElementDesc() failed')
+        __tmp = xmlElement(_obj=ret)
+        return __tmp
+
+class xmlElement(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlElement got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlElement (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+class xmlEntity(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlEntity got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlEntity (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlEntity functions from module parserInternals
+    #
+
+    def handleEntity(self, ctxt):
+        """Default handling of defined entities, when should we define
+          a new input stream ? When do we just handle that as a set
+           of chars ?  OBSOLETE: to be removed at some point. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        libxml2mod.xmlHandleEntity(ctxt__o, self._o)
+
+class Error:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for Error
+    def code(self):
+        """The error code, e.g. an xmlParserError """
+        ret = libxml2mod.xmlErrorGetCode(self._o)
+        return ret
+
+    def domain(self):
+        """What part of the library raised this error """
+        ret = libxml2mod.xmlErrorGetDomain(self._o)
+        return ret
+
+    def file(self):
+        """the filename """
+        ret = libxml2mod.xmlErrorGetFile(self._o)
+        return ret
+
+    def level(self):
+        """how consequent is the error """
+        ret = libxml2mod.xmlErrorGetLevel(self._o)
+        return ret
+
+    def line(self):
+        """the line number if available """
+        ret = libxml2mod.xmlErrorGetLine(self._o)
+        return ret
+
+    def message(self):
+        """human-readable informative error message """
+        ret = libxml2mod.xmlErrorGetMessage(self._o)
+        return ret
+
+    #
+    # Error functions from module xmlerror
+    #
+
+    def copyError(self, to):
+        """Save the original error to the new place. """
+        if to is None: to__o = None
+        else: to__o = to._o
+        ret = libxml2mod.xmlCopyError(self._o, to__o)
+        return ret
+
+    def resetError(self):
+        """Cleanup the error. """
+        libxml2mod.xmlResetError(self._o)
+
+class xmlNs(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlNs got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlNs (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlNs functions from module tree
+    #
+
+    def copyNamespace(self):
+        """Do a copy of the namespace. """
+        ret = libxml2mod.xmlCopyNamespace(self._o)
+        if ret is None:raise treeError('xmlCopyNamespace() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def copyNamespaceList(self):
+        """Do a copy of an namespace list. """
+        ret = libxml2mod.xmlCopyNamespaceList(self._o)
+        if ret is None:raise treeError('xmlCopyNamespaceList() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def freeNs(self):
+        """Free up the structures associated to a namespace """
+        libxml2mod.xmlFreeNs(self._o)
+
+    def freeNsList(self):
+        """Free up all the structures associated to the chained
+           namespaces. """
+        libxml2mod.xmlFreeNsList(self._o)
+
+    def newChild(self, parent, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child list containing the TEXTs and ENTITY_REFs node will
+          be created. NOTE: @content is supposed to be a piece of XML
+          CDATA, so it allows entity references. XML special chars
+          must be escaped first by using
+          xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should
+           be used. """
+        if parent is None: parent__o = None
+        else: parent__o = parent._o
+        ret = libxml2mod.xmlNewChild(parent__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNode(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocNode(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNodeEatName(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocNodeEatName(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocRawNode(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+           @content are optional (None). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocRawNode(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocRawNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNodeEatName(self, name):
+        """Creation of a new node element. @ns is optional (None). """
+        ret = libxml2mod.xmlNewNodeEatName(self._o, name)
+        if ret is None:raise treeError('xmlNewNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNsProp(self, node, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlNewNsProp(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlNewNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newNsPropEatName(self, node, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlNewNsPropEatName(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlNewNsPropEatName() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newTextChild(self, parent, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child TEXT node will be created containing the string
+          @content. NOTE: Use xmlNewChild() if @content will contain
+          entities that need to be preserved. Use this function,
+          xmlNewTextChild(), if you need to ensure that reserved XML
+          chars that might appear in @content, such as the ampersand,
+          greater-than or less-than signs, are automatically replaced
+           by their XML escaped entity representations. """
+        if parent is None: parent__o = None
+        else: parent__o = parent._o
+        ret = libxml2mod.xmlNewTextChild(parent__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewTextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def setNs(self, node):
+        """Associate a namespace to a node, a posteriori. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        libxml2mod.xmlSetNs(node__o, self._o)
+
+    def setNsProp(self, node, name, value):
+        """Set (or reset) an attribute carried by a node. The ns
+           structure must be in scope, this is not checked """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSetNsProp(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlSetNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def unsetNsProp(self, node, name):
+        """Remove an attribute carried by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlUnsetNsProp(node__o, self._o, name)
+        return ret
+
+    #
+    # xmlNs functions from module xpathInternals
+    #
+
+    def xpathNodeSetFreeNs(self):
+        """Namespace nodes in libxml don't match the XPath semantic.
+          In a node set the namespace nodes are duplicated and the
+          next pointer is set to the parent node in the XPath
+           semantic. Check if such a node needs to be freed """
+        libxml2mod.xmlXPathNodeSetFreeNs(self._o)
+
+class outputBuffer(ioWriteWrapper):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ioWriteWrapper.__init__(self, _obj=_obj)
+
+    #
+    # outputBuffer functions from module HTMLtree
+    #
+
+    def htmlDocContentDumpFormatOutput(self, cur, encoding, format):
+        """Dump an HTML document. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlDocContentDumpFormatOutput(self._o, cur__o, encoding, format)
+
+    def htmlDocContentDumpOutput(self, cur, encoding):
+        """Dump an HTML document. Formating return/spaces are added. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlDocContentDumpOutput(self._o, cur__o, encoding)
+
+    def htmlNodeDumpFormatOutput(self, doc, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFormatOutput(self._o, doc__o, cur__o, encoding, format)
+
+    def htmlNodeDumpOutput(self, doc, cur, encoding):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns/spaces are added. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpOutput(self._o, doc__o, cur__o, encoding)
+
+    #
+    # outputBuffer functions from module tree
+    #
+
+    def nodeDumpOutput(self, doc, cur, level, format, encoding):
+        """Dump an XML node, recursive behaviour, children are printed
+          too. Note that @format = 1 provide node indenting only if
+          xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was
+           called """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlNodeDumpOutput(self._o, doc__o, cur__o, level, format, encoding)
+
+    def saveFileTo(self, cur, encoding):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlSaveFileTo(self._o, cur__o, encoding)
+        return ret
+
+    def saveFormatFileTo(self, cur, encoding, format):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlSaveFormatFileTo(self._o, cur__o, encoding, format)
+        return ret
+
+    #
+    # outputBuffer functions from module xmlIO
+    #
+
+    def getContent(self):
+        """Gives a pointer to the data currently held in the output
+           buffer """
+        ret = libxml2mod.xmlOutputBufferGetContent(self._o)
+        return ret
+
+    def write(self, len, buf):
+        """Write the content of the array in the output I/O buffer
+          This routine handle the I18N transcoding from internal
+          UTF-8 The buffer is lossless, i.e. will store in case of
+           partial or delayed writes. """
+        ret = libxml2mod.xmlOutputBufferWrite(self._o, len, buf)
+        return ret
+
+    def writeString(self, str):
+        """Write the content of the string in the output I/O buffer
+          This routine handle the I18N transcoding from internal
+          UTF-8 The buffer is lossless, i.e. will store in case of
+           partial or delayed writes. """
+        ret = libxml2mod.xmlOutputBufferWriteString(self._o, str)
+        return ret
+
+class inputBuffer(ioReadWrapper):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ioReadWrapper.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeParserInputBuffer(self._o)
+        self._o = None
+
+    #
+    # inputBuffer functions from module xmlIO
+    #
+
+    def grow(self, len):
+        """Grow up the content of the input buffer, the old data are
+          preserved This routine handle the I18N transcoding to
+          internal UTF-8 This routine is used when operating the
+          parser in normal (pull) mode  TODO: one should be able to
+          remove one extra copy by copying directly onto in->buffer
+           or in->raw """
+        ret = libxml2mod.xmlParserInputBufferGrow(self._o, len)
+        return ret
+
+    def push(self, len, buf):
+        """Push the content of the arry in the input buffer This
+          routine handle the I18N transcoding to internal UTF-8 This
+          is used when operating the parser in progressive (push)
+           mode. """
+        ret = libxml2mod.xmlParserInputBufferPush(self._o, len, buf)
+        return ret
+
+    def read(self, len):
+        """Refresh the content of the input buffer, the old data are
+          considered consumed This routine handle the I18N
+           transcoding to internal UTF-8 """
+        ret = libxml2mod.xmlParserInputBufferRead(self._o, len)
+        return ret
+
+    #
+    # inputBuffer functions from module xmlreader
+    #
+
+    def Setup(self, reader, URL, encoding, options):
+        """Setup an XML reader with new options """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSetup(reader__o, self._o, URL, encoding, options)
+        return ret
+
+    def newTextReader(self, URI):
+        """Create an xmlTextReader structure fed with @input """
+        ret = libxml2mod.xmlNewTextReader(self._o, URI)
+        if ret is None:raise treeError('xmlNewTextReader() failed')
+        __tmp = xmlTextReader(_obj=ret)
+        __tmp.input = self
+        return __tmp
+
+class xmlReg:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRegFreeRegexp(self._o)
+        self._o = None
+
+    #
+    # xmlReg functions from module xmlregexp
+    #
+
+    def regexpExec(self, content):
+        """Check if the regular expression generates the value """
+        ret = libxml2mod.xmlRegexpExec(self._o, content)
+        return ret
+
+    def regexpIsDeterminist(self):
+        """Check if the regular expression is determinist """
+        ret = libxml2mod.xmlRegexpIsDeterminist(self._o)
+        return ret
+
+    def regexpPrint(self, output):
+        """Print the content of the compiled regular expression """
+        libxml2mod.xmlRegexpPrint(output, self._o)
+
+class relaxNgParserCtxt:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFreeParserCtxt(self._o)
+        self._o = None
+
+    #
+    # relaxNgParserCtxt functions from module relaxng
+    #
+
+    def relaxNGParse(self):
+        """parse a schema definition resource and build an internal
+           XML Shema struture which can be used to validate instances. """
+        ret = libxml2mod.xmlRelaxNGParse(self._o)
+        if ret is None:raise parserError('xmlRelaxNGParse() failed')
+        __tmp = relaxNgSchema(_obj=ret)
+        return __tmp
+
+    def relaxParserSetFlag(self, flags):
+        """Semi private function used to pass informations to a parser
+           context which are a combination of xmlRelaxNGParserFlag . """
+        ret = libxml2mod.xmlRelaxParserSetFlag(self._o, flags)
+        return ret
+
+class relaxNgSchema:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFree(self._o)
+        self._o = None
+
+    #
+    # relaxNgSchema functions from module relaxng
+    #
+
+    def relaxNGDump(self, output):
+        """Dump a RelaxNG structure back """
+        libxml2mod.xmlRelaxNGDump(output, self._o)
+
+    def relaxNGDumpTree(self, output):
+        """Dump the transformed RelaxNG tree. """
+        libxml2mod.xmlRelaxNGDumpTree(output, self._o)
+
+    def relaxNGNewValidCtxt(self):
+        """Create an XML RelaxNGs validation context based on the
+           given schema """
+        ret = libxml2mod.xmlRelaxNGNewValidCtxt(self._o)
+        if ret is None:raise treeError('xmlRelaxNGNewValidCtxt() failed')
+        __tmp = relaxNgValidCtxt(_obj=ret)
+        __tmp.schema = self
+        return __tmp
+
+    #
+    # relaxNgSchema functions from module xmlreader
+    #
+
+    def RelaxNGSetSchema(self, reader):
+        """Use RelaxNG to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then RelaxNG validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderRelaxNGSetSchema(reader__o, self._o)
+        return ret
+
+class relaxNgValidCtxt(relaxNgValidCtxtCore):
+    def __init__(self, _obj=None):
+        self.schema = None
+        self._o = _obj
+        relaxNgValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # relaxNgValidCtxt functions from module relaxng
+    #
+
+    def relaxNGValidateDoc(self, doc):
+        """Validate a document tree in memory. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRelaxNGValidateDoc(self._o, doc__o)
+        return ret
+
+    def relaxNGValidateFullElement(self, doc, elem):
+        """Validate a full subtree when
+          xmlRelaxNGValidatePushElement() returned 0 and the content
+           of the node has been expanded. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidateFullElement(self._o, doc__o, elem__o)
+        return ret
+
+    def relaxNGValidatePopElement(self, doc, elem):
+        """Pop the element end from the RelaxNG validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePopElement(self._o, doc__o, elem__o)
+        return ret
+
+    def relaxNGValidatePushCData(self, data, len):
+        """check the CData parsed for validation in the current stack """
+        ret = libxml2mod.xmlRelaxNGValidatePushCData(self._o, data, len)
+        return ret
+
+    def relaxNGValidatePushElement(self, doc, elem):
+        """Push a new element start on the RelaxNG validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePushElement(self._o, doc__o, elem__o)
+        return ret
+
+    #
+    # relaxNgValidCtxt functions from module xmlreader
+    #
+
+    def RelaxNGValidateCtxt(self, reader, options):
+        """Use RelaxNG schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then RelaxNG schema validation is
+           deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderRelaxNGValidateCtxt(reader__o, self._o, options)
+        return ret
+
+class SchemaParserCtxt:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFreeParserCtxt(self._o)
+        self._o = None
+
+    #
+    # SchemaParserCtxt functions from module xmlschemas
+    #
+
+    def schemaParse(self):
+        """parse a schema definition resource and build an internal
+           XML Shema struture which can be used to validate instances. """
+        ret = libxml2mod.xmlSchemaParse(self._o)
+        if ret is None:raise parserError('xmlSchemaParse() failed')
+        __tmp = Schema(_obj=ret)
+        return __tmp
+
+class Schema:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFree(self._o)
+        self._o = None
+
+    #
+    # Schema functions from module xmlreader
+    #
+
+    def SetSchema(self, reader):
+        """Use XSD Schema to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then Schema validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSetSchema(reader__o, self._o)
+        return ret
+
+    #
+    # Schema functions from module xmlschemas
+    #
+
+    def schemaDump(self, output):
+        """Dump a Schema structure. """
+        libxml2mod.xmlSchemaDump(output, self._o)
+
+    def schemaNewValidCtxt(self):
+        """Create an XML Schemas validation context based on the given
+           schema. """
+        ret = libxml2mod.xmlSchemaNewValidCtxt(self._o)
+        if ret is None:raise treeError('xmlSchemaNewValidCtxt() failed')
+        __tmp = SchemaValidCtxt(_obj=ret)
+        __tmp.schema = self
+        return __tmp
+
+class SchemaValidCtxt(SchemaValidCtxtCore):
+    def __init__(self, _obj=None):
+        self.schema = None
+        self._o = _obj
+        SchemaValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # SchemaValidCtxt functions from module xmlreader
+    #
+
+    def SchemaValidateCtxt(self, reader, options):
+        """Use W3C XSD schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then XML Schema validation is
+           deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSchemaValidateCtxt(reader__o, self._o, options)
+        return ret
+
+    #
+    # SchemaValidCtxt functions from module xmlschemas
+    #
+
+    def schemaIsValid(self):
+        """Check if any error was detected during validation. """
+        ret = libxml2mod.xmlSchemaIsValid(self._o)
+        return ret
+
+    def schemaSetValidOptions(self, options):
+        """Sets the options to be used during the validation. """
+        ret = libxml2mod.xmlSchemaSetValidOptions(self._o, options)
+        return ret
+
+    def schemaValidCtxtGetOptions(self):
+        """Get the validation context options. """
+        ret = libxml2mod.xmlSchemaValidCtxtGetOptions(self._o)
+        return ret
+
+    def schemaValidCtxtGetParserCtxt(self):
+        """allow access to the parser context of the schema validation
+           context """
+        ret = libxml2mod.xmlSchemaValidCtxtGetParserCtxt(self._o)
+        if ret is None:raise parserError('xmlSchemaValidCtxtGetParserCtxt() failed')
+        __tmp = parserCtxt(_obj=ret)
+        return __tmp
+
+    def schemaValidateDoc(self, doc):
+        """Validate a document tree in memory. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSchemaValidateDoc(self._o, doc__o)
+        return ret
+
+    def schemaValidateFile(self, filename, options):
+        """Do a schemas validation of the given resource, it will use
+           the SAX streamable validation internally. """
+        ret = libxml2mod.xmlSchemaValidateFile(self._o, filename, options)
+        return ret
+
+    def schemaValidateOneElement(self, elem):
+        """Validate a branch of a tree, starting with the given @elem. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlSchemaValidateOneElement(self._o, elem__o)
+        return ret
+
+    def schemaValidateSetFilename(self, filename):
+        """Workaround to provide file error reporting information when
+           this is not provided by current APIs """
+        libxml2mod.xmlSchemaValidateSetFilename(self._o, filename)
+
+class xmlTextReaderLocator:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    #
+    # xmlTextReaderLocator functions from module xmlreader
+    #
+
+    def BaseURI(self):
+        """Obtain the base URI for the given locator. """
+        ret = libxml2mod.xmlTextReaderLocatorBaseURI(self._o)
+        return ret
+
+    def LineNumber(self):
+        """Obtain the line number for the given locator. """
+        ret = libxml2mod.xmlTextReaderLocatorLineNumber(self._o)
+        return ret
+
+class xmlTextReader(xmlTextReaderCore):
+    def __init__(self, _obj=None):
+        self.input = None
+        self._o = _obj
+        xmlTextReaderCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeTextReader(self._o)
+        self._o = None
+
+    #
+    # xmlTextReader functions from module xmlreader
+    #
+
+    def AttributeCount(self):
+        """Provides the number of attributes of the current node """
+        ret = libxml2mod.xmlTextReaderAttributeCount(self._o)
+        return ret
+
+    def BaseUri(self):
+        """The base URI of the node. """
+        ret = libxml2mod.xmlTextReaderConstBaseUri(self._o)
+        return ret
+
+    def ByteConsumed(self):
+        """This function provides the current index of the parser used
+          by the reader, relative to the start of the current entity.
+          This function actually just wraps a call to
+          xmlBytesConsumed() for the parser context associated with
+           the reader. See xmlBytesConsumed() for more information. """
+        ret = libxml2mod.xmlTextReaderByteConsumed(self._o)
+        return ret
+
+    def Close(self):
+        """This method releases any resources allocated by the current
+          instance changes the state to Closed and close any
+           underlying input. """
+        ret = libxml2mod.xmlTextReaderClose(self._o)
+        return ret
+
+    def CurrentDoc(self):
+        """Hacking interface allowing to get the xmlDocPtr
+          correponding to the current document being accessed by the
+          xmlTextReader. NOTE: as a result of this call, the reader
+          will not destroy the associated XML document and calling
+          xmlFreeDoc() on the result is needed once the reader
+           parsing has finished. """
+        ret = libxml2mod.xmlTextReaderCurrentDoc(self._o)
+        if ret is None:raise treeError('xmlTextReaderCurrentDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def CurrentNode(self):
+        """Hacking interface allowing to get the xmlNodePtr
+          correponding to the current node being accessed by the
+          xmlTextReader. This is dangerous because the underlying
+           node may be destroyed on the next Reads. """
+        ret = libxml2mod.xmlTextReaderCurrentNode(self._o)
+        if ret is None:raise treeError('xmlTextReaderCurrentNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def Depth(self):
+        """The depth of the node in the tree. """
+        ret = libxml2mod.xmlTextReaderDepth(self._o)
+        return ret
+
+    def Encoding(self):
+        """Determine the encoding of the document being read. """
+        ret = libxml2mod.xmlTextReaderConstEncoding(self._o)
+        return ret
+
+    def Expand(self):
+        """Reads the contents of the current node and the full
+          subtree. It then makes the subtree available until the next
+           xmlTextReaderRead() call """
+        ret = libxml2mod.xmlTextReaderExpand(self._o)
+        if ret is None:raise treeError('xmlTextReaderExpand() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def GetAttribute(self, name):
+        """Provides the value of the attribute with the specified
+           qualified name. """
+        ret = libxml2mod.xmlTextReaderGetAttribute(self._o, name)
+        return ret
+
+    def GetAttributeNo(self, no):
+        """Provides the value of the attribute with the specified
+           index relative to the containing element. """
+        ret = libxml2mod.xmlTextReaderGetAttributeNo(self._o, no)
+        return ret
+
+    def GetAttributeNs(self, localName, namespaceURI):
+        """Provides the value of the specified attribute """
+        ret = libxml2mod.xmlTextReaderGetAttributeNs(self._o, localName, namespaceURI)
+        return ret
+
+    def GetParserColumnNumber(self):
+        """Provide the column number of the current parsing point. """
+        ret = libxml2mod.xmlTextReaderGetParserColumnNumber(self._o)
+        return ret
+
+    def GetParserLineNumber(self):
+        """Provide the line number of the current parsing point. """
+        ret = libxml2mod.xmlTextReaderGetParserLineNumber(self._o)
+        return ret
+
+    def GetParserProp(self, prop):
+        """Read the parser internal property. """
+        ret = libxml2mod.xmlTextReaderGetParserProp(self._o, prop)
+        return ret
+
+    def GetRemainder(self):
+        """Method to get the remainder of the buffered XML. this
+          method stops the parser, set its state to End Of File and
+          return the input stream with what is left that the parser
+          did not use.  The implementation is not good, the parser
+          certainly procgressed past what's left in reader->input,
+          and there is an allocation problem. Best would be to
+           rewrite it differently. """
+        ret = libxml2mod.xmlTextReaderGetRemainder(self._o)
+        if ret is None:raise treeError('xmlTextReaderGetRemainder() failed')
+        __tmp = inputBuffer(_obj=ret)
+        return __tmp
+
+    def HasAttributes(self):
+        """Whether the node has attributes. """
+        ret = libxml2mod.xmlTextReaderHasAttributes(self._o)
+        return ret
+
+    def HasValue(self):
+        """Whether the node can have a text value. """
+        ret = libxml2mod.xmlTextReaderHasValue(self._o)
+        return ret
+
+    def IsDefault(self):
+        """Whether an Attribute  node was generated from the default
+           value defined in the DTD or schema. """
+        ret = libxml2mod.xmlTextReaderIsDefault(self._o)
+        return ret
+
+    def IsEmptyElement(self):
+        """Check if the current node is empty """
+        ret = libxml2mod.xmlTextReaderIsEmptyElement(self._o)
+        return ret
+
+    def IsNamespaceDecl(self):
+        """Determine whether the current node is a namespace
+           declaration rather than a regular attribute. """
+        ret = libxml2mod.xmlTextReaderIsNamespaceDecl(self._o)
+        return ret
+
+    def IsValid(self):
+        """Retrieve the validity status from the parser context """
+        ret = libxml2mod.xmlTextReaderIsValid(self._o)
+        return ret
+
+    def LocalName(self):
+        """The local name of the node. """
+        ret = libxml2mod.xmlTextReaderConstLocalName(self._o)
+        return ret
+
+    def LookupNamespace(self, prefix):
+        """Resolves a namespace prefix in the scope of the current
+           element. """
+        ret = libxml2mod.xmlTextReaderLookupNamespace(self._o, prefix)
+        return ret
+
+    def MoveToAttribute(self, name):
+        """Moves the position of the current instance to the attribute
+           with the specified qualified name. """
+        ret = libxml2mod.xmlTextReaderMoveToAttribute(self._o, name)
+        return ret
+
+    def MoveToAttributeNo(self, no):
+        """Moves the position of the current instance to the attribute
+          with the specified index relative to the containing element. """
+        ret = libxml2mod.xmlTextReaderMoveToAttributeNo(self._o, no)
+        return ret
+
+    def MoveToAttributeNs(self, localName, namespaceURI):
+        """Moves the position of the current instance to the attribute
+           with the specified local name and namespace URI. """
+        ret = libxml2mod.xmlTextReaderMoveToAttributeNs(self._o, localName, namespaceURI)
+        return ret
+
+    def MoveToElement(self):
+        """Moves the position of the current instance to the node that
+           contains the current Attribute  node. """
+        ret = libxml2mod.xmlTextReaderMoveToElement(self._o)
+        return ret
+
+    def MoveToFirstAttribute(self):
+        """Moves the position of the current instance to the first
+           attribute associated with the current node. """
+        ret = libxml2mod.xmlTextReaderMoveToFirstAttribute(self._o)
+        return ret
+
+    def MoveToNextAttribute(self):
+        """Moves the position of the current instance to the next
+           attribute associated with the current node. """
+        ret = libxml2mod.xmlTextReaderMoveToNextAttribute(self._o)
+        return ret
+
+    def Name(self):
+        """The qualified name of the node, equal to Prefix :LocalName. """
+        ret = libxml2mod.xmlTextReaderConstName(self._o)
+        return ret
+
+    def NamespaceUri(self):
+        """The URI defining the namespace associated with the node. """
+        ret = libxml2mod.xmlTextReaderConstNamespaceUri(self._o)
+        return ret
+
+    def NewDoc(self, cur, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML in-memory document.
+          The parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewDoc(self._o, cur, URL, encoding, options)
+        return ret
+
+    def NewFd(self, fd, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML from a file
+          descriptor. NOTE that the file descriptor will not be
+          closed when the reader is closed or reset. The parsing
+          flags @options are a combination of xmlParserOption. This
+           reuses the existing @reader xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewFd(self._o, fd, URL, encoding, options)
+        return ret
+
+    def NewFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. The
+          parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewFile(self._o, filename, encoding, options)
+        return ret
+
+    def NewMemory(self, buffer, size, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML in-memory document.
+          The parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewMemory(self._o, buffer, size, URL, encoding, options)
+        return ret
+
+    def NewWalker(self, doc):
+        """Setup an xmltextReader to parse a preparsed XML document.
+           This reuses the existing @reader xmlTextReader. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlReaderNewWalker(self._o, doc__o)
+        return ret
+
+    def Next(self):
+        """Skip to the node following the current one in document
+           order while avoiding the subtree if any. """
+        ret = libxml2mod.xmlTextReaderNext(self._o)
+        return ret
+
+    def NextSibling(self):
+        """Skip to the node following the current one in document
+          order while avoiding the subtree if any. Currently
+           implemented only for Readers built on a document """
+        ret = libxml2mod.xmlTextReaderNextSibling(self._o)
+        return ret
+
+    def NodeType(self):
+        """Get the node type of the current node Reference:
+          http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/Xm
+          lNodeType.html """
+        ret = libxml2mod.xmlTextReaderNodeType(self._o)
+        return ret
+
+    def Normalization(self):
+        """The value indicating whether to normalize white space and
+          attribute values. Since attribute value and end of line
+          normalizations are a MUST in the XML specification only the
+          value true is accepted. The broken bahaviour of accepting
+          out of range character entities like &#0; is of course not
+           supported either. """
+        ret = libxml2mod.xmlTextReaderNormalization(self._o)
+        return ret
+
+    def Prefix(self):
+        """A shorthand reference to the namespace associated with the
+           node. """
+        ret = libxml2mod.xmlTextReaderConstPrefix(self._o)
+        return ret
+
+    def Preserve(self):
+        """This tells the XML Reader to preserve the current node. The
+          caller must also use xmlTextReaderCurrentDoc() to keep an
+           handle on the resulting document once parsing has finished """
+        ret = libxml2mod.xmlTextReaderPreserve(self._o)
+        if ret is None:raise treeError('xmlTextReaderPreserve() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def QuoteChar(self):
+        """The quotation mark character used to enclose the value of
+           an attribute. """
+        ret = libxml2mod.xmlTextReaderQuoteChar(self._o)
+        return ret
+
+    def Read(self):
+        """Moves the position of the current instance to the next node
+           in the stream, exposing its properties. """
+        ret = libxml2mod.xmlTextReaderRead(self._o)
+        return ret
+
+    def ReadAttributeValue(self):
+        """Parses an attribute value into one or more Text and
+           EntityReference nodes. """
+        ret = libxml2mod.xmlTextReaderReadAttributeValue(self._o)
+        return ret
+
+    def ReadInnerXml(self):
+        """Reads the contents of the current node, including child
+           nodes and markup. """
+        ret = libxml2mod.xmlTextReaderReadInnerXml(self._o)
+        return ret
+
+    def ReadOuterXml(self):
+        """Reads the contents of the current node, including child
+           nodes and markup. """
+        ret = libxml2mod.xmlTextReaderReadOuterXml(self._o)
+        return ret
+
+    def ReadState(self):
+        """Gets the read state of the reader. """
+        ret = libxml2mod.xmlTextReaderReadState(self._o)
+        return ret
+
+    def ReadString(self):
+        """Reads the contents of an element or a text node as a string. """
+        ret = libxml2mod.xmlTextReaderReadString(self._o)
+        return ret
+
+    def RelaxNGSetSchema(self, schema):
+        """Use RelaxNG to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then RelaxNG validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if schema is None: schema__o = None
+        else: schema__o = schema._o
+        ret = libxml2mod.xmlTextReaderRelaxNGSetSchema(self._o, schema__o)
+        return ret
+
+    def RelaxNGValidate(self, rng):
+        """Use RelaxNG schema to validate the document as it is
+          processed. Activation is only possible before the first
+          Read(). If @rng is None, then RelaxNG schema validation is
+           deactivated. """
+        ret = libxml2mod.xmlTextReaderRelaxNGValidate(self._o, rng)
+        return ret
+
+    def RelaxNGValidateCtxt(self, ctxt, options):
+        """Use RelaxNG schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then RelaxNG schema validation is
+           deactivated. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlTextReaderRelaxNGValidateCtxt(self._o, ctxt__o, options)
+        return ret
+
+    def SchemaValidate(self, xsd):
+        """Use W3C XSD schema to validate the document as it is
+          processed. Activation is only possible before the first
+          Read(). If @xsd is None, then XML Schema validation is
+           deactivated. """
+        ret = libxml2mod.xmlTextReaderSchemaValidate(self._o, xsd)
+        return ret
+
+    def SchemaValidateCtxt(self, ctxt, options):
+        """Use W3C XSD schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then XML Schema validation is
+           deactivated. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlTextReaderSchemaValidateCtxt(self._o, ctxt__o, options)
+        return ret
+
+    def SetParserProp(self, prop, value):
+        """Change the parser processing behaviour by changing some of
+          its internal properties. Note that some properties can only
+           be changed before any read has been done. """
+        ret = libxml2mod.xmlTextReaderSetParserProp(self._o, prop, value)
+        return ret
+
+    def SetSchema(self, schema):
+        """Use XSD Schema to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then Schema validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if schema is None: schema__o = None
+        else: schema__o = schema._o
+        ret = libxml2mod.xmlTextReaderSetSchema(self._o, schema__o)
+        return ret
+
+    def Setup(self, input, URL, encoding, options):
+        """Setup an XML reader with new options """
+        if input is None: input__o = None
+        else: input__o = input._o
+        ret = libxml2mod.xmlTextReaderSetup(self._o, input__o, URL, encoding, options)
+        return ret
+
+    def Standalone(self):
+        """Determine the standalone status of the document being read. """
+        ret = libxml2mod.xmlTextReaderStandalone(self._o)
+        return ret
+
+    def String(self, str):
+        """Get an interned string from the reader, allows for example
+           to speedup string name comparisons """
+        ret = libxml2mod.xmlTextReaderConstString(self._o, str)
+        return ret
+
+    def Value(self):
+        """Provides the text value of the node if present """
+        ret = libxml2mod.xmlTextReaderConstValue(self._o)
+        return ret
+
+    def XmlLang(self):
+        """The xml:lang scope within which the node resides. """
+        ret = libxml2mod.xmlTextReaderConstXmlLang(self._o)
+        return ret
+
+    def XmlVersion(self):
+        """Determine the XML version of the document being read. """
+        ret = libxml2mod.xmlTextReaderConstXmlVersion(self._o)
+        return ret
+
+class URI:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeURI(self._o)
+        self._o = None
+
+    # accessors for URI
+    def authority(self):
+        """Get the authority part from an URI """
+        ret = libxml2mod.xmlURIGetAuthority(self._o)
+        return ret
+
+    def fragment(self):
+        """Get the fragment part from an URI """
+        ret = libxml2mod.xmlURIGetFragment(self._o)
+        return ret
+
+    def opaque(self):
+        """Get the opaque part from an URI """
+        ret = libxml2mod.xmlURIGetOpaque(self._o)
+        return ret
+
+    def path(self):
+        """Get the path part from an URI """
+        ret = libxml2mod.xmlURIGetPath(self._o)
+        return ret
+
+    def port(self):
+        """Get the port part from an URI """
+        ret = libxml2mod.xmlURIGetPort(self._o)
+        return ret
+
+    def query(self):
+        """Get the query part from an URI """
+        ret = libxml2mod.xmlURIGetQuery(self._o)
+        return ret
+
+    def queryRaw(self):
+        """Get the raw query part from an URI (i.e. the unescaped
+           form). """
+        ret = libxml2mod.xmlURIGetQueryRaw(self._o)
+        return ret
+
+    def scheme(self):
+        """Get the scheme part from an URI """
+        ret = libxml2mod.xmlURIGetScheme(self._o)
+        return ret
+
+    def server(self):
+        """Get the server part from an URI """
+        ret = libxml2mod.xmlURIGetServer(self._o)
+        return ret
+
+    def setAuthority(self, authority):
+        """Set the authority part of an URI. """
+        libxml2mod.xmlURISetAuthority(self._o, authority)
+
+    def setFragment(self, fragment):
+        """Set the fragment part of an URI. """
+        libxml2mod.xmlURISetFragment(self._o, fragment)
+
+    def setOpaque(self, opaque):
+        """Set the opaque part of an URI. """
+        libxml2mod.xmlURISetOpaque(self._o, opaque)
+
+    def setPath(self, path):
+        """Set the path part of an URI. """
+        libxml2mod.xmlURISetPath(self._o, path)
+
+    def setPort(self, port):
+        """Set the port part of an URI. """
+        libxml2mod.xmlURISetPort(self._o, port)
+
+    def setQuery(self, query):
+        """Set the query part of an URI. """
+        libxml2mod.xmlURISetQuery(self._o, query)
+
+    def setQueryRaw(self, query_raw):
+        """Set the raw query part of an URI (i.e. the unescaped form). """
+        libxml2mod.xmlURISetQueryRaw(self._o, query_raw)
+
+    def setScheme(self, scheme):
+        """Set the scheme part of an URI. """
+        libxml2mod.xmlURISetScheme(self._o, scheme)
+
+    def setServer(self, server):
+        """Set the server part of an URI. """
+        libxml2mod.xmlURISetServer(self._o, server)
+
+    def setUser(self, user):
+        """Set the user part of an URI. """
+        libxml2mod.xmlURISetUser(self._o, user)
+
+    def user(self):
+        """Get the user part from an URI """
+        ret = libxml2mod.xmlURIGetUser(self._o)
+        return ret
+
+    #
+    # URI functions from module uri
+    #
+
+    def parseURIReference(self, str):
+        """Parse an URI reference string based on RFC 3986 and fills
+          in the appropriate fields of the @uri structure 
+           URI-reference = URI / relative-ref """
+        ret = libxml2mod.xmlParseURIReference(self._o, str)
+        return ret
+
+    def printURI(self, stream):
+        """Prints the URI in the stream @stream. """
+        libxml2mod.xmlPrintURI(stream, self._o)
+
+    def saveUri(self):
+        """Save the URI as an escaped string """
+        ret = libxml2mod.xmlSaveUri(self._o)
+        return ret
+
+class ValidCtxt(ValidCtxtCore):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # ValidCtxt functions from module valid
+    #
+
+    def validCtxtNormalizeAttributeValue(self, doc, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+          space (#x20) characters by single space (#x20) character. 
+          Also  check VC: Standalone Document Declaration in P32, and
+           update ctxt->valid accordingly """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidCtxtNormalizeAttributeValue(self._o, doc__o, elem__o, name, value)
+        return ret
+
+    def validateDocument(self, doc):
+        """Try to validate the document instance  basically it does
+          the all the checks described by the XML Rec i.e. validates
+          the internal and external subset (if present) and validate
+           the document tree. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDocument(self._o, doc__o)
+        return ret
+
+    def validateDocumentFinal(self, doc):
+        """Does the final step for the document validation once all
+          the incremental validation steps have been completed 
+          basically it does the following checks described by the XML
+          Rec  Check all the IDREF/IDREFS attributes definition for
+           validity """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDocumentFinal(self._o, doc__o)
+        return ret
+
+    def validateDtd(self, doc, dtd):
+        """Try to validate the document against the dtd instance 
+          Basically it does check all the definitions in the DtD.
+          Note the the internal subset (if present) is de-coupled
+          (i.e. not used), which could give problems if ID or IDREF
+           is present. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if dtd is None: dtd__o = None
+        else: dtd__o = dtd._o
+        ret = libxml2mod.xmlValidateDtd(self._o, doc__o, dtd__o)
+        return ret
+
+    def validateDtdFinal(self, doc):
+        """Does the final step for the dtds validation once all the
+          subsets have been parsed  basically it does the following
+          checks described by the XML Rec - check that ENTITY and
+          ENTITIES type attributes default or possible values matches
+          one of the defined entities. - check that NOTATION type
+          attributes default or possible values matches one of the
+           defined notations. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDtdFinal(self._o, doc__o)
+        return ret
+
+    def validateElement(self, doc, elem):
+        """Try to validate the subtree under an element """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateElement(self._o, doc__o, elem__o)
+        return ret
+
+    def validateNotationUse(self, doc, notationName):
+        """Validate that the given name match a notation declaration.
+           - [ VC: Notation Declared ] """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateNotationUse(self._o, doc__o, notationName)
+        return ret
+
+    def validateOneAttribute(self, doc, elem, attr, value):
+        """Try to validate a single attribute for an element basically
+          it does the following checks as described by the XML-1.0
+          recommendation: - [ VC: Attribute Value Type ] - [ VC:
+          Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC:
+          Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity
+          Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlValidateOneAttribute(self._o, doc__o, elem__o, attr__o, value)
+        return ret
+
+    def validateOneElement(self, doc, elem):
+        """Try to validate a single element and it's attributes,
+          basically it does the following checks as described by the
+          XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC:
+          Required Attribute ] Then call xmlValidateOneAttribute()
+          for each attribute present.  The ID/IDREF checkings are
+           done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateOneElement(self._o, doc__o, elem__o)
+        return ret
+
+    def validateOneNamespace(self, doc, elem, prefix, ns, value):
+        """Try to validate a single namespace declaration for an
+          element basically it does the following checks as described
+          by the XML-1.0 recommendation: - [ VC: Attribute Value Type
+          ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] -
+          [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC:
+          Entity Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlValidateOneNamespace(self._o, doc__o, elem__o, prefix, ns__o, value)
+        return ret
+
+    def validatePopElement(self, doc, elem, qname):
+        """Pop the element end from the validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePopElement(self._o, doc__o, elem__o, qname)
+        return ret
+
+    def validatePushCData(self, data, len):
+        """check the CData parsed for validation in the current stack """
+        ret = libxml2mod.xmlValidatePushCData(self._o, data, len)
+        return ret
+
+    def validatePushElement(self, doc, elem, qname):
+        """Push a new element start on the validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePushElement(self._o, doc__o, elem__o, qname)
+        return ret
+
+    def validateRoot(self, doc):
+        """Try to validate a the root element basically it does the
+          following check as described by the XML-1.0 recommendation:
+          - [ VC: Root Element Type ] it doesn't try to recurse or
+           apply other check to the element """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateRoot(self._o, doc__o)
+        return ret
+
+class xpathContext:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for xpathContext
+    def contextDoc(self):
+        """Get the doc from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextDoc(self._o)
+        if ret is None:raise xpathError('xmlXPathGetContextDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def contextNode(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextNode(self._o)
+        if ret is None:raise xpathError('xmlXPathGetContextNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def contextPosition(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextPosition(self._o)
+        return ret
+
+    def contextSize(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextSize(self._o)
+        return ret
+
+    def function(self):
+        """Get the current function name xpathContext """
+        ret = libxml2mod.xmlXPathGetFunction(self._o)
+        return ret
+
+    def functionURI(self):
+        """Get the current function name URI xpathContext """
+        ret = libxml2mod.xmlXPathGetFunctionURI(self._o)
+        return ret
+
+    def setContextDoc(self, doc):
+        """Set the doc of an xpathContext """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlXPathSetContextDoc(self._o, doc__o)
+
+    def setContextNode(self, node):
+        """Set the current node of an xpathContext """
+        if node is None: node__o = None
+        else: node__o = node._o
+        libxml2mod.xmlXPathSetContextNode(self._o, node__o)
+
+    #
+    # xpathContext functions from module python
+    #
+
+    def registerXPathFunction(self, name, ns_uri, f):
+        """Register a Python written function to the XPath interpreter """
+        ret = libxml2mod.xmlRegisterXPathFunction(self._o, name, ns_uri, f)
+        return ret
+
+    def xpathRegisterVariable(self, name, ns_uri, value):
+        """Register a variable with the XPath context """
+        ret = libxml2mod.xmlXPathRegisterVariable(self._o, name, ns_uri, value)
+        return ret
+
+    #
+    # xpathContext functions from module xpath
+    #
+
+    def xpathContextSetCache(self, active, value, options):
+        """Creates/frees an object cache on the XPath context. If
+          activates XPath objects (xmlXPathObject) will be cached
+          internally to be reused. @options: 0: This will set the
+          XPath object caching: @value: This will set the maximum
+          number of XPath objects to be cached per slot There are 5
+          slots for: node-set, string, number, boolean, and misc
+          objects. Use <0 for the default number (100). Other values
+           for @options have currently no effect. """
+        ret = libxml2mod.xmlXPathContextSetCache(self._o, active, value, options)
+        return ret
+
+    def xpathEval(self, str):
+        """Evaluate the XPath Location Path in the given context. """
+        ret = libxml2mod.xmlXPathEval(str, self._o)
+        if ret is None:raise xpathError('xmlXPathEval() failed')
+        return xpathObjectRet(ret)
+
+    def xpathEvalExpression(self, str):
+        """Evaluate the XPath expression in the given context. """
+        ret = libxml2mod.xmlXPathEvalExpression(str, self._o)
+        if ret is None:raise xpathError('xmlXPathEvalExpression() failed')
+        return xpathObjectRet(ret)
+
+    def xpathFreeContext(self):
+        """Free up an xmlXPathContext """
+        libxml2mod.xmlXPathFreeContext(self._o)
+
+    #
+    # xpathContext functions from module xpathInternals
+    #
+
+    def xpathNewParserContext(self, str):
+        """Create a new xmlXPathParserContext """
+        ret = libxml2mod.xmlXPathNewParserContext(str, self._o)
+        if ret is None:raise xpathError('xmlXPathNewParserContext() failed')
+        __tmp = xpathParserContext(_obj=ret)
+        return __tmp
+
+    def xpathNsLookup(self, prefix):
+        """Search in the namespace declaration array of the context
+           for the given namespace name associated to the given prefix """
+        ret = libxml2mod.xmlXPathNsLookup(self._o, prefix)
+        return ret
+
+    def xpathRegisterAllFunctions(self):
+        """Registers all default XPath functions in this context """
+        libxml2mod.xmlXPathRegisterAllFunctions(self._o)
+
+    def xpathRegisterNs(self, prefix, ns_uri):
+        """Register a new namespace. If @ns_uri is None it unregisters
+           the namespace """
+        ret = libxml2mod.xmlXPathRegisterNs(self._o, prefix, ns_uri)
+        return ret
+
+    def xpathRegisteredFuncsCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           functions """
+        libxml2mod.xmlXPathRegisteredFuncsCleanup(self._o)
+
+    def xpathRegisteredNsCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           variables """
+        libxml2mod.xmlXPathRegisteredNsCleanup(self._o)
+
+    def xpathRegisteredVariablesCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           variables """
+        libxml2mod.xmlXPathRegisteredVariablesCleanup(self._o)
+
+    def xpathVariableLookup(self, name):
+        """Search in the Variable array of the context for the given
+           variable value. """
+        ret = libxml2mod.xmlXPathVariableLookup(self._o, name)
+        if ret is None:raise xpathError('xmlXPathVariableLookup() failed')
+        return xpathObjectRet(ret)
+
+    def xpathVariableLookupNS(self, name, ns_uri):
+        """Search in the Variable array of the context for the given
+           variable value. """
+        ret = libxml2mod.xmlXPathVariableLookupNS(self._o, name, ns_uri)
+        if ret is None:raise xpathError('xmlXPathVariableLookupNS() failed')
+        return xpathObjectRet(ret)
+
+    #
+    # xpathContext functions from module xpointer
+    #
+
+    def xpointerEval(self, str):
+        """Evaluate the XPath Location Path in the given context. """
+        ret = libxml2mod.xmlXPtrEval(str, self._o)
+        if ret is None:raise treeError('xmlXPtrEval() failed')
+        return xpathObjectRet(ret)
+
+class xpathParserContext:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for xpathParserContext
+    def context(self):
+        """Get the xpathContext from an xpathParserContext """
+        ret = libxml2mod.xmlXPathParserGetContext(self._o)
+        if ret is None:raise xpathError('xmlXPathParserGetContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    #
+    # xpathParserContext functions from module xpathInternals
+    #
+
+    def xpathAddValues(self):
+        """Implement the add operation on XPath objects: The numeric
+          operators convert their operands to numbers as if by
+           calling the number function. """
+        libxml2mod.xmlXPathAddValues(self._o)
+
+    def xpathBooleanFunction(self, nargs):
+        """Implement the boolean() XPath function boolean
+          boolean(object) The boolean function converts its argument
+          to a boolean as follows: - a number is true if and only if
+          it is neither positive or negative zero nor NaN - a
+          node-set is true if and only if it is non-empty - a string
+           is true if and only if its length is non-zero """
+        libxml2mod.xmlXPathBooleanFunction(self._o, nargs)
+
+    def xpathCeilingFunction(self, nargs):
+        """Implement the ceiling() XPath function number
+          ceiling(number) The ceiling function returns the smallest
+          (closest to negative infinity) number that is not less than
+           the argument and that is an integer. """
+        libxml2mod.xmlXPathCeilingFunction(self._o, nargs)
+
+    def xpathCompareValues(self, inf, strict):
+        """Implement the compare operation on XPath objects: @arg1 <
+          @arg2    (1, 1, ... @arg1 <= @arg2   (1, 0, ... @arg1 >
+          @arg2    (0, 1, ... @arg1 >= @arg2   (0, 0, ...  When
+          neither object to be compared is a node-set and the
+          operator is <=, <, >=, >, then the objects are compared by
+          converted both objects to numbers and comparing the numbers
+          according to IEEE 754. The < comparison will be true if and
+          only if the first number is less than the second number.
+          The <= comparison will be true if and only if the first
+          number is less than or equal to the second number. The >
+          comparison will be true if and only if the first number is
+          greater than the second number. The >= comparison will be
+          true if and only if the first number is greater than or
+           equal to the second number. """
+        ret = libxml2mod.xmlXPathCompareValues(self._o, inf, strict)
+        return ret
+
+    def xpathConcatFunction(self, nargs):
+        """Implement the concat() XPath function string concat(string,
+          string, string*) The concat function returns the
+           concatenation of its arguments. """
+        libxml2mod.xmlXPathConcatFunction(self._o, nargs)
+
+    def xpathContainsFunction(self, nargs):
+        """Implement the contains() XPath function boolean
+          contains(string, string) The contains function returns true
+          if the first argument string contains the second argument
+           string, and otherwise returns false. """
+        libxml2mod.xmlXPathContainsFunction(self._o, nargs)
+
+    def xpathCountFunction(self, nargs):
+        """Implement the count() XPath function number count(node-set) """
+        libxml2mod.xmlXPathCountFunction(self._o, nargs)
+
+    def xpathDivValues(self):
+        """Implement the div operation on XPath objects @arg1 / @arg2:
+          The numeric operators convert their operands to numbers as
+           if by calling the number function. """
+        libxml2mod.xmlXPathDivValues(self._o)
+
+    def xpathEqualValues(self):
+        """Implement the equal operation on XPath objects content:
+           @arg1 == @arg2 """
+        ret = libxml2mod.xmlXPathEqualValues(self._o)
+        return ret
+
+    def xpathErr(self, error):
+        """Handle an XPath error """
+        libxml2mod.xmlXPathErr(self._o, error)
+
+    def xpathEvalExpr(self):
+        """Parse and evaluate an XPath expression in the given
+           context, then push the result on the context stack """
+        libxml2mod.xmlXPathEvalExpr(self._o)
+
+    def xpathFalseFunction(self, nargs):
+        """Implement the false() XPath function boolean false() """
+        libxml2mod.xmlXPathFalseFunction(self._o, nargs)
+
+    def xpathFloorFunction(self, nargs):
+        """Implement the floor() XPath function number floor(number)
+          The floor function returns the largest (closest to positive
+          infinity) number that is not greater than the argument and
+           that is an integer. """
+        libxml2mod.xmlXPathFloorFunction(self._o, nargs)
+
+    def xpathFreeParserContext(self):
+        """Free up an xmlXPathParserContext """
+        libxml2mod.xmlXPathFreeParserContext(self._o)
+
+    def xpathIdFunction(self, nargs):
+        """Implement the id() XPath function node-set id(object) The
+          id function selects elements by their unique ID (see [5.2.1
+          Unique IDs]). When the argument to id is of type node-set,
+          then the result is the union of the result of applying id
+          to the string value of each of the nodes in the argument
+          node-set. When the argument to id is of any other type, the
+          argument is converted to a string as if by a call to the
+          string function; the string is split into a
+          whitespace-separated list of tokens (whitespace is any
+          sequence of characters matching the production S); the
+          result is a node-set containing the elements in the same
+          document as the context node that have a unique ID equal to
+           any of the tokens in the list. """
+        libxml2mod.xmlXPathIdFunction(self._o, nargs)
+
+    def xpathLangFunction(self, nargs):
+        """Implement the lang() XPath function boolean lang(string)
+          The lang function returns true or false depending on
+          whether the language of the context node as specified by
+          xml:lang attributes is the same as or is a sublanguage of
+          the language specified by the argument string. The language
+          of the context node is determined by the value of the
+          xml:lang attribute on the context node, or, if the context
+          node has no xml:lang attribute, by the value of the
+          xml:lang attribute on the nearest ancestor of the context
+          node that has an xml:lang attribute. If there is no such
+           attribute, then lang """
+        libxml2mod.xmlXPathLangFunction(self._o, nargs)
+
+    def xpathLastFunction(self, nargs):
+        """Implement the last() XPath function number last() The last
+          function returns the number of nodes in the context node
+           list. """
+        libxml2mod.xmlXPathLastFunction(self._o, nargs)
+
+    def xpathLocalNameFunction(self, nargs):
+        """Implement the local-name() XPath function string
+          local-name(node-set?) The local-name function returns a
+          string containing the local part of the name of the node in
+          the argument node-set that is first in document order. If
+          the node-set is empty or the first node has no name, an
+          empty string is returned. If the argument is omitted it
+           defaults to the context node. """
+        libxml2mod.xmlXPathLocalNameFunction(self._o, nargs)
+
+    def xpathModValues(self):
+        """Implement the mod operation on XPath objects: @arg1 / @arg2
+          The numeric operators convert their operands to numbers as
+           if by calling the number function. """
+        libxml2mod.xmlXPathModValues(self._o)
+
+    def xpathMultValues(self):
+        """Implement the multiply operation on XPath objects: The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathMultValues(self._o)
+
+    def xpathNamespaceURIFunction(self, nargs):
+        """Implement the namespace-uri() XPath function string
+          namespace-uri(node-set?) The namespace-uri function returns
+          a string containing the namespace URI of the expanded name
+          of the node in the argument node-set that is first in
+          document order. If the node-set is empty, the first node
+          has no name, or the expanded name has no namespace URI, an
+          empty string is returned. If the argument is omitted it
+           defaults to the context node. """
+        libxml2mod.xmlXPathNamespaceURIFunction(self._o, nargs)
+
+    def xpathNextAncestor(self, cur):
+        """Traversal function for the "ancestor" direction the
+          ancestor axis contains the ancestors of the context node;
+          the ancestors of the context node consist of the parent of
+          context node and the parent's parent and so on; the nodes
+          are ordered in reverse document order; thus the parent is
+          the first node on the axis, and the parent's parent is the
+           second node on the axis """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAncestor(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAncestor() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAncestorOrSelf(self, cur):
+        """Traversal function for the "ancestor-or-self" direction he
+          ancestor-or-self axis contains the context node and
+          ancestors of the context node in reverse document order;
+          thus the context node is the first node on the axis, and
+          the context node's parent the second; parent here is
+           defined the same as with the parent axis. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAncestorOrSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAncestorOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAttribute(self, cur):
+        """Traversal function for the "attribute" direction TODO:
+           support DTD inherited default attributes """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAttribute(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAttribute() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextChild(self, cur):
+        """Traversal function for the "child" direction The child axis
+          contains the children of the context node in document order. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextChild(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendant(self, cur):
+        """Traversal function for the "descendant" direction the
+          descendant axis contains the descendants of the context
+          node in document order; a descendant is a child or a child
+           of a child and so on. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextDescendant(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextDescendant() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendantOrSelf(self, cur):
+        """Traversal function for the "descendant-or-self" direction
+          the descendant-or-self axis contains the context node and
+          the descendants of the context node in document order; thus
+          the context node is the first node on the axis, and the
+          first child of the context node is the second node on the
+           axis """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextDescendantOrSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextDescendantOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowing(self, cur):
+        """Traversal function for the "following" direction The
+          following axis contains all nodes in the same document as
+          the context node that are after the context node in
+          document order, excluding any descendants and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in document order """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextFollowing(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextFollowing() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowingSibling(self, cur):
+        """Traversal function for the "following-sibling" direction
+          The following-sibling axis contains the following siblings
+           of the context node in document order. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextFollowingSibling(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextFollowingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextNamespace(self, cur):
+        """Traversal function for the "namespace" direction the
+          namespace axis contains the namespace nodes of the context
+          node; the order of nodes on this axis is
+          implementation-defined; the axis will be empty unless the
+          context node is an element  We keep the XML namespace node
+           at the end of the list. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextNamespace(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextNamespace() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextParent(self, cur):
+        """Traversal function for the "parent" direction The parent
+          axis contains the parent of the context node, if there is
+           one. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextParent(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextParent() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPreceding(self, cur):
+        """Traversal function for the "preceding" direction the
+          preceding axis contains all nodes in the same document as
+          the context node that are before the context node in
+          document order, excluding any ancestors and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in reverse document order """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextPreceding(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextPreceding() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPrecedingSibling(self, cur):
+        """Traversal function for the "preceding-sibling" direction
+          The preceding-sibling axis contains the preceding siblings
+          of the context node in reverse document order; the first
+          preceding sibling is first on the axis; the sibling
+           preceding that node is the second on the axis and so on. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextPrecedingSibling(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextPrecedingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextSelf(self, cur):
+        """Traversal function for the "self" direction The self axis
+           contains just the context node itself """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNormalizeFunction(self, nargs):
+        """Implement the normalize-space() XPath function string
+          normalize-space(string?) The normalize-space function
+          returns the argument string with white space normalized by
+          stripping leading and trailing whitespace and replacing
+          sequences of whitespace characters by a single space.
+          Whitespace characters are the same allowed by the S
+          production in XML. If the argument is omitted, it defaults
+          to the context node converted to a string, in other words
+           the value of the context node. """
+        libxml2mod.xmlXPathNormalizeFunction(self._o, nargs)
+
+    def xpathNotEqualValues(self):
+        """Implement the equal operation on XPath objects content:
+           @arg1 == @arg2 """
+        ret = libxml2mod.xmlXPathNotEqualValues(self._o)
+        return ret
+
+    def xpathNotFunction(self, nargs):
+        """Implement the not() XPath function boolean not(boolean) The
+          not function returns true if its argument is false, and
+           false otherwise. """
+        libxml2mod.xmlXPathNotFunction(self._o, nargs)
+
+    def xpathNumberFunction(self, nargs):
+        """Implement the number() XPath function number number(object?) """
+        libxml2mod.xmlXPathNumberFunction(self._o, nargs)
+
+    def xpathParseNCName(self):
+        """parse an XML namespace non qualified name.  [NS 3] NCName
+          ::= (Letter | '_') (NCNameChar)*  [NS 4] NCNameChar ::=
+           Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender """
+        ret = libxml2mod.xmlXPathParseNCName(self._o)
+        return ret
+
+    def xpathParseName(self):
+        """parse an XML name  [4] NameChar ::= Letter | Digit | '.' |
+          '-' | '_' | ':' | CombiningChar | Extender  [5] Name ::=
+           (Letter | '_' | ':') (NameChar)* """
+        ret = libxml2mod.xmlXPathParseName(self._o)
+        return ret
+
+    def xpathPopBoolean(self):
+        """Pops a boolean from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopBoolean(self._o)
+        return ret
+
+    def xpathPopNumber(self):
+        """Pops a number from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopNumber(self._o)
+        return ret
+
+    def xpathPopString(self):
+        """Pops a string from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopString(self._o)
+        return ret
+
+    def xpathPositionFunction(self, nargs):
+        """Implement the position() XPath function number position()
+          The position function returns the position of the context
+          node in the context node list. The first position is 1, and
+           so the last position will be equal to last(). """
+        libxml2mod.xmlXPathPositionFunction(self._o, nargs)
+
+    def xpathRoot(self):
+        """Initialize the context to the root of the document """
+        libxml2mod.xmlXPathRoot(self._o)
+
+    def xpathRoundFunction(self, nargs):
+        """Implement the round() XPath function number round(number)
+          The round function returns the number that is closest to
+          the argument and that is an integer. If there are two such
+           numbers, then the one that is even is returned. """
+        libxml2mod.xmlXPathRoundFunction(self._o, nargs)
+
+    def xpathStartsWithFunction(self, nargs):
+        """Implement the starts-with() XPath function boolean
+          starts-with(string, string) The starts-with function
+          returns true if the first argument string starts with the
+           second argument string, and otherwise returns false. """
+        libxml2mod.xmlXPathStartsWithFunction(self._o, nargs)
+
+    def xpathStringFunction(self, nargs):
+        """Implement the string() XPath function string
+          string(object?) The string function converts an object to a
+          string as follows: - A node-set is converted to a string by
+          returning the value of the node in the node-set that is
+          first in document order. If the node-set is empty, an empty
+          string is returned. - A number is converted to a string as
+          follows + NaN is converted to the string NaN + positive
+          zero is converted to the string 0 + negative zero is
+          converted to the string 0 + positive infinity is converted
+          to the string Infinity + negative infinity is converted to
+          the string -Infinity + if the number is an integer, the
+          number is represented in decimal form as a Number with no
+          decimal point and no leading zeros, preceded by a minus
+          sign (-) if the number is negative + otherwise, the number
+          is represented in decimal form as a Number including a
+          decimal point with at least one digit before the decimal
+          point and at least one digit after the decimal point,
+          preceded by a minus sign (-) if the number is negative;
+          there must be no leading zeros before the decimal point
+          apart possibly from the one required digit immediately
+          before the decimal point; beyond the one required digit
+          after the decimal point there must be as many, but only as
+          many, more digits as are needed to uniquely distinguish the
+          number from all other IEEE 754 numeric values. - The
+          boolean false value is converted to the string false. The
+          boolean true value is converted to the string true.  If the
+          argument is omitted, it defaults to a node-set with the
+           context node as its only member. """
+        libxml2mod.xmlXPathStringFunction(self._o, nargs)
+
+    def xpathStringLengthFunction(self, nargs):
+        """Implement the string-length() XPath function number
+          string-length(string?) The string-length returns the number
+          of characters in the string (see [3.6 Strings]). If the
+          argument is omitted, it defaults to the context node
+          converted to a string, in other words the value of the
+           context node. """
+        libxml2mod.xmlXPathStringLengthFunction(self._o, nargs)
+
+    def xpathSubValues(self):
+        """Implement the subtraction operation on XPath objects: The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathSubValues(self._o)
+
+    def xpathSubstringAfterFunction(self, nargs):
+        """Implement the substring-after() XPath function string
+          substring-after(string, string) The substring-after
+          function returns the substring of the first argument string
+          that follows the first occurrence of the second argument
+          string in the first argument string, or the empty stringi
+          if the first argument string does not contain the second
+          argument string. For example,
+          substring-after("1999/04/01","/") returns 04/01, and
+           substring-after("1999/04/01","19") returns 99/04/01. """
+        libxml2mod.xmlXPathSubstringAfterFunction(self._o, nargs)
+
+    def xpathSubstringBeforeFunction(self, nargs):
+        """Implement the substring-before() XPath function string
+          substring-before(string, string) The substring-before
+          function returns the substring of the first argument string
+          that precedes the first occurrence of the second argument
+          string in the first argument string, or the empty string if
+          the first argument string does not contain the second
+          argument string. For example,
+           substring-before("1999/04/01","/") returns 1999. """
+        libxml2mod.xmlXPathSubstringBeforeFunction(self._o, nargs)
+
+    def xpathSubstringFunction(self, nargs):
+        """Implement the substring() XPath function string
+          substring(string, number, number?) The substring function
+          returns the substring of the first argument starting at the
+          position specified in the second argument with length
+          specified in the third argument. For example,
+          substring("12345",2,3) returns "234". If the third argument
+          is not specified, it returns the substring starting at the
+          position specified in the second argument and continuing to
+          the end of the string. For example, substring("12345",2)
+          returns "2345".  More precisely, each character in the
+          string (see [3.6 Strings]) is considered to have a numeric
+          position: the position of the first character is 1, the
+          position of the second character is 2 and so on. The
+          returned substring contains those characters for which the
+          position of the character is greater than or equal to the
+          second argument and, if the third argument is specified,
+          less than the sum of the second and third arguments; the
+          comparisons and addition used for the above follow the
+          standard IEEE 754 rules. Thus: - substring("12345", 1.5,
+          2.6) returns "234" - substring("12345", 0, 3) returns "12"
+          - substring("12345", 0 div 0, 3) returns "" -
+          substring("12345", 1, 0 div 0) returns "" -
+          substring("12345", -42, 1 div 0) returns "12345" -
+           substring("12345", -1 div 0, 1 div 0) returns "" """
+        libxml2mod.xmlXPathSubstringFunction(self._o, nargs)
+
+    def xpathSumFunction(self, nargs):
+        """Implement the sum() XPath function number sum(node-set) The
+          sum function returns the sum of the values of the nodes in
+           the argument node-set. """
+        libxml2mod.xmlXPathSumFunction(self._o, nargs)
+
+    def xpathTranslateFunction(self, nargs):
+        """Implement the translate() XPath function string
+          translate(string, string, string) The translate function
+          returns the first argument string with occurrences of
+          characters in the second argument string replaced by the
+          character at the corresponding position in the third
+          argument string. For example, translate("bar","abc","ABC")
+          returns the string BAr. If there is a character in the
+          second argument string with no character at a corresponding
+          position in the third argument string (because the second
+          argument string is longer than the third argument string),
+          then occurrences of that character in the first argument
+          string are removed. For example,
+           translate("--aaa--","abc-","ABC") """
+        libxml2mod.xmlXPathTranslateFunction(self._o, nargs)
+
+    def xpathTrueFunction(self, nargs):
+        """Implement the true() XPath function boolean true() """
+        libxml2mod.xmlXPathTrueFunction(self._o, nargs)
+
+    def xpathValueFlipSign(self):
+        """Implement the unary - operation on an XPath object The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathValueFlipSign(self._o)
+
+    def xpatherror(self, file, line, no):
+        """Formats an error message. """
+        libxml2mod.xmlXPatherror(self._o, file, line, no)
+
+    #
+    # xpathParserContext functions from module xpointer
+    #
+
+    def xpointerEvalRangePredicate(self):
+        """[8]   Predicate ::=   '[' PredicateExpr ']' [9]  
+          PredicateExpr ::=   Expr  Evaluate a predicate as in
+          xmlXPathEvalPredicate() but for a Location Set instead of a
+           node set """
+        libxml2mod.xmlXPtrEvalRangePredicate(self._o)
+
+    def xpointerRangeToFunction(self, nargs):
+        """Implement the range-to() XPointer function """
+        libxml2mod.xmlXPtrRangeToFunction(self._o, nargs)
+
+# xlinkShow
+XLINK_SHOW_NONE = 0
+XLINK_SHOW_NEW = 1
+XLINK_SHOW_EMBED = 2
+XLINK_SHOW_REPLACE = 3
+
+# xmlRelaxNGParserFlag
+XML_RELAXNGP_NONE = 0
+XML_RELAXNGP_FREE_DOC = 1
+XML_RELAXNGP_CRNG = 2
+
+# xmlBufferAllocationScheme
+XML_BUFFER_ALLOC_DOUBLEIT = 1
+XML_BUFFER_ALLOC_EXACT = 2
+XML_BUFFER_ALLOC_IMMUTABLE = 3
+XML_BUFFER_ALLOC_IO = 4
+XML_BUFFER_ALLOC_HYBRID = 5
+
+# xmlParserSeverities
+XML_PARSER_SEVERITY_VALIDITY_WARNING = 1
+XML_PARSER_SEVERITY_VALIDITY_ERROR = 2
+XML_PARSER_SEVERITY_WARNING = 3
+XML_PARSER_SEVERITY_ERROR = 4
+
+# xmlAttributeDefault
+XML_ATTRIBUTE_NONE = 1
+XML_ATTRIBUTE_REQUIRED = 2
+XML_ATTRIBUTE_IMPLIED = 3
+XML_ATTRIBUTE_FIXED = 4
+
+# xmlSchemaValType
+XML_SCHEMAS_UNKNOWN = 0
+XML_SCHEMAS_STRING = 1
+XML_SCHEMAS_NORMSTRING = 2
+XML_SCHEMAS_DECIMAL = 3
+XML_SCHEMAS_TIME = 4
+XML_SCHEMAS_GDAY = 5
+XML_SCHEMAS_GMONTH = 6
+XML_SCHEMAS_GMONTHDAY = 7
+XML_SCHEMAS_GYEAR = 8
+XML_SCHEMAS_GYEARMONTH = 9
+XML_SCHEMAS_DATE = 10
+XML_SCHEMAS_DATETIME = 11
+XML_SCHEMAS_DURATION = 12
+XML_SCHEMAS_FLOAT = 13
+XML_SCHEMAS_DOUBLE = 14
+XML_SCHEMAS_BOOLEAN = 15
+XML_SCHEMAS_TOKEN = 16
+XML_SCHEMAS_LANGUAGE = 17
+XML_SCHEMAS_NMTOKEN = 18
+XML_SCHEMAS_NMTOKENS = 19
+XML_SCHEMAS_NAME = 20
+XML_SCHEMAS_QNAME = 21
+XML_SCHEMAS_NCNAME = 22
+XML_SCHEMAS_ID = 23
+XML_SCHEMAS_IDREF = 24
+XML_SCHEMAS_IDREFS = 25
+XML_SCHEMAS_ENTITY = 26
+XML_SCHEMAS_ENTITIES = 27
+XML_SCHEMAS_NOTATION = 28
+XML_SCHEMAS_ANYURI = 29
+XML_SCHEMAS_INTEGER = 30
+XML_SCHEMAS_NPINTEGER = 31
+XML_SCHEMAS_NINTEGER = 32
+XML_SCHEMAS_NNINTEGER = 33
+XML_SCHEMAS_PINTEGER = 34
+XML_SCHEMAS_INT = 35
+XML_SCHEMAS_UINT = 36
+XML_SCHEMAS_LONG = 37
+XML_SCHEMAS_ULONG = 38
+XML_SCHEMAS_SHORT = 39
+XML_SCHEMAS_USHORT = 40
+XML_SCHEMAS_BYTE = 41
+XML_SCHEMAS_UBYTE = 42
+XML_SCHEMAS_HEXBINARY = 43
+XML_SCHEMAS_BASE64BINARY = 44
+XML_SCHEMAS_ANYTYPE = 45
+XML_SCHEMAS_ANYSIMPLETYPE = 46
+
+# xmlParserInputState
+XML_PARSER_EOF = -1
+XML_PARSER_START = 0
+XML_PARSER_MISC = 1
+XML_PARSER_PI = 2
+XML_PARSER_DTD = 3
+XML_PARSER_PROLOG = 4
+XML_PARSER_COMMENT = 5
+XML_PARSER_START_TAG = 6
+XML_PARSER_CONTENT = 7
+XML_PARSER_CDATA_SECTION = 8
+XML_PARSER_END_TAG = 9
+XML_PARSER_ENTITY_DECL = 10
+XML_PARSER_ENTITY_VALUE = 11
+XML_PARSER_ATTRIBUTE_VALUE = 12
+XML_PARSER_SYSTEM_LITERAL = 13
+XML_PARSER_EPILOG = 14
+XML_PARSER_IGNORE = 15
+XML_PARSER_PUBLIC_LITERAL = 16
+
+# xmlEntityType
+XML_INTERNAL_GENERAL_ENTITY = 1
+XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2
+XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3
+XML_INTERNAL_PARAMETER_ENTITY = 4
+XML_EXTERNAL_PARAMETER_ENTITY = 5
+XML_INTERNAL_PREDEFINED_ENTITY = 6
+
+# xmlSaveOption
+XML_SAVE_FORMAT = 1
+XML_SAVE_NO_DECL = 2
+XML_SAVE_NO_EMPTY = 4
+XML_SAVE_NO_XHTML = 8
+XML_SAVE_XHTML = 16
+XML_SAVE_AS_XML = 32
+XML_SAVE_AS_HTML = 64
+XML_SAVE_WSNONSIG = 128
+
+# xmlPatternFlags
+XML_PATTERN_DEFAULT = 0
+XML_PATTERN_XPATH = 1
+XML_PATTERN_XSSEL = 2
+XML_PATTERN_XSFIELD = 4
+
+# xmlParserErrors
+XML_ERR_OK = 0
+XML_ERR_INTERNAL_ERROR = 1
+XML_ERR_NO_MEMORY = 2
+XML_ERR_DOCUMENT_START = 3
+XML_ERR_DOCUMENT_EMPTY = 4
+XML_ERR_DOCUMENT_END = 5
+XML_ERR_INVALID_HEX_CHARREF = 6
+XML_ERR_INVALID_DEC_CHARREF = 7
+XML_ERR_INVALID_CHARREF = 8
+XML_ERR_INVALID_CHAR = 9
+XML_ERR_CHARREF_AT_EOF = 10
+XML_ERR_CHARREF_IN_PROLOG = 11
+XML_ERR_CHARREF_IN_EPILOG = 12
+XML_ERR_CHARREF_IN_DTD = 13
+XML_ERR_ENTITYREF_AT_EOF = 14
+XML_ERR_ENTITYREF_IN_PROLOG = 15
+XML_ERR_ENTITYREF_IN_EPILOG = 16
+XML_ERR_ENTITYREF_IN_DTD = 17
+XML_ERR_PEREF_AT_EOF = 18
+XML_ERR_PEREF_IN_PROLOG = 19
+XML_ERR_PEREF_IN_EPILOG = 20
+XML_ERR_PEREF_IN_INT_SUBSET = 21
+XML_ERR_ENTITYREF_NO_NAME = 22
+XML_ERR_ENTITYREF_SEMICOL_MISSING = 23
+XML_ERR_PEREF_NO_NAME = 24
+XML_ERR_PEREF_SEMICOL_MISSING = 25
+XML_ERR_UNDECLARED_ENTITY = 26
+XML_WAR_UNDECLARED_ENTITY = 27
+XML_ERR_UNPARSED_ENTITY = 28
+XML_ERR_ENTITY_IS_EXTERNAL = 29
+XML_ERR_ENTITY_IS_PARAMETER = 30
+XML_ERR_UNKNOWN_ENCODING = 31
+XML_ERR_UNSUPPORTED_ENCODING = 32
+XML_ERR_STRING_NOT_STARTED = 33
+XML_ERR_STRING_NOT_CLOSED = 34
+XML_ERR_NS_DECL_ERROR = 35
+XML_ERR_ENTITY_NOT_STARTED = 36
+XML_ERR_ENTITY_NOT_FINISHED = 37
+XML_ERR_LT_IN_ATTRIBUTE = 38
+XML_ERR_ATTRIBUTE_NOT_STARTED = 39
+XML_ERR_ATTRIBUTE_NOT_FINISHED = 40
+XML_ERR_ATTRIBUTE_WITHOUT_VALUE = 41
+XML_ERR_ATTRIBUTE_REDEFINED = 42
+XML_ERR_LITERAL_NOT_STARTED = 43
+XML_ERR_LITERAL_NOT_FINISHED = 44
+XML_ERR_COMMENT_NOT_FINISHED = 45
+XML_ERR_PI_NOT_STARTED = 46
+XML_ERR_PI_NOT_FINISHED = 47
+XML_ERR_NOTATION_NOT_STARTED = 48
+XML_ERR_NOTATION_NOT_FINISHED = 49
+XML_ERR_ATTLIST_NOT_STARTED = 50
+XML_ERR_ATTLIST_NOT_FINISHED = 51
+XML_ERR_MIXED_NOT_STARTED = 52
+XML_ERR_MIXED_NOT_FINISHED = 53
+XML_ERR_ELEMCONTENT_NOT_STARTED = 54
+XML_ERR_ELEMCONTENT_NOT_FINISHED = 55
+XML_ERR_XMLDECL_NOT_STARTED = 56
+XML_ERR_XMLDECL_NOT_FINISHED = 57
+XML_ERR_CONDSEC_NOT_STARTED = 58
+XML_ERR_CONDSEC_NOT_FINISHED = 59
+XML_ERR_EXT_SUBSET_NOT_FINISHED = 60
+XML_ERR_DOCTYPE_NOT_FINISHED = 61
+XML_ERR_MISPLACED_CDATA_END = 62
+XML_ERR_CDATA_NOT_FINISHED = 63
+XML_ERR_RESERVED_XML_NAME = 64
+XML_ERR_SPACE_REQUIRED = 65
+XML_ERR_SEPARATOR_REQUIRED = 66
+XML_ERR_NMTOKEN_REQUIRED = 67
+XML_ERR_NAME_REQUIRED = 68
+XML_ERR_PCDATA_REQUIRED = 69
+XML_ERR_URI_REQUIRED = 70
+XML_ERR_PUBID_REQUIRED = 71
+XML_ERR_LT_REQUIRED = 72
+XML_ERR_GT_REQUIRED = 73
+XML_ERR_LTSLASH_REQUIRED = 74
+XML_ERR_EQUAL_REQUIRED = 75
+XML_ERR_TAG_NAME_MISMATCH = 76
+XML_ERR_TAG_NOT_FINISHED = 77
+XML_ERR_STANDALONE_VALUE = 78
+XML_ERR_ENCODING_NAME = 79
+XML_ERR_HYPHEN_IN_COMMENT = 80
+XML_ERR_INVALID_ENCODING = 81
+XML_ERR_EXT_ENTITY_STANDALONE = 82
+XML_ERR_CONDSEC_INVALID = 83
+XML_ERR_VALUE_REQUIRED = 84
+XML_ERR_NOT_WELL_BALANCED = 85
+XML_ERR_EXTRA_CONTENT = 86
+XML_ERR_ENTITY_CHAR_ERROR = 87
+XML_ERR_ENTITY_PE_INTERNAL = 88
+XML_ERR_ENTITY_LOOP = 89
+XML_ERR_ENTITY_BOUNDARY = 90
+XML_ERR_INVALID_URI = 91
+XML_ERR_URI_FRAGMENT = 92
+XML_WAR_CATALOG_PI = 93
+XML_ERR_NO_DTD = 94
+XML_ERR_CONDSEC_INVALID_KEYWORD = 95
+XML_ERR_VERSION_MISSING = 96
+XML_WAR_UNKNOWN_VERSION = 97
+XML_WAR_LANG_VALUE = 98
+XML_WAR_NS_URI = 99
+XML_WAR_NS_URI_RELATIVE = 100
+XML_ERR_MISSING_ENCODING = 101
+XML_WAR_SPACE_VALUE = 102
+XML_ERR_NOT_STANDALONE = 103
+XML_ERR_ENTITY_PROCESSING = 104
+XML_ERR_NOTATION_PROCESSING = 105
+XML_WAR_NS_COLUMN = 106
+XML_WAR_ENTITY_REDEFINED = 107
+XML_ERR_UNKNOWN_VERSION = 108
+XML_ERR_VERSION_MISMATCH = 109
+XML_ERR_NAME_TOO_LONG = 110
+XML_ERR_USER_STOP = 111
+XML_NS_ERR_XML_NAMESPACE = 200
+XML_NS_ERR_UNDEFINED_NAMESPACE = 201
+XML_NS_ERR_QNAME = 202
+XML_NS_ERR_ATTRIBUTE_REDEFINED = 203
+XML_NS_ERR_EMPTY = 204
+XML_NS_ERR_COLON = 205
+XML_DTD_ATTRIBUTE_DEFAULT = 500
+XML_DTD_ATTRIBUTE_REDEFINED = 501
+XML_DTD_ATTRIBUTE_VALUE = 502
+XML_DTD_CONTENT_ERROR = 503
+XML_DTD_CONTENT_MODEL = 504
+XML_DTD_CONTENT_NOT_DETERMINIST = 505
+XML_DTD_DIFFERENT_PREFIX = 506
+XML_DTD_ELEM_DEFAULT_NAMESPACE = 507
+XML_DTD_ELEM_NAMESPACE = 508
+XML_DTD_ELEM_REDEFINED = 509
+XML_DTD_EMPTY_NOTATION = 510
+XML_DTD_ENTITY_TYPE = 511
+XML_DTD_ID_FIXED = 512
+XML_DTD_ID_REDEFINED = 513
+XML_DTD_ID_SUBSET = 514
+XML_DTD_INVALID_CHILD = 515
+XML_DTD_INVALID_DEFAULT = 516
+XML_DTD_LOAD_ERROR = 517
+XML_DTD_MISSING_ATTRIBUTE = 518
+XML_DTD_MIXED_CORRUPT = 519
+XML_DTD_MULTIPLE_ID = 520
+XML_DTD_NO_DOC = 521
+XML_DTD_NO_DTD = 522
+XML_DTD_NO_ELEM_NAME = 523
+XML_DTD_NO_PREFIX = 524
+XML_DTD_NO_ROOT = 525
+XML_DTD_NOTATION_REDEFINED = 526
+XML_DTD_NOTATION_VALUE = 527
+XML_DTD_NOT_EMPTY = 528
+XML_DTD_NOT_PCDATA = 529
+XML_DTD_NOT_STANDALONE = 530
+XML_DTD_ROOT_NAME = 531
+XML_DTD_STANDALONE_WHITE_SPACE = 532
+XML_DTD_UNKNOWN_ATTRIBUTE = 533
+XML_DTD_UNKNOWN_ELEM = 534
+XML_DTD_UNKNOWN_ENTITY = 535
+XML_DTD_UNKNOWN_ID = 536
+XML_DTD_UNKNOWN_NOTATION = 537
+XML_DTD_STANDALONE_DEFAULTED = 538
+XML_DTD_XMLID_VALUE = 539
+XML_DTD_XMLID_TYPE = 540
+XML_DTD_DUP_TOKEN = 541
+XML_HTML_STRUCURE_ERROR = 800
+XML_HTML_UNKNOWN_TAG = 801
+XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000
+XML_RNGP_ATTR_CONFLICT = 1001
+XML_RNGP_ATTRIBUTE_CHILDREN = 1002
+XML_RNGP_ATTRIBUTE_CONTENT = 1003
+XML_RNGP_ATTRIBUTE_EMPTY = 1004
+XML_RNGP_ATTRIBUTE_NOOP = 1005
+XML_RNGP_CHOICE_CONTENT = 1006
+XML_RNGP_CHOICE_EMPTY = 1007
+XML_RNGP_CREATE_FAILURE = 1008
+XML_RNGP_DATA_CONTENT = 1009
+XML_RNGP_DEF_CHOICE_AND_INTERLEAVE = 1010
+XML_RNGP_DEFINE_CREATE_FAILED = 1011
+XML_RNGP_DEFINE_EMPTY = 1012
+XML_RNGP_DEFINE_MISSING = 1013
+XML_RNGP_DEFINE_NAME_MISSING = 1014
+XML_RNGP_ELEM_CONTENT_EMPTY = 1015
+XML_RNGP_ELEM_CONTENT_ERROR = 1016
+XML_RNGP_ELEMENT_EMPTY = 1017
+XML_RNGP_ELEMENT_CONTENT = 1018
+XML_RNGP_ELEMENT_NAME = 1019
+XML_RNGP_ELEMENT_NO_CONTENT = 1020
+XML_RNGP_ELEM_TEXT_CONFLICT = 1021
+XML_RNGP_EMPTY = 1022
+XML_RNGP_EMPTY_CONSTRUCT = 1023
+XML_RNGP_EMPTY_CONTENT = 1024
+XML_RNGP_EMPTY_NOT_EMPTY = 1025
+XML_RNGP_ERROR_TYPE_LIB = 1026
+XML_RNGP_EXCEPT_EMPTY = 1027
+XML_RNGP_EXCEPT_MISSING = 1028
+XML_RNGP_EXCEPT_MULTIPLE = 1029
+XML_RNGP_EXCEPT_NO_CONTENT = 1030
+XML_RNGP_EXTERNALREF_EMTPY = 1031
+XML_RNGP_EXTERNAL_REF_FAILURE = 1032
+XML_RNGP_EXTERNALREF_RECURSE = 1033
+XML_RNGP_FORBIDDEN_ATTRIBUTE = 1034
+XML_RNGP_FOREIGN_ELEMENT = 1035
+XML_RNGP_GRAMMAR_CONTENT = 1036
+XML_RNGP_GRAMMAR_EMPTY = 1037
+XML_RNGP_GRAMMAR_MISSING = 1038
+XML_RNGP_GRAMMAR_NO_START = 1039
+XML_RNGP_GROUP_ATTR_CONFLICT = 1040
+XML_RNGP_HREF_ERROR = 1041
+XML_RNGP_INCLUDE_EMPTY = 1042
+XML_RNGP_INCLUDE_FAILURE = 1043
+XML_RNGP_INCLUDE_RECURSE = 1044
+XML_RNGP_INTERLEAVE_ADD = 1045
+XML_RNGP_INTERLEAVE_CREATE_FAILED = 1046
+XML_RNGP_INTERLEAVE_EMPTY = 1047
+XML_RNGP_INTERLEAVE_NO_CONTENT = 1048
+XML_RNGP_INVALID_DEFINE_NAME = 1049
+XML_RNGP_INVALID_URI = 1050
+XML_RNGP_INVALID_VALUE = 1051
+XML_RNGP_MISSING_HREF = 1052
+XML_RNGP_NAME_MISSING = 1053
+XML_RNGP_NEED_COMBINE = 1054
+XML_RNGP_NOTALLOWED_NOT_EMPTY = 1055
+XML_RNGP_NSNAME_ATTR_ANCESTOR = 1056
+XML_RNGP_NSNAME_NO_NS = 1057
+XML_RNGP_PARAM_FORBIDDEN = 1058
+XML_RNGP_PARAM_NAME_MISSING = 1059
+XML_RNGP_PARENTREF_CREATE_FAILED = 1060
+XML_RNGP_PARENTREF_NAME_INVALID = 1061
+XML_RNGP_PARENTREF_NO_NAME = 1062
+XML_RNGP_PARENTREF_NO_PARENT = 1063
+XML_RNGP_PARENTREF_NOT_EMPTY = 1064
+XML_RNGP_PARSE_ERROR = 1065
+XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME = 1066
+XML_RNGP_PAT_ATTR_ATTR = 1067
+XML_RNGP_PAT_ATTR_ELEM = 1068
+XML_RNGP_PAT_DATA_EXCEPT_ATTR = 1069
+XML_RNGP_PAT_DATA_EXCEPT_ELEM = 1070
+XML_RNGP_PAT_DATA_EXCEPT_EMPTY = 1071
+XML_RNGP_PAT_DATA_EXCEPT_GROUP = 1072
+XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE = 1073
+XML_RNGP_PAT_DATA_EXCEPT_LIST = 1074
+XML_RNGP_PAT_DATA_EXCEPT_ONEMORE = 1075
+XML_RNGP_PAT_DATA_EXCEPT_REF = 1076
+XML_RNGP_PAT_DATA_EXCEPT_TEXT = 1077
+XML_RNGP_PAT_LIST_ATTR = 1078
+XML_RNGP_PAT_LIST_ELEM = 1079
+XML_RNGP_PAT_LIST_INTERLEAVE = 1080
+XML_RNGP_PAT_LIST_LIST = 1081
+XML_RNGP_PAT_LIST_REF = 1082
+XML_RNGP_PAT_LIST_TEXT = 1083
+XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME = 1084
+XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME = 1085
+XML_RNGP_PAT_ONEMORE_GROUP_ATTR = 1086
+XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR = 1087
+XML_RNGP_PAT_START_ATTR = 1088
+XML_RNGP_PAT_START_DATA = 1089
+XML_RNGP_PAT_START_EMPTY = 1090
+XML_RNGP_PAT_START_GROUP = 1091
+XML_RNGP_PAT_START_INTERLEAVE = 1092
+XML_RNGP_PAT_START_LIST = 1093
+XML_RNGP_PAT_START_ONEMORE = 1094
+XML_RNGP_PAT_START_TEXT = 1095
+XML_RNGP_PAT_START_VALUE = 1096
+XML_RNGP_PREFIX_UNDEFINED = 1097
+XML_RNGP_REF_CREATE_FAILED = 1098
+XML_RNGP_REF_CYCLE = 1099
+XML_RNGP_REF_NAME_INVALID = 1100
+XML_RNGP_REF_NO_DEF = 1101
+XML_RNGP_REF_NO_NAME = 1102
+XML_RNGP_REF_NOT_EMPTY = 1103
+XML_RNGP_START_CHOICE_AND_INTERLEAVE = 1104
+XML_RNGP_START_CONTENT = 1105
+XML_RNGP_START_EMPTY = 1106
+XML_RNGP_START_MISSING = 1107
+XML_RNGP_TEXT_EXPECTED = 1108
+XML_RNGP_TEXT_HAS_CHILD = 1109
+XML_RNGP_TYPE_MISSING = 1110
+XML_RNGP_TYPE_NOT_FOUND = 1111
+XML_RNGP_TYPE_VALUE = 1112
+XML_RNGP_UNKNOWN_ATTRIBUTE = 1113
+XML_RNGP_UNKNOWN_COMBINE = 1114
+XML_RNGP_UNKNOWN_CONSTRUCT = 1115
+XML_RNGP_UNKNOWN_TYPE_LIB = 1116
+XML_RNGP_URI_FRAGMENT = 1117
+XML_RNGP_URI_NOT_ABSOLUTE = 1118
+XML_RNGP_VALUE_EMPTY = 1119
+XML_RNGP_VALUE_NO_CONTENT = 1120
+XML_RNGP_XMLNS_NAME = 1121
+XML_RNGP_XML_NS = 1122
+XML_XPATH_EXPRESSION_OK = 1200
+XML_XPATH_NUMBER_ERROR = 1201
+XML_XPATH_UNFINISHED_LITERAL_ERROR = 1202
+XML_XPATH_START_LITERAL_ERROR = 1203
+XML_XPATH_VARIABLE_REF_ERROR = 1204
+XML_XPATH_UNDEF_VARIABLE_ERROR = 1205
+XML_XPATH_INVALID_PREDICATE_ERROR = 1206
+XML_XPATH_EXPR_ERROR = 1207
+XML_XPATH_UNCLOSED_ERROR = 1208
+XML_XPATH_UNKNOWN_FUNC_ERROR = 1209
+XML_XPATH_INVALID_OPERAND = 1210
+XML_XPATH_INVALID_TYPE = 1211
+XML_XPATH_INVALID_ARITY = 1212
+XML_XPATH_INVALID_CTXT_SIZE = 1213
+XML_XPATH_INVALID_CTXT_POSITION = 1214
+XML_XPATH_MEMORY_ERROR = 1215
+XML_XPTR_SYNTAX_ERROR = 1216
+XML_XPTR_RESOURCE_ERROR = 1217
+XML_XPTR_SUB_RESOURCE_ERROR = 1218
+XML_XPATH_UNDEF_PREFIX_ERROR = 1219
+XML_XPATH_ENCODING_ERROR = 1220
+XML_XPATH_INVALID_CHAR_ERROR = 1221
+XML_TREE_INVALID_HEX = 1300
+XML_TREE_INVALID_DEC = 1301
+XML_TREE_UNTERMINATED_ENTITY = 1302
+XML_TREE_NOT_UTF8 = 1303
+XML_SAVE_NOT_UTF8 = 1400
+XML_SAVE_CHAR_INVALID = 1401
+XML_SAVE_NO_DOCTYPE = 1402
+XML_SAVE_UNKNOWN_ENCODING = 1403
+XML_REGEXP_COMPILE_ERROR = 1450
+XML_IO_UNKNOWN = 1500
+XML_IO_EACCES = 1501
+XML_IO_EAGAIN = 1502
+XML_IO_EBADF = 1503
+XML_IO_EBADMSG = 1504
+XML_IO_EBUSY = 1505
+XML_IO_ECANCELED = 1506
+XML_IO_ECHILD = 1507
+XML_IO_EDEADLK = 1508
+XML_IO_EDOM = 1509
+XML_IO_EEXIST = 1510
+XML_IO_EFAULT = 1511
+XML_IO_EFBIG = 1512
+XML_IO_EINPROGRESS = 1513
+XML_IO_EINTR = 1514
+XML_IO_EINVAL = 1515
+XML_IO_EIO = 1516
+XML_IO_EISDIR = 1517
+XML_IO_EMFILE = 1518
+XML_IO_EMLINK = 1519
+XML_IO_EMSGSIZE = 1520
+XML_IO_ENAMETOOLONG = 1521
+XML_IO_ENFILE = 1522
+XML_IO_ENODEV = 1523
+XML_IO_ENOENT = 1524
+XML_IO_ENOEXEC = 1525
+XML_IO_ENOLCK = 1526
+XML_IO_ENOMEM = 1527
+XML_IO_ENOSPC = 1528
+XML_IO_ENOSYS = 1529
+XML_IO_ENOTDIR = 1530
+XML_IO_ENOTEMPTY = 1531
+XML_IO_ENOTSUP = 1532
+XML_IO_ENOTTY = 1533
+XML_IO_ENXIO = 1534
+XML_IO_EPERM = 1535
+XML_IO_EPIPE = 1536
+XML_IO_ERANGE = 1537
+XML_IO_EROFS = 1538
+XML_IO_ESPIPE = 1539
+XML_IO_ESRCH = 1540
+XML_IO_ETIMEDOUT = 1541
+XML_IO_EXDEV = 1542
+XML_IO_NETWORK_ATTEMPT = 1543
+XML_IO_ENCODER = 1544
+XML_IO_FLUSH = 1545
+XML_IO_WRITE = 1546
+XML_IO_NO_INPUT = 1547
+XML_IO_BUFFER_FULL = 1548
+XML_IO_LOAD_ERROR = 1549
+XML_IO_ENOTSOCK = 1550
+XML_IO_EISCONN = 1551
+XML_IO_ECONNREFUSED = 1552
+XML_IO_ENETUNREACH = 1553
+XML_IO_EADDRINUSE = 1554
+XML_IO_EALREADY = 1555
+XML_IO_EAFNOSUPPORT = 1556
+XML_XINCLUDE_RECURSION = 1600
+XML_XINCLUDE_PARSE_VALUE = 1601
+XML_XINCLUDE_ENTITY_DEF_MISMATCH = 1602
+XML_XINCLUDE_NO_HREF = 1603
+XML_XINCLUDE_NO_FALLBACK = 1604
+XML_XINCLUDE_HREF_URI = 1605
+XML_XINCLUDE_TEXT_FRAGMENT = 1606
+XML_XINCLUDE_TEXT_DOCUMENT = 1607
+XML_XINCLUDE_INVALID_CHAR = 1608
+XML_XINCLUDE_BUILD_FAILED = 1609
+XML_XINCLUDE_UNKNOWN_ENCODING = 1610
+XML_XINCLUDE_MULTIPLE_ROOT = 1611
+XML_XINCLUDE_XPTR_FAILED = 1612
+XML_XINCLUDE_XPTR_RESULT = 1613
+XML_XINCLUDE_INCLUDE_IN_INCLUDE = 1614
+XML_XINCLUDE_FALLBACKS_IN_INCLUDE = 1615
+XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE = 1616
+XML_XINCLUDE_DEPRECATED_NS = 1617
+XML_XINCLUDE_FRAGMENT_ID = 1618
+XML_CATALOG_MISSING_ATTR = 1650
+XML_CATALOG_ENTRY_BROKEN = 1651
+XML_CATALOG_PREFER_VALUE = 1652
+XML_CATALOG_NOT_CATALOG = 1653
+XML_CATALOG_RECURSION = 1654
+XML_SCHEMAP_PREFIX_UNDEFINED = 1700
+XML_SCHEMAP_ATTRFORMDEFAULT_VALUE = 1701
+XML_SCHEMAP_ATTRGRP_NONAME_NOREF = 1702
+XML_SCHEMAP_ATTR_NONAME_NOREF = 1703
+XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF = 1704
+XML_SCHEMAP_ELEMFORMDEFAULT_VALUE = 1705
+XML_SCHEMAP_ELEM_NONAME_NOREF = 1706
+XML_SCHEMAP_EXTENSION_NO_BASE = 1707
+XML_SCHEMAP_FACET_NO_VALUE = 1708
+XML_SCHEMAP_FAILED_BUILD_IMPORT = 1709
+XML_SCHEMAP_GROUP_NONAME_NOREF = 1710
+XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI = 1711
+XML_SCHEMAP_IMPORT_REDEFINE_NSNAME = 1712
+XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI = 1713
+XML_SCHEMAP_INVALID_BOOLEAN = 1714
+XML_SCHEMAP_INVALID_ENUM = 1715
+XML_SCHEMAP_INVALID_FACET = 1716
+XML_SCHEMAP_INVALID_FACET_VALUE = 1717
+XML_SCHEMAP_INVALID_MAXOCCURS = 1718
+XML_SCHEMAP_INVALID_MINOCCURS = 1719
+XML_SCHEMAP_INVALID_REF_AND_SUBTYPE = 1720
+XML_SCHEMAP_INVALID_WHITE_SPACE = 1721
+XML_SCHEMAP_NOATTR_NOREF = 1722
+XML_SCHEMAP_NOTATION_NO_NAME = 1723
+XML_SCHEMAP_NOTYPE_NOREF = 1724
+XML_SCHEMAP_REF_AND_SUBTYPE = 1725
+XML_SCHEMAP_RESTRICTION_NONAME_NOREF = 1726
+XML_SCHEMAP_SIMPLETYPE_NONAME = 1727
+XML_SCHEMAP_TYPE_AND_SUBTYPE = 1728
+XML_SCHEMAP_UNKNOWN_ALL_CHILD = 1729
+XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD = 1730
+XML_SCHEMAP_UNKNOWN_ATTR_CHILD = 1731
+XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD = 1732
+XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP = 1733
+XML_SCHEMAP_UNKNOWN_BASE_TYPE = 1734
+XML_SCHEMAP_UNKNOWN_CHOICE_CHILD = 1735
+XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD = 1736
+XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD = 1737
+XML_SCHEMAP_UNKNOWN_ELEM_CHILD = 1738
+XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD = 1739
+XML_SCHEMAP_UNKNOWN_FACET_CHILD = 1740
+XML_SCHEMAP_UNKNOWN_FACET_TYPE = 1741
+XML_SCHEMAP_UNKNOWN_GROUP_CHILD = 1742
+XML_SCHEMAP_UNKNOWN_IMPORT_CHILD = 1743
+XML_SCHEMAP_UNKNOWN_LIST_CHILD = 1744
+XML_SCHEMAP_UNKNOWN_NOTATION_CHILD = 1745
+XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD = 1746
+XML_SCHEMAP_UNKNOWN_REF = 1747
+XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD = 1748
+XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD = 1749
+XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD = 1750
+XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD = 1751
+XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD = 1752
+XML_SCHEMAP_UNKNOWN_TYPE = 1753
+XML_SCHEMAP_UNKNOWN_UNION_CHILD = 1754
+XML_SCHEMAP_ELEM_DEFAULT_FIXED = 1755
+XML_SCHEMAP_REGEXP_INVALID = 1756
+XML_SCHEMAP_FAILED_LOAD = 1757
+XML_SCHEMAP_NOTHING_TO_PARSE = 1758
+XML_SCHEMAP_NOROOT = 1759
+XML_SCHEMAP_REDEFINED_GROUP = 1760
+XML_SCHEMAP_REDEFINED_TYPE = 1761
+XML_SCHEMAP_REDEFINED_ELEMENT = 1762
+XML_SCHEMAP_REDEFINED_ATTRGROUP = 1763
+XML_SCHEMAP_REDEFINED_ATTR = 1764
+XML_SCHEMAP_REDEFINED_NOTATION = 1765
+XML_SCHEMAP_FAILED_PARSE = 1766
+XML_SCHEMAP_UNKNOWN_PREFIX = 1767
+XML_SCHEMAP_DEF_AND_PREFIX = 1768
+XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD = 1769
+XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI = 1770
+XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI = 1771
+XML_SCHEMAP_NOT_SCHEMA = 1772
+XML_SCHEMAP_UNKNOWN_MEMBER_TYPE = 1773
+XML_SCHEMAP_INVALID_ATTR_USE = 1774
+XML_SCHEMAP_RECURSIVE = 1775
+XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE = 1776
+XML_SCHEMAP_INVALID_ATTR_COMBINATION = 1777
+XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION = 1778
+XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD = 1779
+XML_SCHEMAP_INVALID_ATTR_NAME = 1780
+XML_SCHEMAP_REF_AND_CONTENT = 1781
+XML_SCHEMAP_CT_PROPS_CORRECT_1 = 1782
+XML_SCHEMAP_CT_PROPS_CORRECT_2 = 1783
+XML_SCHEMAP_CT_PROPS_CORRECT_3 = 1784
+XML_SCHEMAP_CT_PROPS_CORRECT_4 = 1785
+XML_SCHEMAP_CT_PROPS_CORRECT_5 = 1786
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 = 1787
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1 = 1788
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2 = 1789
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2 = 1790
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3 = 1791
+XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER = 1792
+XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE = 1793
+XML_SCHEMAP_UNION_NOT_EXPRESSIBLE = 1794
+XML_SCHEMAP_SRC_IMPORT_3_1 = 1795
+XML_SCHEMAP_SRC_IMPORT_3_2 = 1796
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1 = 1797
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2 = 1798
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3 = 1799
+XML_SCHEMAP_COS_CT_EXTENDS_1_3 = 1800
+XML_SCHEMAV_NOROOT = 1801
+XML_SCHEMAV_UNDECLAREDELEM = 1802
+XML_SCHEMAV_NOTTOPLEVEL = 1803
+XML_SCHEMAV_MISSING = 1804
+XML_SCHEMAV_WRONGELEM = 1805
+XML_SCHEMAV_NOTYPE = 1806
+XML_SCHEMAV_NOROLLBACK = 1807
+XML_SCHEMAV_ISABSTRACT = 1808
+XML_SCHEMAV_NOTEMPTY = 1809
+XML_SCHEMAV_ELEMCONT = 1810
+XML_SCHEMAV_HAVEDEFAULT = 1811
+XML_SCHEMAV_NOTNILLABLE = 1812
+XML_SCHEMAV_EXTRACONTENT = 1813
+XML_SCHEMAV_INVALIDATTR = 1814
+XML_SCHEMAV_INVALIDELEM = 1815
+XML_SCHEMAV_NOTDETERMINIST = 1816
+XML_SCHEMAV_CONSTRUCT = 1817
+XML_SCHEMAV_INTERNAL = 1818
+XML_SCHEMAV_NOTSIMPLE = 1819
+XML_SCHEMAV_ATTRUNKNOWN = 1820
+XML_SCHEMAV_ATTRINVALID = 1821
+XML_SCHEMAV_VALUE = 1822
+XML_SCHEMAV_FACET = 1823
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1 = 1824
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2 = 1825
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3 = 1826
+XML_SCHEMAV_CVC_TYPE_3_1_1 = 1827
+XML_SCHEMAV_CVC_TYPE_3_1_2 = 1828
+XML_SCHEMAV_CVC_FACET_VALID = 1829
+XML_SCHEMAV_CVC_LENGTH_VALID = 1830
+XML_SCHEMAV_CVC_MINLENGTH_VALID = 1831
+XML_SCHEMAV_CVC_MAXLENGTH_VALID = 1832
+XML_SCHEMAV_CVC_MININCLUSIVE_VALID = 1833
+XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID = 1834
+XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID = 1835
+XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID = 1836
+XML_SCHEMAV_CVC_TOTALDIGITS_VALID = 1837
+XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID = 1838
+XML_SCHEMAV_CVC_PATTERN_VALID = 1839
+XML_SCHEMAV_CVC_ENUMERATION_VALID = 1840
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1 = 1841
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2 = 1842
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3 = 1843
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4 = 1844
+XML_SCHEMAV_CVC_ELT_1 = 1845
+XML_SCHEMAV_CVC_ELT_2 = 1846
+XML_SCHEMAV_CVC_ELT_3_1 = 1847
+XML_SCHEMAV_CVC_ELT_3_2_1 = 1848
+XML_SCHEMAV_CVC_ELT_3_2_2 = 1849
+XML_SCHEMAV_CVC_ELT_4_1 = 1850
+XML_SCHEMAV_CVC_ELT_4_2 = 1851
+XML_SCHEMAV_CVC_ELT_4_3 = 1852
+XML_SCHEMAV_CVC_ELT_5_1_1 = 1853
+XML_SCHEMAV_CVC_ELT_5_1_2 = 1854
+XML_SCHEMAV_CVC_ELT_5_2_1 = 1855
+XML_SCHEMAV_CVC_ELT_5_2_2_1 = 1856
+XML_SCHEMAV_CVC_ELT_5_2_2_2_1 = 1857
+XML_SCHEMAV_CVC_ELT_5_2_2_2_2 = 1858
+XML_SCHEMAV_CVC_ELT_6 = 1859
+XML_SCHEMAV_CVC_ELT_7 = 1860
+XML_SCHEMAV_CVC_ATTRIBUTE_1 = 1861
+XML_SCHEMAV_CVC_ATTRIBUTE_2 = 1862
+XML_SCHEMAV_CVC_ATTRIBUTE_3 = 1863
+XML_SCHEMAV_CVC_ATTRIBUTE_4 = 1864
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1 = 1865
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1 = 1866
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2 = 1867
+XML_SCHEMAV_CVC_COMPLEX_TYPE_4 = 1868
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1 = 1869
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2 = 1870
+XML_SCHEMAV_ELEMENT_CONTENT = 1871
+XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING = 1872
+XML_SCHEMAV_CVC_COMPLEX_TYPE_1 = 1873
+XML_SCHEMAV_CVC_AU = 1874
+XML_SCHEMAV_CVC_TYPE_1 = 1875
+XML_SCHEMAV_CVC_TYPE_2 = 1876
+XML_SCHEMAV_CVC_IDC = 1877
+XML_SCHEMAV_CVC_WILDCARD = 1878
+XML_SCHEMAV_MISC = 1879
+XML_XPTR_UNKNOWN_SCHEME = 1900
+XML_XPTR_CHILDSEQ_START = 1901
+XML_XPTR_EVAL_FAILED = 1902
+XML_XPTR_EXTRA_OBJECTS = 1903
+XML_C14N_CREATE_CTXT = 1950
+XML_C14N_REQUIRES_UTF8 = 1951
+XML_C14N_CREATE_STACK = 1952
+XML_C14N_INVALID_NODE = 1953
+XML_C14N_UNKNOW_NODE = 1954
+XML_C14N_RELATIVE_NAMESPACE = 1955
+XML_FTP_PASV_ANSWER = 2000
+XML_FTP_EPSV_ANSWER = 2001
+XML_FTP_ACCNT = 2002
+XML_FTP_URL_SYNTAX = 2003
+XML_HTTP_URL_SYNTAX = 2020
+XML_HTTP_USE_IP = 2021
+XML_HTTP_UNKNOWN_HOST = 2022
+XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000
+XML_SCHEMAP_SRC_SIMPLE_TYPE_2 = 3001
+XML_SCHEMAP_SRC_SIMPLE_TYPE_3 = 3002
+XML_SCHEMAP_SRC_SIMPLE_TYPE_4 = 3003
+XML_SCHEMAP_SRC_RESOLVE = 3004
+XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE = 3005
+XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE = 3006
+XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES = 3007
+XML_SCHEMAP_ST_PROPS_CORRECT_1 = 3008
+XML_SCHEMAP_ST_PROPS_CORRECT_2 = 3009
+XML_SCHEMAP_ST_PROPS_CORRECT_3 = 3010
+XML_SCHEMAP_COS_ST_RESTRICTS_1_1 = 3011
+XML_SCHEMAP_COS_ST_RESTRICTS_1_2 = 3012
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1 = 3013
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2 = 3014
+XML_SCHEMAP_COS_ST_RESTRICTS_2_1 = 3015
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1 = 3016
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2 = 3017
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1 = 3018
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2 = 3019
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3 = 3020
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4 = 3021
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5 = 3022
+XML_SCHEMAP_COS_ST_RESTRICTS_3_1 = 3023
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1 = 3024
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2 = 3025
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2 = 3026
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1 = 3027
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3 = 3028
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4 = 3029
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5 = 3030
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_1 = 3031
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_2 = 3032
+XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED = 3033
+XML_SCHEMAP_S4S_ELEM_MISSING = 3034
+XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED = 3035
+XML_SCHEMAP_S4S_ATTR_MISSING = 3036
+XML_SCHEMAP_S4S_ATTR_INVALID_VALUE = 3037
+XML_SCHEMAP_SRC_ELEMENT_1 = 3038
+XML_SCHEMAP_SRC_ELEMENT_2_1 = 3039
+XML_SCHEMAP_SRC_ELEMENT_2_2 = 3040
+XML_SCHEMAP_SRC_ELEMENT_3 = 3041
+XML_SCHEMAP_P_PROPS_CORRECT_1 = 3042
+XML_SCHEMAP_P_PROPS_CORRECT_2_1 = 3043
+XML_SCHEMAP_P_PROPS_CORRECT_2_2 = 3044
+XML_SCHEMAP_E_PROPS_CORRECT_2 = 3045
+XML_SCHEMAP_E_PROPS_CORRECT_3 = 3046
+XML_SCHEMAP_E_PROPS_CORRECT_4 = 3047
+XML_SCHEMAP_E_PROPS_CORRECT_5 = 3048
+XML_SCHEMAP_E_PROPS_CORRECT_6 = 3049
+XML_SCHEMAP_SRC_INCLUDE = 3050
+XML_SCHEMAP_SRC_ATTRIBUTE_1 = 3051
+XML_SCHEMAP_SRC_ATTRIBUTE_2 = 3052
+XML_SCHEMAP_SRC_ATTRIBUTE_3_1 = 3053
+XML_SCHEMAP_SRC_ATTRIBUTE_3_2 = 3054
+XML_SCHEMAP_SRC_ATTRIBUTE_4 = 3055
+XML_SCHEMAP_NO_XMLNS = 3056
+XML_SCHEMAP_NO_XSI = 3057
+XML_SCHEMAP_COS_VALID_DEFAULT_1 = 3058
+XML_SCHEMAP_COS_VALID_DEFAULT_2_1 = 3059
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1 = 3060
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2 = 3061
+XML_SCHEMAP_CVC_SIMPLE_TYPE = 3062
+XML_SCHEMAP_COS_CT_EXTENDS_1_1 = 3063
+XML_SCHEMAP_SRC_IMPORT_1_1 = 3064
+XML_SCHEMAP_SRC_IMPORT_1_2 = 3065
+XML_SCHEMAP_SRC_IMPORT_2 = 3066
+XML_SCHEMAP_SRC_IMPORT_2_1 = 3067
+XML_SCHEMAP_SRC_IMPORT_2_2 = 3068
+XML_SCHEMAP_INTERNAL = 3069
+XML_SCHEMAP_NOT_DETERMINISTIC = 3070
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1 = 3071
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2 = 3072
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3 = 3073
+XML_SCHEMAP_MG_PROPS_CORRECT_1 = 3074
+XML_SCHEMAP_MG_PROPS_CORRECT_2 = 3075
+XML_SCHEMAP_SRC_CT_1 = 3076
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3 = 3077
+XML_SCHEMAP_AU_PROPS_CORRECT_2 = 3078
+XML_SCHEMAP_A_PROPS_CORRECT_2 = 3079
+XML_SCHEMAP_C_PROPS_CORRECT = 3080
+XML_SCHEMAP_SRC_REDEFINE = 3081
+XML_SCHEMAP_SRC_IMPORT = 3082
+XML_SCHEMAP_WARN_SKIP_SCHEMA = 3083
+XML_SCHEMAP_WARN_UNLOCATED_SCHEMA = 3084
+XML_SCHEMAP_WARN_ATTR_REDECL_PROH = 3085
+XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH = 3086
+XML_SCHEMAP_AG_PROPS_CORRECT = 3087
+XML_SCHEMAP_COS_CT_EXTENDS_1_2 = 3088
+XML_SCHEMAP_AU_PROPS_CORRECT = 3089
+XML_SCHEMAP_A_PROPS_CORRECT_3 = 3090
+XML_SCHEMAP_COS_ALL_LIMITED = 3091
+XML_SCHEMATRONV_ASSERT = 4000
+XML_SCHEMATRONV_REPORT = 4001
+XML_MODULE_OPEN = 4900
+XML_MODULE_CLOSE = 4901
+XML_CHECK_FOUND_ELEMENT = 5000
+XML_CHECK_FOUND_ATTRIBUTE = 5001
+XML_CHECK_FOUND_TEXT = 5002
+XML_CHECK_FOUND_CDATA = 5003
+XML_CHECK_FOUND_ENTITYREF = 5004
+XML_CHECK_FOUND_ENTITY = 5005
+XML_CHECK_FOUND_PI = 5006
+XML_CHECK_FOUND_COMMENT = 5007
+XML_CHECK_FOUND_DOCTYPE = 5008
+XML_CHECK_FOUND_FRAGMENT = 5009
+XML_CHECK_FOUND_NOTATION = 5010
+XML_CHECK_UNKNOWN_NODE = 5011
+XML_CHECK_ENTITY_TYPE = 5012
+XML_CHECK_NO_PARENT = 5013
+XML_CHECK_NO_DOC = 5014
+XML_CHECK_NO_NAME = 5015
+XML_CHECK_NO_ELEM = 5016
+XML_CHECK_WRONG_DOC = 5017
+XML_CHECK_NO_PREV = 5018
+XML_CHECK_WRONG_PREV = 5019
+XML_CHECK_NO_NEXT = 5020
+XML_CHECK_WRONG_NEXT = 5021
+XML_CHECK_NOT_DTD = 5022
+XML_CHECK_NOT_ATTR = 5023
+XML_CHECK_NOT_ATTR_DECL = 5024
+XML_CHECK_NOT_ELEM_DECL = 5025
+XML_CHECK_NOT_ENTITY_DECL = 5026
+XML_CHECK_NOT_NS_DECL = 5027
+XML_CHECK_NO_HREF = 5028
+XML_CHECK_WRONG_PARENT = 5029
+XML_CHECK_NS_SCOPE = 5030
+XML_CHECK_NS_ANCESTOR = 5031
+XML_CHECK_NOT_UTF8 = 5032
+XML_CHECK_NO_DICT = 5033
+XML_CHECK_NOT_NCNAME = 5034
+XML_CHECK_OUTSIDE_DICT = 5035
+XML_CHECK_WRONG_NAME = 5036
+XML_CHECK_NAME_NOT_NULL = 5037
+XML_I18N_NO_NAME = 6000
+XML_I18N_NO_HANDLER = 6001
+XML_I18N_EXCESS_HANDLER = 6002
+XML_I18N_CONV_FAILED = 6003
+XML_I18N_NO_OUTPUT = 6004
+XML_BUF_OVERFLOW = 7000
+
+# xmlExpNodeType
+XML_EXP_EMPTY = 0
+XML_EXP_FORBID = 1
+XML_EXP_ATOM = 2
+XML_EXP_SEQ = 3
+XML_EXP_OR = 4
+XML_EXP_COUNT = 5
+
+# xmlElementContentType
+XML_ELEMENT_CONTENT_PCDATA = 1
+XML_ELEMENT_CONTENT_ELEMENT = 2
+XML_ELEMENT_CONTENT_SEQ = 3
+XML_ELEMENT_CONTENT_OR = 4
+
+# xmlParserProperties
+XML_PARSER_LOADDTD = 1
+XML_PARSER_DEFAULTATTRS = 2
+XML_PARSER_VALIDATE = 3
+XML_PARSER_SUBST_ENTITIES = 4
+
+# xmlReaderTypes
+XML_READER_TYPE_NONE = 0
+XML_READER_TYPE_ELEMENT = 1
+XML_READER_TYPE_ATTRIBUTE = 2
+XML_READER_TYPE_TEXT = 3
+XML_READER_TYPE_CDATA = 4
+XML_READER_TYPE_ENTITY_REFERENCE = 5
+XML_READER_TYPE_ENTITY = 6
+XML_READER_TYPE_PROCESSING_INSTRUCTION = 7
+XML_READER_TYPE_COMMENT = 8
+XML_READER_TYPE_DOCUMENT = 9
+XML_READER_TYPE_DOCUMENT_TYPE = 10
+XML_READER_TYPE_DOCUMENT_FRAGMENT = 11
+XML_READER_TYPE_NOTATION = 12
+XML_READER_TYPE_WHITESPACE = 13
+XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14
+XML_READER_TYPE_END_ELEMENT = 15
+XML_READER_TYPE_END_ENTITY = 16
+XML_READER_TYPE_XML_DECLARATION = 17
+
+# xmlCatalogPrefer
+XML_CATA_PREFER_NONE = 0
+XML_CATA_PREFER_PUBLIC = 1
+XML_CATA_PREFER_SYSTEM = 2
+
+# xmlElementType
+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
+XML_HTML_DOCUMENT_NODE = 13
+XML_DTD_NODE = 14
+XML_ELEMENT_DECL = 15
+XML_ATTRIBUTE_DECL = 16
+XML_ENTITY_DECL = 17
+XML_NAMESPACE_DECL = 18
+XML_XINCLUDE_START = 19
+XML_XINCLUDE_END = 20
+XML_DOCB_DOCUMENT_NODE = 21
+
+# xlinkActuate
+XLINK_ACTUATE_NONE = 0
+XLINK_ACTUATE_AUTO = 1
+XLINK_ACTUATE_ONREQUEST = 2
+
+# xmlFeature
+XML_WITH_THREAD = 1
+XML_WITH_TREE = 2
+XML_WITH_OUTPUT = 3
+XML_WITH_PUSH = 4
+XML_WITH_READER = 5
+XML_WITH_PATTERN = 6
+XML_WITH_WRITER = 7
+XML_WITH_SAX1 = 8
+XML_WITH_FTP = 9
+XML_WITH_HTTP = 10
+XML_WITH_VALID = 11
+XML_WITH_HTML = 12
+XML_WITH_LEGACY = 13
+XML_WITH_C14N = 14
+XML_WITH_CATALOG = 15
+XML_WITH_XPATH = 16
+XML_WITH_XPTR = 17
+XML_WITH_XINCLUDE = 18
+XML_WITH_ICONV = 19
+XML_WITH_ISO8859X = 20
+XML_WITH_UNICODE = 21
+XML_WITH_REGEXP = 22
+XML_WITH_AUTOMATA = 23
+XML_WITH_EXPR = 24
+XML_WITH_SCHEMAS = 25
+XML_WITH_SCHEMATRON = 26
+XML_WITH_MODULES = 27
+XML_WITH_DEBUG = 28
+XML_WITH_DEBUG_MEM = 29
+XML_WITH_DEBUG_RUN = 30
+XML_WITH_ZLIB = 31
+XML_WITH_ICU = 32
+XML_WITH_LZMA = 33
+XML_WITH_NONE = 99999
+
+# xmlElementContentOccur
+XML_ELEMENT_CONTENT_ONCE = 1
+XML_ELEMENT_CONTENT_OPT = 2
+XML_ELEMENT_CONTENT_MULT = 3
+XML_ELEMENT_CONTENT_PLUS = 4
+
+# xmlXPathError
+XPATH_EXPRESSION_OK = 0
+XPATH_NUMBER_ERROR = 1
+XPATH_UNFINISHED_LITERAL_ERROR = 2
+XPATH_START_LITERAL_ERROR = 3
+XPATH_VARIABLE_REF_ERROR = 4
+XPATH_UNDEF_VARIABLE_ERROR = 5
+XPATH_INVALID_PREDICATE_ERROR = 6
+XPATH_EXPR_ERROR = 7
+XPATH_UNCLOSED_ERROR = 8
+XPATH_UNKNOWN_FUNC_ERROR = 9
+XPATH_INVALID_OPERAND = 10
+XPATH_INVALID_TYPE = 11
+XPATH_INVALID_ARITY = 12
+XPATH_INVALID_CTXT_SIZE = 13
+XPATH_INVALID_CTXT_POSITION = 14
+XPATH_MEMORY_ERROR = 15
+XPTR_SYNTAX_ERROR = 16
+XPTR_RESOURCE_ERROR = 17
+XPTR_SUB_RESOURCE_ERROR = 18
+XPATH_UNDEF_PREFIX_ERROR = 19
+XPATH_ENCODING_ERROR = 20
+XPATH_INVALID_CHAR_ERROR = 21
+XPATH_INVALID_CTXT = 22
+XPATH_STACK_ERROR = 23
+XPATH_FORBID_VARIABLE_ERROR = 24
+
+# xmlTextReaderMode
+XML_TEXTREADER_MODE_INITIAL = 0
+XML_TEXTREADER_MODE_INTERACTIVE = 1
+XML_TEXTREADER_MODE_ERROR = 2
+XML_TEXTREADER_MODE_EOF = 3
+XML_TEXTREADER_MODE_CLOSED = 4
+XML_TEXTREADER_MODE_READING = 5
+
+# xmlErrorLevel
+XML_ERR_NONE = 0
+XML_ERR_WARNING = 1
+XML_ERR_ERROR = 2
+XML_ERR_FATAL = 3
+
+# xmlCharEncoding
+XML_CHAR_ENCODING_ERROR = -1
+XML_CHAR_ENCODING_NONE = 0
+XML_CHAR_ENCODING_UTF8 = 1
+XML_CHAR_ENCODING_UTF16LE = 2
+XML_CHAR_ENCODING_UTF16BE = 3
+XML_CHAR_ENCODING_UCS4LE = 4
+XML_CHAR_ENCODING_UCS4BE = 5
+XML_CHAR_ENCODING_EBCDIC = 6
+XML_CHAR_ENCODING_UCS4_2143 = 7
+XML_CHAR_ENCODING_UCS4_3412 = 8
+XML_CHAR_ENCODING_UCS2 = 9
+XML_CHAR_ENCODING_8859_1 = 10
+XML_CHAR_ENCODING_8859_2 = 11
+XML_CHAR_ENCODING_8859_3 = 12
+XML_CHAR_ENCODING_8859_4 = 13
+XML_CHAR_ENCODING_8859_5 = 14
+XML_CHAR_ENCODING_8859_6 = 15
+XML_CHAR_ENCODING_8859_7 = 16
+XML_CHAR_ENCODING_8859_8 = 17
+XML_CHAR_ENCODING_8859_9 = 18
+XML_CHAR_ENCODING_2022_JP = 19
+XML_CHAR_ENCODING_SHIFT_JIS = 20
+XML_CHAR_ENCODING_EUC_JP = 21
+XML_CHAR_ENCODING_ASCII = 22
+
+# xmlErrorDomain
+XML_FROM_NONE = 0
+XML_FROM_PARSER = 1
+XML_FROM_TREE = 2
+XML_FROM_NAMESPACE = 3
+XML_FROM_DTD = 4
+XML_FROM_HTML = 5
+XML_FROM_MEMORY = 6
+XML_FROM_OUTPUT = 7
+XML_FROM_IO = 8
+XML_FROM_FTP = 9
+XML_FROM_HTTP = 10
+XML_FROM_XINCLUDE = 11
+XML_FROM_XPATH = 12
+XML_FROM_XPOINTER = 13
+XML_FROM_REGEXP = 14
+XML_FROM_DATATYPE = 15
+XML_FROM_SCHEMASP = 16
+XML_FROM_SCHEMASV = 17
+XML_FROM_RELAXNGP = 18
+XML_FROM_RELAXNGV = 19
+XML_FROM_CATALOG = 20
+XML_FROM_C14N = 21
+XML_FROM_XSLT = 22
+XML_FROM_VALID = 23
+XML_FROM_CHECK = 24
+XML_FROM_WRITER = 25
+XML_FROM_MODULE = 26
+XML_FROM_I18N = 27
+XML_FROM_SCHEMATRONV = 28
+XML_FROM_BUFFER = 29
+XML_FROM_URI = 30
+
+# htmlStatus
+HTML_NA = 0
+HTML_INVALID = 1
+HTML_DEPRECATED = 2
+HTML_VALID = 4
+HTML_REQUIRED = 12
+
+# xmlSchemaValidOption
+XML_SCHEMA_VAL_VC_I_CREATE = 1
+
+# xmlSchemaWhitespaceValueType
+XML_SCHEMA_WHITESPACE_UNKNOWN = 0
+XML_SCHEMA_WHITESPACE_PRESERVE = 1
+XML_SCHEMA_WHITESPACE_REPLACE = 2
+XML_SCHEMA_WHITESPACE_COLLAPSE = 3
+
+# htmlParserOption
+HTML_PARSE_RECOVER = 1
+HTML_PARSE_NODEFDTD = 4
+HTML_PARSE_NOERROR = 32
+HTML_PARSE_NOWARNING = 64
+HTML_PARSE_PEDANTIC = 128
+HTML_PARSE_NOBLANKS = 256
+HTML_PARSE_NONET = 2048
+HTML_PARSE_NOIMPLIED = 8192
+HTML_PARSE_COMPACT = 65536
+HTML_PARSE_IGNORE_ENC = 2097152
+
+# xmlRelaxNGValidErr
+XML_RELAXNG_OK = 0
+XML_RELAXNG_ERR_MEMORY = 1
+XML_RELAXNG_ERR_TYPE = 2
+XML_RELAXNG_ERR_TYPEVAL = 3
+XML_RELAXNG_ERR_DUPID = 4
+XML_RELAXNG_ERR_TYPECMP = 5
+XML_RELAXNG_ERR_NOSTATE = 6
+XML_RELAXNG_ERR_NODEFINE = 7
+XML_RELAXNG_ERR_LISTEXTRA = 8
+XML_RELAXNG_ERR_LISTEMPTY = 9
+XML_RELAXNG_ERR_INTERNODATA = 10
+XML_RELAXNG_ERR_INTERSEQ = 11
+XML_RELAXNG_ERR_INTEREXTRA = 12
+XML_RELAXNG_ERR_ELEMNAME = 13
+XML_RELAXNG_ERR_ATTRNAME = 14
+XML_RELAXNG_ERR_ELEMNONS = 15
+XML_RELAXNG_ERR_ATTRNONS = 16
+XML_RELAXNG_ERR_ELEMWRONGNS = 17
+XML_RELAXNG_ERR_ATTRWRONGNS = 18
+XML_RELAXNG_ERR_ELEMEXTRANS = 19
+XML_RELAXNG_ERR_ATTREXTRANS = 20
+XML_RELAXNG_ERR_ELEMNOTEMPTY = 21
+XML_RELAXNG_ERR_NOELEM = 22
+XML_RELAXNG_ERR_NOTELEM = 23
+XML_RELAXNG_ERR_ATTRVALID = 24
+XML_RELAXNG_ERR_CONTENTVALID = 25
+XML_RELAXNG_ERR_EXTRACONTENT = 26
+XML_RELAXNG_ERR_INVALIDATTR = 27
+XML_RELAXNG_ERR_DATAELEM = 28
+XML_RELAXNG_ERR_VALELEM = 29
+XML_RELAXNG_ERR_LISTELEM = 30
+XML_RELAXNG_ERR_DATATYPE = 31
+XML_RELAXNG_ERR_VALUE = 32
+XML_RELAXNG_ERR_LIST = 33
+XML_RELAXNG_ERR_NOGRAMMAR = 34
+XML_RELAXNG_ERR_EXTRADATA = 35
+XML_RELAXNG_ERR_LACKDATA = 36
+XML_RELAXNG_ERR_INTERNAL = 37
+XML_RELAXNG_ERR_ELEMWRONG = 38
+XML_RELAXNG_ERR_TEXTWRONG = 39
+
+# xmlCatalogAllow
+XML_CATA_ALLOW_NONE = 0
+XML_CATA_ALLOW_GLOBAL = 1
+XML_CATA_ALLOW_DOCUMENT = 2
+XML_CATA_ALLOW_ALL = 3
+
+# xmlAttributeType
+XML_ATTRIBUTE_CDATA = 1
+XML_ATTRIBUTE_ID = 2
+XML_ATTRIBUTE_IDREF = 3
+XML_ATTRIBUTE_IDREFS = 4
+XML_ATTRIBUTE_ENTITY = 5
+XML_ATTRIBUTE_ENTITIES = 6
+XML_ATTRIBUTE_NMTOKEN = 7
+XML_ATTRIBUTE_NMTOKENS = 8
+XML_ATTRIBUTE_ENUMERATION = 9
+XML_ATTRIBUTE_NOTATION = 10
+
+# xmlSchematronValidOptions
+XML_SCHEMATRON_OUT_QUIET = 1
+XML_SCHEMATRON_OUT_TEXT = 2
+XML_SCHEMATRON_OUT_XML = 4
+XML_SCHEMATRON_OUT_ERROR = 8
+XML_SCHEMATRON_OUT_FILE = 256
+XML_SCHEMATRON_OUT_BUFFER = 512
+XML_SCHEMATRON_OUT_IO = 1024
+
+# xmlSchemaContentType
+XML_SCHEMA_CONTENT_UNKNOWN = 0
+XML_SCHEMA_CONTENT_EMPTY = 1
+XML_SCHEMA_CONTENT_ELEMENTS = 2
+XML_SCHEMA_CONTENT_MIXED = 3
+XML_SCHEMA_CONTENT_SIMPLE = 4
+XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS = 5
+XML_SCHEMA_CONTENT_BASIC = 6
+XML_SCHEMA_CONTENT_ANY = 7
+
+# xmlSchemaTypeType
+XML_SCHEMA_TYPE_BASIC = 1
+XML_SCHEMA_TYPE_ANY = 2
+XML_SCHEMA_TYPE_FACET = 3
+XML_SCHEMA_TYPE_SIMPLE = 4
+XML_SCHEMA_TYPE_COMPLEX = 5
+XML_SCHEMA_TYPE_SEQUENCE = 6
+XML_SCHEMA_TYPE_CHOICE = 7
+XML_SCHEMA_TYPE_ALL = 8
+XML_SCHEMA_TYPE_SIMPLE_CONTENT = 9
+XML_SCHEMA_TYPE_COMPLEX_CONTENT = 10
+XML_SCHEMA_TYPE_UR = 11
+XML_SCHEMA_TYPE_RESTRICTION = 12
+XML_SCHEMA_TYPE_EXTENSION = 13
+XML_SCHEMA_TYPE_ELEMENT = 14
+XML_SCHEMA_TYPE_ATTRIBUTE = 15
+XML_SCHEMA_TYPE_ATTRIBUTEGROUP = 16
+XML_SCHEMA_TYPE_GROUP = 17
+XML_SCHEMA_TYPE_NOTATION = 18
+XML_SCHEMA_TYPE_LIST = 19
+XML_SCHEMA_TYPE_UNION = 20
+XML_SCHEMA_TYPE_ANY_ATTRIBUTE = 21
+XML_SCHEMA_TYPE_IDC_UNIQUE = 22
+XML_SCHEMA_TYPE_IDC_KEY = 23
+XML_SCHEMA_TYPE_IDC_KEYREF = 24
+XML_SCHEMA_TYPE_PARTICLE = 25
+XML_SCHEMA_TYPE_ATTRIBUTE_USE = 26
+XML_SCHEMA_FACET_MININCLUSIVE = 1000
+XML_SCHEMA_FACET_MINEXCLUSIVE = 1001
+XML_SCHEMA_FACET_MAXINCLUSIVE = 1002
+XML_SCHEMA_FACET_MAXEXCLUSIVE = 1003
+XML_SCHEMA_FACET_TOTALDIGITS = 1004
+XML_SCHEMA_FACET_FRACTIONDIGITS = 1005
+XML_SCHEMA_FACET_PATTERN = 1006
+XML_SCHEMA_FACET_ENUMERATION = 1007
+XML_SCHEMA_FACET_WHITESPACE = 1008
+XML_SCHEMA_FACET_LENGTH = 1009
+XML_SCHEMA_FACET_MAXLENGTH = 1010
+XML_SCHEMA_FACET_MINLENGTH = 1011
+XML_SCHEMA_EXTRA_QNAMEREF = 2000
+XML_SCHEMA_EXTRA_ATTR_USE_PROHIB = 2001
+
+# xmlModuleOption
+XML_MODULE_LAZY = 1
+XML_MODULE_LOCAL = 2
+
+# xmlParserMode
+XML_PARSE_UNKNOWN = 0
+XML_PARSE_DOM = 1
+XML_PARSE_SAX = 2
+XML_PARSE_PUSH_DOM = 3
+XML_PARSE_PUSH_SAX = 4
+XML_PARSE_READER = 5
+
+# xmlC14NMode
+XML_C14N_1_0 = 0
+XML_C14N_EXCLUSIVE_1_0 = 1
+XML_C14N_1_1 = 2
+
+# xmlParserOption
+XML_PARSE_RECOVER = 1
+XML_PARSE_NOENT = 2
+XML_PARSE_DTDLOAD = 4
+XML_PARSE_DTDATTR = 8
+XML_PARSE_DTDVALID = 16
+XML_PARSE_NOERROR = 32
+XML_PARSE_NOWARNING = 64
+XML_PARSE_PEDANTIC = 128
+XML_PARSE_NOBLANKS = 256
+XML_PARSE_SAX1 = 512
+XML_PARSE_XINCLUDE = 1024
+XML_PARSE_NONET = 2048
+XML_PARSE_NODICT = 4096
+XML_PARSE_NSCLEAN = 8192
+XML_PARSE_NOCDATA = 16384
+XML_PARSE_NOXINCNODE = 32768
+XML_PARSE_COMPACT = 65536
+XML_PARSE_OLD10 = 131072
+XML_PARSE_NOBASEFIX = 262144
+XML_PARSE_HUGE = 524288
+XML_PARSE_OLDSAX = 1048576
+XML_PARSE_IGNORE_ENC = 2097152
+XML_PARSE_BIG_LINES = 4194304
+
+# xmlElementTypeVal
+XML_ELEMENT_TYPE_UNDEFINED = 0
+XML_ELEMENT_TYPE_EMPTY = 1
+XML_ELEMENT_TYPE_ANY = 2
+XML_ELEMENT_TYPE_MIXED = 3
+XML_ELEMENT_TYPE_ELEMENT = 4
+
+# xmlDocProperties
+XML_DOC_WELLFORMED = 1
+XML_DOC_NSVALID = 2
+XML_DOC_OLD10 = 4
+XML_DOC_DTDVALID = 8
+XML_DOC_XINCLUDE = 16
+XML_DOC_USERBUILT = 32
+XML_DOC_INTERNAL = 64
+XML_DOC_HTML = 128
+
+# xlinkType
+XLINK_TYPE_NONE = 0
+XLINK_TYPE_SIMPLE = 1
+XLINK_TYPE_EXTENDED = 2
+XLINK_TYPE_EXTENDED_SET = 3
+
+# xmlXPathObjectType
+XPATH_UNDEFINED = 0
+XPATH_NODESET = 1
+XPATH_BOOLEAN = 2
+XPATH_NUMBER = 3
+XPATH_STRING = 4
+XPATH_POINT = 5
+XPATH_RANGE = 6
+XPATH_LOCATIONSET = 7
+XPATH_USERS = 8
+XPATH_XSLT_TREE = 9
+
+# xmlSchemaValidError
+XML_SCHEMAS_ERR_OK = 0
+XML_SCHEMAS_ERR_NOROOT = 1
+XML_SCHEMAS_ERR_UNDECLAREDELEM = 2
+XML_SCHEMAS_ERR_NOTTOPLEVEL = 3
+XML_SCHEMAS_ERR_MISSING = 4
+XML_SCHEMAS_ERR_WRONGELEM = 5
+XML_SCHEMAS_ERR_NOTYPE = 6
+XML_SCHEMAS_ERR_NOROLLBACK = 7
+XML_SCHEMAS_ERR_ISABSTRACT = 8
+XML_SCHEMAS_ERR_NOTEMPTY = 9
+XML_SCHEMAS_ERR_ELEMCONT = 10
+XML_SCHEMAS_ERR_HAVEDEFAULT = 11
+XML_SCHEMAS_ERR_NOTNILLABLE = 12
+XML_SCHEMAS_ERR_EXTRACONTENT = 13
+XML_SCHEMAS_ERR_INVALIDATTR = 14
+XML_SCHEMAS_ERR_INVALIDELEM = 15
+XML_SCHEMAS_ERR_NOTDETERMINIST = 16
+XML_SCHEMAS_ERR_CONSTRUCT = 17
+XML_SCHEMAS_ERR_INTERNAL = 18
+XML_SCHEMAS_ERR_NOTSIMPLE = 19
+XML_SCHEMAS_ERR_ATTRUNKNOWN = 20
+XML_SCHEMAS_ERR_ATTRINVALID = 21
+XML_SCHEMAS_ERR_VALUE = 22
+XML_SCHEMAS_ERR_FACET = 23
+XML_SCHEMAS_ERR_ = 24
+XML_SCHEMAS_ERR_XXX = 25
+
diff --git a/python/libxml2class.py b/python/libxml2class.py
new file mode 100644 (file)
index 0000000..4b718dc
--- /dev/null
@@ -0,0 +1,8531 @@
+#
+# Functions from module HTMLparser
+#
+
+def htmlCreateMemoryParserCtxt(buffer, size):
+    """Create a parser context for an HTML in-memory document. """
+    ret = libxml2mod.htmlCreateMemoryParserCtxt(buffer, size)
+    if ret is None:raise parserError('htmlCreateMemoryParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlHandleOmittedElem(val):
+    """Set and return the previous value for handling HTML omitted
+       tags. """
+    ret = libxml2mod.htmlHandleOmittedElem(val)
+    return ret
+
+def htmlIsScriptAttribute(name):
+    """Check if an attribute is of content type Script """
+    ret = libxml2mod.htmlIsScriptAttribute(name)
+    return ret
+
+def htmlNewParserCtxt():
+    """Allocate and initialize a new parser context. """
+    ret = libxml2mod.htmlNewParserCtxt()
+    if ret is None:raise parserError('htmlNewParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlParseDoc(cur, encoding):
+    """parse an HTML in-memory document and build a tree. """
+    ret = libxml2mod.htmlParseDoc(cur, encoding)
+    if ret is None:raise parserError('htmlParseDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlParseFile(filename, encoding):
+    """parse an HTML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+       found at compile-time. """
+    ret = libxml2mod.htmlParseFile(filename, encoding)
+    if ret is None:raise parserError('htmlParseFile() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadDoc(cur, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.htmlReadDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadFd(fd, URL, encoding, options):
+    """parse an XML from a file descriptor and build a tree. """
+    ret = libxml2mod.htmlReadFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadFd() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. """
+    ret = libxml2mod.htmlReadFile(filename, encoding, options)
+    if ret is None:raise treeError('htmlReadFile() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlReadMemory(buffer, size, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.htmlReadMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('htmlReadMemory() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module HTMLtree
+#
+
+def htmlIsBooleanAttr(name):
+    """Determine if a given attribute is a boolean attribute. """
+    ret = libxml2mod.htmlIsBooleanAttr(name)
+    return ret
+
+def htmlNewDoc(URI, ExternalID):
+    """Creates a new HTML document """
+    ret = libxml2mod.htmlNewDoc(URI, ExternalID)
+    if ret is None:raise treeError('htmlNewDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def htmlNewDocNoDtD(URI, ExternalID):
+    """Creates a new HTML document without a DTD node if @URI and
+       @ExternalID are None """
+    ret = libxml2mod.htmlNewDocNoDtD(URI, ExternalID)
+    if ret is None:raise treeError('htmlNewDocNoDtD() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module SAX2
+#
+
+def SAXDefaultVersion(version):
+    """Set the default version of SAX used globally by the
+      library. By default, during initialization the default is
+      set to 2. Note that it is generally a better coding style
+      to use xmlSAXVersion() to set up the version explicitly for
+       a given parsing context. """
+    ret = libxml2mod.xmlSAXDefaultVersion(version)
+    return ret
+
+def defaultSAXHandlerInit():
+    """Initialize the default SAX2 handler """
+    libxml2mod.xmlDefaultSAXHandlerInit()
+
+def docbDefaultSAXHandlerInit():
+    """Initialize the default SAX handler """
+    libxml2mod.docbDefaultSAXHandlerInit()
+
+def htmlDefaultSAXHandlerInit():
+    """Initialize the default SAX handler """
+    libxml2mod.htmlDefaultSAXHandlerInit()
+
+#
+# Functions from module catalog
+#
+
+def catalogAdd(type, orig, replace):
+    """Add an entry in the catalog, it may overwrite existing but
+      different entries. If called before any other catalog
+      routine, allows to override the default shared catalog put
+       in place by xmlInitializeCatalog(); """
+    ret = libxml2mod.xmlCatalogAdd(type, orig, replace)
+    return ret
+
+def catalogCleanup():
+    """Free up all the memory associated with catalogs """
+    libxml2mod.xmlCatalogCleanup()
+
+def catalogConvert():
+    """Convert all the SGML catalog entries as XML ones """
+    ret = libxml2mod.xmlCatalogConvert()
+    return ret
+
+def catalogDump(out):
+    """Dump all the global catalog content to the given file. """
+    if out is not None: out.flush()
+    libxml2mod.xmlCatalogDump(out)
+
+def catalogGetPublic(pubID):
+    """Try to lookup the catalog reference associated to a public
+       ID DEPRECATED, use xmlCatalogResolvePublic() """
+    ret = libxml2mod.xmlCatalogGetPublic(pubID)
+    return ret
+
+def catalogGetSystem(sysID):
+    """Try to lookup the catalog reference associated to a system
+       ID DEPRECATED, use xmlCatalogResolveSystem() """
+    ret = libxml2mod.xmlCatalogGetSystem(sysID)
+    return ret
+
+def catalogRemove(value):
+    """Remove an entry from the catalog """
+    ret = libxml2mod.xmlCatalogRemove(value)
+    return ret
+
+def catalogResolve(pubID, sysID):
+    """Do a complete resolution lookup of an External Identifier """
+    ret = libxml2mod.xmlCatalogResolve(pubID, sysID)
+    return ret
+
+def catalogResolvePublic(pubID):
+    """Try to lookup the catalog reference associated to a public
+       ID """
+    ret = libxml2mod.xmlCatalogResolvePublic(pubID)
+    return ret
+
+def catalogResolveSystem(sysID):
+    """Try to lookup the catalog resource for a system ID """
+    ret = libxml2mod.xmlCatalogResolveSystem(sysID)
+    return ret
+
+def catalogResolveURI(URI):
+    """Do a complete resolution lookup of an URI """
+    ret = libxml2mod.xmlCatalogResolveURI(URI)
+    return ret
+
+def catalogSetDebug(level):
+    """Used to set the debug level for catalog operation, 0
+       disable debugging, 1 enable it """
+    ret = libxml2mod.xmlCatalogSetDebug(level)
+    return ret
+
+def initializeCatalog():
+    """Do the catalog initialization. this function is not thread
+      safe, catalog initialization should preferably be done once
+       at startup """
+    libxml2mod.xmlInitializeCatalog()
+
+def loadACatalog(filename):
+    """Load the catalog and build the associated data structures.
+      This can be either an XML Catalog or an SGML Catalog It
+      will recurse in SGML CATALOG entries. On the other hand XML
+       Catalogs are not handled recursively. """
+    ret = libxml2mod.xmlLoadACatalog(filename)
+    if ret is None:raise treeError('xmlLoadACatalog() failed')
+    return catalog(_obj=ret)
+
+def loadCatalog(filename):
+    """Load the catalog and makes its definitions effective for
+      the default external entity loader. It will recurse in SGML
+      CATALOG entries. this function is not thread safe, catalog
+       initialization should preferably be done once at startup """
+    ret = libxml2mod.xmlLoadCatalog(filename)
+    return ret
+
+def loadCatalogs(pathss):
+    """Load the catalogs and makes their definitions effective for
+      the default external entity loader. this function is not
+      thread safe, catalog initialization should preferably be
+       done once at startup """
+    libxml2mod.xmlLoadCatalogs(pathss)
+
+def loadSGMLSuperCatalog(filename):
+    """Load an SGML super catalog. It won't expand CATALOG or
+      DELEGATE references. This is only needed for manipulating
+      SGML Super Catalogs like adding and removing CATALOG or
+       DELEGATE entries. """
+    ret = libxml2mod.xmlLoadSGMLSuperCatalog(filename)
+    if ret is None:raise treeError('xmlLoadSGMLSuperCatalog() failed')
+    return catalog(_obj=ret)
+
+def newCatalog(sgml):
+    """create a new Catalog. """
+    ret = libxml2mod.xmlNewCatalog(sgml)
+    if ret is None:raise treeError('xmlNewCatalog() failed')
+    return catalog(_obj=ret)
+
+def parseCatalogFile(filename):
+    """parse an XML file and build a tree. It's like
+       xmlParseFile() except it bypass all catalog lookups. """
+    ret = libxml2mod.xmlParseCatalogFile(filename)
+    if ret is None:raise parserError('xmlParseCatalogFile() failed')
+    return xmlDoc(_obj=ret)
+
+#
+# Functions from module chvalid
+#
+
+def isBaseChar(ch):
+    """This function is DEPRECATED. Use xmlIsBaseChar_ch or
+       xmlIsBaseCharQ instead """
+    ret = libxml2mod.xmlIsBaseChar(ch)
+    return ret
+
+def isBlank(ch):
+    """This function is DEPRECATED. Use xmlIsBlank_ch or
+       xmlIsBlankQ instead """
+    ret = libxml2mod.xmlIsBlank(ch)
+    return ret
+
+def isChar(ch):
+    """This function is DEPRECATED. Use xmlIsChar_ch or xmlIsCharQ
+       instead """
+    ret = libxml2mod.xmlIsChar(ch)
+    return ret
+
+def isCombining(ch):
+    """This function is DEPRECATED. Use xmlIsCombiningQ instead """
+    ret = libxml2mod.xmlIsCombining(ch)
+    return ret
+
+def isDigit(ch):
+    """This function is DEPRECATED. Use xmlIsDigit_ch or
+       xmlIsDigitQ instead """
+    ret = libxml2mod.xmlIsDigit(ch)
+    return ret
+
+def isExtender(ch):
+    """This function is DEPRECATED. Use xmlIsExtender_ch or
+       xmlIsExtenderQ instead """
+    ret = libxml2mod.xmlIsExtender(ch)
+    return ret
+
+def isIdeographic(ch):
+    """This function is DEPRECATED. Use xmlIsIdeographicQ instead """
+    ret = libxml2mod.xmlIsIdeographic(ch)
+    return ret
+
+def isPubidChar(ch):
+    """This function is DEPRECATED. Use xmlIsPubidChar_ch or
+       xmlIsPubidCharQ instead """
+    ret = libxml2mod.xmlIsPubidChar(ch)
+    return ret
+
+#
+# Functions from module debugXML
+#
+
+def boolToText(boolval):
+    """Convenient way to turn bool into text """
+    ret = libxml2mod.xmlBoolToText(boolval)
+    return ret
+
+def debugDumpString(output, str):
+    """Dumps informations about the string, shorten it if necessary """
+    if output is not None: output.flush()
+    libxml2mod.xmlDebugDumpString(output, str)
+
+def shellPrintXPathError(errorType, arg):
+    """Print the xpath error to libxml default error channel """
+    libxml2mod.xmlShellPrintXPathError(errorType, arg)
+
+#
+# Functions from module dict
+#
+
+def dictCleanup():
+    """Free the dictionary mutex. Do not call unless sure the
+       library is not in use anymore ! """
+    libxml2mod.xmlDictCleanup()
+
+def initializeDict():
+    """Do the dictionary mutex initialization. this function is
+       deprecated """
+    ret = libxml2mod.xmlInitializeDict()
+    return ret
+
+#
+# Functions from module encoding
+#
+
+def addEncodingAlias(name, alias):
+    """Registers an alias @alias for an encoding named @name.
+       Existing alias will be overwritten. """
+    ret = libxml2mod.xmlAddEncodingAlias(name, alias)
+    return ret
+
+def cleanupCharEncodingHandlers():
+    """Cleanup the memory allocated for the char encoding support,
+       it unregisters all the encoding handlers and the aliases. """
+    libxml2mod.xmlCleanupCharEncodingHandlers()
+
+def cleanupEncodingAliases():
+    """Unregisters all aliases """
+    libxml2mod.xmlCleanupEncodingAliases()
+
+def delEncodingAlias(alias):
+    """Unregisters an encoding alias @alias """
+    ret = libxml2mod.xmlDelEncodingAlias(alias)
+    return ret
+
+def encodingAlias(alias):
+    """Lookup an encoding name for the given alias. """
+    ret = libxml2mod.xmlGetEncodingAlias(alias)
+    return ret
+
+def initCharEncodingHandlers():
+    """Initialize the char encoding support, it registers the
+      default encoding supported. NOTE: while public, this
+      function usually doesn't need to be called in normal
+       processing. """
+    libxml2mod.xmlInitCharEncodingHandlers()
+
+#
+# Functions from module entities
+#
+
+def cleanupPredefinedEntities():
+    """Cleanup up the predefined entities table. Deprecated call """
+    libxml2mod.xmlCleanupPredefinedEntities()
+
+def initializePredefinedEntities():
+    """Set up the predefined entities. Deprecated call """
+    libxml2mod.xmlInitializePredefinedEntities()
+
+def predefinedEntity(name):
+    """Check whether this name is an predefined entity. """
+    ret = libxml2mod.xmlGetPredefinedEntity(name)
+    if ret is None:raise treeError('xmlGetPredefinedEntity() failed')
+    return xmlEntity(_obj=ret)
+
+#
+# Functions from module globals
+#
+
+def cleanupGlobals():
+    """Additional cleanup for multi-threading """
+    libxml2mod.xmlCleanupGlobals()
+
+def initGlobals():
+    """Additional initialisation for multi-threading """
+    libxml2mod.xmlInitGlobals()
+
+def thrDefDefaultBufferSize(v):
+    ret = libxml2mod.xmlThrDefDefaultBufferSize(v)
+    return ret
+
+def thrDefDoValidityCheckingDefaultValue(v):
+    ret = libxml2mod.xmlThrDefDoValidityCheckingDefaultValue(v)
+    return ret
+
+def thrDefGetWarningsDefaultValue(v):
+    ret = libxml2mod.xmlThrDefGetWarningsDefaultValue(v)
+    return ret
+
+def thrDefIndentTreeOutput(v):
+    ret = libxml2mod.xmlThrDefIndentTreeOutput(v)
+    return ret
+
+def thrDefKeepBlanksDefaultValue(v):
+    ret = libxml2mod.xmlThrDefKeepBlanksDefaultValue(v)
+    return ret
+
+def thrDefLineNumbersDefaultValue(v):
+    ret = libxml2mod.xmlThrDefLineNumbersDefaultValue(v)
+    return ret
+
+def thrDefLoadExtDtdDefaultValue(v):
+    ret = libxml2mod.xmlThrDefLoadExtDtdDefaultValue(v)
+    return ret
+
+def thrDefParserDebugEntities(v):
+    ret = libxml2mod.xmlThrDefParserDebugEntities(v)
+    return ret
+
+def thrDefPedanticParserDefaultValue(v):
+    ret = libxml2mod.xmlThrDefPedanticParserDefaultValue(v)
+    return ret
+
+def thrDefSaveNoEmptyTags(v):
+    ret = libxml2mod.xmlThrDefSaveNoEmptyTags(v)
+    return ret
+
+def thrDefSubstituteEntitiesDefaultValue(v):
+    ret = libxml2mod.xmlThrDefSubstituteEntitiesDefaultValue(v)
+    return ret
+
+def thrDefTreeIndentString(v):
+    ret = libxml2mod.xmlThrDefTreeIndentString(v)
+    return ret
+
+#
+# Functions from module nanoftp
+#
+
+def nanoFTPCleanup():
+    """Cleanup the FTP protocol layer. This cleanup proxy
+       informations. """
+    libxml2mod.xmlNanoFTPCleanup()
+
+def nanoFTPInit():
+    """Initialize the FTP protocol layer. Currently it just checks
+       for proxy informations, and get the hostname """
+    libxml2mod.xmlNanoFTPInit()
+
+def nanoFTPProxy(host, port, user, passwd, type):
+    """Setup the FTP proxy informations. This can also be done by
+      using ftp_proxy ftp_proxy_user and ftp_proxy_password
+       environment variables. """
+    libxml2mod.xmlNanoFTPProxy(host, port, user, passwd, type)
+
+def nanoFTPScanProxy(URL):
+    """(Re)Initialize the FTP Proxy context by parsing the URL and
+      finding the protocol host port it indicates. Should be like
+      ftp://myproxy/ or ftp://myproxy:3128/ A None URL cleans up
+       proxy informations. """
+    libxml2mod.xmlNanoFTPScanProxy(URL)
+
+#
+# Functions from module nanohttp
+#
+
+def nanoHTTPCleanup():
+    """Cleanup the HTTP protocol layer. """
+    libxml2mod.xmlNanoHTTPCleanup()
+
+def nanoHTTPInit():
+    """Initialize the HTTP protocol layer. Currently it just
+       checks for proxy informations """
+    libxml2mod.xmlNanoHTTPInit()
+
+def nanoHTTPScanProxy(URL):
+    """(Re)Initialize the HTTP Proxy context by parsing the URL
+      and finding the protocol host port it indicates. Should be
+      like http://myproxy/ or http://myproxy:3128/ A None URL
+       cleans up proxy informations. """
+    libxml2mod.xmlNanoHTTPScanProxy(URL)
+
+#
+# Functions from module parser
+#
+
+def createDocParserCtxt(cur):
+    """Creates a parser context for an XML in-memory document. """
+    ret = libxml2mod.xmlCreateDocParserCtxt(cur)
+    if ret is None:raise parserError('xmlCreateDocParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def initParser():
+    """Initialization function for the XML parser. This is not
+      reentrant. Call once before processing in case of use in
+       multithreaded programs. """
+    libxml2mod.xmlInitParser()
+
+def keepBlanksDefault(val):
+    """Set and return the previous value for default blanks text
+      nodes support. The 1.x version of the parser used an
+      heuristic to try to detect ignorable white spaces. As a
+      result the SAX callback was generating
+      xmlSAX2IgnorableWhitespace() callbacks instead of
+      characters() one, and when using the DOM output text nodes
+      containing those blanks were not generated. The 2.x and
+      later version will switch to the XML standard way and
+      ignorableWhitespace() are only generated when running the
+      parser in validating mode and when the current element
+      doesn't allow CDATA or mixed content. This function is
+      provided as a way to force the standard behavior on 1.X
+      libs and to switch back to the old mode for compatibility
+      when running 1.X client code on 2.X . Upgrade of 1.X code
+      should be done by using xmlIsBlankNode() commodity function
+      to detect the "empty" nodes generated. This value also
+      affect autogeneration of indentation when saving code if
+       blanks sections are kept, indentation is not generated. """
+    ret = libxml2mod.xmlKeepBlanksDefault(val)
+    return ret
+
+def lineNumbersDefault(val):
+    """Set and return the previous value for enabling line numbers
+      in elements contents. This may break on old application and
+       is turned off by default. """
+    ret = libxml2mod.xmlLineNumbersDefault(val)
+    return ret
+
+def newParserCtxt():
+    """Allocate and initialize a new parser context. """
+    ret = libxml2mod.xmlNewParserCtxt()
+    if ret is None:raise parserError('xmlNewParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def parseDTD(ExternalID, SystemID):
+    """Load and parse an external subset. """
+    ret = libxml2mod.xmlParseDTD(ExternalID, SystemID)
+    if ret is None:raise parserError('xmlParseDTD() failed')
+    return xmlDtd(_obj=ret)
+
+def parseDoc(cur):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlParseDoc(cur)
+    if ret is None:raise parserError('xmlParseDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def parseEntity(filename):
+    """parse an XML external entity out of context and build a
+      tree.  [78] extParsedEnt ::= TextDecl? content  This
+       correspond to a "Well Balanced" chunk """
+    ret = libxml2mod.xmlParseEntity(filename)
+    if ret is None:raise parserError('xmlParseEntity() failed')
+    return xmlDoc(_obj=ret)
+
+def parseFile(filename):
+    """parse an XML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+       found at compile-time. """
+    ret = libxml2mod.xmlParseFile(filename)
+    if ret is None:raise parserError('xmlParseFile() failed')
+    return xmlDoc(_obj=ret)
+
+def parseMemory(buffer, size):
+    """parse an XML in-memory block and build a tree. """
+    ret = libxml2mod.xmlParseMemory(buffer, size)
+    if ret is None:raise parserError('xmlParseMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def pedanticParserDefault(val):
+    """Set and return the previous value for enabling pedantic
+       warnings. """
+    ret = libxml2mod.xmlPedanticParserDefault(val)
+    return ret
+
+def readDoc(cur, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlReadDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def readFd(fd, URL, encoding, options):
+    """parse an XML from a file descriptor and build a tree. NOTE
+      that the file descriptor will not be closed when the reader
+       is closed or reset. """
+    ret = libxml2mod.xmlReadFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadFd() failed')
+    return xmlDoc(_obj=ret)
+
+def readFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. """
+    ret = libxml2mod.xmlReadFile(filename, encoding, options)
+    if ret is None:raise treeError('xmlReadFile() failed')
+    return xmlDoc(_obj=ret)
+
+def readMemory(buffer, size, URL, encoding, options):
+    """parse an XML in-memory document and build a tree. """
+    ret = libxml2mod.xmlReadMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('xmlReadMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverDoc(cur):
+    """parse an XML in-memory document and build a tree. In the
+      case the document is not Well Formed, a attempt to build a
+       tree is tried anyway """
+    ret = libxml2mod.xmlRecoverDoc(cur)
+    if ret is None:raise treeError('xmlRecoverDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverFile(filename):
+    """parse an XML file and build a tree. Automatic support for
+      ZLIB/Compress compressed document is provided by default if
+      found at compile-time. In the case the document is not Well
+       Formed, it attempts to build a tree anyway """
+    ret = libxml2mod.xmlRecoverFile(filename)
+    if ret is None:raise treeError('xmlRecoverFile() failed')
+    return xmlDoc(_obj=ret)
+
+def recoverMemory(buffer, size):
+    """parse an XML in-memory block and build a tree. In the case
+      the document is not Well Formed, an attempt to build a tree
+       is tried anyway """
+    ret = libxml2mod.xmlRecoverMemory(buffer, size)
+    if ret is None:raise treeError('xmlRecoverMemory() failed')
+    return xmlDoc(_obj=ret)
+
+def substituteEntitiesDefault(val):
+    """Set and return the previous value for default entity
+      support. Initially the parser always keep entity references
+      instead of substituting entity values in the output. This
+      function has to be used to change the default parser
+      behavior SAX::substituteEntities() has to be used for
+       changing that on a file by file basis. """
+    ret = libxml2mod.xmlSubstituteEntitiesDefault(val)
+    return ret
+
+#
+# Functions from module parserInternals
+#
+
+def checkLanguageID(lang):
+    """Checks that the value conforms to the LanguageID
+      production:  NOTE: this is somewhat deprecated, those
+      productions were removed from the XML Second edition.  [33]
+      LanguageID ::= Langcode ('-' Subcode)* [34] Langcode ::=
+      ISO639Code |  IanaCode |  UserCode [35] ISO639Code ::=
+      ([a-z] | [A-Z]) ([a-z] | [A-Z]) [36] IanaCode ::= ('i' |
+      'I') '-' ([a-z] | [A-Z])+ [37] UserCode ::= ('x' | 'X') '-'
+      ([a-z] | [A-Z])+ [38] Subcode ::= ([a-z] | [A-Z])+  The
+      current REC reference the sucessors of RFC 1766, currently
+      5646  http://www.rfc-editor.org/rfc/rfc5646.txt langtag    
+      = language ["-" script] ["-" region] *("-" variant) *("-"
+      extension) ["-" privateuse] language      = 2*3ALPHA       
+      ; shortest ISO 639 code ["-" extlang]       ; sometimes
+      followed by ; extended language subtags / 4ALPHA           
+      ; or reserved for future use / 5*8ALPHA            ; or
+      registered language subtag  extlang       = 3ALPHA         
+      ; selected ISO 639 codes *2("-" 3ALPHA)      ; permanently
+      reserved  script        = 4ALPHA              ; ISO 15924
+      code  region        = 2ALPHA              ; ISO 3166-1 code
+      / 3DIGIT              ; UN M.49 code  variant       =
+      5*8alphanum         ; registered variants / (DIGIT
+      3alphanum)  extension     = singleton 1*("-" (2*8alphanum))
+      ; Single alphanumerics ; "x" reserved for private use
+      singleton     = DIGIT               ; 0 - 9 / %x41-57      
+      ; A - W / %x59-5A             ; Y - Z / %x61-77            
+      ; a - w / %x79-7A             ; y - z  it sounds right to
+      still allow Irregular i-xxx IANA and user codes too The
+      parser below doesn't try to cope with extension or
+      privateuse that could be added but that's not interoperable
+       anyway """
+    ret = libxml2mod.xmlCheckLanguageID(lang)
+    return ret
+
+def copyChar(len, out, val):
+    """append the char value in the array """
+    ret = libxml2mod.xmlCopyChar(len, out, val)
+    return ret
+
+def copyCharMultiByte(out, val):
+    """append the char value in the array """
+    ret = libxml2mod.xmlCopyCharMultiByte(out, val)
+    return ret
+
+def createEntityParserCtxt(URL, ID, base):
+    """Create a parser context for an external entity Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.xmlCreateEntityParserCtxt(URL, ID, base)
+    if ret is None:raise parserError('xmlCreateEntityParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createFileParserCtxt(filename):
+    """Create a parser context for a file content. Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.xmlCreateFileParserCtxt(filename)
+    if ret is None:raise parserError('xmlCreateFileParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createMemoryParserCtxt(buffer, size):
+    """Create a parser context for an XML in-memory document. """
+    ret = libxml2mod.xmlCreateMemoryParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlCreateMemoryParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def createURLParserCtxt(filename, options):
+    """Create a parser context for a file or URL content.
+      Automatic support for ZLIB/Compress compressed document is
+      provided by default if found at compile-time and for file
+       accesses """
+    ret = libxml2mod.xmlCreateURLParserCtxt(filename, options)
+    if ret is None:raise parserError('xmlCreateURLParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlCreateFileParserCtxt(filename, encoding):
+    """Create a parser context for a file content. Automatic
+      support for ZLIB/Compress compressed document is provided
+       by default if found at compile-time. """
+    ret = libxml2mod.htmlCreateFileParserCtxt(filename, encoding)
+    if ret is None:raise parserError('htmlCreateFileParserCtxt() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlInitAutoClose():
+    """Initialize the htmlStartCloseIndex for fast lookup of
+      closing tags names. This is not reentrant. Call
+      xmlInitParser() once before processing in case of use in
+       multithreaded programs. """
+    libxml2mod.htmlInitAutoClose()
+
+def isLetter(c):
+    """Check whether the character is allowed by the production
+       [84] Letter ::= BaseChar | Ideographic """
+    ret = libxml2mod.xmlIsLetter(c)
+    return ret
+
+def namePop(ctxt):
+    """Pops the top element name from the name stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.namePop(ctxt__o)
+    return ret
+
+def namePush(ctxt, value):
+    """Pushes a new element name on top of the name stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.namePush(ctxt__o, value)
+    return ret
+
+def nodePop(ctxt):
+    """Pops the top element node from the node stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.nodePop(ctxt__o)
+    if ret is None:raise treeError('nodePop() failed')
+    return xmlNode(_obj=ret)
+
+def nodePush(ctxt, value):
+    """Pushes a new element node on top of the node stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    if value is None: value__o = None
+    else: value__o = value._o
+    ret = libxml2mod.nodePush(ctxt__o, value__o)
+    return ret
+
+#
+# Functions from module python
+#
+
+def SAXParseFile(SAX, URI, recover):
+    """Interface to parse an XML file or resource pointed by an
+       URI to build an event flow to the SAX object """
+    libxml2mod.xmlSAXParseFile(SAX, URI, recover)
+
+def createInputBuffer(file, encoding):
+    """Create a libxml2 input buffer from a Python file """
+    ret = libxml2mod.xmlCreateInputBuffer(file, encoding)
+    if ret is None:raise treeError('xmlCreateInputBuffer() failed')
+    return inputBuffer(_obj=ret)
+
+def createOutputBuffer(file, encoding):
+    """Create a libxml2 output buffer from a Python file """
+    ret = libxml2mod.xmlCreateOutputBuffer(file, encoding)
+    if ret is None:raise treeError('xmlCreateOutputBuffer() failed')
+    return outputBuffer(_obj=ret)
+
+def createPushParser(SAX, chunk, size, URI):
+    """Create a progressive XML parser context to build either an
+      event flow if the SAX object is not None, or a DOM tree
+       otherwise. """
+    ret = libxml2mod.xmlCreatePushParser(SAX, chunk, size, URI)
+    if ret is None:raise parserError('xmlCreatePushParser() failed')
+    return parserCtxt(_obj=ret)
+
+def debugMemory(activate):
+    """Switch on the generation of line number for elements nodes.
+      Also returns the number of bytes allocated and not freed by
+       libxml2 since memory debugging was switched on. """
+    ret = libxml2mod.xmlDebugMemory(activate)
+    return ret
+
+def dumpMemory():
+    """dump the memory allocated in the file .memdump """
+    libxml2mod.xmlDumpMemory()
+
+def htmlCreatePushParser(SAX, chunk, size, URI):
+    """Create a progressive HTML parser context to build either an
+      event flow if the SAX object is not None, or a DOM tree
+       otherwise. """
+    ret = libxml2mod.htmlCreatePushParser(SAX, chunk, size, URI)
+    if ret is None:raise parserError('htmlCreatePushParser() failed')
+    return parserCtxt(_obj=ret)
+
+def htmlSAXParseFile(SAX, URI, encoding):
+    """Interface to parse an HTML file or resource pointed by an
+       URI to build an event flow to the SAX object """
+    libxml2mod.htmlSAXParseFile(SAX, URI, encoding)
+
+def memoryUsed():
+    """Returns the total amount of memory allocated by libxml2 """
+    ret = libxml2mod.xmlMemoryUsed()
+    return ret
+
+def newNode(name):
+    """Create a new Node """
+    ret = libxml2mod.xmlNewNode(name)
+    if ret is None:raise treeError('xmlNewNode() failed')
+    return xmlNode(_obj=ret)
+
+def pythonCleanupParser():
+    """Cleanup function for the XML library. It tries to reclaim
+      all parsing related global memory allocated for the library
+      processing. It doesn't deallocate any document related
+      memory. Calling this function should not prevent reusing
+      the library but one should call xmlCleanupParser() only
+      when the process has finished using the library or XML
+       document built with it. """
+    libxml2mod.xmlPythonCleanupParser()
+
+def setEntityLoader(resolver):
+    """Set the entity resolver as a python function """
+    ret = libxml2mod.xmlSetEntityLoader(resolver)
+    return ret
+
+#
+# Functions from module relaxng
+#
+
+def relaxNGCleanupTypes():
+    """Cleanup the default Schemas type library associated to
+       RelaxNG """
+    libxml2mod.xmlRelaxNGCleanupTypes()
+
+def relaxNGInitTypes():
+    """Initilize the default type libraries. """
+    ret = libxml2mod.xmlRelaxNGInitTypes()
+    return ret
+
+def relaxNGNewMemParserCtxt(buffer, size):
+    """Create an XML RelaxNGs parse context for that memory buffer
+       expected to contain an XML RelaxNGs file. """
+    ret = libxml2mod.xmlRelaxNGNewMemParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlRelaxNGNewMemParserCtxt() failed')
+    return relaxNgParserCtxt(_obj=ret)
+
+def relaxNGNewParserCtxt(URL):
+    """Create an XML RelaxNGs parse context for that file/resource
+       expected to contain an XML RelaxNGs file. """
+    ret = libxml2mod.xmlRelaxNGNewParserCtxt(URL)
+    if ret is None:raise parserError('xmlRelaxNGNewParserCtxt() failed')
+    return relaxNgParserCtxt(_obj=ret)
+
+#
+# Functions from module tree
+#
+
+def buildQName(ncname, prefix, memory, len):
+    """Builds the QName @prefix:@ncname in @memory if there is
+      enough space and prefix is not None nor empty, otherwise
+      allocate a new string. If prefix is None or empty it
+       returns ncname. """
+    ret = libxml2mod.xmlBuildQName(ncname, prefix, memory, len)
+    return ret
+
+def compressMode():
+    """get the default compression mode used, ZLIB based. """
+    ret = libxml2mod.xmlGetCompressMode()
+    return ret
+
+def isXHTML(systemID, publicID):
+    """Try to find if the document correspond to an XHTML DTD """
+    ret = libxml2mod.xmlIsXHTML(systemID, publicID)
+    return ret
+
+def newComment(content):
+    """Creation of a new node containing a comment. """
+    ret = libxml2mod.xmlNewComment(content)
+    if ret is None:raise treeError('xmlNewComment() failed')
+    return xmlNode(_obj=ret)
+
+def newDoc(version):
+    """Creates a new XML document """
+    ret = libxml2mod.xmlNewDoc(version)
+    if ret is None:raise treeError('xmlNewDoc() failed')
+    return xmlDoc(_obj=ret)
+
+def newPI(name, content):
+    """Creation of a processing instruction element. Use
+       xmlDocNewPI preferably to get string interning """
+    ret = libxml2mod.xmlNewPI(name, content)
+    if ret is None:raise treeError('xmlNewPI() failed')
+    return xmlNode(_obj=ret)
+
+def newText(content):
+    """Creation of a new text node. """
+    ret = libxml2mod.xmlNewText(content)
+    if ret is None:raise treeError('xmlNewText() failed')
+    return xmlNode(_obj=ret)
+
+def newTextLen(content, len):
+    """Creation of a new text node with an extra parameter for the
+       content's length """
+    ret = libxml2mod.xmlNewTextLen(content, len)
+    if ret is None:raise treeError('xmlNewTextLen() failed')
+    return xmlNode(_obj=ret)
+
+def setCompressMode(mode):
+    """set the default compression mode used, ZLIB based Correct
+       values: 0 (uncompressed) to 9 (max compression) """
+    libxml2mod.xmlSetCompressMode(mode)
+
+def validateNCName(value, space):
+    """Check that a value conforms to the lexical space of NCName """
+    ret = libxml2mod.xmlValidateNCName(value, space)
+    return ret
+
+def validateNMToken(value, space):
+    """Check that a value conforms to the lexical space of NMToken """
+    ret = libxml2mod.xmlValidateNMToken(value, space)
+    return ret
+
+def validateName(value, space):
+    """Check that a value conforms to the lexical space of Name """
+    ret = libxml2mod.xmlValidateName(value, space)
+    return ret
+
+def validateQName(value, space):
+    """Check that a value conforms to the lexical space of QName """
+    ret = libxml2mod.xmlValidateQName(value, space)
+    return ret
+
+#
+# Functions from module uri
+#
+
+def URIEscape(str):
+    """Escaping routine, does not do validity checks ! It will try
+      to escape the chars needing this, but this is heuristic
+       based it's impossible to be sure. """
+    ret = libxml2mod.xmlURIEscape(str)
+    return ret
+
+def URIEscapeStr(str, list):
+    """This routine escapes a string to hex, ignoring reserved
+       characters (a-z) and the characters in the exception list. """
+    ret = libxml2mod.xmlURIEscapeStr(str, list)
+    return ret
+
+def URIUnescapeString(str, len, target):
+    """Unescaping routine, but does not check that the string is
+      an URI. The output is a direct unsigned char translation of
+      %XX values (no encoding) Note that the length of the result
+       can only be smaller or same size as the input string. """
+    ret = libxml2mod.xmlURIUnescapeString(str, len, target)
+    return ret
+
+def buildRelativeURI(URI, base):
+    """Expresses the URI of the reference in terms relative to the
+      base.  Some examples of this operation include: base =
+      "http://site1.com/docs/book1.html" URI input               
+      URI returned docs/pic1.gif                    pic1.gif
+      docs/img/pic1.gif                img/pic1.gif img/pic1.gif 
+      ../img/pic1.gif http://site1.com/docs/pic1.gif   pic1.gif
+      http://site2.com/docs/pic1.gif  
+      http://site2.com/docs/pic1.gif  base = "docs/book1.html"
+      URI input                        URI returned docs/pic1.gif
+      pic1.gif docs/img/pic1.gif                img/pic1.gif
+      img/pic1.gif                     ../img/pic1.gif
+      http://site1.com/docs/pic1.gif  
+      http://site1.com/docs/pic1.gif   Note: if the URI reference
+      is really wierd or complicated, it may be worthwhile to
+      first convert it into a "nice" one by calling xmlBuildURI
+      (using 'base') before calling this routine, since this
+      routine (for reasonable efficiency) assumes URI has already
+       been through some validation. """
+    ret = libxml2mod.xmlBuildRelativeURI(URI, base)
+    return ret
+
+def buildURI(URI, base):
+    """Computes he final URI of the reference done by checking
+      that the given URI is valid, and building the final URI
+      using the base URI. This is processed according to section
+      5.2 of the RFC 2396  5.2. Resolving Relative References to
+       Absolute Form """
+    ret = libxml2mod.xmlBuildURI(URI, base)
+    return ret
+
+def canonicPath(path):
+    """Constructs a canonic path from the specified path. """
+    ret = libxml2mod.xmlCanonicPath(path)
+    return ret
+
+def createURI():
+    """Simply creates an empty xmlURI """
+    ret = libxml2mod.xmlCreateURI()
+    if ret is None:raise uriError('xmlCreateURI() failed')
+    return URI(_obj=ret)
+
+def normalizeURIPath(path):
+    """Applies the 5 normalization steps to a path string--that
+      is, RFC 2396 Section 5.2, steps 6.c through 6.g. 
+      Normalization occurs directly on the string, no new
+       allocation is done """
+    ret = libxml2mod.xmlNormalizeURIPath(path)
+    return ret
+
+def parseURI(str):
+    """Parse an URI based on RFC 3986  URI-reference = [
+       absoluteURI | relativeURI ] [ "#" fragment ] """
+    ret = libxml2mod.xmlParseURI(str)
+    if ret is None:raise uriError('xmlParseURI() failed')
+    return URI(_obj=ret)
+
+def parseURIRaw(str, raw):
+    """Parse an URI but allows to keep intact the original
+       fragments.  URI-reference = URI / relative-ref """
+    ret = libxml2mod.xmlParseURIRaw(str, raw)
+    if ret is None:raise uriError('xmlParseURIRaw() failed')
+    return URI(_obj=ret)
+
+def pathToURI(path):
+    """Constructs an URI expressing the existing path """
+    ret = libxml2mod.xmlPathToURI(path)
+    return ret
+
+#
+# Functions from module valid
+#
+
+def newValidCtxt():
+    """Allocate a validation context structure. """
+    ret = libxml2mod.xmlNewValidCtxt()
+    if ret is None:raise treeError('xmlNewValidCtxt() failed')
+    return ValidCtxt(_obj=ret)
+
+def validateNameValue(value):
+    """Validate that the given value match Name production """
+    ret = libxml2mod.xmlValidateNameValue(value)
+    return ret
+
+def validateNamesValue(value):
+    """Validate that the given value match Names production """
+    ret = libxml2mod.xmlValidateNamesValue(value)
+    return ret
+
+def validateNmtokenValue(value):
+    """Validate that the given value match Nmtoken production  [
+       VC: Name Token ] """
+    ret = libxml2mod.xmlValidateNmtokenValue(value)
+    return ret
+
+def validateNmtokensValue(value):
+    """Validate that the given value match Nmtokens production  [
+       VC: Name Token ] """
+    ret = libxml2mod.xmlValidateNmtokensValue(value)
+    return ret
+
+#
+# Functions from module xmlIO
+#
+
+def checkFilename(path):
+    """function checks to see if @path is a valid source (file,
+      socket...) for XML.  if stat is not available on the target
+       machine, """
+    ret = libxml2mod.xmlCheckFilename(path)
+    return ret
+
+def cleanupInputCallbacks():
+    """clears the entire input callback table. this includes the
+       compiled-in I/O. """
+    libxml2mod.xmlCleanupInputCallbacks()
+
+def cleanupOutputCallbacks():
+    """clears the entire output callback table. this includes the
+       compiled-in I/O callbacks. """
+    libxml2mod.xmlCleanupOutputCallbacks()
+
+def fileMatch(filename):
+    """input from FILE * """
+    ret = libxml2mod.xmlFileMatch(filename)
+    return ret
+
+def iOFTPMatch(filename):
+    """check if the URI matches an FTP one """
+    ret = libxml2mod.xmlIOFTPMatch(filename)
+    return ret
+
+def iOHTTPMatch(filename):
+    """check if the URI matches an HTTP one """
+    ret = libxml2mod.xmlIOHTTPMatch(filename)
+    return ret
+
+def normalizeWindowsPath(path):
+    """This function is obsolete. Please see xmlURIFromPath in
+       uri.c for a better solution. """
+    ret = libxml2mod.xmlNormalizeWindowsPath(path)
+    return ret
+
+def parserGetDirectory(filename):
+    """lookup the directory for that file """
+    ret = libxml2mod.xmlParserGetDirectory(filename)
+    return ret
+
+def registerDefaultInputCallbacks():
+    """Registers the default compiled-in I/O handlers. """
+    libxml2mod.xmlRegisterDefaultInputCallbacks()
+
+def registerDefaultOutputCallbacks():
+    """Registers the default compiled-in I/O handlers. """
+    libxml2mod.xmlRegisterDefaultOutputCallbacks()
+
+def registerHTTPPostCallbacks():
+    """By default, libxml submits HTTP output requests using the
+      "PUT" method. Calling this method changes the HTTP output
+       method to use the "POST" method instead. """
+    libxml2mod.xmlRegisterHTTPPostCallbacks()
+
+#
+# Functions from module xmlerror
+#
+
+def lastError():
+    """Get the last global error registered. This is per thread if
+       compiled with thread support. """
+    ret = libxml2mod.xmlGetLastError()
+    if ret is None:raise treeError('xmlGetLastError() failed')
+    return Error(_obj=ret)
+
+def resetLastError():
+    """Cleanup the last global error registered. For parsing error
+       this does not change the well-formedness result. """
+    libxml2mod.xmlResetLastError()
+
+#
+# Functions from module xmlreader
+#
+
+def newTextReaderFilename(URI):
+    """Create an xmlTextReader structure fed with the resource at
+       @URI """
+    ret = libxml2mod.xmlNewTextReaderFilename(URI)
+    if ret is None:raise treeError('xmlNewTextReaderFilename() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForDoc(cur, URL, encoding, options):
+    """Create an xmltextReader for an XML in-memory document. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForDoc(cur, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForDoc() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForFd(fd, URL, encoding, options):
+    """Create an xmltextReader for an XML from a file descriptor.
+      The parsing flags @options are a combination of
+      xmlParserOption. NOTE that the file descriptor will not be
+       closed when the reader is closed or reset. """
+    ret = libxml2mod.xmlReaderForFd(fd, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForFd() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForFile(filename, encoding, options):
+    """parse an XML file from the filesystem or the network. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForFile(filename, encoding, options)
+    if ret is None:raise treeError('xmlReaderForFile() failed')
+    return xmlTextReader(_obj=ret)
+
+def readerForMemory(buffer, size, URL, encoding, options):
+    """Create an xmltextReader for an XML in-memory document. The
+      parsing flags @options are a combination of xmlParserOption. """
+    ret = libxml2mod.xmlReaderForMemory(buffer, size, URL, encoding, options)
+    if ret is None:raise treeError('xmlReaderForMemory() failed')
+    return xmlTextReader(_obj=ret)
+
+#
+# Functions from module xmlregexp
+#
+
+def regexpCompile(regexp):
+    """Parses a regular expression conforming to XML Schemas Part
+      2 Datatype Appendix F and builds an automata suitable for
+       testing strings against that regular expression """
+    ret = libxml2mod.xmlRegexpCompile(regexp)
+    if ret is None:raise treeError('xmlRegexpCompile() failed')
+    return xmlReg(_obj=ret)
+
+#
+# Functions from module xmlschemas
+#
+
+def schemaNewMemParserCtxt(buffer, size):
+    """Create an XML Schemas parse context for that memory buffer
+       expected to contain an XML Schemas file. """
+    ret = libxml2mod.xmlSchemaNewMemParserCtxt(buffer, size)
+    if ret is None:raise parserError('xmlSchemaNewMemParserCtxt() failed')
+    return SchemaParserCtxt(_obj=ret)
+
+def schemaNewParserCtxt(URL):
+    """Create an XML Schemas parse context for that file/resource
+       expected to contain an XML Schemas file. """
+    ret = libxml2mod.xmlSchemaNewParserCtxt(URL)
+    if ret is None:raise parserError('xmlSchemaNewParserCtxt() failed')
+    return SchemaParserCtxt(_obj=ret)
+
+#
+# Functions from module xmlschemastypes
+#
+
+def schemaCleanupTypes():
+    """Cleanup the default XML Schemas type library """
+    libxml2mod.xmlSchemaCleanupTypes()
+
+def schemaCollapseString(value):
+    """Removes and normalize white spaces in the string """
+    ret = libxml2mod.xmlSchemaCollapseString(value)
+    return ret
+
+def schemaInitTypes():
+    """Initialize the default XML Schemas type library """
+    libxml2mod.xmlSchemaInitTypes()
+
+def schemaWhiteSpaceReplace(value):
+    """Replaces 0xd, 0x9 and 0xa with a space. """
+    ret = libxml2mod.xmlSchemaWhiteSpaceReplace(value)
+    return ret
+
+#
+# Functions from module xmlstring
+#
+
+def UTF8Charcmp(utf1, utf2):
+    """compares the two UCS4 values """
+    ret = libxml2mod.xmlUTF8Charcmp(utf1, utf2)
+    return ret
+
+def UTF8Size(utf):
+    """calculates the internal size of a UTF8 character """
+    ret = libxml2mod.xmlUTF8Size(utf)
+    return ret
+
+def UTF8Strlen(utf):
+    """compute the length of an UTF8 string, it doesn't do a full
+       UTF8 checking of the content of the string. """
+    ret = libxml2mod.xmlUTF8Strlen(utf)
+    return ret
+
+def UTF8Strloc(utf, utfchar):
+    """a function to provide the relative location of a UTF8 char """
+    ret = libxml2mod.xmlUTF8Strloc(utf, utfchar)
+    return ret
+
+def UTF8Strndup(utf, len):
+    """a strndup for array of UTF8's """
+    ret = libxml2mod.xmlUTF8Strndup(utf, len)
+    return ret
+
+def UTF8Strpos(utf, pos):
+    """a function to provide the equivalent of fetching a
+       character from a string array """
+    ret = libxml2mod.xmlUTF8Strpos(utf, pos)
+    return ret
+
+def UTF8Strsize(utf, len):
+    """storage size of an UTF8 string the behaviour is not
+       garanteed if the input string is not UTF-8 """
+    ret = libxml2mod.xmlUTF8Strsize(utf, len)
+    return ret
+
+def UTF8Strsub(utf, start, len):
+    """Create a substring from a given UTF-8 string Note: 
+       positions are given in units of UTF-8 chars """
+    ret = libxml2mod.xmlUTF8Strsub(utf, start, len)
+    return ret
+
+def checkUTF8(utf):
+    """Checks @utf for being valid UTF-8. @utf is assumed to be
+      null-terminated. This function is not super-strict, as it
+      will allow longer UTF-8 sequences than necessary. Note that
+      Java is capable of producing these sequences if provoked.
+      Also note, this routine checks for the 4-byte maximum size,
+       but does not check for 0x10ffff maximum value. """
+    ret = libxml2mod.xmlCheckUTF8(utf)
+    return ret
+
+#
+# Functions from module xmlunicode
+#
+
+def uCSIsAegeanNumbers(code):
+    """Check whether the character is part of AegeanNumbers UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsAegeanNumbers(code)
+    return ret
+
+def uCSIsAlphabeticPresentationForms(code):
+    """Check whether the character is part of
+       AlphabeticPresentationForms UCS Block """
+    ret = libxml2mod.xmlUCSIsAlphabeticPresentationForms(code)
+    return ret
+
+def uCSIsArabic(code):
+    """Check whether the character is part of Arabic UCS Block """
+    ret = libxml2mod.xmlUCSIsArabic(code)
+    return ret
+
+def uCSIsArabicPresentationFormsA(code):
+    """Check whether the character is part of
+       ArabicPresentationForms-A UCS Block """
+    ret = libxml2mod.xmlUCSIsArabicPresentationFormsA(code)
+    return ret
+
+def uCSIsArabicPresentationFormsB(code):
+    """Check whether the character is part of
+       ArabicPresentationForms-B UCS Block """
+    ret = libxml2mod.xmlUCSIsArabicPresentationFormsB(code)
+    return ret
+
+def uCSIsArmenian(code):
+    """Check whether the character is part of Armenian UCS Block """
+    ret = libxml2mod.xmlUCSIsArmenian(code)
+    return ret
+
+def uCSIsArrows(code):
+    """Check whether the character is part of Arrows UCS Block """
+    ret = libxml2mod.xmlUCSIsArrows(code)
+    return ret
+
+def uCSIsBasicLatin(code):
+    """Check whether the character is part of BasicLatin UCS Block """
+    ret = libxml2mod.xmlUCSIsBasicLatin(code)
+    return ret
+
+def uCSIsBengali(code):
+    """Check whether the character is part of Bengali UCS Block """
+    ret = libxml2mod.xmlUCSIsBengali(code)
+    return ret
+
+def uCSIsBlock(code, block):
+    """Check whether the character is part of the UCS Block """
+    ret = libxml2mod.xmlUCSIsBlock(code, block)
+    return ret
+
+def uCSIsBlockElements(code):
+    """Check whether the character is part of BlockElements UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBlockElements(code)
+    return ret
+
+def uCSIsBopomofo(code):
+    """Check whether the character is part of Bopomofo UCS Block """
+    ret = libxml2mod.xmlUCSIsBopomofo(code)
+    return ret
+
+def uCSIsBopomofoExtended(code):
+    """Check whether the character is part of BopomofoExtended UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBopomofoExtended(code)
+    return ret
+
+def uCSIsBoxDrawing(code):
+    """Check whether the character is part of BoxDrawing UCS Block """
+    ret = libxml2mod.xmlUCSIsBoxDrawing(code)
+    return ret
+
+def uCSIsBraillePatterns(code):
+    """Check whether the character is part of BraillePatterns UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsBraillePatterns(code)
+    return ret
+
+def uCSIsBuhid(code):
+    """Check whether the character is part of Buhid UCS Block """
+    ret = libxml2mod.xmlUCSIsBuhid(code)
+    return ret
+
+def uCSIsByzantineMusicalSymbols(code):
+    """Check whether the character is part of
+       ByzantineMusicalSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsByzantineMusicalSymbols(code)
+    return ret
+
+def uCSIsCJKCompatibility(code):
+    """Check whether the character is part of CJKCompatibility UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibility(code)
+    return ret
+
+def uCSIsCJKCompatibilityForms(code):
+    """Check whether the character is part of
+       CJKCompatibilityForms UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityForms(code)
+    return ret
+
+def uCSIsCJKCompatibilityIdeographs(code):
+    """Check whether the character is part of
+       CJKCompatibilityIdeographs UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityIdeographs(code)
+    return ret
+
+def uCSIsCJKCompatibilityIdeographsSupplement(code):
+    """Check whether the character is part of
+       CJKCompatibilityIdeographsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKCompatibilityIdeographsSupplement(code)
+    return ret
+
+def uCSIsCJKRadicalsSupplement(code):
+    """Check whether the character is part of
+       CJKRadicalsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKRadicalsSupplement(code)
+    return ret
+
+def uCSIsCJKSymbolsandPunctuation(code):
+    """Check whether the character is part of
+       CJKSymbolsandPunctuation UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKSymbolsandPunctuation(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographs(code):
+    """Check whether the character is part of CJKUnifiedIdeographs
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographs(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographsExtensionA(code):
+    """Check whether the character is part of
+       CJKUnifiedIdeographsExtensionA UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographsExtensionA(code)
+    return ret
+
+def uCSIsCJKUnifiedIdeographsExtensionB(code):
+    """Check whether the character is part of
+       CJKUnifiedIdeographsExtensionB UCS Block """
+    ret = libxml2mod.xmlUCSIsCJKUnifiedIdeographsExtensionB(code)
+    return ret
+
+def uCSIsCat(code, cat):
+    """Check whether the character is part of the UCS Category """
+    ret = libxml2mod.xmlUCSIsCat(code, cat)
+    return ret
+
+def uCSIsCatC(code):
+    """Check whether the character is part of C UCS Category """
+    ret = libxml2mod.xmlUCSIsCatC(code)
+    return ret
+
+def uCSIsCatCc(code):
+    """Check whether the character is part of Cc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCc(code)
+    return ret
+
+def uCSIsCatCf(code):
+    """Check whether the character is part of Cf UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCf(code)
+    return ret
+
+def uCSIsCatCo(code):
+    """Check whether the character is part of Co UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCo(code)
+    return ret
+
+def uCSIsCatCs(code):
+    """Check whether the character is part of Cs UCS Category """
+    ret = libxml2mod.xmlUCSIsCatCs(code)
+    return ret
+
+def uCSIsCatL(code):
+    """Check whether the character is part of L UCS Category """
+    ret = libxml2mod.xmlUCSIsCatL(code)
+    return ret
+
+def uCSIsCatLl(code):
+    """Check whether the character is part of Ll UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLl(code)
+    return ret
+
+def uCSIsCatLm(code):
+    """Check whether the character is part of Lm UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLm(code)
+    return ret
+
+def uCSIsCatLo(code):
+    """Check whether the character is part of Lo UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLo(code)
+    return ret
+
+def uCSIsCatLt(code):
+    """Check whether the character is part of Lt UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLt(code)
+    return ret
+
+def uCSIsCatLu(code):
+    """Check whether the character is part of Lu UCS Category """
+    ret = libxml2mod.xmlUCSIsCatLu(code)
+    return ret
+
+def uCSIsCatM(code):
+    """Check whether the character is part of M UCS Category """
+    ret = libxml2mod.xmlUCSIsCatM(code)
+    return ret
+
+def uCSIsCatMc(code):
+    """Check whether the character is part of Mc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMc(code)
+    return ret
+
+def uCSIsCatMe(code):
+    """Check whether the character is part of Me UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMe(code)
+    return ret
+
+def uCSIsCatMn(code):
+    """Check whether the character is part of Mn UCS Category """
+    ret = libxml2mod.xmlUCSIsCatMn(code)
+    return ret
+
+def uCSIsCatN(code):
+    """Check whether the character is part of N UCS Category """
+    ret = libxml2mod.xmlUCSIsCatN(code)
+    return ret
+
+def uCSIsCatNd(code):
+    """Check whether the character is part of Nd UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNd(code)
+    return ret
+
+def uCSIsCatNl(code):
+    """Check whether the character is part of Nl UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNl(code)
+    return ret
+
+def uCSIsCatNo(code):
+    """Check whether the character is part of No UCS Category """
+    ret = libxml2mod.xmlUCSIsCatNo(code)
+    return ret
+
+def uCSIsCatP(code):
+    """Check whether the character is part of P UCS Category """
+    ret = libxml2mod.xmlUCSIsCatP(code)
+    return ret
+
+def uCSIsCatPc(code):
+    """Check whether the character is part of Pc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPc(code)
+    return ret
+
+def uCSIsCatPd(code):
+    """Check whether the character is part of Pd UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPd(code)
+    return ret
+
+def uCSIsCatPe(code):
+    """Check whether the character is part of Pe UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPe(code)
+    return ret
+
+def uCSIsCatPf(code):
+    """Check whether the character is part of Pf UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPf(code)
+    return ret
+
+def uCSIsCatPi(code):
+    """Check whether the character is part of Pi UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPi(code)
+    return ret
+
+def uCSIsCatPo(code):
+    """Check whether the character is part of Po UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPo(code)
+    return ret
+
+def uCSIsCatPs(code):
+    """Check whether the character is part of Ps UCS Category """
+    ret = libxml2mod.xmlUCSIsCatPs(code)
+    return ret
+
+def uCSIsCatS(code):
+    """Check whether the character is part of S UCS Category """
+    ret = libxml2mod.xmlUCSIsCatS(code)
+    return ret
+
+def uCSIsCatSc(code):
+    """Check whether the character is part of Sc UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSc(code)
+    return ret
+
+def uCSIsCatSk(code):
+    """Check whether the character is part of Sk UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSk(code)
+    return ret
+
+def uCSIsCatSm(code):
+    """Check whether the character is part of Sm UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSm(code)
+    return ret
+
+def uCSIsCatSo(code):
+    """Check whether the character is part of So UCS Category """
+    ret = libxml2mod.xmlUCSIsCatSo(code)
+    return ret
+
+def uCSIsCatZ(code):
+    """Check whether the character is part of Z UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZ(code)
+    return ret
+
+def uCSIsCatZl(code):
+    """Check whether the character is part of Zl UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZl(code)
+    return ret
+
+def uCSIsCatZp(code):
+    """Check whether the character is part of Zp UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZp(code)
+    return ret
+
+def uCSIsCatZs(code):
+    """Check whether the character is part of Zs UCS Category """
+    ret = libxml2mod.xmlUCSIsCatZs(code)
+    return ret
+
+def uCSIsCherokee(code):
+    """Check whether the character is part of Cherokee UCS Block """
+    ret = libxml2mod.xmlUCSIsCherokee(code)
+    return ret
+
+def uCSIsCombiningDiacriticalMarks(code):
+    """Check whether the character is part of
+       CombiningDiacriticalMarks UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningDiacriticalMarks(code)
+    return ret
+
+def uCSIsCombiningDiacriticalMarksforSymbols(code):
+    """Check whether the character is part of
+       CombiningDiacriticalMarksforSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningDiacriticalMarksforSymbols(code)
+    return ret
+
+def uCSIsCombiningHalfMarks(code):
+    """Check whether the character is part of CombiningHalfMarks
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningHalfMarks(code)
+    return ret
+
+def uCSIsCombiningMarksforSymbols(code):
+    """Check whether the character is part of
+       CombiningMarksforSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsCombiningMarksforSymbols(code)
+    return ret
+
+def uCSIsControlPictures(code):
+    """Check whether the character is part of ControlPictures UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsControlPictures(code)
+    return ret
+
+def uCSIsCurrencySymbols(code):
+    """Check whether the character is part of CurrencySymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCurrencySymbols(code)
+    return ret
+
+def uCSIsCypriotSyllabary(code):
+    """Check whether the character is part of CypriotSyllabary UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsCypriotSyllabary(code)
+    return ret
+
+def uCSIsCyrillic(code):
+    """Check whether the character is part of Cyrillic UCS Block """
+    ret = libxml2mod.xmlUCSIsCyrillic(code)
+    return ret
+
+def uCSIsCyrillicSupplement(code):
+    """Check whether the character is part of CyrillicSupplement
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsCyrillicSupplement(code)
+    return ret
+
+def uCSIsDeseret(code):
+    """Check whether the character is part of Deseret UCS Block """
+    ret = libxml2mod.xmlUCSIsDeseret(code)
+    return ret
+
+def uCSIsDevanagari(code):
+    """Check whether the character is part of Devanagari UCS Block """
+    ret = libxml2mod.xmlUCSIsDevanagari(code)
+    return ret
+
+def uCSIsDingbats(code):
+    """Check whether the character is part of Dingbats UCS Block """
+    ret = libxml2mod.xmlUCSIsDingbats(code)
+    return ret
+
+def uCSIsEnclosedAlphanumerics(code):
+    """Check whether the character is part of
+       EnclosedAlphanumerics UCS Block """
+    ret = libxml2mod.xmlUCSIsEnclosedAlphanumerics(code)
+    return ret
+
+def uCSIsEnclosedCJKLettersandMonths(code):
+    """Check whether the character is part of
+       EnclosedCJKLettersandMonths UCS Block """
+    ret = libxml2mod.xmlUCSIsEnclosedCJKLettersandMonths(code)
+    return ret
+
+def uCSIsEthiopic(code):
+    """Check whether the character is part of Ethiopic UCS Block """
+    ret = libxml2mod.xmlUCSIsEthiopic(code)
+    return ret
+
+def uCSIsGeneralPunctuation(code):
+    """Check whether the character is part of GeneralPunctuation
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsGeneralPunctuation(code)
+    return ret
+
+def uCSIsGeometricShapes(code):
+    """Check whether the character is part of GeometricShapes UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGeometricShapes(code)
+    return ret
+
+def uCSIsGeorgian(code):
+    """Check whether the character is part of Georgian UCS Block """
+    ret = libxml2mod.xmlUCSIsGeorgian(code)
+    return ret
+
+def uCSIsGothic(code):
+    """Check whether the character is part of Gothic UCS Block """
+    ret = libxml2mod.xmlUCSIsGothic(code)
+    return ret
+
+def uCSIsGreek(code):
+    """Check whether the character is part of Greek UCS Block """
+    ret = libxml2mod.xmlUCSIsGreek(code)
+    return ret
+
+def uCSIsGreekExtended(code):
+    """Check whether the character is part of GreekExtended UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGreekExtended(code)
+    return ret
+
+def uCSIsGreekandCoptic(code):
+    """Check whether the character is part of GreekandCoptic UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsGreekandCoptic(code)
+    return ret
+
+def uCSIsGujarati(code):
+    """Check whether the character is part of Gujarati UCS Block """
+    ret = libxml2mod.xmlUCSIsGujarati(code)
+    return ret
+
+def uCSIsGurmukhi(code):
+    """Check whether the character is part of Gurmukhi UCS Block """
+    ret = libxml2mod.xmlUCSIsGurmukhi(code)
+    return ret
+
+def uCSIsHalfwidthandFullwidthForms(code):
+    """Check whether the character is part of
+       HalfwidthandFullwidthForms UCS Block """
+    ret = libxml2mod.xmlUCSIsHalfwidthandFullwidthForms(code)
+    return ret
+
+def uCSIsHangulCompatibilityJamo(code):
+    """Check whether the character is part of
+       HangulCompatibilityJamo UCS Block """
+    ret = libxml2mod.xmlUCSIsHangulCompatibilityJamo(code)
+    return ret
+
+def uCSIsHangulJamo(code):
+    """Check whether the character is part of HangulJamo UCS Block """
+    ret = libxml2mod.xmlUCSIsHangulJamo(code)
+    return ret
+
+def uCSIsHangulSyllables(code):
+    """Check whether the character is part of HangulSyllables UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsHangulSyllables(code)
+    return ret
+
+def uCSIsHanunoo(code):
+    """Check whether the character is part of Hanunoo UCS Block """
+    ret = libxml2mod.xmlUCSIsHanunoo(code)
+    return ret
+
+def uCSIsHebrew(code):
+    """Check whether the character is part of Hebrew UCS Block """
+    ret = libxml2mod.xmlUCSIsHebrew(code)
+    return ret
+
+def uCSIsHighPrivateUseSurrogates(code):
+    """Check whether the character is part of
+       HighPrivateUseSurrogates UCS Block """
+    ret = libxml2mod.xmlUCSIsHighPrivateUseSurrogates(code)
+    return ret
+
+def uCSIsHighSurrogates(code):
+    """Check whether the character is part of HighSurrogates UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsHighSurrogates(code)
+    return ret
+
+def uCSIsHiragana(code):
+    """Check whether the character is part of Hiragana UCS Block """
+    ret = libxml2mod.xmlUCSIsHiragana(code)
+    return ret
+
+def uCSIsIPAExtensions(code):
+    """Check whether the character is part of IPAExtensions UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsIPAExtensions(code)
+    return ret
+
+def uCSIsIdeographicDescriptionCharacters(code):
+    """Check whether the character is part of
+       IdeographicDescriptionCharacters UCS Block """
+    ret = libxml2mod.xmlUCSIsIdeographicDescriptionCharacters(code)
+    return ret
+
+def uCSIsKanbun(code):
+    """Check whether the character is part of Kanbun UCS Block """
+    ret = libxml2mod.xmlUCSIsKanbun(code)
+    return ret
+
+def uCSIsKangxiRadicals(code):
+    """Check whether the character is part of KangxiRadicals UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsKangxiRadicals(code)
+    return ret
+
+def uCSIsKannada(code):
+    """Check whether the character is part of Kannada UCS Block """
+    ret = libxml2mod.xmlUCSIsKannada(code)
+    return ret
+
+def uCSIsKatakana(code):
+    """Check whether the character is part of Katakana UCS Block """
+    ret = libxml2mod.xmlUCSIsKatakana(code)
+    return ret
+
+def uCSIsKatakanaPhoneticExtensions(code):
+    """Check whether the character is part of
+       KatakanaPhoneticExtensions UCS Block """
+    ret = libxml2mod.xmlUCSIsKatakanaPhoneticExtensions(code)
+    return ret
+
+def uCSIsKhmer(code):
+    """Check whether the character is part of Khmer UCS Block """
+    ret = libxml2mod.xmlUCSIsKhmer(code)
+    return ret
+
+def uCSIsKhmerSymbols(code):
+    """Check whether the character is part of KhmerSymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsKhmerSymbols(code)
+    return ret
+
+def uCSIsLao(code):
+    """Check whether the character is part of Lao UCS Block """
+    ret = libxml2mod.xmlUCSIsLao(code)
+    return ret
+
+def uCSIsLatin1Supplement(code):
+    """Check whether the character is part of Latin-1Supplement
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsLatin1Supplement(code)
+    return ret
+
+def uCSIsLatinExtendedA(code):
+    """Check whether the character is part of LatinExtended-A UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedA(code)
+    return ret
+
+def uCSIsLatinExtendedAdditional(code):
+    """Check whether the character is part of
+       LatinExtendedAdditional UCS Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedAdditional(code)
+    return ret
+
+def uCSIsLatinExtendedB(code):
+    """Check whether the character is part of LatinExtended-B UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLatinExtendedB(code)
+    return ret
+
+def uCSIsLetterlikeSymbols(code):
+    """Check whether the character is part of LetterlikeSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsLetterlikeSymbols(code)
+    return ret
+
+def uCSIsLimbu(code):
+    """Check whether the character is part of Limbu UCS Block """
+    ret = libxml2mod.xmlUCSIsLimbu(code)
+    return ret
+
+def uCSIsLinearBIdeograms(code):
+    """Check whether the character is part of LinearBIdeograms UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLinearBIdeograms(code)
+    return ret
+
+def uCSIsLinearBSyllabary(code):
+    """Check whether the character is part of LinearBSyllabary UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLinearBSyllabary(code)
+    return ret
+
+def uCSIsLowSurrogates(code):
+    """Check whether the character is part of LowSurrogates UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsLowSurrogates(code)
+    return ret
+
+def uCSIsMalayalam(code):
+    """Check whether the character is part of Malayalam UCS Block """
+    ret = libxml2mod.xmlUCSIsMalayalam(code)
+    return ret
+
+def uCSIsMathematicalAlphanumericSymbols(code):
+    """Check whether the character is part of
+       MathematicalAlphanumericSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsMathematicalAlphanumericSymbols(code)
+    return ret
+
+def uCSIsMathematicalOperators(code):
+    """Check whether the character is part of
+       MathematicalOperators UCS Block """
+    ret = libxml2mod.xmlUCSIsMathematicalOperators(code)
+    return ret
+
+def uCSIsMiscellaneousMathematicalSymbolsA(code):
+    """Check whether the character is part of
+       MiscellaneousMathematicalSymbols-A UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousMathematicalSymbolsA(code)
+    return ret
+
+def uCSIsMiscellaneousMathematicalSymbolsB(code):
+    """Check whether the character is part of
+       MiscellaneousMathematicalSymbols-B UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousMathematicalSymbolsB(code)
+    return ret
+
+def uCSIsMiscellaneousSymbols(code):
+    """Check whether the character is part of MiscellaneousSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousSymbols(code)
+    return ret
+
+def uCSIsMiscellaneousSymbolsandArrows(code):
+    """Check whether the character is part of
+       MiscellaneousSymbolsandArrows UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousSymbolsandArrows(code)
+    return ret
+
+def uCSIsMiscellaneousTechnical(code):
+    """Check whether the character is part of
+       MiscellaneousTechnical UCS Block """
+    ret = libxml2mod.xmlUCSIsMiscellaneousTechnical(code)
+    return ret
+
+def uCSIsMongolian(code):
+    """Check whether the character is part of Mongolian UCS Block """
+    ret = libxml2mod.xmlUCSIsMongolian(code)
+    return ret
+
+def uCSIsMusicalSymbols(code):
+    """Check whether the character is part of MusicalSymbols UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsMusicalSymbols(code)
+    return ret
+
+def uCSIsMyanmar(code):
+    """Check whether the character is part of Myanmar UCS Block """
+    ret = libxml2mod.xmlUCSIsMyanmar(code)
+    return ret
+
+def uCSIsNumberForms(code):
+    """Check whether the character is part of NumberForms UCS Block """
+    ret = libxml2mod.xmlUCSIsNumberForms(code)
+    return ret
+
+def uCSIsOgham(code):
+    """Check whether the character is part of Ogham UCS Block """
+    ret = libxml2mod.xmlUCSIsOgham(code)
+    return ret
+
+def uCSIsOldItalic(code):
+    """Check whether the character is part of OldItalic UCS Block """
+    ret = libxml2mod.xmlUCSIsOldItalic(code)
+    return ret
+
+def uCSIsOpticalCharacterRecognition(code):
+    """Check whether the character is part of
+       OpticalCharacterRecognition UCS Block """
+    ret = libxml2mod.xmlUCSIsOpticalCharacterRecognition(code)
+    return ret
+
+def uCSIsOriya(code):
+    """Check whether the character is part of Oriya UCS Block """
+    ret = libxml2mod.xmlUCSIsOriya(code)
+    return ret
+
+def uCSIsOsmanya(code):
+    """Check whether the character is part of Osmanya UCS Block """
+    ret = libxml2mod.xmlUCSIsOsmanya(code)
+    return ret
+
+def uCSIsPhoneticExtensions(code):
+    """Check whether the character is part of PhoneticExtensions
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsPhoneticExtensions(code)
+    return ret
+
+def uCSIsPrivateUse(code):
+    """Check whether the character is part of PrivateUse UCS Block """
+    ret = libxml2mod.xmlUCSIsPrivateUse(code)
+    return ret
+
+def uCSIsPrivateUseArea(code):
+    """Check whether the character is part of PrivateUseArea UCS
+       Block """
+    ret = libxml2mod.xmlUCSIsPrivateUseArea(code)
+    return ret
+
+def uCSIsRunic(code):
+    """Check whether the character is part of Runic UCS Block """
+    ret = libxml2mod.xmlUCSIsRunic(code)
+    return ret
+
+def uCSIsShavian(code):
+    """Check whether the character is part of Shavian UCS Block """
+    ret = libxml2mod.xmlUCSIsShavian(code)
+    return ret
+
+def uCSIsSinhala(code):
+    """Check whether the character is part of Sinhala UCS Block """
+    ret = libxml2mod.xmlUCSIsSinhala(code)
+    return ret
+
+def uCSIsSmallFormVariants(code):
+    """Check whether the character is part of SmallFormVariants
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSmallFormVariants(code)
+    return ret
+
+def uCSIsSpacingModifierLetters(code):
+    """Check whether the character is part of
+       SpacingModifierLetters UCS Block """
+    ret = libxml2mod.xmlUCSIsSpacingModifierLetters(code)
+    return ret
+
+def uCSIsSpecials(code):
+    """Check whether the character is part of Specials UCS Block """
+    ret = libxml2mod.xmlUCSIsSpecials(code)
+    return ret
+
+def uCSIsSuperscriptsandSubscripts(code):
+    """Check whether the character is part of
+       SuperscriptsandSubscripts UCS Block """
+    ret = libxml2mod.xmlUCSIsSuperscriptsandSubscripts(code)
+    return ret
+
+def uCSIsSupplementalArrowsA(code):
+    """Check whether the character is part of SupplementalArrows-A
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalArrowsA(code)
+    return ret
+
+def uCSIsSupplementalArrowsB(code):
+    """Check whether the character is part of SupplementalArrows-B
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalArrowsB(code)
+    return ret
+
+def uCSIsSupplementalMathematicalOperators(code):
+    """Check whether the character is part of
+       SupplementalMathematicalOperators UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementalMathematicalOperators(code)
+    return ret
+
+def uCSIsSupplementaryPrivateUseAreaA(code):
+    """Check whether the character is part of
+       SupplementaryPrivateUseArea-A UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementaryPrivateUseAreaA(code)
+    return ret
+
+def uCSIsSupplementaryPrivateUseAreaB(code):
+    """Check whether the character is part of
+       SupplementaryPrivateUseArea-B UCS Block """
+    ret = libxml2mod.xmlUCSIsSupplementaryPrivateUseAreaB(code)
+    return ret
+
+def uCSIsSyriac(code):
+    """Check whether the character is part of Syriac UCS Block """
+    ret = libxml2mod.xmlUCSIsSyriac(code)
+    return ret
+
+def uCSIsTagalog(code):
+    """Check whether the character is part of Tagalog UCS Block """
+    ret = libxml2mod.xmlUCSIsTagalog(code)
+    return ret
+
+def uCSIsTagbanwa(code):
+    """Check whether the character is part of Tagbanwa UCS Block """
+    ret = libxml2mod.xmlUCSIsTagbanwa(code)
+    return ret
+
+def uCSIsTags(code):
+    """Check whether the character is part of Tags UCS Block """
+    ret = libxml2mod.xmlUCSIsTags(code)
+    return ret
+
+def uCSIsTaiLe(code):
+    """Check whether the character is part of TaiLe UCS Block """
+    ret = libxml2mod.xmlUCSIsTaiLe(code)
+    return ret
+
+def uCSIsTaiXuanJingSymbols(code):
+    """Check whether the character is part of TaiXuanJingSymbols
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsTaiXuanJingSymbols(code)
+    return ret
+
+def uCSIsTamil(code):
+    """Check whether the character is part of Tamil UCS Block """
+    ret = libxml2mod.xmlUCSIsTamil(code)
+    return ret
+
+def uCSIsTelugu(code):
+    """Check whether the character is part of Telugu UCS Block """
+    ret = libxml2mod.xmlUCSIsTelugu(code)
+    return ret
+
+def uCSIsThaana(code):
+    """Check whether the character is part of Thaana UCS Block """
+    ret = libxml2mod.xmlUCSIsThaana(code)
+    return ret
+
+def uCSIsThai(code):
+    """Check whether the character is part of Thai UCS Block """
+    ret = libxml2mod.xmlUCSIsThai(code)
+    return ret
+
+def uCSIsTibetan(code):
+    """Check whether the character is part of Tibetan UCS Block """
+    ret = libxml2mod.xmlUCSIsTibetan(code)
+    return ret
+
+def uCSIsUgaritic(code):
+    """Check whether the character is part of Ugaritic UCS Block """
+    ret = libxml2mod.xmlUCSIsUgaritic(code)
+    return ret
+
+def uCSIsUnifiedCanadianAboriginalSyllabics(code):
+    """Check whether the character is part of
+       UnifiedCanadianAboriginalSyllabics UCS Block """
+    ret = libxml2mod.xmlUCSIsUnifiedCanadianAboriginalSyllabics(code)
+    return ret
+
+def uCSIsVariationSelectors(code):
+    """Check whether the character is part of VariationSelectors
+       UCS Block """
+    ret = libxml2mod.xmlUCSIsVariationSelectors(code)
+    return ret
+
+def uCSIsVariationSelectorsSupplement(code):
+    """Check whether the character is part of
+       VariationSelectorsSupplement UCS Block """
+    ret = libxml2mod.xmlUCSIsVariationSelectorsSupplement(code)
+    return ret
+
+def uCSIsYiRadicals(code):
+    """Check whether the character is part of YiRadicals UCS Block """
+    ret = libxml2mod.xmlUCSIsYiRadicals(code)
+    return ret
+
+def uCSIsYiSyllables(code):
+    """Check whether the character is part of YiSyllables UCS Block """
+    ret = libxml2mod.xmlUCSIsYiSyllables(code)
+    return ret
+
+def uCSIsYijingHexagramSymbols(code):
+    """Check whether the character is part of
+       YijingHexagramSymbols UCS Block """
+    ret = libxml2mod.xmlUCSIsYijingHexagramSymbols(code)
+    return ret
+
+#
+# Functions from module xmlversion
+#
+
+def checkVersion(version):
+    """check the compiled lib version against the include one.
+       This can warn or immediately kill the application """
+    libxml2mod.xmlCheckVersion(version)
+
+#
+# Functions from module xpathInternals
+#
+
+def valuePop(ctxt):
+    """Pops the top XPath object from the value stack """
+    if ctxt is None: ctxt__o = None
+    else: ctxt__o = ctxt._o
+    ret = libxml2mod.valuePop(ctxt__o)
+    return ret
+
+class xmlNode(xmlCore):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlNode got a wrong wrapper object type')
+        self._o = _obj
+        xmlCore.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlNode (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    # accessors for xmlNode
+    def ns(self):
+        """Get the namespace of a node """
+        ret = libxml2mod.xmlNodeGetNs(self._o)
+        if ret is None:return None
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def nsDefs(self):
+        """Get the namespace of a node """
+        ret = libxml2mod.xmlNodeGetNsDefs(self._o)
+        if ret is None:return None
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    #
+    # xmlNode functions from module debugXML
+    #
+
+    def debugDumpNode(self, output, depth):
+        """Dumps debug information for the element node, it is
+           recursive """
+        libxml2mod.xmlDebugDumpNode(output, self._o, depth)
+
+    def debugDumpNodeList(self, output, depth):
+        """Dumps debug information for the list of element node, it is
+           recursive """
+        libxml2mod.xmlDebugDumpNodeList(output, self._o, depth)
+
+    def debugDumpOneNode(self, output, depth):
+        """Dumps debug information for the element node, it is not
+           recursive """
+        libxml2mod.xmlDebugDumpOneNode(output, self._o, depth)
+
+    def lsCountNode(self):
+        """Count the children of @node. """
+        ret = libxml2mod.xmlLsCountNode(self._o)
+        return ret
+
+    def lsOneNode(self, output):
+        """Dump to @output the type and name of @node. """
+        libxml2mod.xmlLsOneNode(output, self._o)
+
+    def shellPrintNode(self):
+        """Print node to the output FILE """
+        libxml2mod.xmlShellPrintNode(self._o)
+
+    #
+    # xmlNode functions from module tree
+    #
+
+    def addChild(self, cur):
+        """Add a new node to @parent, at the end of the child (or
+          property) list merging adjacent TEXT nodes (in which case
+          @cur is freed) If the new node is ATTRIBUTE, it is added
+          into properties instead of children. If there is an
+           attribute with equal name, it is first destroyed. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlAddChild(self._o, cur__o)
+        if ret is None:raise treeError('xmlAddChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addChildList(self, cur):
+        """Add a list of node at the end of the child list of the
+           parent merging adjacent TEXT nodes (@cur may be freed) """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlAddChildList(self._o, cur__o)
+        if ret is None:raise treeError('xmlAddChildList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addContent(self, content):
+        """Append the extra substring to the node content. NOTE: In
+          contrast to xmlNodeSetContent(), @content is supposed to be
+          raw text, so unescaped XML special chars are allowed,
+           entity references are not supported. """
+        libxml2mod.xmlNodeAddContent(self._o, content)
+
+    def addContentLen(self, content, len):
+        """Append the extra substring to the node content. NOTE: In
+          contrast to xmlNodeSetContentLen(), @content is supposed to
+          be raw text, so unescaped XML special chars are allowed,
+           entity references are not supported. """
+        libxml2mod.xmlNodeAddContentLen(self._o, content, len)
+
+    def addNextSibling(self, elem):
+        """Add a new node @elem as the next sibling of @cur If the new
+          node was already inserted in a document it is first
+          unlinked from its existing context. As a result of text
+          merging @elem may be freed. If the new node is ATTRIBUTE,
+          it is added into properties instead of children. If there
+           is an attribute with equal name, it is first destroyed. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddNextSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddNextSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addPrevSibling(self, elem):
+        """Add a new node @elem as the previous sibling of @cur
+          merging adjacent TEXT nodes (@elem may be freed) If the new
+          node was already inserted in a document it is first
+          unlinked from its existing context. If the new node is
+          ATTRIBUTE, it is added into properties instead of children.
+          If there is an attribute with equal name, it is first
+           destroyed. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddPrevSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddPrevSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def addSibling(self, elem):
+        """Add a new element @elem to the list of siblings of @cur
+          merging adjacent TEXT nodes (@elem may be freed) If the new
+          element was already inserted in a document it is first
+           unlinked from its existing context. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlAddSibling(self._o, elem__o)
+        if ret is None:raise treeError('xmlAddSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNode(self, extended):
+        """Do a copy of the node. """
+        ret = libxml2mod.xmlCopyNode(self._o, extended)
+        if ret is None:raise treeError('xmlCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNodeList(self):
+        """Do a recursive copy of the node list. Use
+          xmlDocCopyNodeList() if possible to ensure string interning. """
+        ret = libxml2mod.xmlCopyNodeList(self._o)
+        if ret is None:raise treeError('xmlCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyProp(self, cur):
+        """Do a copy of the attribute. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlCopyProp(self._o, cur__o)
+        if ret is None:raise treeError('xmlCopyProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def copyPropList(self, cur):
+        """Do a copy of an attribute list. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlCopyPropList(self._o, cur__o)
+        if ret is None:raise treeError('xmlCopyPropList() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def docCopyNode(self, doc, extended):
+        """Do a copy of the node to a given document. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocCopyNode(self._o, doc__o, extended)
+        if ret is None:raise treeError('xmlDocCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def docCopyNodeList(self, doc):
+        """Do a recursive copy of the node list. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocCopyNodeList(doc__o, self._o)
+        if ret is None:raise treeError('xmlDocCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def docSetRootElement(self, doc):
+        """Set the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlDocSetRootElement(doc__o, self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def firstElementChild(self):
+        """Finds the first child node of that element which is a
+          Element node Note the handling of entities references is
+          different than in the W3C DOM element traversal spec since
+          we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlFirstElementChild(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def freeNode(self):
+        """Free a node, this is a recursive behaviour, all the
+          children are freed too. This doesn't unlink the child from
+           the list, use xmlUnlinkNode() first. """
+        libxml2mod.xmlFreeNode(self._o)
+
+    def freeNodeList(self):
+        """Free a node and all its siblings, this is a recursive
+           behaviour, all the children are freed too. """
+        libxml2mod.xmlFreeNodeList(self._o)
+
+    def getBase(self, doc):
+        """Searches for the BASE URL. The code should work on both XML
+          and HTML document even if base mechanisms are completely
+          different. It returns the base as defined in RFC 2396
+          sections 5.1.1. Base URI within Document Content and 5.1.2.
+          Base URI from the Encapsulating Entity However it does not
+           return the document base (5.1.3), use doc->URL in this case """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeGetBase(doc__o, self._o)
+        return ret
+
+    def getContent(self):
+        """Read the value of a node, this can be either the text
+          carried directly by this node if it's a TEXT node or the
+          aggregate string of the values carried by this node child's
+           (TEXT and ENTITY_REF). Entity references are substituted. """
+        ret = libxml2mod.xmlNodeGetContent(self._o)
+        return ret
+
+    def getLang(self):
+        """Searches the language of a node, i.e. the values of the
+          xml:lang attribute or the one carried by the nearest
+           ancestor. """
+        ret = libxml2mod.xmlNodeGetLang(self._o)
+        return ret
+
+    def getSpacePreserve(self):
+        """Searches the space preserving behaviour of a node, i.e. the
+          values of the xml:space attribute or the one carried by the
+           nearest ancestor. """
+        ret = libxml2mod.xmlNodeGetSpacePreserve(self._o)
+        return ret
+
+    def hasNsProp(self, name, nameSpace):
+        """Search for an attribute associated to a node This attribute
+          has to be anchored in the namespace specified. This does
+          the entity substitution. This function looks in DTD
+          attribute declaration for #FIXED or default declaration
+          values unless DTD use has been turned off. Note that a
+           namespace of None indicates to use the default namespace. """
+        ret = libxml2mod.xmlHasNsProp(self._o, name, nameSpace)
+        if ret is None:return None
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def hasProp(self, name):
+        """Search an attribute associated to a node This function also
+          looks in DTD attribute declaration for #FIXED or default
+           declaration values unless DTD use has been turned off. """
+        ret = libxml2mod.xmlHasProp(self._o, name)
+        if ret is None:return None
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def isBlankNode(self):
+        """Checks whether this node is an empty or whitespace only
+           (and possibly ignorable) text-node. """
+        ret = libxml2mod.xmlIsBlankNode(self._o)
+        return ret
+
+    def isText(self):
+        """Is this node a Text node ? """
+        ret = libxml2mod.xmlNodeIsText(self._o)
+        return ret
+
+    def lastChild(self):
+        """Search the last child of a node. """
+        ret = libxml2mod.xmlGetLastChild(self._o)
+        if ret is None:raise treeError('xmlGetLastChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def lastElementChild(self):
+        """Finds the last child node of that element which is a
+          Element node Note the handling of entities references is
+          different than in the W3C DOM element traversal spec since
+          we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlLastElementChild(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def lineNo(self):
+        """Get line number of @node. Try to override the limitation of
+          lines being store in 16 bits ints if XML_PARSE_BIG_LINES
+           parser option was used """
+        ret = libxml2mod.xmlGetLineNo(self._o)
+        return ret
+
+    def listGetRawString(self, doc, inLine):
+        """Builds the string equivalent to the text contained in the
+          Node list made of TEXTs and ENTITY_REFs, contrary to
+          xmlNodeListGetString() this function doesn't do any
+           character encoding handling. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeListGetRawString(doc__o, self._o, inLine)
+        return ret
+
+    def listGetString(self, doc, inLine):
+        """Build the string equivalent to the text contained in the
+           Node list made of TEXTs and ENTITY_REFs """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNodeListGetString(doc__o, self._o, inLine)
+        return ret
+
+    def newChild(self, ns, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child list containing the TEXTs and ENTITY_REFs node will
+          be created. NOTE: @content is supposed to be a piece of XML
+          CDATA, so it allows entity references. XML special chars
+          must be escaped first by using
+          xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should
+           be used. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewChild(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNs(self, href, prefix):
+        """Creation of a new Namespace. This function will refuse to
+          create a namespace with a similar prefix than an existing
+          one present on this node. Note that for a default
+          namespace, @prefix should be None.  We use href==None in
+          the case of an element creation where the namespace was not
+           defined. """
+        ret = libxml2mod.xmlNewNs(self._o, href, prefix)
+        if ret is None:raise treeError('xmlNewNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def newNsProp(self, ns, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewNsProp(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlNewNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newNsPropEatName(self, ns, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewNsPropEatName(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlNewNsPropEatName() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newProp(self, name, value):
+        """Create a new property carried by a node. """
+        ret = libxml2mod.xmlNewProp(self._o, name, value)
+        if ret is None:raise treeError('xmlNewProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newTextChild(self, ns, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child TEXT node will be created containing the string
+          @content. NOTE: Use xmlNewChild() if @content will contain
+          entities that need to be preserved. Use this function,
+          xmlNewTextChild(), if you need to ensure that reserved XML
+          chars that might appear in @content, such as the ampersand,
+          greater-than or less-than signs, are automatically replaced
+           by their XML escaped entity representations. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewTextChild(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewTextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def nextElementSibling(self):
+        """Finds the first closest next sibling of the node which is
+          an element node. Note the handling of entities references
+          is different than in the W3C DOM element traversal spec
+          since we don't have back reference from entities content to
+           entities references. """
+        ret = libxml2mod.xmlNextElementSibling(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def noNsProp(self, name):
+        """Search and get the value of an attribute associated to a
+          node This does the entity substitution. This function looks
+          in DTD attribute declaration for #FIXED or default
+          declaration values unless DTD use has been turned off. This
+          function is similar to xmlGetProp except it will accept
+           only an attribute in no namespace. """
+        ret = libxml2mod.xmlGetNoNsProp(self._o, name)
+        return ret
+
+    def nodePath(self):
+        """Build a structure based Path for the given node """
+        ret = libxml2mod.xmlGetNodePath(self._o)
+        return ret
+
+    def nsProp(self, name, nameSpace):
+        """Search and get the value of an attribute associated to a
+          node This attribute has to be anchored in the namespace
+          specified. This does the entity substitution. This function
+          looks in DTD attribute declaration for #FIXED or default
+           declaration values unless DTD use has been turned off. """
+        ret = libxml2mod.xmlGetNsProp(self._o, name, nameSpace)
+        return ret
+
+    def previousElementSibling(self):
+        """Finds the first closest previous sibling of the node which
+          is an element node. Note the handling of entities
+          references is different than in the W3C DOM element
+          traversal spec since we don't have back reference from
+           entities content to entities references. """
+        ret = libxml2mod.xmlPreviousElementSibling(self._o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def prop(self, name):
+        """Search and get the value of an attribute associated to a
+          node This does the entity substitution. This function looks
+          in DTD attribute declaration for #FIXED or default
+          declaration values unless DTD use has been turned off.
+          NOTE: this function acts independently of namespaces
+          associated to the attribute. Use xmlGetNsProp() or
+           xmlGetNoNsProp() for namespace aware processing. """
+        ret = libxml2mod.xmlGetProp(self._o, name)
+        return ret
+
+    def reconciliateNs(self, doc):
+        """This function checks that all the namespaces declared
+          within the given tree are properly declared. This is needed
+          for example after Copy or Cut and then paste operations.
+          The subtree may still hold pointers to namespace
+          declarations outside the subtree or invalid/masked. As much
+          as possible the function try to reuse the existing
+          namespaces found in the new environment. If not possible
+          the new namespaces are redeclared on @tree at the top of
+           the given subtree. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlReconciliateNs(doc__o, self._o)
+        return ret
+
+    def replaceNode(self, cur):
+        """Unlink the old node from its current context, prune the new
+          one at the same place. If @cur was already inserted in a
+           document it is first unlinked from its existing context. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlReplaceNode(self._o, cur__o)
+        if ret is None:raise treeError('xmlReplaceNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def searchNs(self, doc, nameSpace):
+        """Search a Ns registered under a given name space for a
+          document. recurse on the parents until it finds the defined
+          namespace or return None otherwise. @nameSpace can be None,
+          this is a search for the default namespace. We don't allow
+          to cross entities boundaries. If you don't declare the
+          namespace within those you will be in troubles !!! A
+           warning is generated to cover this case. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSearchNs(doc__o, self._o, nameSpace)
+        if ret is None:raise treeError('xmlSearchNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def searchNsByHref(self, doc, href):
+        """Search a Ns aliasing a given URI. Recurse on the parents
+          until it finds the defined namespace or return None
+           otherwise. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSearchNsByHref(doc__o, self._o, href)
+        if ret is None:raise treeError('xmlSearchNsByHref() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def setBase(self, uri):
+        """Set (or reset) the base URI of a node, i.e. the value of
+           the xml:base attribute. """
+        libxml2mod.xmlNodeSetBase(self._o, uri)
+
+    def setContent(self, content):
+        """Replace the content of a node. NOTE: @content is supposed
+          to be a piece of XML CDATA, so it allows entity references,
+          but XML special chars need to be escaped first by using
+           xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). """
+        libxml2mod.xmlNodeSetContent(self._o, content)
+
+    def setContentLen(self, content, len):
+        """Replace the content of a node. NOTE: @content is supposed
+          to be a piece of XML CDATA, so it allows entity references,
+          but XML special chars need to be escaped first by using
+           xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars(). """
+        libxml2mod.xmlNodeSetContentLen(self._o, content, len)
+
+    def setLang(self, lang):
+        """Set the language of a node, i.e. the values of the xml:lang
+           attribute. """
+        libxml2mod.xmlNodeSetLang(self._o, lang)
+
+    def setListDoc(self, doc):
+        """update all nodes in the list to point to the right document """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlSetListDoc(self._o, doc__o)
+
+    def setName(self, name):
+        """Set (or reset) the name of a node. """
+        libxml2mod.xmlNodeSetName(self._o, name)
+
+    def setNs(self, ns):
+        """Associate a namespace to a node, a posteriori. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        libxml2mod.xmlSetNs(self._o, ns__o)
+
+    def setNsProp(self, ns, name, value):
+        """Set (or reset) an attribute carried by a node. The ns
+           structure must be in scope, this is not checked """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlSetNsProp(self._o, ns__o, name, value)
+        if ret is None:raise treeError('xmlSetNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def setProp(self, name, value):
+        """Set (or reset) an attribute carried by a node. If @name has
+          a prefix, then the corresponding namespace-binding will be
+          used, if in scope; it is an error it there's no such
+           ns-binding for the prefix in scope. """
+        ret = libxml2mod.xmlSetProp(self._o, name, value)
+        if ret is None:raise treeError('xmlSetProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def setSpacePreserve(self, val):
+        """Set (or reset) the space preserving behaviour of a node,
+           i.e. the value of the xml:space attribute. """
+        libxml2mod.xmlNodeSetSpacePreserve(self._o, val)
+
+    def setTreeDoc(self, doc):
+        """update all nodes under the tree to point to the right
+           document """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlSetTreeDoc(self._o, doc__o)
+
+    def textConcat(self, content, len):
+        """Concat the given string at the end of the existing node
+           content """
+        ret = libxml2mod.xmlTextConcat(self._o, content, len)
+        return ret
+
+    def textMerge(self, second):
+        """Merge two text nodes into one """
+        if second is None: second__o = None
+        else: second__o = second._o
+        ret = libxml2mod.xmlTextMerge(self._o, second__o)
+        if ret is None:raise treeError('xmlTextMerge() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def unlinkNode(self):
+        """Unlink a node from it's current context, the node is not
+          freed If one need to free the node, use xmlFreeNode()
+          routine after the unlink to discard it. Note that namespace
+          nodes can't be unlinked as they do not have pointer to
+           their parent. """
+        libxml2mod.xmlUnlinkNode(self._o)
+
+    def unsetNsProp(self, ns, name):
+        """Remove an attribute carried by a node. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlUnsetNsProp(self._o, ns__o, name)
+        return ret
+
+    def unsetProp(self, name):
+        """Remove an attribute carried by a node. This handles only
+           attributes in no namespace. """
+        ret = libxml2mod.xmlUnsetProp(self._o, name)
+        return ret
+
+    #
+    # xmlNode functions from module valid
+    #
+
+    def isID(self, doc, attr):
+        """Determine whether an attribute is of type ID. In case we
+          have DTD(s) then this is done if DTD loading has been
+          requested. In the case of HTML documents parsed with the
+           HTML parser, then ID detection is done systematically. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsID(doc__o, self._o, attr__o)
+        return ret
+
+    def isRef(self, doc, attr):
+        """Determine whether an attribute is of type Ref. In case we
+          have DTD(s) then this is simple, otherwise we use an
+           heuristic: name Ref (upper or lowercase). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsRef(doc__o, self._o, attr__o)
+        return ret
+
+    def validNormalizeAttributeValue(self, doc, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+           space (#x20) characters by single space (#x20) character. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidNormalizeAttributeValue(doc__o, self._o, name, value)
+        return ret
+
+    #
+    # xmlNode functions from module xinclude
+    #
+
+    def xincludeProcessTree(self):
+        """Implement the XInclude substitution for the given subtree """
+        ret = libxml2mod.xmlXIncludeProcessTree(self._o)
+        return ret
+
+    def xincludeProcessTreeFlags(self, flags):
+        """Implement the XInclude substitution for the given subtree """
+        ret = libxml2mod.xmlXIncludeProcessTreeFlags(self._o, flags)
+        return ret
+
+    #
+    # xmlNode functions from module xmlschemas
+    #
+
+    def schemaValidateOneElement(self, ctxt):
+        """Validate a branch of a tree, starting with the given @elem. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlSchemaValidateOneElement(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlNode functions from module xpath
+    #
+
+    def xpathCastNodeToNumber(self):
+        """Converts a node to its number value """
+        ret = libxml2mod.xmlXPathCastNodeToNumber(self._o)
+        return ret
+
+    def xpathCastNodeToString(self):
+        """Converts a node to its string value. """
+        ret = libxml2mod.xmlXPathCastNodeToString(self._o)
+        return ret
+
+    def xpathCmpNodes(self, node2):
+        """Compare two nodes w.r.t document order """
+        if node2 is None: node2__o = None
+        else: node2__o = node2._o
+        ret = libxml2mod.xmlXPathCmpNodes(self._o, node2__o)
+        return ret
+
+    def xpathNodeEval(self, str, ctx):
+        """Evaluate the XPath Location Path in the given context. The
+          node 'node' is set as the context node. The context node is
+           not restored. """
+        if ctx is None: ctx__o = None
+        else: ctx__o = ctx._o
+        ret = libxml2mod.xmlXPathNodeEval(self._o, str, ctx__o)
+        if ret is None:raise xpathError('xmlXPathNodeEval() failed')
+        return xpathObjectRet(ret)
+
+    #
+    # xmlNode functions from module xpathInternals
+    #
+
+    def xpathNewNodeSet(self):
+        """Create a new xmlXPathObjectPtr of type NodeSet and
+           initialize it with the single Node @val """
+        ret = libxml2mod.xmlXPathNewNodeSet(self._o)
+        if ret is None:raise xpathError('xmlXPathNewNodeSet() failed')
+        return xpathObjectRet(ret)
+
+    def xpathNewValueTree(self):
+        """Create a new xmlXPathObjectPtr of type Value Tree (XSLT)
+           and initialize it with the tree root @val """
+        ret = libxml2mod.xmlXPathNewValueTree(self._o)
+        if ret is None:raise xpathError('xmlXPathNewValueTree() failed')
+        return xpathObjectRet(ret)
+
+    def xpathNextAncestor(self, ctxt):
+        """Traversal function for the "ancestor" direction the
+          ancestor axis contains the ancestors of the context node;
+          the ancestors of the context node consist of the parent of
+          context node and the parent's parent and so on; the nodes
+          are ordered in reverse document order; thus the parent is
+          the first node on the axis, and the parent's parent is the
+           second node on the axis """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAncestor(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAncestor() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAncestorOrSelf(self, ctxt):
+        """Traversal function for the "ancestor-or-self" direction he
+          ancestor-or-self axis contains the context node and
+          ancestors of the context node in reverse document order;
+          thus the context node is the first node on the axis, and
+          the context node's parent the second; parent here is
+           defined the same as with the parent axis. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAncestorOrSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAncestorOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAttribute(self, ctxt):
+        """Traversal function for the "attribute" direction TODO:
+           support DTD inherited default attributes """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextAttribute(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextAttribute() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextChild(self, ctxt):
+        """Traversal function for the "child" direction The child axis
+          contains the children of the context node in document order. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextChild(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendant(self, ctxt):
+        """Traversal function for the "descendant" direction the
+          descendant axis contains the descendants of the context
+          node in document order; a descendant is a child or a child
+           of a child and so on. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextDescendant(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextDescendant() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendantOrSelf(self, ctxt):
+        """Traversal function for the "descendant-or-self" direction
+          the descendant-or-self axis contains the context node and
+          the descendants of the context node in document order; thus
+          the context node is the first node on the axis, and the
+          first child of the context node is the second node on the
+           axis """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextDescendantOrSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextDescendantOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowing(self, ctxt):
+        """Traversal function for the "following" direction The
+          following axis contains all nodes in the same document as
+          the context node that are after the context node in
+          document order, excluding any descendants and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in document order """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextFollowing(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextFollowing() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowingSibling(self, ctxt):
+        """Traversal function for the "following-sibling" direction
+          The following-sibling axis contains the following siblings
+           of the context node in document order. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextFollowingSibling(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextFollowingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextNamespace(self, ctxt):
+        """Traversal function for the "namespace" direction the
+          namespace axis contains the namespace nodes of the context
+          node; the order of nodes on this axis is
+          implementation-defined; the axis will be empty unless the
+          context node is an element  We keep the XML namespace node
+           at the end of the list. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextNamespace(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextNamespace() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextParent(self, ctxt):
+        """Traversal function for the "parent" direction The parent
+          axis contains the parent of the context node, if there is
+           one. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextParent(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextParent() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPreceding(self, ctxt):
+        """Traversal function for the "preceding" direction the
+          preceding axis contains all nodes in the same document as
+          the context node that are before the context node in
+          document order, excluding any ancestors and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in reverse document order """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextPreceding(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextPreceding() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPrecedingSibling(self, ctxt):
+        """Traversal function for the "preceding-sibling" direction
+          The preceding-sibling axis contains the preceding siblings
+          of the context node in reverse document order; the first
+          preceding sibling is first on the axis; the sibling
+           preceding that node is the second on the axis and so on. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextPrecedingSibling(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextPrecedingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextSelf(self, ctxt):
+        """Traversal function for the "self" direction The self axis
+           contains just the context node itself """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlXPathNextSelf(ctxt__o, self._o)
+        if ret is None:raise xpathError('xmlXPathNextSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    #
+    # xmlNode functions from module xpointer
+    #
+
+    def xpointerNewCollapsedRange(self):
+        """Create a new xmlXPathObjectPtr of type range using a single
+           nodes """
+        ret = libxml2mod.xmlXPtrNewCollapsedRange(self._o)
+        if ret is None:raise treeError('xmlXPtrNewCollapsedRange() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewContext(self, doc, origin):
+        """Create a new XPointer context """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if origin is None: origin__o = None
+        else: origin__o = origin._o
+        ret = libxml2mod.xmlXPtrNewContext(doc__o, self._o, origin__o)
+        if ret is None:raise treeError('xmlXPtrNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    def xpointerNewLocationSetNodes(self, end):
+        """Create a new xmlXPathObjectPtr of type LocationSet and
+          initialize it with the single range made of the two nodes
+           @start and @end """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewLocationSetNodes(self._o, end__o)
+        if ret is None:raise treeError('xmlXPtrNewLocationSetNodes() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewRange(self, startindex, end, endindex):
+        """Create a new xmlXPathObjectPtr of type range """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewRange(self._o, startindex, end__o, endindex)
+        if ret is None:raise treeError('xmlXPtrNewRange() failed')
+        return xpathObjectRet(ret)
+
+    def xpointerNewRangeNodes(self, end):
+        """Create a new xmlXPathObjectPtr of type range using 2 nodes """
+        if end is None: end__o = None
+        else: end__o = end._o
+        ret = libxml2mod.xmlXPtrNewRangeNodes(self._o, end__o)
+        if ret is None:raise treeError('xmlXPtrNewRangeNodes() failed')
+        return xpathObjectRet(ret)
+
+class xmlDoc(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlDoc got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlDoc (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlDoc functions from module HTMLparser
+    #
+
+    def htmlAutoCloseTag(self, name, elem):
+        """The HTML DTD allows a tag to implicitly close other tags.
+          The list is kept in htmlStartClose array. This function
+          checks if the element or one of it's children would
+           autoclose the given tag. """
+        ret = libxml2mod.htmlAutoCloseTag(self._o, name, elem)
+        return ret
+
+    def htmlIsAutoClosed(self, elem):
+        """The HTML DTD allows a tag to implicitly close other tags.
+          The list is kept in htmlStartClose array. This function
+           checks if a tag is autoclosed by one of it's child """
+        ret = libxml2mod.htmlIsAutoClosed(self._o, elem)
+        return ret
+
+    #
+    # xmlDoc functions from module HTMLtree
+    #
+
+    def htmlDocContentDumpFormatOutput(self, buf, encoding, format):
+        """Dump an HTML document. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        libxml2mod.htmlDocContentDumpFormatOutput(buf__o, self._o, encoding, format)
+
+    def htmlDocContentDumpOutput(self, buf, encoding):
+        """Dump an HTML document. Formating return/spaces are added. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        libxml2mod.htmlDocContentDumpOutput(buf__o, self._o, encoding)
+
+    def htmlDocDump(self, f):
+        """Dump an HTML document to an open FILE. """
+        ret = libxml2mod.htmlDocDump(f, self._o)
+        return ret
+
+    def htmlGetMetaEncoding(self):
+        """Encoding definition lookup in the Meta tags """
+        ret = libxml2mod.htmlGetMetaEncoding(self._o)
+        return ret
+
+    def htmlNodeDumpFile(self, out, cur):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns are added. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFile(out, self._o, cur__o)
+
+    def htmlNodeDumpFileFormat(self, out, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+          too.  TODO: if encoding == None try to save in the doc
+           encoding """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.htmlNodeDumpFileFormat(out, self._o, cur__o, encoding, format)
+        return ret
+
+    def htmlNodeDumpFormatOutput(self, buf, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFormatOutput(buf__o, self._o, cur__o, encoding, format)
+
+    def htmlNodeDumpOutput(self, buf, cur, encoding):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns/spaces are added. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpOutput(buf__o, self._o, cur__o, encoding)
+
+    def htmlSaveFile(self, filename):
+        """Dump an HTML document to a file. If @filename is "-" the
+           stdout file is used. """
+        ret = libxml2mod.htmlSaveFile(filename, self._o)
+        return ret
+
+    def htmlSaveFileEnc(self, filename, encoding):
+        """Dump an HTML document to a file using a given encoding and
+           formatting returns/spaces are added. """
+        ret = libxml2mod.htmlSaveFileEnc(filename, self._o, encoding)
+        return ret
+
+    def htmlSaveFileFormat(self, filename, encoding, format):
+        """Dump an HTML document to a file using a given encoding. """
+        ret = libxml2mod.htmlSaveFileFormat(filename, self._o, encoding, format)
+        return ret
+
+    def htmlSetMetaEncoding(self, encoding):
+        """Sets the current encoding in the Meta tags NOTE: this will
+          not change the document content encoding, just the META
+           flag associated. """
+        ret = libxml2mod.htmlSetMetaEncoding(self._o, encoding)
+        return ret
+
+    #
+    # xmlDoc functions from module debugXML
+    #
+
+    def debugCheckDocument(self, output):
+        """Check the document for potential content problems, and
+           output the errors to @output """
+        ret = libxml2mod.xmlDebugCheckDocument(output, self._o)
+        return ret
+
+    def debugDumpDocument(self, output):
+        """Dumps debug information for the document, it's recursive """
+        libxml2mod.xmlDebugDumpDocument(output, self._o)
+
+    def debugDumpDocumentHead(self, output):
+        """Dumps debug information cncerning the document, not
+           recursive """
+        libxml2mod.xmlDebugDumpDocumentHead(output, self._o)
+
+    def debugDumpEntities(self, output):
+        """Dumps debug information for all the entities in use by the
+           document """
+        libxml2mod.xmlDebugDumpEntities(output, self._o)
+
+    #
+    # xmlDoc functions from module entities
+    #
+
+    def addDocEntity(self, name, type, ExternalID, SystemID, content):
+        """Register a new entity for this document. """
+        ret = libxml2mod.xmlAddDocEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlAddDocEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def addDtdEntity(self, name, type, ExternalID, SystemID, content):
+        """Register a new entity for this document DTD external subset. """
+        ret = libxml2mod.xmlAddDtdEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlAddDtdEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def docEntity(self, name):
+        """Do an entity lookup in the document entity hash table and """
+        ret = libxml2mod.xmlGetDocEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetDocEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def dtdEntity(self, name):
+        """Do an entity lookup in the DTD entity hash table and """
+        ret = libxml2mod.xmlGetDtdEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetDtdEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def encodeEntities(self, input):
+        """TODO: remove xmlEncodeEntities, once we are not afraid of
+          breaking binary compatibility  People must migrate their
+          code to xmlEncodeEntitiesReentrant ! This routine will
+           issue a warning when encountered. """
+        ret = libxml2mod.xmlEncodeEntities(self._o, input)
+        return ret
+
+    def encodeEntitiesReentrant(self, input):
+        """Do a global encoding of a string, replacing the predefined
+          entities and non ASCII values with their entities and
+          CharRef counterparts. Contrary to xmlEncodeEntities, this
+           routine is reentrant, and result must be deallocated. """
+        ret = libxml2mod.xmlEncodeEntitiesReentrant(self._o, input)
+        return ret
+
+    def encodeSpecialChars(self, input):
+        """Do a global encoding of a string, replacing the predefined
+          entities this routine is reentrant, and result must be
+           deallocated. """
+        ret = libxml2mod.xmlEncodeSpecialChars(self._o, input)
+        return ret
+
+    def newEntity(self, name, type, ExternalID, SystemID, content):
+        """Create a new entity, this differs from xmlAddDocEntity()
+          that if the document is None or has no internal subset
+          defined, then an unlinked entity structure will be
+          returned, it is then the responsability of the caller to
+          link it to the document later or free it when not needed
+           anymore. """
+        ret = libxml2mod.xmlNewEntity(self._o, name, type, ExternalID, SystemID, content)
+        if ret is None:raise treeError('xmlNewEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def parameterEntity(self, name):
+        """Do an entity lookup in the internal and external subsets and """
+        ret = libxml2mod.xmlGetParameterEntity(self._o, name)
+        if ret is None:raise treeError('xmlGetParameterEntity() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module relaxng
+    #
+
+    def relaxNGNewDocParserCtxt(self):
+        """Create an XML RelaxNGs parser context for that document.
+          Note: since the process of compiling a RelaxNG schemas
+          modifies the document, the @doc parameter is duplicated
+           internally. """
+        ret = libxml2mod.xmlRelaxNGNewDocParserCtxt(self._o)
+        if ret is None:raise parserError('xmlRelaxNGNewDocParserCtxt() failed')
+        __tmp = relaxNgParserCtxt(_obj=ret)
+        return __tmp
+
+    def relaxNGValidateDoc(self, ctxt):
+        """Validate a document tree in memory. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlRelaxNGValidateDoc(ctxt__o, self._o)
+        return ret
+
+    def relaxNGValidateFullElement(self, ctxt, elem):
+        """Validate a full subtree when
+          xmlRelaxNGValidatePushElement() returned 0 and the content
+           of the node has been expanded. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidateFullElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def relaxNGValidatePopElement(self, ctxt, elem):
+        """Pop the element end from the RelaxNG validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePopElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def relaxNGValidatePushElement(self, ctxt, elem):
+        """Push a new element start on the RelaxNG validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePushElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    #
+    # xmlDoc functions from module tree
+    #
+
+    def copyDoc(self, recursive):
+        """Do a copy of the document info. If recursive, the content
+          tree will be copied too as well as DTD, namespaces and
+           entities. """
+        ret = libxml2mod.xmlCopyDoc(self._o, recursive)
+        if ret is None:raise treeError('xmlCopyDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def copyNode(self, node, extended):
+        """Do a copy of the node to a given document. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlDocCopyNode(node__o, self._o, extended)
+        if ret is None:raise treeError('xmlDocCopyNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def copyNodeList(self, node):
+        """Do a recursive copy of the node list. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlDocCopyNodeList(self._o, node__o)
+        if ret is None:raise treeError('xmlDocCopyNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def createIntSubset(self, name, ExternalID, SystemID):
+        """Create the internal subset of a document """
+        ret = libxml2mod.xmlCreateIntSubset(self._o, name, ExternalID, SystemID)
+        if ret is None:raise treeError('xmlCreateIntSubset() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def docCompressMode(self):
+        """get the compression ratio for a document, ZLIB based """
+        ret = libxml2mod.xmlGetDocCompressMode(self._o)
+        return ret
+
+    def dump(self, f):
+        """Dump an XML document to an open FILE. """
+        ret = libxml2mod.xmlDocDump(f, self._o)
+        return ret
+
+    def elemDump(self, f, cur):
+        """Dump an XML/HTML node, recursive behaviour, children are
+           printed too. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlElemDump(f, self._o, cur__o)
+
+    def formatDump(self, f, format):
+        """Dump an XML document to an open FILE. """
+        ret = libxml2mod.xmlDocFormatDump(f, self._o, format)
+        return ret
+
+    def freeDoc(self):
+        """Free up all the structures used by a document, tree
+           included. """
+        libxml2mod.xmlFreeDoc(self._o)
+
+    def getRootElement(self):
+        """Get the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        ret = libxml2mod.xmlDocGetRootElement(self._o)
+        if ret is None:raise treeError('xmlDocGetRootElement() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def intSubset(self):
+        """Get the internal subset of a document """
+        ret = libxml2mod.xmlGetIntSubset(self._o)
+        if ret is None:raise treeError('xmlGetIntSubset() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def newCDataBlock(self, content, len):
+        """Creation of a new node containing a CDATA block. """
+        ret = libxml2mod.xmlNewCDataBlock(self._o, content, len)
+        if ret is None:raise treeError('xmlNewCDataBlock() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newCharRef(self, name):
+        """Creation of a new character reference node. """
+        ret = libxml2mod.xmlNewCharRef(self._o, name)
+        if ret is None:raise treeError('xmlNewCharRef() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocComment(self, content):
+        """Creation of a new node containing a comment within a
+           document. """
+        ret = libxml2mod.xmlNewDocComment(self._o, content)
+        if ret is None:raise treeError('xmlNewDocComment() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocFragment(self):
+        """Creation of a new Fragment node. """
+        ret = libxml2mod.xmlNewDocFragment(self._o)
+        if ret is None:raise treeError('xmlNewDocFragment() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNode(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocNode(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNodeEatName(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocNodeEatName(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocPI(self, name, content):
+        """Creation of a processing instruction element. """
+        ret = libxml2mod.xmlNewDocPI(self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocPI() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocProp(self, name, value):
+        """Create a new property carried by a document. """
+        ret = libxml2mod.xmlNewDocProp(self._o, name, value)
+        if ret is None:raise treeError('xmlNewDocProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newDocRawNode(self, ns, name, content):
+        """Creation of a new node element within a document. @ns and
+           @content are optional (None). """
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlNewDocRawNode(self._o, ns__o, name, content)
+        if ret is None:raise treeError('xmlNewDocRawNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocText(self, content):
+        """Creation of a new text node within a document. """
+        ret = libxml2mod.xmlNewDocText(self._o, content)
+        if ret is None:raise treeError('xmlNewDocText() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocTextLen(self, content, len):
+        """Creation of a new text node with an extra content length
+           parameter. The text node pertain to a given document. """
+        ret = libxml2mod.xmlNewDocTextLen(self._o, content, len)
+        if ret is None:raise treeError('xmlNewDocTextLen() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDtd(self, name, ExternalID, SystemID):
+        """Creation of a new DTD for the external subset. To create an
+           internal subset, use xmlCreateIntSubset(). """
+        ret = libxml2mod.xmlNewDtd(self._o, name, ExternalID, SystemID)
+        if ret is None:raise treeError('xmlNewDtd() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def newGlobalNs(self, href, prefix):
+        """Creation of a Namespace, the old way using PI and without
+           scoping DEPRECATED !!! """
+        ret = libxml2mod.xmlNewGlobalNs(self._o, href, prefix)
+        if ret is None:raise treeError('xmlNewGlobalNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def newReference(self, name):
+        """Creation of a new reference node. """
+        ret = libxml2mod.xmlNewReference(self._o, name)
+        if ret is None:raise treeError('xmlNewReference() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def nodeDumpOutput(self, buf, cur, level, format, encoding):
+        """Dump an XML node, recursive behaviour, children are printed
+          too. Note that @format = 1 provide node indenting only if
+          xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was
+           called """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlNodeDumpOutput(buf__o, self._o, cur__o, level, format, encoding)
+
+    def nodeGetBase(self, cur):
+        """Searches for the BASE URL. The code should work on both XML
+          and HTML document even if base mechanisms are completely
+          different. It returns the base as defined in RFC 2396
+          sections 5.1.1. Base URI within Document Content and 5.1.2.
+          Base URI from the Encapsulating Entity However it does not
+           return the document base (5.1.3), use doc->URL in this case """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlNodeGetBase(self._o, cur__o)
+        return ret
+
+    def nodeListGetRawString(self, list, inLine):
+        """Builds the string equivalent to the text contained in the
+          Node list made of TEXTs and ENTITY_REFs, contrary to
+          xmlNodeListGetString() this function doesn't do any
+           character encoding handling. """
+        if list is None: list__o = None
+        else: list__o = list._o
+        ret = libxml2mod.xmlNodeListGetRawString(self._o, list__o, inLine)
+        return ret
+
+    def nodeListGetString(self, list, inLine):
+        """Build the string equivalent to the text contained in the
+           Node list made of TEXTs and ENTITY_REFs """
+        if list is None: list__o = None
+        else: list__o = list._o
+        ret = libxml2mod.xmlNodeListGetString(self._o, list__o, inLine)
+        return ret
+
+    def reconciliateNs(self, tree):
+        """This function checks that all the namespaces declared
+          within the given tree are properly declared. This is needed
+          for example after Copy or Cut and then paste operations.
+          The subtree may still hold pointers to namespace
+          declarations outside the subtree or invalid/masked. As much
+          as possible the function try to reuse the existing
+          namespaces found in the new environment. If not possible
+          the new namespaces are redeclared on @tree at the top of
+           the given subtree. """
+        if tree is None: tree__o = None
+        else: tree__o = tree._o
+        ret = libxml2mod.xmlReconciliateNs(self._o, tree__o)
+        return ret
+
+    def saveFile(self, filename):
+        """Dump an XML document to a file. Will use compression if
+          compiled in and enabled. If @filename is "-" the stdout
+           file is used. """
+        ret = libxml2mod.xmlSaveFile(filename, self._o)
+        return ret
+
+    def saveFileEnc(self, filename, encoding):
+        """Dump an XML document, converting it to the given encoding """
+        ret = libxml2mod.xmlSaveFileEnc(filename, self._o, encoding)
+        return ret
+
+    def saveFileTo(self, buf, encoding):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        ret = libxml2mod.xmlSaveFileTo(buf__o, self._o, encoding)
+        return ret
+
+    def saveFormatFile(self, filename, format):
+        """Dump an XML document to a file. Will use compression if
+          compiled in and enabled. If @filename is "-" the stdout
+          file is used. If @format is set then the document will be
+          indented on output. Note that @format = 1 provide node
+          indenting only if xmlIndentTreeOutput = 1 or
+           xmlKeepBlanksDefault(0) was called """
+        ret = libxml2mod.xmlSaveFormatFile(filename, self._o, format)
+        return ret
+
+    def saveFormatFileEnc(self, filename, encoding, format):
+        """Dump an XML document to a file or an URL. """
+        ret = libxml2mod.xmlSaveFormatFileEnc(filename, self._o, encoding, format)
+        return ret
+
+    def saveFormatFileTo(self, buf, encoding, format):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if buf is None: buf__o = None
+        else: buf__o = buf._o
+        ret = libxml2mod.xmlSaveFormatFileTo(buf__o, self._o, encoding, format)
+        return ret
+
+    def searchNs(self, node, nameSpace):
+        """Search a Ns registered under a given name space for a
+          document. recurse on the parents until it finds the defined
+          namespace or return None otherwise. @nameSpace can be None,
+          this is a search for the default namespace. We don't allow
+          to cross entities boundaries. If you don't declare the
+          namespace within those you will be in troubles !!! A
+           warning is generated to cover this case. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSearchNs(self._o, node__o, nameSpace)
+        if ret is None:raise treeError('xmlSearchNs() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def searchNsByHref(self, node, href):
+        """Search a Ns aliasing a given URI. Recurse on the parents
+          until it finds the defined namespace or return None
+           otherwise. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSearchNsByHref(self._o, node__o, href)
+        if ret is None:raise treeError('xmlSearchNsByHref() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def setDocCompressMode(self, mode):
+        """set the compression ratio for a document, ZLIB based
+           Correct values: 0 (uncompressed) to 9 (max compression) """
+        libxml2mod.xmlSetDocCompressMode(self._o, mode)
+
+    def setListDoc(self, list):
+        """update all nodes in the list to point to the right document """
+        if list is None: list__o = None
+        else: list__o = list._o
+        libxml2mod.xmlSetListDoc(list__o, self._o)
+
+    def setRootElement(self, root):
+        """Set the root element of the document (doc->children is a
+           list containing possibly comments, PIs, etc ...). """
+        if root is None: root__o = None
+        else: root__o = root._o
+        ret = libxml2mod.xmlDocSetRootElement(self._o, root__o)
+        if ret is None:return None
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def setTreeDoc(self, tree):
+        """update all nodes under the tree to point to the right
+           document """
+        if tree is None: tree__o = None
+        else: tree__o = tree._o
+        libxml2mod.xmlSetTreeDoc(tree__o, self._o)
+
+    def stringGetNodeList(self, value):
+        """Parse the value string and build the node list associated.
+           Should produce a flat tree with only TEXTs and ENTITY_REFs. """
+        ret = libxml2mod.xmlStringGetNodeList(self._o, value)
+        if ret is None:raise treeError('xmlStringGetNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def stringLenGetNodeList(self, value, len):
+        """Parse the value string and build the node list associated.
+           Should produce a flat tree with only TEXTs and ENTITY_REFs. """
+        ret = libxml2mod.xmlStringLenGetNodeList(self._o, value, len)
+        if ret is None:raise treeError('xmlStringLenGetNodeList() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module valid
+    #
+
+    def ID(self, ID):
+        """Search the attribute declaring the given ID """
+        ret = libxml2mod.xmlGetID(self._o, ID)
+        if ret is None:raise treeError('xmlGetID() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def isID(self, elem, attr):
+        """Determine whether an attribute is of type ID. In case we
+          have DTD(s) then this is done if DTD loading has been
+          requested. In the case of HTML documents parsed with the
+           HTML parser, then ID detection is done systematically. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsID(self._o, elem__o, attr__o)
+        return ret
+
+    def isMixedElement(self, name):
+        """Search in the DtDs whether an element accept Mixed content
+           (or ANY) basically if it is supposed to accept text childs """
+        ret = libxml2mod.xmlIsMixedElement(self._o, name)
+        return ret
+
+    def isRef(self, elem, attr):
+        """Determine whether an attribute is of type Ref. In case we
+          have DTD(s) then this is simple, otherwise we use an
+           heuristic: name Ref (upper or lowercase). """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlIsRef(self._o, elem__o, attr__o)
+        return ret
+
+    def removeID(self, attr):
+        """Remove the given attribute from the ID table maintained
+           internally. """
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlRemoveID(self._o, attr__o)
+        return ret
+
+    def removeRef(self, attr):
+        """Remove the given attribute from the Ref table maintained
+           internally. """
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlRemoveRef(self._o, attr__o)
+        return ret
+
+    def validCtxtNormalizeAttributeValue(self, ctxt, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+          space (#x20) characters by single space (#x20) character. 
+          Also  check VC: Standalone Document Declaration in P32, and
+           update ctxt->valid accordingly """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidCtxtNormalizeAttributeValue(ctxt__o, self._o, elem__o, name, value)
+        return ret
+
+    def validNormalizeAttributeValue(self, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+           space (#x20) characters by single space (#x20) character. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidNormalizeAttributeValue(self._o, elem__o, name, value)
+        return ret
+
+    def validateDocument(self, ctxt):
+        """Try to validate the document instance  basically it does
+          the all the checks described by the XML Rec i.e. validates
+          the internal and external subset (if present) and validate
+           the document tree. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDocument(ctxt__o, self._o)
+        return ret
+
+    def validateDocumentFinal(self, ctxt):
+        """Does the final step for the document validation once all
+          the incremental validation steps have been completed 
+          basically it does the following checks described by the XML
+          Rec  Check all the IDREF/IDREFS attributes definition for
+           validity """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDocumentFinal(ctxt__o, self._o)
+        return ret
+
+    def validateDtd(self, ctxt, dtd):
+        """Try to validate the document against the dtd instance 
+          Basically it does check all the definitions in the DtD.
+          Note the the internal subset (if present) is de-coupled
+          (i.e. not used), which could give problems if ID or IDREF
+           is present. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if dtd is None: dtd__o = None
+        else: dtd__o = dtd._o
+        ret = libxml2mod.xmlValidateDtd(ctxt__o, self._o, dtd__o)
+        return ret
+
+    def validateDtdFinal(self, ctxt):
+        """Does the final step for the dtds validation once all the
+          subsets have been parsed  basically it does the following
+          checks described by the XML Rec - check that ENTITY and
+          ENTITIES type attributes default or possible values matches
+          one of the defined entities. - check that NOTATION type
+          attributes default or possible values matches one of the
+           defined notations. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateDtdFinal(ctxt__o, self._o)
+        return ret
+
+    def validateElement(self, ctxt, elem):
+        """Try to validate the subtree under an element """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def validateNotationUse(self, ctxt, notationName):
+        """Validate that the given name match a notation declaration.
+           - [ VC: Notation Declared ] """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateNotationUse(ctxt__o, self._o, notationName)
+        return ret
+
+    def validateOneAttribute(self, ctxt, elem, attr, value):
+        """Try to validate a single attribute for an element basically
+          it does the following checks as described by the XML-1.0
+          recommendation: - [ VC: Attribute Value Type ] - [ VC:
+          Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC:
+          Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity
+          Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlValidateOneAttribute(ctxt__o, self._o, elem__o, attr__o, value)
+        return ret
+
+    def validateOneElement(self, ctxt, elem):
+        """Try to validate a single element and it's attributes,
+          basically it does the following checks as described by the
+          XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC:
+          Required Attribute ] Then call xmlValidateOneAttribute()
+          for each attribute present.  The ID/IDREF checkings are
+           done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateOneElement(ctxt__o, self._o, elem__o)
+        return ret
+
+    def validateOneNamespace(self, ctxt, elem, prefix, ns, value):
+        """Try to validate a single namespace declaration for an
+          element basically it does the following checks as described
+          by the XML-1.0 recommendation: - [ VC: Attribute Value Type
+          ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] -
+          [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC:
+          Entity Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlValidateOneNamespace(ctxt__o, self._o, elem__o, prefix, ns__o, value)
+        return ret
+
+    def validatePopElement(self, ctxt, elem, qname):
+        """Pop the element end from the validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePopElement(ctxt__o, self._o, elem__o, qname)
+        return ret
+
+    def validatePushElement(self, ctxt, elem, qname):
+        """Push a new element start on the validation stack. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePushElement(ctxt__o, self._o, elem__o, qname)
+        return ret
+
+    def validateRoot(self, ctxt):
+        """Try to validate a the root element basically it does the
+          following check as described by the XML-1.0 recommendation:
+          - [ VC: Root Element Type ] it doesn't try to recurse or
+           apply other check to the element """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlValidateRoot(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xinclude
+    #
+
+    def xincludeProcess(self):
+        """Implement the XInclude substitution on the XML document @doc """
+        ret = libxml2mod.xmlXIncludeProcess(self._o)
+        return ret
+
+    def xincludeProcessFlags(self, flags):
+        """Implement the XInclude substitution on the XML document @doc """
+        ret = libxml2mod.xmlXIncludeProcessFlags(self._o, flags)
+        return ret
+
+    #
+    # xmlDoc functions from module xmlreader
+    #
+
+    def NewWalker(self, reader):
+        """Setup an xmltextReader to parse a preparsed XML document.
+           This reuses the existing @reader xmlTextReader. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlReaderNewWalker(reader__o, self._o)
+        return ret
+
+    def readerWalker(self):
+        """Create an xmltextReader for a preparsed document. """
+        ret = libxml2mod.xmlReaderWalker(self._o)
+        if ret is None:raise treeError('xmlReaderWalker() failed')
+        __tmp = xmlTextReader(_obj=ret)
+        return __tmp
+
+    #
+    # xmlDoc functions from module xmlschemas
+    #
+
+    def schemaNewDocParserCtxt(self):
+        """Create an XML Schemas parse context for that document. NB.
+           The document may be modified during the parsing process. """
+        ret = libxml2mod.xmlSchemaNewDocParserCtxt(self._o)
+        if ret is None:raise parserError('xmlSchemaNewDocParserCtxt() failed')
+        __tmp = SchemaParserCtxt(_obj=ret)
+        return __tmp
+
+    def schemaValidateDoc(self, ctxt):
+        """Validate a document tree in memory. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlSchemaValidateDoc(ctxt__o, self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xpath
+    #
+
+    def xpathNewContext(self):
+        """Create a new xmlXPathContext """
+        ret = libxml2mod.xmlXPathNewContext(self._o)
+        if ret is None:raise xpathError('xmlXPathNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    def xpathOrderDocElems(self):
+        """Call this routine to speed up XPath computation on static
+          documents. This stamps all the element nodes with the
+          document order Like for line information, the order is kept
+          in the element->content field, the value stored is actually
+          - the node number (starting at -1) to be able to
+           differentiate from line numbers. """
+        ret = libxml2mod.xmlXPathOrderDocElems(self._o)
+        return ret
+
+    #
+    # xmlDoc functions from module xpointer
+    #
+
+    def xpointerNewContext(self, here, origin):
+        """Create a new XPointer context """
+        if here is None: here__o = None
+        else: here__o = here._o
+        if origin is None: origin__o = None
+        else: origin__o = origin._o
+        ret = libxml2mod.xmlXPtrNewContext(self._o, here__o, origin__o)
+        if ret is None:raise treeError('xmlXPtrNewContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+class parserCtxt(parserCtxtCore):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        parserCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeParserCtxt(self._o)
+        self._o = None
+
+    # accessors for parserCtxt
+    def doc(self):
+        """Get the document tree from a parser context. """
+        ret = libxml2mod.xmlParserGetDoc(self._o)
+        if ret is None:raise parserError('xmlParserGetDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def isValid(self):
+        """Get the validity information from a parser context. """
+        ret = libxml2mod.xmlParserGetIsValid(self._o)
+        return ret
+
+    def lineNumbers(self, linenumbers):
+        """Switch on the generation of line number for elements nodes. """
+        libxml2mod.xmlParserSetLineNumbers(self._o, linenumbers)
+
+    def loadSubset(self, loadsubset):
+        """Switch the parser to load the DTD without validating. """
+        libxml2mod.xmlParserSetLoadSubset(self._o, loadsubset)
+
+    def pedantic(self, pedantic):
+        """Switch the parser to be pedantic. """
+        libxml2mod.xmlParserSetPedantic(self._o, pedantic)
+
+    def replaceEntities(self, replaceEntities):
+        """Switch the parser to replace entities. """
+        libxml2mod.xmlParserSetReplaceEntities(self._o, replaceEntities)
+
+    def validate(self, validate):
+        """Switch the parser to validation mode. """
+        libxml2mod.xmlParserSetValidate(self._o, validate)
+
+    def wellFormed(self):
+        """Get the well formed information from a parser context. """
+        ret = libxml2mod.xmlParserGetWellFormed(self._o)
+        return ret
+
+    #
+    # parserCtxt functions from module HTMLparser
+    #
+
+    def htmlCtxtReadDoc(self, cur, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadDoc(self._o, cur, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadFd(self, fd, URL, encoding, options):
+        """parse an XML from a file descriptor and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadFd(self._o, fd, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadFd() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadFile(self._o, filename, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadFile() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReadMemory(self, buffer, size, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.htmlCtxtReadMemory(self._o, buffer, size, URL, encoding, options)
+        if ret is None:raise treeError('htmlCtxtReadMemory() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def htmlCtxtReset(self):
+        """Reset a parser context """
+        libxml2mod.htmlCtxtReset(self._o)
+
+    def htmlCtxtUseOptions(self, options):
+        """Applies the options to the parser context """
+        ret = libxml2mod.htmlCtxtUseOptions(self._o, options)
+        return ret
+
+    def htmlFreeParserCtxt(self):
+        """Free all the memory used by a parser context. However the
+           parsed document in ctxt->myDoc is not freed. """
+        libxml2mod.htmlFreeParserCtxt(self._o)
+
+    def htmlParseCharRef(self):
+        """parse Reference declarations  [66] CharRef ::= '&#' [0-9]+
+           ';' | '&#x' [0-9a-fA-F]+ ';' """
+        ret = libxml2mod.htmlParseCharRef(self._o)
+        return ret
+
+    def htmlParseChunk(self, chunk, size, terminate):
+        """Parse a Chunk of memory """
+        ret = libxml2mod.htmlParseChunk(self._o, chunk, size, terminate)
+        return ret
+
+    def htmlParseDocument(self):
+        """parse an HTML document (and build a tree if using the
+           standard SAX interface). """
+        ret = libxml2mod.htmlParseDocument(self._o)
+        return ret
+
+    def htmlParseElement(self):
+        """parse an HTML element, this is highly recursive this is
+          kept for compatibility with previous code versions  [39]
+          element ::= EmptyElemTag | STag content ETag  [41]
+           Attribute ::= Name Eq AttValue """
+        libxml2mod.htmlParseElement(self._o)
+
+    #
+    # parserCtxt functions from module parser
+    #
+
+    def byteConsumed(self):
+        """This function provides the current index of the parser
+          relative to the start of the current entity. This function
+          is computed in bytes from the beginning starting at zero
+          and finishing at the size in byte of the file if parsing a
+          file. The function is of constant cost if the input is
+           UTF-8 but can be costly if run on non-UTF-8 input. """
+        ret = libxml2mod.xmlByteConsumed(self._o)
+        return ret
+
+    def clearParserCtxt(self):
+        """Clear (release owned resources) and reinitialize a parser
+           context """
+        libxml2mod.xmlClearParserCtxt(self._o)
+
+    def ctxtReadDoc(self, cur, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadDoc(self._o, cur, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadFd(self, fd, URL, encoding, options):
+        """parse an XML from a file descriptor and build a tree. This
+          reuses the existing @ctxt parser context NOTE that the file
+          descriptor will not be closed when the reader is closed or
+           reset. """
+        ret = libxml2mod.xmlCtxtReadFd(self._o, fd, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadFd() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadFile(self._o, filename, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadFile() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReadMemory(self, buffer, size, URL, encoding, options):
+        """parse an XML in-memory document and build a tree. This
+           reuses the existing @ctxt parser context """
+        ret = libxml2mod.xmlCtxtReadMemory(self._o, buffer, size, URL, encoding, options)
+        if ret is None:raise treeError('xmlCtxtReadMemory() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def ctxtReset(self):
+        """Reset a parser context """
+        libxml2mod.xmlCtxtReset(self._o)
+
+    def ctxtResetPush(self, chunk, size, filename, encoding):
+        """Reset a push parser context """
+        ret = libxml2mod.xmlCtxtResetPush(self._o, chunk, size, filename, encoding)
+        return ret
+
+    def ctxtUseOptions(self, options):
+        """Applies the options to the parser context """
+        ret = libxml2mod.xmlCtxtUseOptions(self._o, options)
+        return ret
+
+    def initParserCtxt(self):
+        """Initialize a parser context """
+        ret = libxml2mod.xmlInitParserCtxt(self._o)
+        return ret
+
+    def parseChunk(self, chunk, size, terminate):
+        """Parse a Chunk of memory """
+        ret = libxml2mod.xmlParseChunk(self._o, chunk, size, terminate)
+        return ret
+
+    def parseDocument(self):
+        """parse an XML document (and build a tree if using the
+          standard SAX interface).  [1] document ::= prolog element
+           Misc*  [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? """
+        ret = libxml2mod.xmlParseDocument(self._o)
+        return ret
+
+    def parseExtParsedEnt(self):
+        """parse a general parsed entity An external general parsed
+          entity is well-formed if it matches the production labeled
+           extParsedEnt.  [78] extParsedEnt ::= TextDecl? content """
+        ret = libxml2mod.xmlParseExtParsedEnt(self._o)
+        return ret
+
+    def setupParserForBuffer(self, buffer, filename):
+        """Setup the parser context to parse a new buffer; Clears any
+          prior contents from the parser context. The buffer
+          parameter must not be None, but the filename parameter can
+           be """
+        libxml2mod.xmlSetupParserForBuffer(self._o, buffer, filename)
+
+    def stopParser(self):
+        """Blocks further parser processing """
+        libxml2mod.xmlStopParser(self._o)
+
+    #
+    # parserCtxt functions from module parserInternals
+    #
+
+    def decodeEntities(self, len, what, end, end2, end3):
+        """This function is deprecated, we now always process entities
+          content through xmlStringDecodeEntities  TODO: remove it in
+          next major release.  [67] Reference ::= EntityRef | CharRef
+            [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlDecodeEntities(self._o, len, what, end, end2, end3)
+        return ret
+
+    def handleEntity(self, entity):
+        """Default handling of defined entities, when should we define
+          a new input stream ? When do we just handle that as a set
+           of chars ?  OBSOLETE: to be removed at some point. """
+        if entity is None: entity__o = None
+        else: entity__o = entity._o
+        libxml2mod.xmlHandleEntity(self._o, entity__o)
+
+    def namespaceParseNCName(self):
+        """parse an XML namespace name.  TODO: this seems not in use
+          anymore, the namespace handling is done on top of the SAX
+          interfaces, i.e. not on raw input.  [NS 3] NCName ::=
+          (Letter | '_') (NCNameChar)*  [NS 4] NCNameChar ::= Letter
+           | Digit | '.' | '-' | '_' | CombiningChar | Extender """
+        ret = libxml2mod.xmlNamespaceParseNCName(self._o)
+        return ret
+
+    def namespaceParseNSDef(self):
+        """parse a namespace prefix declaration  TODO: this seems not
+          in use anymore, the namespace handling is done on top of
+          the SAX interfaces, i.e. not on raw input.  [NS 1] NSDef
+          ::= PrefixDef Eq SystemLiteral  [NS 2] PrefixDef ::=
+           'xmlns' (':' NCName)? """
+        ret = libxml2mod.xmlNamespaceParseNSDef(self._o)
+        return ret
+
+    def nextChar(self):
+        """Skip to the next char input char. """
+        libxml2mod.xmlNextChar(self._o)
+
+    def parseAttValue(self):
+        """parse a value for an attribute Note: the parser won't do
+          substitution of entities here, this will be handled later
+          in xmlStringGetNodeList  [10] AttValue ::= '"' ([^<&"] |
+          Reference)* '"' | "'" ([^<&'] | Reference)* "'"  3.3.3
+          Attribute-Value Normalization: Before the value of an
+          attribute is passed to the application or checked for
+          validity, the XML processor must normalize it as follows: -
+          a character reference is processed by appending the
+          referenced character to the attribute value - an entity
+          reference is processed by recursively processing the
+          replacement text of the entity - a whitespace character
+          (#x20, #xD, #xA, #x9) is processed by appending #x20 to the
+          normalized value, except that only a single #x20 is
+          appended for a "#xD#xA" sequence that is part of an
+          external parsed entity or the literal entity value of an
+          internal parsed entity - other characters are processed by
+          appending them to the normalized value If the declared
+          value is not CDATA, then the XML processor must further
+          process the normalized attribute value by discarding any
+          leading and trailing space (#x20) characters, and by
+          replacing sequences of space (#x20) characters by a single
+          space (#x20) character. All attributes for which no
+          declaration has been read should be treated by a
+           non-validating parser as if declared CDATA. """
+        ret = libxml2mod.xmlParseAttValue(self._o)
+        return ret
+
+    def parseAttributeListDecl(self):
+        """: parse the Attribute list def for an element  [52]
+          AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'  [53]
+           AttDef ::= S Name S AttType S DefaultDecl """
+        libxml2mod.xmlParseAttributeListDecl(self._o)
+
+    def parseCDSect(self):
+        """Parse escaped pure raw content.  [18] CDSect ::= CDStart
+          CData CDEnd  [19] CDStart ::= '<![CDATA['  [20] Data ::=
+           (Char* - (Char* ']]>' Char*))  [21] CDEnd ::= ']]>' """
+        libxml2mod.xmlParseCDSect(self._o)
+
+    def parseCharData(self, cdata):
+        """parse a CharData section. if we are within a CDATA section
+          ']]>' marks an end of section.  The right angle bracket (>)
+          may be represented using the string "&gt;", and must, for
+          compatibility, be escaped using "&gt;" or a character
+          reference when it appears in the string "]]>" in content,
+          when that string is not marking the end of a CDATA section.
+            [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*) """
+        libxml2mod.xmlParseCharData(self._o, cdata)
+
+    def parseCharRef(self):
+        """parse Reference declarations  [66] CharRef ::= '&#' [0-9]+
+          ';' | '&#x' [0-9a-fA-F]+ ';'  [ WFC: Legal Character ]
+          Characters referred to using character references must
+           match the production for Char. """
+        ret = libxml2mod.xmlParseCharRef(self._o)
+        return ret
+
+    def parseComment(self):
+        """Skip an XML (SGML) comment <!-- .... --> The spec says that
+          "For compatibility, the string "--" (double-hyphen) must
+          not occur within comments. "  [15] Comment ::= '<!--'
+           ((Char - '-') | ('-' (Char - '-')))* '-->' """
+        libxml2mod.xmlParseComment(self._o)
+
+    def parseContent(self):
+        """Parse a content:  [43] content ::= (element | CharData |
+           Reference | CDSect | PI | Comment)* """
+        libxml2mod.xmlParseContent(self._o)
+
+    def parseDocTypeDecl(self):
+        """parse a DOCTYPE declaration  [28] doctypedecl ::=
+          '<!DOCTYPE' S Name (S ExternalID)? S? ('[' (markupdecl |
+          PEReference | S)* ']' S?)? '>'  [ VC: Root Element Type ]
+          The Name in the document type declaration must match the
+           element type of the root element. """
+        libxml2mod.xmlParseDocTypeDecl(self._o)
+
+    def parseElement(self):
+        """parse an XML element, this is highly recursive  [39]
+          element ::= EmptyElemTag | STag content ETag  [ WFC:
+          Element Type Match ] The Name in an element's end-tag must
+           match the element type in the start-tag. """
+        libxml2mod.xmlParseElement(self._o)
+
+    def parseElementDecl(self):
+        """parse an Element declaration.  [45] elementdecl ::=
+          '<!ELEMENT' S Name S contentspec S? '>'  [ VC: Unique
+          Element Type Declaration ] No element type may be declared
+           more than once """
+        ret = libxml2mod.xmlParseElementDecl(self._o)
+        return ret
+
+    def parseEncName(self):
+        """parse the XML encoding name  [81] EncName ::= [A-Za-z]
+           ([A-Za-z0-9._] | '-')* """
+        ret = libxml2mod.xmlParseEncName(self._o)
+        return ret
+
+    def parseEncodingDecl(self):
+        """parse the XML encoding declaration  [80] EncodingDecl ::= S
+          'encoding' Eq ('"' EncName '"' |  "'" EncName "'")  this
+           setups the conversion filters. """
+        ret = libxml2mod.xmlParseEncodingDecl(self._o)
+        return ret
+
+    def parseEndTag(self):
+        """parse an end of tag  [42] ETag ::= '</' Name S? '>'  With
+           namespace  [NS 9] ETag ::= '</' QName S? '>' """
+        libxml2mod.xmlParseEndTag(self._o)
+
+    def parseEntityDecl(self):
+        """parse <!ENTITY declarations  [70] EntityDecl ::= GEDecl |
+          PEDecl  [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S?
+          '>'  [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
+          [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?) 
+          [74] PEDef ::= EntityValue | ExternalID  [76] NDataDecl ::=
+          S 'NDATA' S Name  [ VC: Notation Declared ] The Name must
+           match the declared name of a notation. """
+        libxml2mod.xmlParseEntityDecl(self._o)
+
+    def parseEntityRef(self):
+        """parse ENTITY references declarations  [68] EntityRef ::=
+          '&' Name ';'  [ WFC: Entity Declared ] In a document
+          without any DTD, a document with only an internal DTD
+          subset which contains no parameter entity references, or a
+          document with "standalone='yes'", the Name given in the
+          entity reference must match that in an entity declaration,
+          except that well-formed documents need not declare any of
+          the following entities: amp, lt, gt, apos, quot.  The
+          declaration of a parameter entity must precede any
+          reference to it.  Similarly, the declaration of a general
+          entity must precede any reference to it which appears in a
+          default value in an attribute-list declaration. Note that
+          if entities are declared in the external subset or in
+          external parameter entities, a non-validating processor is
+          not obligated to read and process their declarations; for
+          such documents, the rule that an entity must be declared is
+          a well-formedness constraint only if standalone='yes'.  [
+          WFC: Parsed Entity ] An entity reference must not contain
+           the name of an unparsed entity """
+        ret = libxml2mod.xmlParseEntityRef(self._o)
+        if ret is None:raise parserError('xmlParseEntityRef() failed')
+        __tmp = xmlEntity(_obj=ret)
+        return __tmp
+
+    def parseExternalSubset(self, ExternalID, SystemID):
+        """parse Markup declarations from an external subset  [30]
+          extSubset ::= textDecl? extSubsetDecl  [31] extSubsetDecl
+           ::= (markupdecl | conditionalSect | PEReference | S) * """
+        libxml2mod.xmlParseExternalSubset(self._o, ExternalID, SystemID)
+
+    def parseMarkupDecl(self):
+        """parse Markup declarations  [29] markupdecl ::= elementdecl
+          | AttlistDecl | EntityDecl | NotationDecl | PI | Comment  [
+          VC: Proper Declaration/PE Nesting ] Parameter-entity
+          replacement text must be properly nested with markup
+          declarations. That is to say, if either the first character
+          or the last character of a markup declaration (markupdecl
+          above) is contained in the replacement text for a
+          parameter-entity reference, both must be contained in the
+          same replacement text.  [ WFC: PEs in Internal Subset ] In
+          the internal DTD subset, parameter-entity references can
+          occur only where markup declarations can occur, not within
+          markup declarations. (This does not apply to references
+          that occur in external parameter entities or to the
+           external subset.) """
+        libxml2mod.xmlParseMarkupDecl(self._o)
+
+    def parseMisc(self):
+        """parse an XML Misc* optional field.  [27] Misc ::= Comment |
+           PI |  S """
+        libxml2mod.xmlParseMisc(self._o)
+
+    def parseName(self):
+        """parse an XML name.  [4] NameChar ::= Letter | Digit | '.' |
+          '-' | '_' | ':' | CombiningChar | Extender  [5] Name ::=
+          (Letter | '_' | ':') (NameChar)*  [6] Names ::= Name (#x20
+           Name)* """
+        ret = libxml2mod.xmlParseName(self._o)
+        return ret
+
+    def parseNamespace(self):
+        """xmlParseNamespace: parse specific PI '<?namespace ...'
+          constructs.  This is what the older xml-name Working Draft
+          specified, a bunch of other stuff may still rely on it, so
+          support is still here as if it was declared on the root of
+          the Tree:-(  TODO: remove from library  To be removed at
+           next drop of binary compatibility """
+        libxml2mod.xmlParseNamespace(self._o)
+
+    def parseNmtoken(self):
+        """parse an XML Nmtoken.  [7] Nmtoken ::= (NameChar)+  [8]
+           Nmtokens ::= Nmtoken (#x20 Nmtoken)* """
+        ret = libxml2mod.xmlParseNmtoken(self._o)
+        return ret
+
+    def parseNotationDecl(self):
+        """parse a notation declaration  [82] NotationDecl ::=
+          '<!NOTATION' S Name S (ExternalID |  PublicID) S? '>' 
+          Hence there is actually 3 choices: 'PUBLIC' S PubidLiteral
+          'PUBLIC' S PubidLiteral S SystemLiteral and 'SYSTEM' S
+           SystemLiteral  See the NOTE on xmlParseExternalID(). """
+        libxml2mod.xmlParseNotationDecl(self._o)
+
+    def parsePEReference(self):
+        """parse PEReference declarations The entity content is
+          handled directly by pushing it's content as a new input
+          stream.  [69] PEReference ::= '%' Name ';'  [ WFC: No
+          Recursion ] A parsed entity must not contain a recursive
+          reference to itself, either directly or indirectly.  [ WFC:
+          Entity Declared ] In a document without any DTD, a document
+          with only an internal DTD subset which contains no
+          parameter entity references, or a document with
+          "standalone='yes'", ...  ... The declaration of a parameter
+          entity must precede any reference to it...  [ VC: Entity
+          Declared ] In a document with an external subset or
+          external parameter entities with "standalone='no'", ... 
+          ... The declaration of a parameter entity must precede any
+          reference to it...  [ WFC: In DTD ] Parameter-entity
+          references may only appear in the DTD. NOTE: misleading but
+           this is handled. """
+        libxml2mod.xmlParsePEReference(self._o)
+
+    def parsePI(self):
+        """parse an XML Processing Instruction.  [16] PI ::= '<?'
+          PITarget (S (Char* - (Char* '?>' Char*)))? '?>'  The
+           processing is transfered to SAX once parsed. """
+        libxml2mod.xmlParsePI(self._o)
+
+    def parsePITarget(self):
+        """parse the name of a PI  [17] PITarget ::= Name - (('X' |
+           'x') ('M' | 'm') ('L' | 'l')) """
+        ret = libxml2mod.xmlParsePITarget(self._o)
+        return ret
+
+    def parsePubidLiteral(self):
+        """parse an XML public literal  [12] PubidLiteral ::= '"'
+           PubidChar* '"' | "'" (PubidChar - "'")* "'" """
+        ret = libxml2mod.xmlParsePubidLiteral(self._o)
+        return ret
+
+    def parseQuotedString(self):
+        """Parse and return a string between quotes or doublequotes 
+          TODO: Deprecated, to  be removed at next drop of binary
+           compatibility """
+        ret = libxml2mod.xmlParseQuotedString(self._o)
+        return ret
+
+    def parseReference(self):
+        """parse and handle entity references in content, depending on
+          the SAX interface, this may end-up in a call to character()
+          if this is a CharRef, a predefined entity, if there is no
+          reference() callback. or if the parser was asked to switch
+           to that mode.  [67] Reference ::= EntityRef | CharRef """
+        libxml2mod.xmlParseReference(self._o)
+
+    def parseSDDecl(self):
+        """parse the XML standalone declaration  [32] SDDecl ::= S
+          'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' |
+          'no')'"'))  [ VC: Standalone Document Declaration ] TODO
+          The standalone document declaration must have the value
+          "no" if any external markup declarations contain
+          declarations of: - attributes with default values, if
+          elements to which these attributes apply appear in the
+          document without specifications of values for these
+          attributes, or - entities (other than amp, lt, gt, apos,
+          quot), if references to those entities appear in the
+          document, or - attributes with values subject to
+          normalization, where the attribute appears in the document
+          with a value which will change as a result of
+          normalization, or - element types with element content, if
+          white space occurs directly within any instance of those
+           types. """
+        ret = libxml2mod.xmlParseSDDecl(self._o)
+        return ret
+
+    def parseStartTag(self):
+        """parse a start of tag either for rule element or
+          EmptyElement. In both case we don't parse the tag closing
+          chars.  [40] STag ::= '<' Name (S Attribute)* S? '>'  [
+          WFC: Unique Att Spec ] No attribute name may appear more
+          than once in the same start-tag or empty-element tag.  [44]
+          EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'  [ WFC:
+          Unique Att Spec ] No attribute name may appear more than
+          once in the same start-tag or empty-element tag.  With
+          namespace:  [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
+            [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>' """
+        ret = libxml2mod.xmlParseStartTag(self._o)
+        return ret
+
+    def parseSystemLiteral(self):
+        """parse an XML Literal  [11] SystemLiteral ::= ('"' [^"]*
+           '"') | ("'" [^']* "'") """
+        ret = libxml2mod.xmlParseSystemLiteral(self._o)
+        return ret
+
+    def parseTextDecl(self):
+        """parse an XML declaration header for external entities  [77]
+           TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>' """
+        libxml2mod.xmlParseTextDecl(self._o)
+
+    def parseVersionInfo(self):
+        """parse the XML version.  [24] VersionInfo ::= S 'version' Eq
+           (' VersionNum ' | " VersionNum ")  [25] Eq ::= S? '=' S? """
+        ret = libxml2mod.xmlParseVersionInfo(self._o)
+        return ret
+
+    def parseVersionNum(self):
+        """parse the XML version value.  [26] VersionNum ::= '1.'
+           [0-9]+  In practice allow [0-9].[0-9]+ at that level """
+        ret = libxml2mod.xmlParseVersionNum(self._o)
+        return ret
+
+    def parseXMLDecl(self):
+        """parse an XML declaration header  [23] XMLDecl ::= '<?xml'
+           VersionInfo EncodingDecl? SDDecl? S? '?>' """
+        libxml2mod.xmlParseXMLDecl(self._o)
+
+    def parserHandlePEReference(self):
+        """[69] PEReference ::= '%' Name ';'  [ WFC: No Recursion ] A
+          parsed entity must not contain a recursive reference to
+          itself, either directly or indirectly.  [ WFC: Entity
+          Declared ] In a document without any DTD, a document with
+          only an internal DTD subset which contains no parameter
+          entity references, or a document with "standalone='yes'",
+          ...  ... The declaration of a parameter entity must precede
+          any reference to it...  [ VC: Entity Declared ] In a
+          document with an external subset or external parameter
+          entities with "standalone='no'", ...  ... The declaration
+          of a parameter entity must precede any reference to it... 
+          [ WFC: In DTD ] Parameter-entity references may only appear
+          in the DTD. NOTE: misleading but this is handled.  A
+          PEReference may have been detected in the current input
+          stream the handling is done accordingly to
+          http://www.w3.org/TR/REC-xml#entproc i.e. - Included in
+          literal in entity values - Included as Parameter Entity
+           reference within DTDs """
+        libxml2mod.xmlParserHandlePEReference(self._o)
+
+    def parserHandleReference(self):
+        """TODO: Remove, now deprecated ... the test is done directly
+          in the content parsing routines.  [67] Reference ::=
+          EntityRef | CharRef  [68] EntityRef ::= '&' Name ';'  [
+          WFC: Entity Declared ] the Name given in the entity
+          reference must match that in an entity declaration, except
+          that well-formed documents need not declare any of the
+          following entities: amp, lt, gt, apos, quot.  [ WFC: Parsed
+          Entity ] An entity reference must not contain the name of
+          an unparsed entity  [66] CharRef ::= '&#' [0-9]+ ';' |
+          '&#x' [0-9a-fA-F]+ ';'  A PEReference may have been
+          detected in the current input stream the handling is done
+           accordingly to http://www.w3.org/TR/REC-xml#entproc """
+        libxml2mod.xmlParserHandleReference(self._o)
+
+    def popInput(self):
+        """xmlPopInput: the current input pointed by ctxt->input came
+           to an end pop it and return the next char. """
+        ret = libxml2mod.xmlPopInput(self._o)
+        return ret
+
+    def scanName(self):
+        """Trickery: parse an XML name but without consuming the input
+          flow Needed for rollback cases. Used only when parsing
+          entities references.  TODO: seems deprecated now, only used
+          in the default part of xmlParserHandleReference  [4]
+          NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
+          CombiningChar | Extender  [5] Name ::= (Letter | '_' | ':')
+           (NameChar)*  [6] Names ::= Name (S Name)* """
+        ret = libxml2mod.xmlScanName(self._o)
+        return ret
+
+    def skipBlankChars(self):
+        """skip all blanks character found at that point in the input
+          streams. It pops up finished entities in the process if
+           allowable at that point. """
+        ret = libxml2mod.xmlSkipBlankChars(self._o)
+        return ret
+
+    def stringDecodeEntities(self, str, what, end, end2, end3):
+        """Takes a entity string content and process to do the
+          adequate substitutions.  [67] Reference ::= EntityRef |
+           CharRef  [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlStringDecodeEntities(self._o, str, what, end, end2, end3)
+        return ret
+
+    def stringLenDecodeEntities(self, str, len, what, end, end2, end3):
+        """Takes a entity string content and process to do the
+          adequate substitutions.  [67] Reference ::= EntityRef |
+           CharRef  [69] PEReference ::= '%' Name ';' """
+        ret = libxml2mod.xmlStringLenDecodeEntities(self._o, str, len, what, end, end2, end3)
+        return ret
+
+class xmlAttr(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlAttr got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlAttr (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlAttr functions from module debugXML
+    #
+
+    def debugDumpAttr(self, output, depth):
+        """Dumps debug information for the attribute """
+        libxml2mod.xmlDebugDumpAttr(output, self._o, depth)
+
+    def debugDumpAttrList(self, output, depth):
+        """Dumps debug information for the attribute list """
+        libxml2mod.xmlDebugDumpAttrList(output, self._o, depth)
+
+    #
+    # xmlAttr functions from module tree
+    #
+
+    def copyProp(self, target):
+        """Do a copy of the attribute. """
+        if target is None: target__o = None
+        else: target__o = target._o
+        ret = libxml2mod.xmlCopyProp(target__o, self._o)
+        if ret is None:raise treeError('xmlCopyProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def copyPropList(self, target):
+        """Do a copy of an attribute list. """
+        if target is None: target__o = None
+        else: target__o = target._o
+        ret = libxml2mod.xmlCopyPropList(target__o, self._o)
+        if ret is None:raise treeError('xmlCopyPropList() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def freeProp(self):
+        """Free one attribute, all the content is freed too """
+        libxml2mod.xmlFreeProp(self._o)
+
+    def freePropList(self):
+        """Free a property and all its siblings, all the children are
+           freed too. """
+        libxml2mod.xmlFreePropList(self._o)
+
+    def removeProp(self):
+        """Unlink and free one attribute, all the content is freed too
+           Note this doesn't work for namespace definition attributes """
+        ret = libxml2mod.xmlRemoveProp(self._o)
+        return ret
+
+    #
+    # xmlAttr functions from module valid
+    #
+
+    def removeID(self, doc):
+        """Remove the given attribute from the ID table maintained
+           internally. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRemoveID(doc__o, self._o)
+        return ret
+
+    def removeRef(self, doc):
+        """Remove the given attribute from the Ref table maintained
+           internally. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRemoveRef(doc__o, self._o)
+        return ret
+
+class xmlAttribute(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlAttribute got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlAttribute (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+class catalog:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeCatalog(self._o)
+        self._o = None
+
+    #
+    # catalog functions from module catalog
+    #
+
+    def add(self, type, orig, replace):
+        """Add an entry in the catalog, it may overwrite existing but
+           different entries. """
+        ret = libxml2mod.xmlACatalogAdd(self._o, type, orig, replace)
+        return ret
+
+    def catalogIsEmpty(self):
+        """Check is a catalog is empty """
+        ret = libxml2mod.xmlCatalogIsEmpty(self._o)
+        return ret
+
+    def convertSGMLCatalog(self):
+        """Convert all the SGML catalog entries as XML ones """
+        ret = libxml2mod.xmlConvertSGMLCatalog(self._o)
+        return ret
+
+    def dump(self, out):
+        """Dump the given catalog to the given file. """
+        libxml2mod.xmlACatalogDump(self._o, out)
+
+    def remove(self, value):
+        """Remove an entry from the catalog """
+        ret = libxml2mod.xmlACatalogRemove(self._o, value)
+        return ret
+
+    def resolve(self, pubID, sysID):
+        """Do a complete resolution lookup of an External Identifier """
+        ret = libxml2mod.xmlACatalogResolve(self._o, pubID, sysID)
+        return ret
+
+    def resolvePublic(self, pubID):
+        """Try to lookup the catalog local reference associated to a
+           public ID in that catalog """
+        ret = libxml2mod.xmlACatalogResolvePublic(self._o, pubID)
+        return ret
+
+    def resolveSystem(self, sysID):
+        """Try to lookup the catalog resource for a system ID """
+        ret = libxml2mod.xmlACatalogResolveSystem(self._o, sysID)
+        return ret
+
+    def resolveURI(self, URI):
+        """Do a complete resolution lookup of an URI """
+        ret = libxml2mod.xmlACatalogResolveURI(self._o, URI)
+        return ret
+
+class xmlDtd(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlDtd got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlDtd (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlDtd functions from module debugXML
+    #
+
+    def debugDumpDTD(self, output):
+        """Dumps debug information for the DTD """
+        libxml2mod.xmlDebugDumpDTD(output, self._o)
+
+    #
+    # xmlDtd functions from module tree
+    #
+
+    def copyDtd(self):
+        """Do a copy of the dtd. """
+        ret = libxml2mod.xmlCopyDtd(self._o)
+        if ret is None:raise treeError('xmlCopyDtd() failed')
+        __tmp = xmlDtd(_obj=ret)
+        return __tmp
+
+    def freeDtd(self):
+        """Free a DTD structure. """
+        libxml2mod.xmlFreeDtd(self._o)
+
+    #
+    # xmlDtd functions from module valid
+    #
+
+    def dtdAttrDesc(self, elem, name):
+        """Search the DTD for the description of this attribute on
+           this element. """
+        ret = libxml2mod.xmlGetDtdAttrDesc(self._o, elem, name)
+        if ret is None:raise treeError('xmlGetDtdAttrDesc() failed')
+        __tmp = xmlAttribute(_obj=ret)
+        return __tmp
+
+    def dtdElementDesc(self, name):
+        """Search the DTD for the description of this element """
+        ret = libxml2mod.xmlGetDtdElementDesc(self._o, name)
+        if ret is None:raise treeError('xmlGetDtdElementDesc() failed')
+        __tmp = xmlElement(_obj=ret)
+        return __tmp
+
+    def dtdQAttrDesc(self, elem, name, prefix):
+        """Search the DTD for the description of this qualified
+           attribute on this element. """
+        ret = libxml2mod.xmlGetDtdQAttrDesc(self._o, elem, name, prefix)
+        if ret is None:raise treeError('xmlGetDtdQAttrDesc() failed')
+        __tmp = xmlAttribute(_obj=ret)
+        return __tmp
+
+    def dtdQElementDesc(self, name, prefix):
+        """Search the DTD for the description of this element """
+        ret = libxml2mod.xmlGetDtdQElementDesc(self._o, name, prefix)
+        if ret is None:raise treeError('xmlGetDtdQElementDesc() failed')
+        __tmp = xmlElement(_obj=ret)
+        return __tmp
+
+class xmlElement(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlElement got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlElement (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+class xmlEntity(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlEntity got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlEntity (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlEntity functions from module parserInternals
+    #
+
+    def handleEntity(self, ctxt):
+        """Default handling of defined entities, when should we define
+          a new input stream ? When do we just handle that as a set
+           of chars ?  OBSOLETE: to be removed at some point. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        libxml2mod.xmlHandleEntity(ctxt__o, self._o)
+
+class Error:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for Error
+    def code(self):
+        """The error code, e.g. an xmlParserError """
+        ret = libxml2mod.xmlErrorGetCode(self._o)
+        return ret
+
+    def domain(self):
+        """What part of the library raised this error """
+        ret = libxml2mod.xmlErrorGetDomain(self._o)
+        return ret
+
+    def file(self):
+        """the filename """
+        ret = libxml2mod.xmlErrorGetFile(self._o)
+        return ret
+
+    def level(self):
+        """how consequent is the error """
+        ret = libxml2mod.xmlErrorGetLevel(self._o)
+        return ret
+
+    def line(self):
+        """the line number if available """
+        ret = libxml2mod.xmlErrorGetLine(self._o)
+        return ret
+
+    def message(self):
+        """human-readable informative error message """
+        ret = libxml2mod.xmlErrorGetMessage(self._o)
+        return ret
+
+    #
+    # Error functions from module xmlerror
+    #
+
+    def copyError(self, to):
+        """Save the original error to the new place. """
+        if to is None: to__o = None
+        else: to__o = to._o
+        ret = libxml2mod.xmlCopyError(self._o, to__o)
+        return ret
+
+    def resetError(self):
+        """Cleanup the error. """
+        libxml2mod.xmlResetError(self._o)
+
+class xmlNs(xmlNode):
+    def __init__(self, _obj=None):
+        if checkWrapper(_obj) != 0:            raise TypeError('xmlNs got a wrong wrapper object type')
+        self._o = _obj
+        xmlNode.__init__(self, _obj=_obj)
+
+    def __repr__(self):
+        return "<xmlNs (%s) object at 0x%x>" % (self.name, int(pos_id (self)))
+
+    #
+    # xmlNs functions from module tree
+    #
+
+    def copyNamespace(self):
+        """Do a copy of the namespace. """
+        ret = libxml2mod.xmlCopyNamespace(self._o)
+        if ret is None:raise treeError('xmlCopyNamespace() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def copyNamespaceList(self):
+        """Do a copy of an namespace list. """
+        ret = libxml2mod.xmlCopyNamespaceList(self._o)
+        if ret is None:raise treeError('xmlCopyNamespaceList() failed')
+        __tmp = xmlNs(_obj=ret)
+        return __tmp
+
+    def freeNs(self):
+        """Free up the structures associated to a namespace """
+        libxml2mod.xmlFreeNs(self._o)
+
+    def freeNsList(self):
+        """Free up all the structures associated to the chained
+           namespaces. """
+        libxml2mod.xmlFreeNsList(self._o)
+
+    def newChild(self, parent, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child list containing the TEXTs and ENTITY_REFs node will
+          be created. NOTE: @content is supposed to be a piece of XML
+          CDATA, so it allows entity references. XML special chars
+          must be escaped first by using
+          xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should
+           be used. """
+        if parent is None: parent__o = None
+        else: parent__o = parent._o
+        ret = libxml2mod.xmlNewChild(parent__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNode(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocNode(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocNodeEatName(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+          @content are optional (None). NOTE: @content is supposed to
+          be a piece of XML CDATA, so it allow entities references,
+          but XML special chars need to be escaped first by using
+          xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you
+           don't need entities support. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocNodeEatName(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newDocRawNode(self, doc, name, content):
+        """Creation of a new node element within a document. @ns and
+           @content are optional (None). """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlNewDocRawNode(doc__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewDocRawNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNodeEatName(self, name):
+        """Creation of a new node element. @ns is optional (None). """
+        ret = libxml2mod.xmlNewNodeEatName(self._o, name)
+        if ret is None:raise treeError('xmlNewNodeEatName() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def newNsProp(self, node, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlNewNsProp(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlNewNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newNsPropEatName(self, node, name, value):
+        """Create a new property tagged with a namespace and carried
+           by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlNewNsPropEatName(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlNewNsPropEatName() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def newTextChild(self, parent, name, content):
+        """Creation of a new child element, added at the end of
+          @parent children list. @ns and @content parameters are
+          optional (None). If @ns is None, the newly created element
+          inherits the namespace of @parent. If @content is non None,
+          a child TEXT node will be created containing the string
+          @content. NOTE: Use xmlNewChild() if @content will contain
+          entities that need to be preserved. Use this function,
+          xmlNewTextChild(), if you need to ensure that reserved XML
+          chars that might appear in @content, such as the ampersand,
+          greater-than or less-than signs, are automatically replaced
+           by their XML escaped entity representations. """
+        if parent is None: parent__o = None
+        else: parent__o = parent._o
+        ret = libxml2mod.xmlNewTextChild(parent__o, self._o, name, content)
+        if ret is None:raise treeError('xmlNewTextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def setNs(self, node):
+        """Associate a namespace to a node, a posteriori. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        libxml2mod.xmlSetNs(node__o, self._o)
+
+    def setNsProp(self, node, name, value):
+        """Set (or reset) an attribute carried by a node. The ns
+           structure must be in scope, this is not checked """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlSetNsProp(node__o, self._o, name, value)
+        if ret is None:raise treeError('xmlSetNsProp() failed')
+        __tmp = xmlAttr(_obj=ret)
+        return __tmp
+
+    def unsetNsProp(self, node, name):
+        """Remove an attribute carried by a node. """
+        if node is None: node__o = None
+        else: node__o = node._o
+        ret = libxml2mod.xmlUnsetNsProp(node__o, self._o, name)
+        return ret
+
+    #
+    # xmlNs functions from module xpathInternals
+    #
+
+    def xpathNodeSetFreeNs(self):
+        """Namespace nodes in libxml don't match the XPath semantic.
+          In a node set the namespace nodes are duplicated and the
+          next pointer is set to the parent node in the XPath
+           semantic. Check if such a node needs to be freed """
+        libxml2mod.xmlXPathNodeSetFreeNs(self._o)
+
+class outputBuffer(ioWriteWrapper):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ioWriteWrapper.__init__(self, _obj=_obj)
+
+    #
+    # outputBuffer functions from module HTMLtree
+    #
+
+    def htmlDocContentDumpFormatOutput(self, cur, encoding, format):
+        """Dump an HTML document. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlDocContentDumpFormatOutput(self._o, cur__o, encoding, format)
+
+    def htmlDocContentDumpOutput(self, cur, encoding):
+        """Dump an HTML document. Formating return/spaces are added. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlDocContentDumpOutput(self._o, cur__o, encoding)
+
+    def htmlNodeDumpFormatOutput(self, doc, cur, encoding, format):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpFormatOutput(self._o, doc__o, cur__o, encoding, format)
+
+    def htmlNodeDumpOutput(self, doc, cur, encoding):
+        """Dump an HTML node, recursive behaviour,children are printed
+           too, and formatting returns/spaces are added. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.htmlNodeDumpOutput(self._o, doc__o, cur__o, encoding)
+
+    #
+    # outputBuffer functions from module tree
+    #
+
+    def nodeDumpOutput(self, doc, cur, level, format, encoding):
+        """Dump an XML node, recursive behaviour, children are printed
+          too. Note that @format = 1 provide node indenting only if
+          xmlIndentTreeOutput = 1 or xmlKeepBlanksDefault(0) was
+           called """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        libxml2mod.xmlNodeDumpOutput(self._o, doc__o, cur__o, level, format, encoding)
+
+    def saveFileTo(self, cur, encoding):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlSaveFileTo(self._o, cur__o, encoding)
+        return ret
+
+    def saveFormatFileTo(self, cur, encoding, format):
+        """Dump an XML document to an I/O buffer. Warning ! This call
+          xmlOutputBufferClose() on buf which is not available after
+           this call. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlSaveFormatFileTo(self._o, cur__o, encoding, format)
+        return ret
+
+    #
+    # outputBuffer functions from module xmlIO
+    #
+
+    def getContent(self):
+        """Gives a pointer to the data currently held in the output
+           buffer """
+        ret = libxml2mod.xmlOutputBufferGetContent(self._o)
+        return ret
+
+    def write(self, len, buf):
+        """Write the content of the array in the output I/O buffer
+          This routine handle the I18N transcoding from internal
+          UTF-8 The buffer is lossless, i.e. will store in case of
+           partial or delayed writes. """
+        ret = libxml2mod.xmlOutputBufferWrite(self._o, len, buf)
+        return ret
+
+    def writeString(self, str):
+        """Write the content of the string in the output I/O buffer
+          This routine handle the I18N transcoding from internal
+          UTF-8 The buffer is lossless, i.e. will store in case of
+           partial or delayed writes. """
+        ret = libxml2mod.xmlOutputBufferWriteString(self._o, str)
+        return ret
+
+class inputBuffer(ioReadWrapper):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ioReadWrapper.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeParserInputBuffer(self._o)
+        self._o = None
+
+    #
+    # inputBuffer functions from module xmlIO
+    #
+
+    def grow(self, len):
+        """Grow up the content of the input buffer, the old data are
+          preserved This routine handle the I18N transcoding to
+          internal UTF-8 This routine is used when operating the
+          parser in normal (pull) mode  TODO: one should be able to
+          remove one extra copy by copying directly onto in->buffer
+           or in->raw """
+        ret = libxml2mod.xmlParserInputBufferGrow(self._o, len)
+        return ret
+
+    def push(self, len, buf):
+        """Push the content of the arry in the input buffer This
+          routine handle the I18N transcoding to internal UTF-8 This
+          is used when operating the parser in progressive (push)
+           mode. """
+        ret = libxml2mod.xmlParserInputBufferPush(self._o, len, buf)
+        return ret
+
+    def read(self, len):
+        """Refresh the content of the input buffer, the old data are
+          considered consumed This routine handle the I18N
+           transcoding to internal UTF-8 """
+        ret = libxml2mod.xmlParserInputBufferRead(self._o, len)
+        return ret
+
+    #
+    # inputBuffer functions from module xmlreader
+    #
+
+    def Setup(self, reader, URL, encoding, options):
+        """Setup an XML reader with new options """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSetup(reader__o, self._o, URL, encoding, options)
+        return ret
+
+    def newTextReader(self, URI):
+        """Create an xmlTextReader structure fed with @input """
+        ret = libxml2mod.xmlNewTextReader(self._o, URI)
+        if ret is None:raise treeError('xmlNewTextReader() failed')
+        __tmp = xmlTextReader(_obj=ret)
+        __tmp.input = self
+        return __tmp
+
+class xmlReg:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRegFreeRegexp(self._o)
+        self._o = None
+
+    #
+    # xmlReg functions from module xmlregexp
+    #
+
+    def regexpExec(self, content):
+        """Check if the regular expression generates the value """
+        ret = libxml2mod.xmlRegexpExec(self._o, content)
+        return ret
+
+    def regexpIsDeterminist(self):
+        """Check if the regular expression is determinist """
+        ret = libxml2mod.xmlRegexpIsDeterminist(self._o)
+        return ret
+
+    def regexpPrint(self, output):
+        """Print the content of the compiled regular expression """
+        libxml2mod.xmlRegexpPrint(output, self._o)
+
+class relaxNgParserCtxt:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFreeParserCtxt(self._o)
+        self._o = None
+
+    #
+    # relaxNgParserCtxt functions from module relaxng
+    #
+
+    def relaxNGParse(self):
+        """parse a schema definition resource and build an internal
+           XML Shema struture which can be used to validate instances. """
+        ret = libxml2mod.xmlRelaxNGParse(self._o)
+        if ret is None:raise parserError('xmlRelaxNGParse() failed')
+        __tmp = relaxNgSchema(_obj=ret)
+        return __tmp
+
+    def relaxParserSetFlag(self, flags):
+        """Semi private function used to pass informations to a parser
+           context which are a combination of xmlRelaxNGParserFlag . """
+        ret = libxml2mod.xmlRelaxParserSetFlag(self._o, flags)
+        return ret
+
+class relaxNgSchema:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFree(self._o)
+        self._o = None
+
+    #
+    # relaxNgSchema functions from module relaxng
+    #
+
+    def relaxNGDump(self, output):
+        """Dump a RelaxNG structure back """
+        libxml2mod.xmlRelaxNGDump(output, self._o)
+
+    def relaxNGDumpTree(self, output):
+        """Dump the transformed RelaxNG tree. """
+        libxml2mod.xmlRelaxNGDumpTree(output, self._o)
+
+    def relaxNGNewValidCtxt(self):
+        """Create an XML RelaxNGs validation context based on the
+           given schema """
+        ret = libxml2mod.xmlRelaxNGNewValidCtxt(self._o)
+        if ret is None:raise treeError('xmlRelaxNGNewValidCtxt() failed')
+        __tmp = relaxNgValidCtxt(_obj=ret)
+        __tmp.schema = self
+        return __tmp
+
+    #
+    # relaxNgSchema functions from module xmlreader
+    #
+
+    def RelaxNGSetSchema(self, reader):
+        """Use RelaxNG to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then RelaxNG validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderRelaxNGSetSchema(reader__o, self._o)
+        return ret
+
+class relaxNgValidCtxt(relaxNgValidCtxtCore):
+    def __init__(self, _obj=None):
+        self.schema = None
+        self._o = _obj
+        relaxNgValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlRelaxNGFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # relaxNgValidCtxt functions from module relaxng
+    #
+
+    def relaxNGValidateDoc(self, doc):
+        """Validate a document tree in memory. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlRelaxNGValidateDoc(self._o, doc__o)
+        return ret
+
+    def relaxNGValidateFullElement(self, doc, elem):
+        """Validate a full subtree when
+          xmlRelaxNGValidatePushElement() returned 0 and the content
+           of the node has been expanded. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidateFullElement(self._o, doc__o, elem__o)
+        return ret
+
+    def relaxNGValidatePopElement(self, doc, elem):
+        """Pop the element end from the RelaxNG validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePopElement(self._o, doc__o, elem__o)
+        return ret
+
+    def relaxNGValidatePushCData(self, data, len):
+        """check the CData parsed for validation in the current stack """
+        ret = libxml2mod.xmlRelaxNGValidatePushCData(self._o, data, len)
+        return ret
+
+    def relaxNGValidatePushElement(self, doc, elem):
+        """Push a new element start on the RelaxNG validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlRelaxNGValidatePushElement(self._o, doc__o, elem__o)
+        return ret
+
+    #
+    # relaxNgValidCtxt functions from module xmlreader
+    #
+
+    def RelaxNGValidateCtxt(self, reader, options):
+        """Use RelaxNG schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then RelaxNG schema validation is
+           deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderRelaxNGValidateCtxt(reader__o, self._o, options)
+        return ret
+
+class SchemaParserCtxt:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFreeParserCtxt(self._o)
+        self._o = None
+
+    #
+    # SchemaParserCtxt functions from module xmlschemas
+    #
+
+    def schemaParse(self):
+        """parse a schema definition resource and build an internal
+           XML Shema struture which can be used to validate instances. """
+        ret = libxml2mod.xmlSchemaParse(self._o)
+        if ret is None:raise parserError('xmlSchemaParse() failed')
+        __tmp = Schema(_obj=ret)
+        return __tmp
+
+class Schema:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFree(self._o)
+        self._o = None
+
+    #
+    # Schema functions from module xmlreader
+    #
+
+    def SetSchema(self, reader):
+        """Use XSD Schema to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then Schema validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSetSchema(reader__o, self._o)
+        return ret
+
+    #
+    # Schema functions from module xmlschemas
+    #
+
+    def schemaDump(self, output):
+        """Dump a Schema structure. """
+        libxml2mod.xmlSchemaDump(output, self._o)
+
+    def schemaNewValidCtxt(self):
+        """Create an XML Schemas validation context based on the given
+           schema. """
+        ret = libxml2mod.xmlSchemaNewValidCtxt(self._o)
+        if ret is None:raise treeError('xmlSchemaNewValidCtxt() failed')
+        __tmp = SchemaValidCtxt(_obj=ret)
+        __tmp.schema = self
+        return __tmp
+
+class SchemaValidCtxt(SchemaValidCtxtCore):
+    def __init__(self, _obj=None):
+        self.schema = None
+        self._o = _obj
+        SchemaValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlSchemaFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # SchemaValidCtxt functions from module xmlreader
+    #
+
+    def SchemaValidateCtxt(self, reader, options):
+        """Use W3C XSD schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then XML Schema validation is
+           deactivated. """
+        if reader is None: reader__o = None
+        else: reader__o = reader._o
+        ret = libxml2mod.xmlTextReaderSchemaValidateCtxt(reader__o, self._o, options)
+        return ret
+
+    #
+    # SchemaValidCtxt functions from module xmlschemas
+    #
+
+    def schemaIsValid(self):
+        """Check if any error was detected during validation. """
+        ret = libxml2mod.xmlSchemaIsValid(self._o)
+        return ret
+
+    def schemaSetValidOptions(self, options):
+        """Sets the options to be used during the validation. """
+        ret = libxml2mod.xmlSchemaSetValidOptions(self._o, options)
+        return ret
+
+    def schemaValidCtxtGetOptions(self):
+        """Get the validation context options. """
+        ret = libxml2mod.xmlSchemaValidCtxtGetOptions(self._o)
+        return ret
+
+    def schemaValidCtxtGetParserCtxt(self):
+        """allow access to the parser context of the schema validation
+           context """
+        ret = libxml2mod.xmlSchemaValidCtxtGetParserCtxt(self._o)
+        if ret is None:raise parserError('xmlSchemaValidCtxtGetParserCtxt() failed')
+        __tmp = parserCtxt(_obj=ret)
+        return __tmp
+
+    def schemaValidateDoc(self, doc):
+        """Validate a document tree in memory. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlSchemaValidateDoc(self._o, doc__o)
+        return ret
+
+    def schemaValidateFile(self, filename, options):
+        """Do a schemas validation of the given resource, it will use
+           the SAX streamable validation internally. """
+        ret = libxml2mod.xmlSchemaValidateFile(self._o, filename, options)
+        return ret
+
+    def schemaValidateOneElement(self, elem):
+        """Validate a branch of a tree, starting with the given @elem. """
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlSchemaValidateOneElement(self._o, elem__o)
+        return ret
+
+    def schemaValidateSetFilename(self, filename):
+        """Workaround to provide file error reporting information when
+           this is not provided by current APIs """
+        libxml2mod.xmlSchemaValidateSetFilename(self._o, filename)
+
+class xmlTextReaderLocator:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    #
+    # xmlTextReaderLocator functions from module xmlreader
+    #
+
+    def BaseURI(self):
+        """Obtain the base URI for the given locator. """
+        ret = libxml2mod.xmlTextReaderLocatorBaseURI(self._o)
+        return ret
+
+    def LineNumber(self):
+        """Obtain the line number for the given locator. """
+        ret = libxml2mod.xmlTextReaderLocatorLineNumber(self._o)
+        return ret
+
+class xmlTextReader(xmlTextReaderCore):
+    def __init__(self, _obj=None):
+        self.input = None
+        self._o = _obj
+        xmlTextReaderCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeTextReader(self._o)
+        self._o = None
+
+    #
+    # xmlTextReader functions from module xmlreader
+    #
+
+    def AttributeCount(self):
+        """Provides the number of attributes of the current node """
+        ret = libxml2mod.xmlTextReaderAttributeCount(self._o)
+        return ret
+
+    def BaseUri(self):
+        """The base URI of the node. """
+        ret = libxml2mod.xmlTextReaderConstBaseUri(self._o)
+        return ret
+
+    def ByteConsumed(self):
+        """This function provides the current index of the parser used
+          by the reader, relative to the start of the current entity.
+          This function actually just wraps a call to
+          xmlBytesConsumed() for the parser context associated with
+           the reader. See xmlBytesConsumed() for more information. """
+        ret = libxml2mod.xmlTextReaderByteConsumed(self._o)
+        return ret
+
+    def Close(self):
+        """This method releases any resources allocated by the current
+          instance changes the state to Closed and close any
+           underlying input. """
+        ret = libxml2mod.xmlTextReaderClose(self._o)
+        return ret
+
+    def CurrentDoc(self):
+        """Hacking interface allowing to get the xmlDocPtr
+          correponding to the current document being accessed by the
+          xmlTextReader. NOTE: as a result of this call, the reader
+          will not destroy the associated XML document and calling
+          xmlFreeDoc() on the result is needed once the reader
+           parsing has finished. """
+        ret = libxml2mod.xmlTextReaderCurrentDoc(self._o)
+        if ret is None:raise treeError('xmlTextReaderCurrentDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def CurrentNode(self):
+        """Hacking interface allowing to get the xmlNodePtr
+          correponding to the current node being accessed by the
+          xmlTextReader. This is dangerous because the underlying
+           node may be destroyed on the next Reads. """
+        ret = libxml2mod.xmlTextReaderCurrentNode(self._o)
+        if ret is None:raise treeError('xmlTextReaderCurrentNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def Depth(self):
+        """The depth of the node in the tree. """
+        ret = libxml2mod.xmlTextReaderDepth(self._o)
+        return ret
+
+    def Encoding(self):
+        """Determine the encoding of the document being read. """
+        ret = libxml2mod.xmlTextReaderConstEncoding(self._o)
+        return ret
+
+    def Expand(self):
+        """Reads the contents of the current node and the full
+          subtree. It then makes the subtree available until the next
+           xmlTextReaderRead() call """
+        ret = libxml2mod.xmlTextReaderExpand(self._o)
+        if ret is None:raise treeError('xmlTextReaderExpand() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def GetAttribute(self, name):
+        """Provides the value of the attribute with the specified
+           qualified name. """
+        ret = libxml2mod.xmlTextReaderGetAttribute(self._o, name)
+        return ret
+
+    def GetAttributeNo(self, no):
+        """Provides the value of the attribute with the specified
+           index relative to the containing element. """
+        ret = libxml2mod.xmlTextReaderGetAttributeNo(self._o, no)
+        return ret
+
+    def GetAttributeNs(self, localName, namespaceURI):
+        """Provides the value of the specified attribute """
+        ret = libxml2mod.xmlTextReaderGetAttributeNs(self._o, localName, namespaceURI)
+        return ret
+
+    def GetParserColumnNumber(self):
+        """Provide the column number of the current parsing point. """
+        ret = libxml2mod.xmlTextReaderGetParserColumnNumber(self._o)
+        return ret
+
+    def GetParserLineNumber(self):
+        """Provide the line number of the current parsing point. """
+        ret = libxml2mod.xmlTextReaderGetParserLineNumber(self._o)
+        return ret
+
+    def GetParserProp(self, prop):
+        """Read the parser internal property. """
+        ret = libxml2mod.xmlTextReaderGetParserProp(self._o, prop)
+        return ret
+
+    def GetRemainder(self):
+        """Method to get the remainder of the buffered XML. this
+          method stops the parser, set its state to End Of File and
+          return the input stream with what is left that the parser
+          did not use.  The implementation is not good, the parser
+          certainly procgressed past what's left in reader->input,
+          and there is an allocation problem. Best would be to
+           rewrite it differently. """
+        ret = libxml2mod.xmlTextReaderGetRemainder(self._o)
+        if ret is None:raise treeError('xmlTextReaderGetRemainder() failed')
+        __tmp = inputBuffer(_obj=ret)
+        return __tmp
+
+    def HasAttributes(self):
+        """Whether the node has attributes. """
+        ret = libxml2mod.xmlTextReaderHasAttributes(self._o)
+        return ret
+
+    def HasValue(self):
+        """Whether the node can have a text value. """
+        ret = libxml2mod.xmlTextReaderHasValue(self._o)
+        return ret
+
+    def IsDefault(self):
+        """Whether an Attribute  node was generated from the default
+           value defined in the DTD or schema. """
+        ret = libxml2mod.xmlTextReaderIsDefault(self._o)
+        return ret
+
+    def IsEmptyElement(self):
+        """Check if the current node is empty """
+        ret = libxml2mod.xmlTextReaderIsEmptyElement(self._o)
+        return ret
+
+    def IsNamespaceDecl(self):
+        """Determine whether the current node is a namespace
+           declaration rather than a regular attribute. """
+        ret = libxml2mod.xmlTextReaderIsNamespaceDecl(self._o)
+        return ret
+
+    def IsValid(self):
+        """Retrieve the validity status from the parser context """
+        ret = libxml2mod.xmlTextReaderIsValid(self._o)
+        return ret
+
+    def LocalName(self):
+        """The local name of the node. """
+        ret = libxml2mod.xmlTextReaderConstLocalName(self._o)
+        return ret
+
+    def LookupNamespace(self, prefix):
+        """Resolves a namespace prefix in the scope of the current
+           element. """
+        ret = libxml2mod.xmlTextReaderLookupNamespace(self._o, prefix)
+        return ret
+
+    def MoveToAttribute(self, name):
+        """Moves the position of the current instance to the attribute
+           with the specified qualified name. """
+        ret = libxml2mod.xmlTextReaderMoveToAttribute(self._o, name)
+        return ret
+
+    def MoveToAttributeNo(self, no):
+        """Moves the position of the current instance to the attribute
+          with the specified index relative to the containing element. """
+        ret = libxml2mod.xmlTextReaderMoveToAttributeNo(self._o, no)
+        return ret
+
+    def MoveToAttributeNs(self, localName, namespaceURI):
+        """Moves the position of the current instance to the attribute
+           with the specified local name and namespace URI. """
+        ret = libxml2mod.xmlTextReaderMoveToAttributeNs(self._o, localName, namespaceURI)
+        return ret
+
+    def MoveToElement(self):
+        """Moves the position of the current instance to the node that
+           contains the current Attribute  node. """
+        ret = libxml2mod.xmlTextReaderMoveToElement(self._o)
+        return ret
+
+    def MoveToFirstAttribute(self):
+        """Moves the position of the current instance to the first
+           attribute associated with the current node. """
+        ret = libxml2mod.xmlTextReaderMoveToFirstAttribute(self._o)
+        return ret
+
+    def MoveToNextAttribute(self):
+        """Moves the position of the current instance to the next
+           attribute associated with the current node. """
+        ret = libxml2mod.xmlTextReaderMoveToNextAttribute(self._o)
+        return ret
+
+    def Name(self):
+        """The qualified name of the node, equal to Prefix :LocalName. """
+        ret = libxml2mod.xmlTextReaderConstName(self._o)
+        return ret
+
+    def NamespaceUri(self):
+        """The URI defining the namespace associated with the node. """
+        ret = libxml2mod.xmlTextReaderConstNamespaceUri(self._o)
+        return ret
+
+    def NewDoc(self, cur, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML in-memory document.
+          The parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewDoc(self._o, cur, URL, encoding, options)
+        return ret
+
+    def NewFd(self, fd, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML from a file
+          descriptor. NOTE that the file descriptor will not be
+          closed when the reader is closed or reset. The parsing
+          flags @options are a combination of xmlParserOption. This
+           reuses the existing @reader xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewFd(self._o, fd, URL, encoding, options)
+        return ret
+
+    def NewFile(self, filename, encoding, options):
+        """parse an XML file from the filesystem or the network. The
+          parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewFile(self._o, filename, encoding, options)
+        return ret
+
+    def NewMemory(self, buffer, size, URL, encoding, options):
+        """Setup an xmltextReader to parse an XML in-memory document.
+          The parsing flags @options are a combination of
+          xmlParserOption. This reuses the existing @reader
+           xmlTextReader. """
+        ret = libxml2mod.xmlReaderNewMemory(self._o, buffer, size, URL, encoding, options)
+        return ret
+
+    def NewWalker(self, doc):
+        """Setup an xmltextReader to parse a preparsed XML document.
+           This reuses the existing @reader xmlTextReader. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlReaderNewWalker(self._o, doc__o)
+        return ret
+
+    def Next(self):
+        """Skip to the node following the current one in document
+           order while avoiding the subtree if any. """
+        ret = libxml2mod.xmlTextReaderNext(self._o)
+        return ret
+
+    def NextSibling(self):
+        """Skip to the node following the current one in document
+          order while avoiding the subtree if any. Currently
+           implemented only for Readers built on a document """
+        ret = libxml2mod.xmlTextReaderNextSibling(self._o)
+        return ret
+
+    def NodeType(self):
+        """Get the node type of the current node Reference:
+          http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/Xm
+          lNodeType.html """
+        ret = libxml2mod.xmlTextReaderNodeType(self._o)
+        return ret
+
+    def Normalization(self):
+        """The value indicating whether to normalize white space and
+          attribute values. Since attribute value and end of line
+          normalizations are a MUST in the XML specification only the
+          value true is accepted. The broken bahaviour of accepting
+          out of range character entities like &#0; is of course not
+           supported either. """
+        ret = libxml2mod.xmlTextReaderNormalization(self._o)
+        return ret
+
+    def Prefix(self):
+        """A shorthand reference to the namespace associated with the
+           node. """
+        ret = libxml2mod.xmlTextReaderConstPrefix(self._o)
+        return ret
+
+    def Preserve(self):
+        """This tells the XML Reader to preserve the current node. The
+          caller must also use xmlTextReaderCurrentDoc() to keep an
+           handle on the resulting document once parsing has finished """
+        ret = libxml2mod.xmlTextReaderPreserve(self._o)
+        if ret is None:raise treeError('xmlTextReaderPreserve() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def QuoteChar(self):
+        """The quotation mark character used to enclose the value of
+           an attribute. """
+        ret = libxml2mod.xmlTextReaderQuoteChar(self._o)
+        return ret
+
+    def Read(self):
+        """Moves the position of the current instance to the next node
+           in the stream, exposing its properties. """
+        ret = libxml2mod.xmlTextReaderRead(self._o)
+        return ret
+
+    def ReadAttributeValue(self):
+        """Parses an attribute value into one or more Text and
+           EntityReference nodes. """
+        ret = libxml2mod.xmlTextReaderReadAttributeValue(self._o)
+        return ret
+
+    def ReadInnerXml(self):
+        """Reads the contents of the current node, including child
+           nodes and markup. """
+        ret = libxml2mod.xmlTextReaderReadInnerXml(self._o)
+        return ret
+
+    def ReadOuterXml(self):
+        """Reads the contents of the current node, including child
+           nodes and markup. """
+        ret = libxml2mod.xmlTextReaderReadOuterXml(self._o)
+        return ret
+
+    def ReadState(self):
+        """Gets the read state of the reader. """
+        ret = libxml2mod.xmlTextReaderReadState(self._o)
+        return ret
+
+    def ReadString(self):
+        """Reads the contents of an element or a text node as a string. """
+        ret = libxml2mod.xmlTextReaderReadString(self._o)
+        return ret
+
+    def RelaxNGSetSchema(self, schema):
+        """Use RelaxNG to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then RelaxNG validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if schema is None: schema__o = None
+        else: schema__o = schema._o
+        ret = libxml2mod.xmlTextReaderRelaxNGSetSchema(self._o, schema__o)
+        return ret
+
+    def RelaxNGValidate(self, rng):
+        """Use RelaxNG schema to validate the document as it is
+          processed. Activation is only possible before the first
+          Read(). If @rng is None, then RelaxNG schema validation is
+           deactivated. """
+        ret = libxml2mod.xmlTextReaderRelaxNGValidate(self._o, rng)
+        return ret
+
+    def RelaxNGValidateCtxt(self, ctxt, options):
+        """Use RelaxNG schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then RelaxNG schema validation is
+           deactivated. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlTextReaderRelaxNGValidateCtxt(self._o, ctxt__o, options)
+        return ret
+
+    def SchemaValidate(self, xsd):
+        """Use W3C XSD schema to validate the document as it is
+          processed. Activation is only possible before the first
+          Read(). If @xsd is None, then XML Schema validation is
+           deactivated. """
+        ret = libxml2mod.xmlTextReaderSchemaValidate(self._o, xsd)
+        return ret
+
+    def SchemaValidateCtxt(self, ctxt, options):
+        """Use W3C XSD schema context to validate the document as it
+          is processed. Activation is only possible before the first
+          Read(). If @ctxt is None, then XML Schema validation is
+           deactivated. """
+        if ctxt is None: ctxt__o = None
+        else: ctxt__o = ctxt._o
+        ret = libxml2mod.xmlTextReaderSchemaValidateCtxt(self._o, ctxt__o, options)
+        return ret
+
+    def SetParserProp(self, prop, value):
+        """Change the parser processing behaviour by changing some of
+          its internal properties. Note that some properties can only
+           be changed before any read has been done. """
+        ret = libxml2mod.xmlTextReaderSetParserProp(self._o, prop, value)
+        return ret
+
+    def SetSchema(self, schema):
+        """Use XSD Schema to validate the document as it is processed.
+          Activation is only possible before the first Read(). if
+          @schema is None, then Schema validation is desactivated. @
+          The @schema should not be freed until the reader is
+           deallocated or its use has been deactivated. """
+        if schema is None: schema__o = None
+        else: schema__o = schema._o
+        ret = libxml2mod.xmlTextReaderSetSchema(self._o, schema__o)
+        return ret
+
+    def Setup(self, input, URL, encoding, options):
+        """Setup an XML reader with new options """
+        if input is None: input__o = None
+        else: input__o = input._o
+        ret = libxml2mod.xmlTextReaderSetup(self._o, input__o, URL, encoding, options)
+        return ret
+
+    def Standalone(self):
+        """Determine the standalone status of the document being read. """
+        ret = libxml2mod.xmlTextReaderStandalone(self._o)
+        return ret
+
+    def String(self, str):
+        """Get an interned string from the reader, allows for example
+           to speedup string name comparisons """
+        ret = libxml2mod.xmlTextReaderConstString(self._o, str)
+        return ret
+
+    def Value(self):
+        """Provides the text value of the node if present """
+        ret = libxml2mod.xmlTextReaderConstValue(self._o)
+        return ret
+
+    def XmlLang(self):
+        """The xml:lang scope within which the node resides. """
+        ret = libxml2mod.xmlTextReaderConstXmlLang(self._o)
+        return ret
+
+    def XmlVersion(self):
+        """Determine the XML version of the document being read. """
+        ret = libxml2mod.xmlTextReaderConstXmlVersion(self._o)
+        return ret
+
+class URI:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeURI(self._o)
+        self._o = None
+
+    # accessors for URI
+    def authority(self):
+        """Get the authority part from an URI """
+        ret = libxml2mod.xmlURIGetAuthority(self._o)
+        return ret
+
+    def fragment(self):
+        """Get the fragment part from an URI """
+        ret = libxml2mod.xmlURIGetFragment(self._o)
+        return ret
+
+    def opaque(self):
+        """Get the opaque part from an URI """
+        ret = libxml2mod.xmlURIGetOpaque(self._o)
+        return ret
+
+    def path(self):
+        """Get the path part from an URI """
+        ret = libxml2mod.xmlURIGetPath(self._o)
+        return ret
+
+    def port(self):
+        """Get the port part from an URI """
+        ret = libxml2mod.xmlURIGetPort(self._o)
+        return ret
+
+    def query(self):
+        """Get the query part from an URI """
+        ret = libxml2mod.xmlURIGetQuery(self._o)
+        return ret
+
+    def queryRaw(self):
+        """Get the raw query part from an URI (i.e. the unescaped
+           form). """
+        ret = libxml2mod.xmlURIGetQueryRaw(self._o)
+        return ret
+
+    def scheme(self):
+        """Get the scheme part from an URI """
+        ret = libxml2mod.xmlURIGetScheme(self._o)
+        return ret
+
+    def server(self):
+        """Get the server part from an URI """
+        ret = libxml2mod.xmlURIGetServer(self._o)
+        return ret
+
+    def setAuthority(self, authority):
+        """Set the authority part of an URI. """
+        libxml2mod.xmlURISetAuthority(self._o, authority)
+
+    def setFragment(self, fragment):
+        """Set the fragment part of an URI. """
+        libxml2mod.xmlURISetFragment(self._o, fragment)
+
+    def setOpaque(self, opaque):
+        """Set the opaque part of an URI. """
+        libxml2mod.xmlURISetOpaque(self._o, opaque)
+
+    def setPath(self, path):
+        """Set the path part of an URI. """
+        libxml2mod.xmlURISetPath(self._o, path)
+
+    def setPort(self, port):
+        """Set the port part of an URI. """
+        libxml2mod.xmlURISetPort(self._o, port)
+
+    def setQuery(self, query):
+        """Set the query part of an URI. """
+        libxml2mod.xmlURISetQuery(self._o, query)
+
+    def setQueryRaw(self, query_raw):
+        """Set the raw query part of an URI (i.e. the unescaped form). """
+        libxml2mod.xmlURISetQueryRaw(self._o, query_raw)
+
+    def setScheme(self, scheme):
+        """Set the scheme part of an URI. """
+        libxml2mod.xmlURISetScheme(self._o, scheme)
+
+    def setServer(self, server):
+        """Set the server part of an URI. """
+        libxml2mod.xmlURISetServer(self._o, server)
+
+    def setUser(self, user):
+        """Set the user part of an URI. """
+        libxml2mod.xmlURISetUser(self._o, user)
+
+    def user(self):
+        """Get the user part from an URI """
+        ret = libxml2mod.xmlURIGetUser(self._o)
+        return ret
+
+    #
+    # URI functions from module uri
+    #
+
+    def parseURIReference(self, str):
+        """Parse an URI reference string based on RFC 3986 and fills
+          in the appropriate fields of the @uri structure 
+           URI-reference = URI / relative-ref """
+        ret = libxml2mod.xmlParseURIReference(self._o, str)
+        return ret
+
+    def printURI(self, stream):
+        """Prints the URI in the stream @stream. """
+        libxml2mod.xmlPrintURI(stream, self._o)
+
+    def saveUri(self):
+        """Save the URI as an escaped string """
+        ret = libxml2mod.xmlSaveUri(self._o)
+        return ret
+
+class ValidCtxt(ValidCtxtCore):
+    def __init__(self, _obj=None):
+        self._o = _obj
+        ValidCtxtCore.__init__(self, _obj=_obj)
+
+    def __del__(self):
+        if self._o != None:
+            libxml2mod.xmlFreeValidCtxt(self._o)
+        self._o = None
+
+    #
+    # ValidCtxt functions from module valid
+    #
+
+    def validCtxtNormalizeAttributeValue(self, doc, elem, name, value):
+        """Does the validation related extra step of the normalization
+          of attribute values:  If the declared value is not CDATA,
+          then the XML processor must further process the normalized
+          attribute value by discarding any leading and trailing
+          space (#x20) characters, and by replacing sequences of
+          space (#x20) characters by single space (#x20) character. 
+          Also  check VC: Standalone Document Declaration in P32, and
+           update ctxt->valid accordingly """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidCtxtNormalizeAttributeValue(self._o, doc__o, elem__o, name, value)
+        return ret
+
+    def validateDocument(self, doc):
+        """Try to validate the document instance  basically it does
+          the all the checks described by the XML Rec i.e. validates
+          the internal and external subset (if present) and validate
+           the document tree. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDocument(self._o, doc__o)
+        return ret
+
+    def validateDocumentFinal(self, doc):
+        """Does the final step for the document validation once all
+          the incremental validation steps have been completed 
+          basically it does the following checks described by the XML
+          Rec  Check all the IDREF/IDREFS attributes definition for
+           validity """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDocumentFinal(self._o, doc__o)
+        return ret
+
+    def validateDtd(self, doc, dtd):
+        """Try to validate the document against the dtd instance 
+          Basically it does check all the definitions in the DtD.
+          Note the the internal subset (if present) is de-coupled
+          (i.e. not used), which could give problems if ID or IDREF
+           is present. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if dtd is None: dtd__o = None
+        else: dtd__o = dtd._o
+        ret = libxml2mod.xmlValidateDtd(self._o, doc__o, dtd__o)
+        return ret
+
+    def validateDtdFinal(self, doc):
+        """Does the final step for the dtds validation once all the
+          subsets have been parsed  basically it does the following
+          checks described by the XML Rec - check that ENTITY and
+          ENTITIES type attributes default or possible values matches
+          one of the defined entities. - check that NOTATION type
+          attributes default or possible values matches one of the
+           defined notations. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateDtdFinal(self._o, doc__o)
+        return ret
+
+    def validateElement(self, doc, elem):
+        """Try to validate the subtree under an element """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateElement(self._o, doc__o, elem__o)
+        return ret
+
+    def validateNotationUse(self, doc, notationName):
+        """Validate that the given name match a notation declaration.
+           - [ VC: Notation Declared ] """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateNotationUse(self._o, doc__o, notationName)
+        return ret
+
+    def validateOneAttribute(self, doc, elem, attr, value):
+        """Try to validate a single attribute for an element basically
+          it does the following checks as described by the XML-1.0
+          recommendation: - [ VC: Attribute Value Type ] - [ VC:
+          Fixed Attribute Default ] - [ VC: Entity Name ] - [ VC:
+          Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC: Entity
+          Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if attr is None: attr__o = None
+        else: attr__o = attr._o
+        ret = libxml2mod.xmlValidateOneAttribute(self._o, doc__o, elem__o, attr__o, value)
+        return ret
+
+    def validateOneElement(self, doc, elem):
+        """Try to validate a single element and it's attributes,
+          basically it does the following checks as described by the
+          XML-1.0 recommendation: - [ VC: Element Valid ] - [ VC:
+          Required Attribute ] Then call xmlValidateOneAttribute()
+          for each attribute present.  The ID/IDREF checkings are
+           done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidateOneElement(self._o, doc__o, elem__o)
+        return ret
+
+    def validateOneNamespace(self, doc, elem, prefix, ns, value):
+        """Try to validate a single namespace declaration for an
+          element basically it does the following checks as described
+          by the XML-1.0 recommendation: - [ VC: Attribute Value Type
+          ] - [ VC: Fixed Attribute Default ] - [ VC: Entity Name ] -
+          [ VC: Name Token ] - [ VC: ID ] - [ VC: IDREF ] - [ VC:
+          Entity Name ] - [ VC: Notation Attributes ]  The ID/IDREF
+           uniqueness and matching are done separately """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        if ns is None: ns__o = None
+        else: ns__o = ns._o
+        ret = libxml2mod.xmlValidateOneNamespace(self._o, doc__o, elem__o, prefix, ns__o, value)
+        return ret
+
+    def validatePopElement(self, doc, elem, qname):
+        """Pop the element end from the validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePopElement(self._o, doc__o, elem__o, qname)
+        return ret
+
+    def validatePushCData(self, data, len):
+        """check the CData parsed for validation in the current stack """
+        ret = libxml2mod.xmlValidatePushCData(self._o, data, len)
+        return ret
+
+    def validatePushElement(self, doc, elem, qname):
+        """Push a new element start on the validation stack. """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        if elem is None: elem__o = None
+        else: elem__o = elem._o
+        ret = libxml2mod.xmlValidatePushElement(self._o, doc__o, elem__o, qname)
+        return ret
+
+    def validateRoot(self, doc):
+        """Try to validate a the root element basically it does the
+          following check as described by the XML-1.0 recommendation:
+          - [ VC: Root Element Type ] it doesn't try to recurse or
+           apply other check to the element """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        ret = libxml2mod.xmlValidateRoot(self._o, doc__o)
+        return ret
+
+class xpathContext:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for xpathContext
+    def contextDoc(self):
+        """Get the doc from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextDoc(self._o)
+        if ret is None:raise xpathError('xmlXPathGetContextDoc() failed')
+        __tmp = xmlDoc(_obj=ret)
+        return __tmp
+
+    def contextNode(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextNode(self._o)
+        if ret is None:raise xpathError('xmlXPathGetContextNode() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def contextPosition(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextPosition(self._o)
+        return ret
+
+    def contextSize(self):
+        """Get the current node from an xpathContext """
+        ret = libxml2mod.xmlXPathGetContextSize(self._o)
+        return ret
+
+    def function(self):
+        """Get the current function name xpathContext """
+        ret = libxml2mod.xmlXPathGetFunction(self._o)
+        return ret
+
+    def functionURI(self):
+        """Get the current function name URI xpathContext """
+        ret = libxml2mod.xmlXPathGetFunctionURI(self._o)
+        return ret
+
+    def setContextDoc(self, doc):
+        """Set the doc of an xpathContext """
+        if doc is None: doc__o = None
+        else: doc__o = doc._o
+        libxml2mod.xmlXPathSetContextDoc(self._o, doc__o)
+
+    def setContextNode(self, node):
+        """Set the current node of an xpathContext """
+        if node is None: node__o = None
+        else: node__o = node._o
+        libxml2mod.xmlXPathSetContextNode(self._o, node__o)
+
+    #
+    # xpathContext functions from module python
+    #
+
+    def registerXPathFunction(self, name, ns_uri, f):
+        """Register a Python written function to the XPath interpreter """
+        ret = libxml2mod.xmlRegisterXPathFunction(self._o, name, ns_uri, f)
+        return ret
+
+    def xpathRegisterVariable(self, name, ns_uri, value):
+        """Register a variable with the XPath context """
+        ret = libxml2mod.xmlXPathRegisterVariable(self._o, name, ns_uri, value)
+        return ret
+
+    #
+    # xpathContext functions from module xpath
+    #
+
+    def xpathContextSetCache(self, active, value, options):
+        """Creates/frees an object cache on the XPath context. If
+          activates XPath objects (xmlXPathObject) will be cached
+          internally to be reused. @options: 0: This will set the
+          XPath object caching: @value: This will set the maximum
+          number of XPath objects to be cached per slot There are 5
+          slots for: node-set, string, number, boolean, and misc
+          objects. Use <0 for the default number (100). Other values
+           for @options have currently no effect. """
+        ret = libxml2mod.xmlXPathContextSetCache(self._o, active, value, options)
+        return ret
+
+    def xpathEval(self, str):
+        """Evaluate the XPath Location Path in the given context. """
+        ret = libxml2mod.xmlXPathEval(str, self._o)
+        if ret is None:raise xpathError('xmlXPathEval() failed')
+        return xpathObjectRet(ret)
+
+    def xpathEvalExpression(self, str):
+        """Evaluate the XPath expression in the given context. """
+        ret = libxml2mod.xmlXPathEvalExpression(str, self._o)
+        if ret is None:raise xpathError('xmlXPathEvalExpression() failed')
+        return xpathObjectRet(ret)
+
+    def xpathFreeContext(self):
+        """Free up an xmlXPathContext """
+        libxml2mod.xmlXPathFreeContext(self._o)
+
+    #
+    # xpathContext functions from module xpathInternals
+    #
+
+    def xpathNewParserContext(self, str):
+        """Create a new xmlXPathParserContext """
+        ret = libxml2mod.xmlXPathNewParserContext(str, self._o)
+        if ret is None:raise xpathError('xmlXPathNewParserContext() failed')
+        __tmp = xpathParserContext(_obj=ret)
+        return __tmp
+
+    def xpathNsLookup(self, prefix):
+        """Search in the namespace declaration array of the context
+           for the given namespace name associated to the given prefix """
+        ret = libxml2mod.xmlXPathNsLookup(self._o, prefix)
+        return ret
+
+    def xpathRegisterAllFunctions(self):
+        """Registers all default XPath functions in this context """
+        libxml2mod.xmlXPathRegisterAllFunctions(self._o)
+
+    def xpathRegisterNs(self, prefix, ns_uri):
+        """Register a new namespace. If @ns_uri is None it unregisters
+           the namespace """
+        ret = libxml2mod.xmlXPathRegisterNs(self._o, prefix, ns_uri)
+        return ret
+
+    def xpathRegisteredFuncsCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           functions """
+        libxml2mod.xmlXPathRegisteredFuncsCleanup(self._o)
+
+    def xpathRegisteredNsCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           variables """
+        libxml2mod.xmlXPathRegisteredNsCleanup(self._o)
+
+    def xpathRegisteredVariablesCleanup(self):
+        """Cleanup the XPath context data associated to registered
+           variables """
+        libxml2mod.xmlXPathRegisteredVariablesCleanup(self._o)
+
+    def xpathVariableLookup(self, name):
+        """Search in the Variable array of the context for the given
+           variable value. """
+        ret = libxml2mod.xmlXPathVariableLookup(self._o, name)
+        if ret is None:raise xpathError('xmlXPathVariableLookup() failed')
+        return xpathObjectRet(ret)
+
+    def xpathVariableLookupNS(self, name, ns_uri):
+        """Search in the Variable array of the context for the given
+           variable value. """
+        ret = libxml2mod.xmlXPathVariableLookupNS(self._o, name, ns_uri)
+        if ret is None:raise xpathError('xmlXPathVariableLookupNS() failed')
+        return xpathObjectRet(ret)
+
+    #
+    # xpathContext functions from module xpointer
+    #
+
+    def xpointerEval(self, str):
+        """Evaluate the XPath Location Path in the given context. """
+        ret = libxml2mod.xmlXPtrEval(str, self._o)
+        if ret is None:raise treeError('xmlXPtrEval() failed')
+        return xpathObjectRet(ret)
+
+class xpathParserContext:
+    def __init__(self, _obj=None):
+        if _obj != None:self._o = _obj;return
+        self._o = None
+
+    # accessors for xpathParserContext
+    def context(self):
+        """Get the xpathContext from an xpathParserContext """
+        ret = libxml2mod.xmlXPathParserGetContext(self._o)
+        if ret is None:raise xpathError('xmlXPathParserGetContext() failed')
+        __tmp = xpathContext(_obj=ret)
+        return __tmp
+
+    #
+    # xpathParserContext functions from module xpathInternals
+    #
+
+    def xpathAddValues(self):
+        """Implement the add operation on XPath objects: The numeric
+          operators convert their operands to numbers as if by
+           calling the number function. """
+        libxml2mod.xmlXPathAddValues(self._o)
+
+    def xpathBooleanFunction(self, nargs):
+        """Implement the boolean() XPath function boolean
+          boolean(object) The boolean function converts its argument
+          to a boolean as follows: - a number is true if and only if
+          it is neither positive or negative zero nor NaN - a
+          node-set is true if and only if it is non-empty - a string
+           is true if and only if its length is non-zero """
+        libxml2mod.xmlXPathBooleanFunction(self._o, nargs)
+
+    def xpathCeilingFunction(self, nargs):
+        """Implement the ceiling() XPath function number
+          ceiling(number) The ceiling function returns the smallest
+          (closest to negative infinity) number that is not less than
+           the argument and that is an integer. """
+        libxml2mod.xmlXPathCeilingFunction(self._o, nargs)
+
+    def xpathCompareValues(self, inf, strict):
+        """Implement the compare operation on XPath objects: @arg1 <
+          @arg2    (1, 1, ... @arg1 <= @arg2   (1, 0, ... @arg1 >
+          @arg2    (0, 1, ... @arg1 >= @arg2   (0, 0, ...  When
+          neither object to be compared is a node-set and the
+          operator is <=, <, >=, >, then the objects are compared by
+          converted both objects to numbers and comparing the numbers
+          according to IEEE 754. The < comparison will be true if and
+          only if the first number is less than the second number.
+          The <= comparison will be true if and only if the first
+          number is less than or equal to the second number. The >
+          comparison will be true if and only if the first number is
+          greater than the second number. The >= comparison will be
+          true if and only if the first number is greater than or
+           equal to the second number. """
+        ret = libxml2mod.xmlXPathCompareValues(self._o, inf, strict)
+        return ret
+
+    def xpathConcatFunction(self, nargs):
+        """Implement the concat() XPath function string concat(string,
+          string, string*) The concat function returns the
+           concatenation of its arguments. """
+        libxml2mod.xmlXPathConcatFunction(self._o, nargs)
+
+    def xpathContainsFunction(self, nargs):
+        """Implement the contains() XPath function boolean
+          contains(string, string) The contains function returns true
+          if the first argument string contains the second argument
+           string, and otherwise returns false. """
+        libxml2mod.xmlXPathContainsFunction(self._o, nargs)
+
+    def xpathCountFunction(self, nargs):
+        """Implement the count() XPath function number count(node-set) """
+        libxml2mod.xmlXPathCountFunction(self._o, nargs)
+
+    def xpathDivValues(self):
+        """Implement the div operation on XPath objects @arg1 / @arg2:
+          The numeric operators convert their operands to numbers as
+           if by calling the number function. """
+        libxml2mod.xmlXPathDivValues(self._o)
+
+    def xpathEqualValues(self):
+        """Implement the equal operation on XPath objects content:
+           @arg1 == @arg2 """
+        ret = libxml2mod.xmlXPathEqualValues(self._o)
+        return ret
+
+    def xpathErr(self, error):
+        """Handle an XPath error """
+        libxml2mod.xmlXPathErr(self._o, error)
+
+    def xpathEvalExpr(self):
+        """Parse and evaluate an XPath expression in the given
+           context, then push the result on the context stack """
+        libxml2mod.xmlXPathEvalExpr(self._o)
+
+    def xpathFalseFunction(self, nargs):
+        """Implement the false() XPath function boolean false() """
+        libxml2mod.xmlXPathFalseFunction(self._o, nargs)
+
+    def xpathFloorFunction(self, nargs):
+        """Implement the floor() XPath function number floor(number)
+          The floor function returns the largest (closest to positive
+          infinity) number that is not greater than the argument and
+           that is an integer. """
+        libxml2mod.xmlXPathFloorFunction(self._o, nargs)
+
+    def xpathFreeParserContext(self):
+        """Free up an xmlXPathParserContext """
+        libxml2mod.xmlXPathFreeParserContext(self._o)
+
+    def xpathIdFunction(self, nargs):
+        """Implement the id() XPath function node-set id(object) The
+          id function selects elements by their unique ID (see [5.2.1
+          Unique IDs]). When the argument to id is of type node-set,
+          then the result is the union of the result of applying id
+          to the string value of each of the nodes in the argument
+          node-set. When the argument to id is of any other type, the
+          argument is converted to a string as if by a call to the
+          string function; the string is split into a
+          whitespace-separated list of tokens (whitespace is any
+          sequence of characters matching the production S); the
+          result is a node-set containing the elements in the same
+          document as the context node that have a unique ID equal to
+           any of the tokens in the list. """
+        libxml2mod.xmlXPathIdFunction(self._o, nargs)
+
+    def xpathLangFunction(self, nargs):
+        """Implement the lang() XPath function boolean lang(string)
+          The lang function returns true or false depending on
+          whether the language of the context node as specified by
+          xml:lang attributes is the same as or is a sublanguage of
+          the language specified by the argument string. The language
+          of the context node is determined by the value of the
+          xml:lang attribute on the context node, or, if the context
+          node has no xml:lang attribute, by the value of the
+          xml:lang attribute on the nearest ancestor of the context
+          node that has an xml:lang attribute. If there is no such
+           attribute, then lang """
+        libxml2mod.xmlXPathLangFunction(self._o, nargs)
+
+    def xpathLastFunction(self, nargs):
+        """Implement the last() XPath function number last() The last
+          function returns the number of nodes in the context node
+           list. """
+        libxml2mod.xmlXPathLastFunction(self._o, nargs)
+
+    def xpathLocalNameFunction(self, nargs):
+        """Implement the local-name() XPath function string
+          local-name(node-set?) The local-name function returns a
+          string containing the local part of the name of the node in
+          the argument node-set that is first in document order. If
+          the node-set is empty or the first node has no name, an
+          empty string is returned. If the argument is omitted it
+           defaults to the context node. """
+        libxml2mod.xmlXPathLocalNameFunction(self._o, nargs)
+
+    def xpathModValues(self):
+        """Implement the mod operation on XPath objects: @arg1 / @arg2
+          The numeric operators convert their operands to numbers as
+           if by calling the number function. """
+        libxml2mod.xmlXPathModValues(self._o)
+
+    def xpathMultValues(self):
+        """Implement the multiply operation on XPath objects: The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathMultValues(self._o)
+
+    def xpathNamespaceURIFunction(self, nargs):
+        """Implement the namespace-uri() XPath function string
+          namespace-uri(node-set?) The namespace-uri function returns
+          a string containing the namespace URI of the expanded name
+          of the node in the argument node-set that is first in
+          document order. If the node-set is empty, the first node
+          has no name, or the expanded name has no namespace URI, an
+          empty string is returned. If the argument is omitted it
+           defaults to the context node. """
+        libxml2mod.xmlXPathNamespaceURIFunction(self._o, nargs)
+
+    def xpathNextAncestor(self, cur):
+        """Traversal function for the "ancestor" direction the
+          ancestor axis contains the ancestors of the context node;
+          the ancestors of the context node consist of the parent of
+          context node and the parent's parent and so on; the nodes
+          are ordered in reverse document order; thus the parent is
+          the first node on the axis, and the parent's parent is the
+           second node on the axis """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAncestor(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAncestor() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAncestorOrSelf(self, cur):
+        """Traversal function for the "ancestor-or-self" direction he
+          ancestor-or-self axis contains the context node and
+          ancestors of the context node in reverse document order;
+          thus the context node is the first node on the axis, and
+          the context node's parent the second; parent here is
+           defined the same as with the parent axis. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAncestorOrSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAncestorOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextAttribute(self, cur):
+        """Traversal function for the "attribute" direction TODO:
+           support DTD inherited default attributes """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextAttribute(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextAttribute() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextChild(self, cur):
+        """Traversal function for the "child" direction The child axis
+          contains the children of the context node in document order. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextChild(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextChild() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendant(self, cur):
+        """Traversal function for the "descendant" direction the
+          descendant axis contains the descendants of the context
+          node in document order; a descendant is a child or a child
+           of a child and so on. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextDescendant(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextDescendant() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextDescendantOrSelf(self, cur):
+        """Traversal function for the "descendant-or-self" direction
+          the descendant-or-self axis contains the context node and
+          the descendants of the context node in document order; thus
+          the context node is the first node on the axis, and the
+          first child of the context node is the second node on the
+           axis """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextDescendantOrSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextDescendantOrSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowing(self, cur):
+        """Traversal function for the "following" direction The
+          following axis contains all nodes in the same document as
+          the context node that are after the context node in
+          document order, excluding any descendants and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in document order """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextFollowing(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextFollowing() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextFollowingSibling(self, cur):
+        """Traversal function for the "following-sibling" direction
+          The following-sibling axis contains the following siblings
+           of the context node in document order. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextFollowingSibling(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextFollowingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextNamespace(self, cur):
+        """Traversal function for the "namespace" direction the
+          namespace axis contains the namespace nodes of the context
+          node; the order of nodes on this axis is
+          implementation-defined; the axis will be empty unless the
+          context node is an element  We keep the XML namespace node
+           at the end of the list. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextNamespace(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextNamespace() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextParent(self, cur):
+        """Traversal function for the "parent" direction The parent
+          axis contains the parent of the context node, if there is
+           one. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextParent(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextParent() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPreceding(self, cur):
+        """Traversal function for the "preceding" direction the
+          preceding axis contains all nodes in the same document as
+          the context node that are before the context node in
+          document order, excluding any ancestors and excluding
+          attribute nodes and namespace nodes; the nodes are ordered
+           in reverse document order """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextPreceding(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextPreceding() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextPrecedingSibling(self, cur):
+        """Traversal function for the "preceding-sibling" direction
+          The preceding-sibling axis contains the preceding siblings
+          of the context node in reverse document order; the first
+          preceding sibling is first on the axis; the sibling
+           preceding that node is the second on the axis and so on. """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextPrecedingSibling(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextPrecedingSibling() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNextSelf(self, cur):
+        """Traversal function for the "self" direction The self axis
+           contains just the context node itself """
+        if cur is None: cur__o = None
+        else: cur__o = cur._o
+        ret = libxml2mod.xmlXPathNextSelf(self._o, cur__o)
+        if ret is None:raise xpathError('xmlXPathNextSelf() failed')
+        __tmp = xmlNode(_obj=ret)
+        return __tmp
+
+    def xpathNormalizeFunction(self, nargs):
+        """Implement the normalize-space() XPath function string
+          normalize-space(string?) The normalize-space function
+          returns the argument string with white space normalized by
+          stripping leading and trailing whitespace and replacing
+          sequences of whitespace characters by a single space.
+          Whitespace characters are the same allowed by the S
+          production in XML. If the argument is omitted, it defaults
+          to the context node converted to a string, in other words
+           the value of the context node. """
+        libxml2mod.xmlXPathNormalizeFunction(self._o, nargs)
+
+    def xpathNotEqualValues(self):
+        """Implement the equal operation on XPath objects content:
+           @arg1 == @arg2 """
+        ret = libxml2mod.xmlXPathNotEqualValues(self._o)
+        return ret
+
+    def xpathNotFunction(self, nargs):
+        """Implement the not() XPath function boolean not(boolean) The
+          not function returns true if its argument is false, and
+           false otherwise. """
+        libxml2mod.xmlXPathNotFunction(self._o, nargs)
+
+    def xpathNumberFunction(self, nargs):
+        """Implement the number() XPath function number number(object?) """
+        libxml2mod.xmlXPathNumberFunction(self._o, nargs)
+
+    def xpathParseNCName(self):
+        """parse an XML namespace non qualified name.  [NS 3] NCName
+          ::= (Letter | '_') (NCNameChar)*  [NS 4] NCNameChar ::=
+           Letter | Digit | '.' | '-' | '_' | CombiningChar | Extender """
+        ret = libxml2mod.xmlXPathParseNCName(self._o)
+        return ret
+
+    def xpathParseName(self):
+        """parse an XML name  [4] NameChar ::= Letter | Digit | '.' |
+          '-' | '_' | ':' | CombiningChar | Extender  [5] Name ::=
+           (Letter | '_' | ':') (NameChar)* """
+        ret = libxml2mod.xmlXPathParseName(self._o)
+        return ret
+
+    def xpathPopBoolean(self):
+        """Pops a boolean from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopBoolean(self._o)
+        return ret
+
+    def xpathPopNumber(self):
+        """Pops a number from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopNumber(self._o)
+        return ret
+
+    def xpathPopString(self):
+        """Pops a string from the stack, handling conversion if
+           needed. Check error with #xmlXPathCheckError. """
+        ret = libxml2mod.xmlXPathPopString(self._o)
+        return ret
+
+    def xpathPositionFunction(self, nargs):
+        """Implement the position() XPath function number position()
+          The position function returns the position of the context
+          node in the context node list. The first position is 1, and
+           so the last position will be equal to last(). """
+        libxml2mod.xmlXPathPositionFunction(self._o, nargs)
+
+    def xpathRoot(self):
+        """Initialize the context to the root of the document """
+        libxml2mod.xmlXPathRoot(self._o)
+
+    def xpathRoundFunction(self, nargs):
+        """Implement the round() XPath function number round(number)
+          The round function returns the number that is closest to
+          the argument and that is an integer. If there are two such
+           numbers, then the one that is even is returned. """
+        libxml2mod.xmlXPathRoundFunction(self._o, nargs)
+
+    def xpathStartsWithFunction(self, nargs):
+        """Implement the starts-with() XPath function boolean
+          starts-with(string, string) The starts-with function
+          returns true if the first argument string starts with the
+           second argument string, and otherwise returns false. """
+        libxml2mod.xmlXPathStartsWithFunction(self._o, nargs)
+
+    def xpathStringFunction(self, nargs):
+        """Implement the string() XPath function string
+          string(object?) The string function converts an object to a
+          string as follows: - A node-set is converted to a string by
+          returning the value of the node in the node-set that is
+          first in document order. If the node-set is empty, an empty
+          string is returned. - A number is converted to a string as
+          follows + NaN is converted to the string NaN + positive
+          zero is converted to the string 0 + negative zero is
+          converted to the string 0 + positive infinity is converted
+          to the string Infinity + negative infinity is converted to
+          the string -Infinity + if the number is an integer, the
+          number is represented in decimal form as a Number with no
+          decimal point and no leading zeros, preceded by a minus
+          sign (-) if the number is negative + otherwise, the number
+          is represented in decimal form as a Number including a
+          decimal point with at least one digit before the decimal
+          point and at least one digit after the decimal point,
+          preceded by a minus sign (-) if the number is negative;
+          there must be no leading zeros before the decimal point
+          apart possibly from the one required digit immediately
+          before the decimal point; beyond the one required digit
+          after the decimal point there must be as many, but only as
+          many, more digits as are needed to uniquely distinguish the
+          number from all other IEEE 754 numeric values. - The
+          boolean false value is converted to the string false. The
+          boolean true value is converted to the string true.  If the
+          argument is omitted, it defaults to a node-set with the
+           context node as its only member. """
+        libxml2mod.xmlXPathStringFunction(self._o, nargs)
+
+    def xpathStringLengthFunction(self, nargs):
+        """Implement the string-length() XPath function number
+          string-length(string?) The string-length returns the number
+          of characters in the string (see [3.6 Strings]). If the
+          argument is omitted, it defaults to the context node
+          converted to a string, in other words the value of the
+           context node. """
+        libxml2mod.xmlXPathStringLengthFunction(self._o, nargs)
+
+    def xpathSubValues(self):
+        """Implement the subtraction operation on XPath objects: The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathSubValues(self._o)
+
+    def xpathSubstringAfterFunction(self, nargs):
+        """Implement the substring-after() XPath function string
+          substring-after(string, string) The substring-after
+          function returns the substring of the first argument string
+          that follows the first occurrence of the second argument
+          string in the first argument string, or the empty stringi
+          if the first argument string does not contain the second
+          argument string. For example,
+          substring-after("1999/04/01","/") returns 04/01, and
+           substring-after("1999/04/01","19") returns 99/04/01. """
+        libxml2mod.xmlXPathSubstringAfterFunction(self._o, nargs)
+
+    def xpathSubstringBeforeFunction(self, nargs):
+        """Implement the substring-before() XPath function string
+          substring-before(string, string) The substring-before
+          function returns the substring of the first argument string
+          that precedes the first occurrence of the second argument
+          string in the first argument string, or the empty string if
+          the first argument string does not contain the second
+          argument string. For example,
+           substring-before("1999/04/01","/") returns 1999. """
+        libxml2mod.xmlXPathSubstringBeforeFunction(self._o, nargs)
+
+    def xpathSubstringFunction(self, nargs):
+        """Implement the substring() XPath function string
+          substring(string, number, number?) The substring function
+          returns the substring of the first argument starting at the
+          position specified in the second argument with length
+          specified in the third argument. For example,
+          substring("12345",2,3) returns "234". If the third argument
+          is not specified, it returns the substring starting at the
+          position specified in the second argument and continuing to
+          the end of the string. For example, substring("12345",2)
+          returns "2345".  More precisely, each character in the
+          string (see [3.6 Strings]) is considered to have a numeric
+          position: the position of the first character is 1, the
+          position of the second character is 2 and so on. The
+          returned substring contains those characters for which the
+          position of the character is greater than or equal to the
+          second argument and, if the third argument is specified,
+          less than the sum of the second and third arguments; the
+          comparisons and addition used for the above follow the
+          standard IEEE 754 rules. Thus: - substring("12345", 1.5,
+          2.6) returns "234" - substring("12345", 0, 3) returns "12"
+          - substring("12345", 0 div 0, 3) returns "" -
+          substring("12345", 1, 0 div 0) returns "" -
+          substring("12345", -42, 1 div 0) returns "12345" -
+           substring("12345", -1 div 0, 1 div 0) returns "" """
+        libxml2mod.xmlXPathSubstringFunction(self._o, nargs)
+
+    def xpathSumFunction(self, nargs):
+        """Implement the sum() XPath function number sum(node-set) The
+          sum function returns the sum of the values of the nodes in
+           the argument node-set. """
+        libxml2mod.xmlXPathSumFunction(self._o, nargs)
+
+    def xpathTranslateFunction(self, nargs):
+        """Implement the translate() XPath function string
+          translate(string, string, string) The translate function
+          returns the first argument string with occurrences of
+          characters in the second argument string replaced by the
+          character at the corresponding position in the third
+          argument string. For example, translate("bar","abc","ABC")
+          returns the string BAr. If there is a character in the
+          second argument string with no character at a corresponding
+          position in the third argument string (because the second
+          argument string is longer than the third argument string),
+          then occurrences of that character in the first argument
+          string are removed. For example,
+           translate("--aaa--","abc-","ABC") """
+        libxml2mod.xmlXPathTranslateFunction(self._o, nargs)
+
+    def xpathTrueFunction(self, nargs):
+        """Implement the true() XPath function boolean true() """
+        libxml2mod.xmlXPathTrueFunction(self._o, nargs)
+
+    def xpathValueFlipSign(self):
+        """Implement the unary - operation on an XPath object The
+          numeric operators convert their operands to numbers as if
+           by calling the number function. """
+        libxml2mod.xmlXPathValueFlipSign(self._o)
+
+    def xpatherror(self, file, line, no):
+        """Formats an error message. """
+        libxml2mod.xmlXPatherror(self._o, file, line, no)
+
+    #
+    # xpathParserContext functions from module xpointer
+    #
+
+    def xpointerEvalRangePredicate(self):
+        """[8]   Predicate ::=   '[' PredicateExpr ']' [9]  
+          PredicateExpr ::=   Expr  Evaluate a predicate as in
+          xmlXPathEvalPredicate() but for a Location Set instead of a
+           node set """
+        libxml2mod.xmlXPtrEvalRangePredicate(self._o)
+
+    def xpointerRangeToFunction(self, nargs):
+        """Implement the range-to() XPointer function """
+        libxml2mod.xmlXPtrRangeToFunction(self._o, nargs)
+
+# xlinkShow
+XLINK_SHOW_NONE = 0
+XLINK_SHOW_NEW = 1
+XLINK_SHOW_EMBED = 2
+XLINK_SHOW_REPLACE = 3
+
+# xmlRelaxNGParserFlag
+XML_RELAXNGP_NONE = 0
+XML_RELAXNGP_FREE_DOC = 1
+XML_RELAXNGP_CRNG = 2
+
+# xmlBufferAllocationScheme
+XML_BUFFER_ALLOC_DOUBLEIT = 1
+XML_BUFFER_ALLOC_EXACT = 2
+XML_BUFFER_ALLOC_IMMUTABLE = 3
+XML_BUFFER_ALLOC_IO = 4
+XML_BUFFER_ALLOC_HYBRID = 5
+
+# xmlParserSeverities
+XML_PARSER_SEVERITY_VALIDITY_WARNING = 1
+XML_PARSER_SEVERITY_VALIDITY_ERROR = 2
+XML_PARSER_SEVERITY_WARNING = 3
+XML_PARSER_SEVERITY_ERROR = 4
+
+# xmlAttributeDefault
+XML_ATTRIBUTE_NONE = 1
+XML_ATTRIBUTE_REQUIRED = 2
+XML_ATTRIBUTE_IMPLIED = 3
+XML_ATTRIBUTE_FIXED = 4
+
+# xmlSchemaValType
+XML_SCHEMAS_UNKNOWN = 0
+XML_SCHEMAS_STRING = 1
+XML_SCHEMAS_NORMSTRING = 2
+XML_SCHEMAS_DECIMAL = 3
+XML_SCHEMAS_TIME = 4
+XML_SCHEMAS_GDAY = 5
+XML_SCHEMAS_GMONTH = 6
+XML_SCHEMAS_GMONTHDAY = 7
+XML_SCHEMAS_GYEAR = 8
+XML_SCHEMAS_GYEARMONTH = 9
+XML_SCHEMAS_DATE = 10
+XML_SCHEMAS_DATETIME = 11
+XML_SCHEMAS_DURATION = 12
+XML_SCHEMAS_FLOAT = 13
+XML_SCHEMAS_DOUBLE = 14
+XML_SCHEMAS_BOOLEAN = 15
+XML_SCHEMAS_TOKEN = 16
+XML_SCHEMAS_LANGUAGE = 17
+XML_SCHEMAS_NMTOKEN = 18
+XML_SCHEMAS_NMTOKENS = 19
+XML_SCHEMAS_NAME = 20
+XML_SCHEMAS_QNAME = 21
+XML_SCHEMAS_NCNAME = 22
+XML_SCHEMAS_ID = 23
+XML_SCHEMAS_IDREF = 24
+XML_SCHEMAS_IDREFS = 25
+XML_SCHEMAS_ENTITY = 26
+XML_SCHEMAS_ENTITIES = 27
+XML_SCHEMAS_NOTATION = 28
+XML_SCHEMAS_ANYURI = 29
+XML_SCHEMAS_INTEGER = 30
+XML_SCHEMAS_NPINTEGER = 31
+XML_SCHEMAS_NINTEGER = 32
+XML_SCHEMAS_NNINTEGER = 33
+XML_SCHEMAS_PINTEGER = 34
+XML_SCHEMAS_INT = 35
+XML_SCHEMAS_UINT = 36
+XML_SCHEMAS_LONG = 37
+XML_SCHEMAS_ULONG = 38
+XML_SCHEMAS_SHORT = 39
+XML_SCHEMAS_USHORT = 40
+XML_SCHEMAS_BYTE = 41
+XML_SCHEMAS_UBYTE = 42
+XML_SCHEMAS_HEXBINARY = 43
+XML_SCHEMAS_BASE64BINARY = 44
+XML_SCHEMAS_ANYTYPE = 45
+XML_SCHEMAS_ANYSIMPLETYPE = 46
+
+# xmlParserInputState
+XML_PARSER_EOF = -1
+XML_PARSER_START = 0
+XML_PARSER_MISC = 1
+XML_PARSER_PI = 2
+XML_PARSER_DTD = 3
+XML_PARSER_PROLOG = 4
+XML_PARSER_COMMENT = 5
+XML_PARSER_START_TAG = 6
+XML_PARSER_CONTENT = 7
+XML_PARSER_CDATA_SECTION = 8
+XML_PARSER_END_TAG = 9
+XML_PARSER_ENTITY_DECL = 10
+XML_PARSER_ENTITY_VALUE = 11
+XML_PARSER_ATTRIBUTE_VALUE = 12
+XML_PARSER_SYSTEM_LITERAL = 13
+XML_PARSER_EPILOG = 14
+XML_PARSER_IGNORE = 15
+XML_PARSER_PUBLIC_LITERAL = 16
+
+# xmlEntityType
+XML_INTERNAL_GENERAL_ENTITY = 1
+XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2
+XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3
+XML_INTERNAL_PARAMETER_ENTITY = 4
+XML_EXTERNAL_PARAMETER_ENTITY = 5
+XML_INTERNAL_PREDEFINED_ENTITY = 6
+
+# xmlSaveOption
+XML_SAVE_FORMAT = 1
+XML_SAVE_NO_DECL = 2
+XML_SAVE_NO_EMPTY = 4
+XML_SAVE_NO_XHTML = 8
+XML_SAVE_XHTML = 16
+XML_SAVE_AS_XML = 32
+XML_SAVE_AS_HTML = 64
+XML_SAVE_WSNONSIG = 128
+
+# xmlPatternFlags
+XML_PATTERN_DEFAULT = 0
+XML_PATTERN_XPATH = 1
+XML_PATTERN_XSSEL = 2
+XML_PATTERN_XSFIELD = 4
+
+# xmlParserErrors
+XML_ERR_OK = 0
+XML_ERR_INTERNAL_ERROR = 1
+XML_ERR_NO_MEMORY = 2
+XML_ERR_DOCUMENT_START = 3
+XML_ERR_DOCUMENT_EMPTY = 4
+XML_ERR_DOCUMENT_END = 5
+XML_ERR_INVALID_HEX_CHARREF = 6
+XML_ERR_INVALID_DEC_CHARREF = 7
+XML_ERR_INVALID_CHARREF = 8
+XML_ERR_INVALID_CHAR = 9
+XML_ERR_CHARREF_AT_EOF = 10
+XML_ERR_CHARREF_IN_PROLOG = 11
+XML_ERR_CHARREF_IN_EPILOG = 12
+XML_ERR_CHARREF_IN_DTD = 13
+XML_ERR_ENTITYREF_AT_EOF = 14
+XML_ERR_ENTITYREF_IN_PROLOG = 15
+XML_ERR_ENTITYREF_IN_EPILOG = 16
+XML_ERR_ENTITYREF_IN_DTD = 17
+XML_ERR_PEREF_AT_EOF = 18
+XML_ERR_PEREF_IN_PROLOG = 19
+XML_ERR_PEREF_IN_EPILOG = 20
+XML_ERR_PEREF_IN_INT_SUBSET = 21
+XML_ERR_ENTITYREF_NO_NAME = 22
+XML_ERR_ENTITYREF_SEMICOL_MISSING = 23
+XML_ERR_PEREF_NO_NAME = 24
+XML_ERR_PEREF_SEMICOL_MISSING = 25
+XML_ERR_UNDECLARED_ENTITY = 26
+XML_WAR_UNDECLARED_ENTITY = 27
+XML_ERR_UNPARSED_ENTITY = 28
+XML_ERR_ENTITY_IS_EXTERNAL = 29
+XML_ERR_ENTITY_IS_PARAMETER = 30
+XML_ERR_UNKNOWN_ENCODING = 31
+XML_ERR_UNSUPPORTED_ENCODING = 32
+XML_ERR_STRING_NOT_STARTED = 33
+XML_ERR_STRING_NOT_CLOSED = 34
+XML_ERR_NS_DECL_ERROR = 35
+XML_ERR_ENTITY_NOT_STARTED = 36
+XML_ERR_ENTITY_NOT_FINISHED = 37
+XML_ERR_LT_IN_ATTRIBUTE = 38
+XML_ERR_ATTRIBUTE_NOT_STARTED = 39
+XML_ERR_ATTRIBUTE_NOT_FINISHED = 40
+XML_ERR_ATTRIBUTE_WITHOUT_VALUE = 41
+XML_ERR_ATTRIBUTE_REDEFINED = 42
+XML_ERR_LITERAL_NOT_STARTED = 43
+XML_ERR_LITERAL_NOT_FINISHED = 44
+XML_ERR_COMMENT_NOT_FINISHED = 45
+XML_ERR_PI_NOT_STARTED = 46
+XML_ERR_PI_NOT_FINISHED = 47
+XML_ERR_NOTATION_NOT_STARTED = 48
+XML_ERR_NOTATION_NOT_FINISHED = 49
+XML_ERR_ATTLIST_NOT_STARTED = 50
+XML_ERR_ATTLIST_NOT_FINISHED = 51
+XML_ERR_MIXED_NOT_STARTED = 52
+XML_ERR_MIXED_NOT_FINISHED = 53
+XML_ERR_ELEMCONTENT_NOT_STARTED = 54
+XML_ERR_ELEMCONTENT_NOT_FINISHED = 55
+XML_ERR_XMLDECL_NOT_STARTED = 56
+XML_ERR_XMLDECL_NOT_FINISHED = 57
+XML_ERR_CONDSEC_NOT_STARTED = 58
+XML_ERR_CONDSEC_NOT_FINISHED = 59
+XML_ERR_EXT_SUBSET_NOT_FINISHED = 60
+XML_ERR_DOCTYPE_NOT_FINISHED = 61
+XML_ERR_MISPLACED_CDATA_END = 62
+XML_ERR_CDATA_NOT_FINISHED = 63
+XML_ERR_RESERVED_XML_NAME = 64
+XML_ERR_SPACE_REQUIRED = 65
+XML_ERR_SEPARATOR_REQUIRED = 66
+XML_ERR_NMTOKEN_REQUIRED = 67
+XML_ERR_NAME_REQUIRED = 68
+XML_ERR_PCDATA_REQUIRED = 69
+XML_ERR_URI_REQUIRED = 70
+XML_ERR_PUBID_REQUIRED = 71
+XML_ERR_LT_REQUIRED = 72
+XML_ERR_GT_REQUIRED = 73
+XML_ERR_LTSLASH_REQUIRED = 74
+XML_ERR_EQUAL_REQUIRED = 75
+XML_ERR_TAG_NAME_MISMATCH = 76
+XML_ERR_TAG_NOT_FINISHED = 77
+XML_ERR_STANDALONE_VALUE = 78
+XML_ERR_ENCODING_NAME = 79
+XML_ERR_HYPHEN_IN_COMMENT = 80
+XML_ERR_INVALID_ENCODING = 81
+XML_ERR_EXT_ENTITY_STANDALONE = 82
+XML_ERR_CONDSEC_INVALID = 83
+XML_ERR_VALUE_REQUIRED = 84
+XML_ERR_NOT_WELL_BALANCED = 85
+XML_ERR_EXTRA_CONTENT = 86
+XML_ERR_ENTITY_CHAR_ERROR = 87
+XML_ERR_ENTITY_PE_INTERNAL = 88
+XML_ERR_ENTITY_LOOP = 89
+XML_ERR_ENTITY_BOUNDARY = 90
+XML_ERR_INVALID_URI = 91
+XML_ERR_URI_FRAGMENT = 92
+XML_WAR_CATALOG_PI = 93
+XML_ERR_NO_DTD = 94
+XML_ERR_CONDSEC_INVALID_KEYWORD = 95
+XML_ERR_VERSION_MISSING = 96
+XML_WAR_UNKNOWN_VERSION = 97
+XML_WAR_LANG_VALUE = 98
+XML_WAR_NS_URI = 99
+XML_WAR_NS_URI_RELATIVE = 100
+XML_ERR_MISSING_ENCODING = 101
+XML_WAR_SPACE_VALUE = 102
+XML_ERR_NOT_STANDALONE = 103
+XML_ERR_ENTITY_PROCESSING = 104
+XML_ERR_NOTATION_PROCESSING = 105
+XML_WAR_NS_COLUMN = 106
+XML_WAR_ENTITY_REDEFINED = 107
+XML_ERR_UNKNOWN_VERSION = 108
+XML_ERR_VERSION_MISMATCH = 109
+XML_ERR_NAME_TOO_LONG = 110
+XML_ERR_USER_STOP = 111
+XML_NS_ERR_XML_NAMESPACE = 200
+XML_NS_ERR_UNDEFINED_NAMESPACE = 201
+XML_NS_ERR_QNAME = 202
+XML_NS_ERR_ATTRIBUTE_REDEFINED = 203
+XML_NS_ERR_EMPTY = 204
+XML_NS_ERR_COLON = 205
+XML_DTD_ATTRIBUTE_DEFAULT = 500
+XML_DTD_ATTRIBUTE_REDEFINED = 501
+XML_DTD_ATTRIBUTE_VALUE = 502
+XML_DTD_CONTENT_ERROR = 503
+XML_DTD_CONTENT_MODEL = 504
+XML_DTD_CONTENT_NOT_DETERMINIST = 505
+XML_DTD_DIFFERENT_PREFIX = 506
+XML_DTD_ELEM_DEFAULT_NAMESPACE = 507
+XML_DTD_ELEM_NAMESPACE = 508
+XML_DTD_ELEM_REDEFINED = 509
+XML_DTD_EMPTY_NOTATION = 510
+XML_DTD_ENTITY_TYPE = 511
+XML_DTD_ID_FIXED = 512
+XML_DTD_ID_REDEFINED = 513
+XML_DTD_ID_SUBSET = 514
+XML_DTD_INVALID_CHILD = 515
+XML_DTD_INVALID_DEFAULT = 516
+XML_DTD_LOAD_ERROR = 517
+XML_DTD_MISSING_ATTRIBUTE = 518
+XML_DTD_MIXED_CORRUPT = 519
+XML_DTD_MULTIPLE_ID = 520
+XML_DTD_NO_DOC = 521
+XML_DTD_NO_DTD = 522
+XML_DTD_NO_ELEM_NAME = 523
+XML_DTD_NO_PREFIX = 524
+XML_DTD_NO_ROOT = 525
+XML_DTD_NOTATION_REDEFINED = 526
+XML_DTD_NOTATION_VALUE = 527
+XML_DTD_NOT_EMPTY = 528
+XML_DTD_NOT_PCDATA = 529
+XML_DTD_NOT_STANDALONE = 530
+XML_DTD_ROOT_NAME = 531
+XML_DTD_STANDALONE_WHITE_SPACE = 532
+XML_DTD_UNKNOWN_ATTRIBUTE = 533
+XML_DTD_UNKNOWN_ELEM = 534
+XML_DTD_UNKNOWN_ENTITY = 535
+XML_DTD_UNKNOWN_ID = 536
+XML_DTD_UNKNOWN_NOTATION = 537
+XML_DTD_STANDALONE_DEFAULTED = 538
+XML_DTD_XMLID_VALUE = 539
+XML_DTD_XMLID_TYPE = 540
+XML_DTD_DUP_TOKEN = 541
+XML_HTML_STRUCURE_ERROR = 800
+XML_HTML_UNKNOWN_TAG = 801
+XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000
+XML_RNGP_ATTR_CONFLICT = 1001
+XML_RNGP_ATTRIBUTE_CHILDREN = 1002
+XML_RNGP_ATTRIBUTE_CONTENT = 1003
+XML_RNGP_ATTRIBUTE_EMPTY = 1004
+XML_RNGP_ATTRIBUTE_NOOP = 1005
+XML_RNGP_CHOICE_CONTENT = 1006
+XML_RNGP_CHOICE_EMPTY = 1007
+XML_RNGP_CREATE_FAILURE = 1008
+XML_RNGP_DATA_CONTENT = 1009
+XML_RNGP_DEF_CHOICE_AND_INTERLEAVE = 1010
+XML_RNGP_DEFINE_CREATE_FAILED = 1011
+XML_RNGP_DEFINE_EMPTY = 1012
+XML_RNGP_DEFINE_MISSING = 1013
+XML_RNGP_DEFINE_NAME_MISSING = 1014
+XML_RNGP_ELEM_CONTENT_EMPTY = 1015
+XML_RNGP_ELEM_CONTENT_ERROR = 1016
+XML_RNGP_ELEMENT_EMPTY = 1017
+XML_RNGP_ELEMENT_CONTENT = 1018
+XML_RNGP_ELEMENT_NAME = 1019
+XML_RNGP_ELEMENT_NO_CONTENT = 1020
+XML_RNGP_ELEM_TEXT_CONFLICT = 1021
+XML_RNGP_EMPTY = 1022
+XML_RNGP_EMPTY_CONSTRUCT = 1023
+XML_RNGP_EMPTY_CONTENT = 1024
+XML_RNGP_EMPTY_NOT_EMPTY = 1025
+XML_RNGP_ERROR_TYPE_LIB = 1026
+XML_RNGP_EXCEPT_EMPTY = 1027
+XML_RNGP_EXCEPT_MISSING = 1028
+XML_RNGP_EXCEPT_MULTIPLE = 1029
+XML_RNGP_EXCEPT_NO_CONTENT = 1030
+XML_RNGP_EXTERNALREF_EMTPY = 1031
+XML_RNGP_EXTERNAL_REF_FAILURE = 1032
+XML_RNGP_EXTERNALREF_RECURSE = 1033
+XML_RNGP_FORBIDDEN_ATTRIBUTE = 1034
+XML_RNGP_FOREIGN_ELEMENT = 1035
+XML_RNGP_GRAMMAR_CONTENT = 1036
+XML_RNGP_GRAMMAR_EMPTY = 1037
+XML_RNGP_GRAMMAR_MISSING = 1038
+XML_RNGP_GRAMMAR_NO_START = 1039
+XML_RNGP_GROUP_ATTR_CONFLICT = 1040
+XML_RNGP_HREF_ERROR = 1041
+XML_RNGP_INCLUDE_EMPTY = 1042
+XML_RNGP_INCLUDE_FAILURE = 1043
+XML_RNGP_INCLUDE_RECURSE = 1044
+XML_RNGP_INTERLEAVE_ADD = 1045
+XML_RNGP_INTERLEAVE_CREATE_FAILED = 1046
+XML_RNGP_INTERLEAVE_EMPTY = 1047
+XML_RNGP_INTERLEAVE_NO_CONTENT = 1048
+XML_RNGP_INVALID_DEFINE_NAME = 1049
+XML_RNGP_INVALID_URI = 1050
+XML_RNGP_INVALID_VALUE = 1051
+XML_RNGP_MISSING_HREF = 1052
+XML_RNGP_NAME_MISSING = 1053
+XML_RNGP_NEED_COMBINE = 1054
+XML_RNGP_NOTALLOWED_NOT_EMPTY = 1055
+XML_RNGP_NSNAME_ATTR_ANCESTOR = 1056
+XML_RNGP_NSNAME_NO_NS = 1057
+XML_RNGP_PARAM_FORBIDDEN = 1058
+XML_RNGP_PARAM_NAME_MISSING = 1059
+XML_RNGP_PARENTREF_CREATE_FAILED = 1060
+XML_RNGP_PARENTREF_NAME_INVALID = 1061
+XML_RNGP_PARENTREF_NO_NAME = 1062
+XML_RNGP_PARENTREF_NO_PARENT = 1063
+XML_RNGP_PARENTREF_NOT_EMPTY = 1064
+XML_RNGP_PARSE_ERROR = 1065
+XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME = 1066
+XML_RNGP_PAT_ATTR_ATTR = 1067
+XML_RNGP_PAT_ATTR_ELEM = 1068
+XML_RNGP_PAT_DATA_EXCEPT_ATTR = 1069
+XML_RNGP_PAT_DATA_EXCEPT_ELEM = 1070
+XML_RNGP_PAT_DATA_EXCEPT_EMPTY = 1071
+XML_RNGP_PAT_DATA_EXCEPT_GROUP = 1072
+XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE = 1073
+XML_RNGP_PAT_DATA_EXCEPT_LIST = 1074
+XML_RNGP_PAT_DATA_EXCEPT_ONEMORE = 1075
+XML_RNGP_PAT_DATA_EXCEPT_REF = 1076
+XML_RNGP_PAT_DATA_EXCEPT_TEXT = 1077
+XML_RNGP_PAT_LIST_ATTR = 1078
+XML_RNGP_PAT_LIST_ELEM = 1079
+XML_RNGP_PAT_LIST_INTERLEAVE = 1080
+XML_RNGP_PAT_LIST_LIST = 1081
+XML_RNGP_PAT_LIST_REF = 1082
+XML_RNGP_PAT_LIST_TEXT = 1083
+XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME = 1084
+XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME = 1085
+XML_RNGP_PAT_ONEMORE_GROUP_ATTR = 1086
+XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR = 1087
+XML_RNGP_PAT_START_ATTR = 1088
+XML_RNGP_PAT_START_DATA = 1089
+XML_RNGP_PAT_START_EMPTY = 1090
+XML_RNGP_PAT_START_GROUP = 1091
+XML_RNGP_PAT_START_INTERLEAVE = 1092
+XML_RNGP_PAT_START_LIST = 1093
+XML_RNGP_PAT_START_ONEMORE = 1094
+XML_RNGP_PAT_START_TEXT = 1095
+XML_RNGP_PAT_START_VALUE = 1096
+XML_RNGP_PREFIX_UNDEFINED = 1097
+XML_RNGP_REF_CREATE_FAILED = 1098
+XML_RNGP_REF_CYCLE = 1099
+XML_RNGP_REF_NAME_INVALID = 1100
+XML_RNGP_REF_NO_DEF = 1101
+XML_RNGP_REF_NO_NAME = 1102
+XML_RNGP_REF_NOT_EMPTY = 1103
+XML_RNGP_START_CHOICE_AND_INTERLEAVE = 1104
+XML_RNGP_START_CONTENT = 1105
+XML_RNGP_START_EMPTY = 1106
+XML_RNGP_START_MISSING = 1107
+XML_RNGP_TEXT_EXPECTED = 1108
+XML_RNGP_TEXT_HAS_CHILD = 1109
+XML_RNGP_TYPE_MISSING = 1110
+XML_RNGP_TYPE_NOT_FOUND = 1111
+XML_RNGP_TYPE_VALUE = 1112
+XML_RNGP_UNKNOWN_ATTRIBUTE = 1113
+XML_RNGP_UNKNOWN_COMBINE = 1114
+XML_RNGP_UNKNOWN_CONSTRUCT = 1115
+XML_RNGP_UNKNOWN_TYPE_LIB = 1116
+XML_RNGP_URI_FRAGMENT = 1117
+XML_RNGP_URI_NOT_ABSOLUTE = 1118
+XML_RNGP_VALUE_EMPTY = 1119
+XML_RNGP_VALUE_NO_CONTENT = 1120
+XML_RNGP_XMLNS_NAME = 1121
+XML_RNGP_XML_NS = 1122
+XML_XPATH_EXPRESSION_OK = 1200
+XML_XPATH_NUMBER_ERROR = 1201
+XML_XPATH_UNFINISHED_LITERAL_ERROR = 1202
+XML_XPATH_START_LITERAL_ERROR = 1203
+XML_XPATH_VARIABLE_REF_ERROR = 1204
+XML_XPATH_UNDEF_VARIABLE_ERROR = 1205
+XML_XPATH_INVALID_PREDICATE_ERROR = 1206
+XML_XPATH_EXPR_ERROR = 1207
+XML_XPATH_UNCLOSED_ERROR = 1208
+XML_XPATH_UNKNOWN_FUNC_ERROR = 1209
+XML_XPATH_INVALID_OPERAND = 1210
+XML_XPATH_INVALID_TYPE = 1211
+XML_XPATH_INVALID_ARITY = 1212
+XML_XPATH_INVALID_CTXT_SIZE = 1213
+XML_XPATH_INVALID_CTXT_POSITION = 1214
+XML_XPATH_MEMORY_ERROR = 1215
+XML_XPTR_SYNTAX_ERROR = 1216
+XML_XPTR_RESOURCE_ERROR = 1217
+XML_XPTR_SUB_RESOURCE_ERROR = 1218
+XML_XPATH_UNDEF_PREFIX_ERROR = 1219
+XML_XPATH_ENCODING_ERROR = 1220
+XML_XPATH_INVALID_CHAR_ERROR = 1221
+XML_TREE_INVALID_HEX = 1300
+XML_TREE_INVALID_DEC = 1301
+XML_TREE_UNTERMINATED_ENTITY = 1302
+XML_TREE_NOT_UTF8 = 1303
+XML_SAVE_NOT_UTF8 = 1400
+XML_SAVE_CHAR_INVALID = 1401
+XML_SAVE_NO_DOCTYPE = 1402
+XML_SAVE_UNKNOWN_ENCODING = 1403
+XML_REGEXP_COMPILE_ERROR = 1450
+XML_IO_UNKNOWN = 1500
+XML_IO_EACCES = 1501
+XML_IO_EAGAIN = 1502
+XML_IO_EBADF = 1503
+XML_IO_EBADMSG = 1504
+XML_IO_EBUSY = 1505
+XML_IO_ECANCELED = 1506
+XML_IO_ECHILD = 1507
+XML_IO_EDEADLK = 1508
+XML_IO_EDOM = 1509
+XML_IO_EEXIST = 1510
+XML_IO_EFAULT = 1511
+XML_IO_EFBIG = 1512
+XML_IO_EINPROGRESS = 1513
+XML_IO_EINTR = 1514
+XML_IO_EINVAL = 1515
+XML_IO_EIO = 1516
+XML_IO_EISDIR = 1517
+XML_IO_EMFILE = 1518
+XML_IO_EMLINK = 1519
+XML_IO_EMSGSIZE = 1520
+XML_IO_ENAMETOOLONG = 1521
+XML_IO_ENFILE = 1522
+XML_IO_ENODEV = 1523
+XML_IO_ENOENT = 1524
+XML_IO_ENOEXEC = 1525
+XML_IO_ENOLCK = 1526
+XML_IO_ENOMEM = 1527
+XML_IO_ENOSPC = 1528
+XML_IO_ENOSYS = 1529
+XML_IO_ENOTDIR = 1530
+XML_IO_ENOTEMPTY = 1531
+XML_IO_ENOTSUP = 1532
+XML_IO_ENOTTY = 1533
+XML_IO_ENXIO = 1534
+XML_IO_EPERM = 1535
+XML_IO_EPIPE = 1536
+XML_IO_ERANGE = 1537
+XML_IO_EROFS = 1538
+XML_IO_ESPIPE = 1539
+XML_IO_ESRCH = 1540
+XML_IO_ETIMEDOUT = 1541
+XML_IO_EXDEV = 1542
+XML_IO_NETWORK_ATTEMPT = 1543
+XML_IO_ENCODER = 1544
+XML_IO_FLUSH = 1545
+XML_IO_WRITE = 1546
+XML_IO_NO_INPUT = 1547
+XML_IO_BUFFER_FULL = 1548
+XML_IO_LOAD_ERROR = 1549
+XML_IO_ENOTSOCK = 1550
+XML_IO_EISCONN = 1551
+XML_IO_ECONNREFUSED = 1552
+XML_IO_ENETUNREACH = 1553
+XML_IO_EADDRINUSE = 1554
+XML_IO_EALREADY = 1555
+XML_IO_EAFNOSUPPORT = 1556
+XML_XINCLUDE_RECURSION = 1600
+XML_XINCLUDE_PARSE_VALUE = 1601
+XML_XINCLUDE_ENTITY_DEF_MISMATCH = 1602
+XML_XINCLUDE_NO_HREF = 1603
+XML_XINCLUDE_NO_FALLBACK = 1604
+XML_XINCLUDE_HREF_URI = 1605
+XML_XINCLUDE_TEXT_FRAGMENT = 1606
+XML_XINCLUDE_TEXT_DOCUMENT = 1607
+XML_XINCLUDE_INVALID_CHAR = 1608
+XML_XINCLUDE_BUILD_FAILED = 1609
+XML_XINCLUDE_UNKNOWN_ENCODING = 1610
+XML_XINCLUDE_MULTIPLE_ROOT = 1611
+XML_XINCLUDE_XPTR_FAILED = 1612
+XML_XINCLUDE_XPTR_RESULT = 1613
+XML_XINCLUDE_INCLUDE_IN_INCLUDE = 1614
+XML_XINCLUDE_FALLBACKS_IN_INCLUDE = 1615
+XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE = 1616
+XML_XINCLUDE_DEPRECATED_NS = 1617
+XML_XINCLUDE_FRAGMENT_ID = 1618
+XML_CATALOG_MISSING_ATTR = 1650
+XML_CATALOG_ENTRY_BROKEN = 1651
+XML_CATALOG_PREFER_VALUE = 1652
+XML_CATALOG_NOT_CATALOG = 1653
+XML_CATALOG_RECURSION = 1654
+XML_SCHEMAP_PREFIX_UNDEFINED = 1700
+XML_SCHEMAP_ATTRFORMDEFAULT_VALUE = 1701
+XML_SCHEMAP_ATTRGRP_NONAME_NOREF = 1702
+XML_SCHEMAP_ATTR_NONAME_NOREF = 1703
+XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF = 1704
+XML_SCHEMAP_ELEMFORMDEFAULT_VALUE = 1705
+XML_SCHEMAP_ELEM_NONAME_NOREF = 1706
+XML_SCHEMAP_EXTENSION_NO_BASE = 1707
+XML_SCHEMAP_FACET_NO_VALUE = 1708
+XML_SCHEMAP_FAILED_BUILD_IMPORT = 1709
+XML_SCHEMAP_GROUP_NONAME_NOREF = 1710
+XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI = 1711
+XML_SCHEMAP_IMPORT_REDEFINE_NSNAME = 1712
+XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI = 1713
+XML_SCHEMAP_INVALID_BOOLEAN = 1714
+XML_SCHEMAP_INVALID_ENUM = 1715
+XML_SCHEMAP_INVALID_FACET = 1716
+XML_SCHEMAP_INVALID_FACET_VALUE = 1717
+XML_SCHEMAP_INVALID_MAXOCCURS = 1718
+XML_SCHEMAP_INVALID_MINOCCURS = 1719
+XML_SCHEMAP_INVALID_REF_AND_SUBTYPE = 1720
+XML_SCHEMAP_INVALID_WHITE_SPACE = 1721
+XML_SCHEMAP_NOATTR_NOREF = 1722
+XML_SCHEMAP_NOTATION_NO_NAME = 1723
+XML_SCHEMAP_NOTYPE_NOREF = 1724
+XML_SCHEMAP_REF_AND_SUBTYPE = 1725
+XML_SCHEMAP_RESTRICTION_NONAME_NOREF = 1726
+XML_SCHEMAP_SIMPLETYPE_NONAME = 1727
+XML_SCHEMAP_TYPE_AND_SUBTYPE = 1728
+XML_SCHEMAP_UNKNOWN_ALL_CHILD = 1729
+XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD = 1730
+XML_SCHEMAP_UNKNOWN_ATTR_CHILD = 1731
+XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD = 1732
+XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP = 1733
+XML_SCHEMAP_UNKNOWN_BASE_TYPE = 1734
+XML_SCHEMAP_UNKNOWN_CHOICE_CHILD = 1735
+XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD = 1736
+XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD = 1737
+XML_SCHEMAP_UNKNOWN_ELEM_CHILD = 1738
+XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD = 1739
+XML_SCHEMAP_UNKNOWN_FACET_CHILD = 1740
+XML_SCHEMAP_UNKNOWN_FACET_TYPE = 1741
+XML_SCHEMAP_UNKNOWN_GROUP_CHILD = 1742
+XML_SCHEMAP_UNKNOWN_IMPORT_CHILD = 1743
+XML_SCHEMAP_UNKNOWN_LIST_CHILD = 1744
+XML_SCHEMAP_UNKNOWN_NOTATION_CHILD = 1745
+XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD = 1746
+XML_SCHEMAP_UNKNOWN_REF = 1747
+XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD = 1748
+XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD = 1749
+XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD = 1750
+XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD = 1751
+XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD = 1752
+XML_SCHEMAP_UNKNOWN_TYPE = 1753
+XML_SCHEMAP_UNKNOWN_UNION_CHILD = 1754
+XML_SCHEMAP_ELEM_DEFAULT_FIXED = 1755
+XML_SCHEMAP_REGEXP_INVALID = 1756
+XML_SCHEMAP_FAILED_LOAD = 1757
+XML_SCHEMAP_NOTHING_TO_PARSE = 1758
+XML_SCHEMAP_NOROOT = 1759
+XML_SCHEMAP_REDEFINED_GROUP = 1760
+XML_SCHEMAP_REDEFINED_TYPE = 1761
+XML_SCHEMAP_REDEFINED_ELEMENT = 1762
+XML_SCHEMAP_REDEFINED_ATTRGROUP = 1763
+XML_SCHEMAP_REDEFINED_ATTR = 1764
+XML_SCHEMAP_REDEFINED_NOTATION = 1765
+XML_SCHEMAP_FAILED_PARSE = 1766
+XML_SCHEMAP_UNKNOWN_PREFIX = 1767
+XML_SCHEMAP_DEF_AND_PREFIX = 1768
+XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD = 1769
+XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI = 1770
+XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI = 1771
+XML_SCHEMAP_NOT_SCHEMA = 1772
+XML_SCHEMAP_UNKNOWN_MEMBER_TYPE = 1773
+XML_SCHEMAP_INVALID_ATTR_USE = 1774
+XML_SCHEMAP_RECURSIVE = 1775
+XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE = 1776
+XML_SCHEMAP_INVALID_ATTR_COMBINATION = 1777
+XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION = 1778
+XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD = 1779
+XML_SCHEMAP_INVALID_ATTR_NAME = 1780
+XML_SCHEMAP_REF_AND_CONTENT = 1781
+XML_SCHEMAP_CT_PROPS_CORRECT_1 = 1782
+XML_SCHEMAP_CT_PROPS_CORRECT_2 = 1783
+XML_SCHEMAP_CT_PROPS_CORRECT_3 = 1784
+XML_SCHEMAP_CT_PROPS_CORRECT_4 = 1785
+XML_SCHEMAP_CT_PROPS_CORRECT_5 = 1786
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 = 1787
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1 = 1788
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2 = 1789
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2 = 1790
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3 = 1791
+XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER = 1792
+XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE = 1793
+XML_SCHEMAP_UNION_NOT_EXPRESSIBLE = 1794
+XML_SCHEMAP_SRC_IMPORT_3_1 = 1795
+XML_SCHEMAP_SRC_IMPORT_3_2 = 1796
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1 = 1797
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2 = 1798
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3 = 1799
+XML_SCHEMAP_COS_CT_EXTENDS_1_3 = 1800
+XML_SCHEMAV_NOROOT = 1801
+XML_SCHEMAV_UNDECLAREDELEM = 1802
+XML_SCHEMAV_NOTTOPLEVEL = 1803
+XML_SCHEMAV_MISSING = 1804
+XML_SCHEMAV_WRONGELEM = 1805
+XML_SCHEMAV_NOTYPE = 1806
+XML_SCHEMAV_NOROLLBACK = 1807
+XML_SCHEMAV_ISABSTRACT = 1808
+XML_SCHEMAV_NOTEMPTY = 1809
+XML_SCHEMAV_ELEMCONT = 1810
+XML_SCHEMAV_HAVEDEFAULT = 1811
+XML_SCHEMAV_NOTNILLABLE = 1812
+XML_SCHEMAV_EXTRACONTENT = 1813
+XML_SCHEMAV_INVALIDATTR = 1814
+XML_SCHEMAV_INVALIDELEM = 1815
+XML_SCHEMAV_NOTDETERMINIST = 1816
+XML_SCHEMAV_CONSTRUCT = 1817
+XML_SCHEMAV_INTERNAL = 1818
+XML_SCHEMAV_NOTSIMPLE = 1819
+XML_SCHEMAV_ATTRUNKNOWN = 1820
+XML_SCHEMAV_ATTRINVALID = 1821
+XML_SCHEMAV_VALUE = 1822
+XML_SCHEMAV_FACET = 1823
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1 = 1824
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2 = 1825
+XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3 = 1826
+XML_SCHEMAV_CVC_TYPE_3_1_1 = 1827
+XML_SCHEMAV_CVC_TYPE_3_1_2 = 1828
+XML_SCHEMAV_CVC_FACET_VALID = 1829
+XML_SCHEMAV_CVC_LENGTH_VALID = 1830
+XML_SCHEMAV_CVC_MINLENGTH_VALID = 1831
+XML_SCHEMAV_CVC_MAXLENGTH_VALID = 1832
+XML_SCHEMAV_CVC_MININCLUSIVE_VALID = 1833
+XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID = 1834
+XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID = 1835
+XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID = 1836
+XML_SCHEMAV_CVC_TOTALDIGITS_VALID = 1837
+XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID = 1838
+XML_SCHEMAV_CVC_PATTERN_VALID = 1839
+XML_SCHEMAV_CVC_ENUMERATION_VALID = 1840
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1 = 1841
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2 = 1842
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3 = 1843
+XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4 = 1844
+XML_SCHEMAV_CVC_ELT_1 = 1845
+XML_SCHEMAV_CVC_ELT_2 = 1846
+XML_SCHEMAV_CVC_ELT_3_1 = 1847
+XML_SCHEMAV_CVC_ELT_3_2_1 = 1848
+XML_SCHEMAV_CVC_ELT_3_2_2 = 1849
+XML_SCHEMAV_CVC_ELT_4_1 = 1850
+XML_SCHEMAV_CVC_ELT_4_2 = 1851
+XML_SCHEMAV_CVC_ELT_4_3 = 1852
+XML_SCHEMAV_CVC_ELT_5_1_1 = 1853
+XML_SCHEMAV_CVC_ELT_5_1_2 = 1854
+XML_SCHEMAV_CVC_ELT_5_2_1 = 1855
+XML_SCHEMAV_CVC_ELT_5_2_2_1 = 1856
+XML_SCHEMAV_CVC_ELT_5_2_2_2_1 = 1857
+XML_SCHEMAV_CVC_ELT_5_2_2_2_2 = 1858
+XML_SCHEMAV_CVC_ELT_6 = 1859
+XML_SCHEMAV_CVC_ELT_7 = 1860
+XML_SCHEMAV_CVC_ATTRIBUTE_1 = 1861
+XML_SCHEMAV_CVC_ATTRIBUTE_2 = 1862
+XML_SCHEMAV_CVC_ATTRIBUTE_3 = 1863
+XML_SCHEMAV_CVC_ATTRIBUTE_4 = 1864
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1 = 1865
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1 = 1866
+XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2 = 1867
+XML_SCHEMAV_CVC_COMPLEX_TYPE_4 = 1868
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1 = 1869
+XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2 = 1870
+XML_SCHEMAV_ELEMENT_CONTENT = 1871
+XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING = 1872
+XML_SCHEMAV_CVC_COMPLEX_TYPE_1 = 1873
+XML_SCHEMAV_CVC_AU = 1874
+XML_SCHEMAV_CVC_TYPE_1 = 1875
+XML_SCHEMAV_CVC_TYPE_2 = 1876
+XML_SCHEMAV_CVC_IDC = 1877
+XML_SCHEMAV_CVC_WILDCARD = 1878
+XML_SCHEMAV_MISC = 1879
+XML_XPTR_UNKNOWN_SCHEME = 1900
+XML_XPTR_CHILDSEQ_START = 1901
+XML_XPTR_EVAL_FAILED = 1902
+XML_XPTR_EXTRA_OBJECTS = 1903
+XML_C14N_CREATE_CTXT = 1950
+XML_C14N_REQUIRES_UTF8 = 1951
+XML_C14N_CREATE_STACK = 1952
+XML_C14N_INVALID_NODE = 1953
+XML_C14N_UNKNOW_NODE = 1954
+XML_C14N_RELATIVE_NAMESPACE = 1955
+XML_FTP_PASV_ANSWER = 2000
+XML_FTP_EPSV_ANSWER = 2001
+XML_FTP_ACCNT = 2002
+XML_FTP_URL_SYNTAX = 2003
+XML_HTTP_URL_SYNTAX = 2020
+XML_HTTP_USE_IP = 2021
+XML_HTTP_UNKNOWN_HOST = 2022
+XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000
+XML_SCHEMAP_SRC_SIMPLE_TYPE_2 = 3001
+XML_SCHEMAP_SRC_SIMPLE_TYPE_3 = 3002
+XML_SCHEMAP_SRC_SIMPLE_TYPE_4 = 3003
+XML_SCHEMAP_SRC_RESOLVE = 3004
+XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE = 3005
+XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE = 3006
+XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES = 3007
+XML_SCHEMAP_ST_PROPS_CORRECT_1 = 3008
+XML_SCHEMAP_ST_PROPS_CORRECT_2 = 3009
+XML_SCHEMAP_ST_PROPS_CORRECT_3 = 3010
+XML_SCHEMAP_COS_ST_RESTRICTS_1_1 = 3011
+XML_SCHEMAP_COS_ST_RESTRICTS_1_2 = 3012
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1 = 3013
+XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2 = 3014
+XML_SCHEMAP_COS_ST_RESTRICTS_2_1 = 3015
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1 = 3016
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2 = 3017
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1 = 3018
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2 = 3019
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3 = 3020
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4 = 3021
+XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5 = 3022
+XML_SCHEMAP_COS_ST_RESTRICTS_3_1 = 3023
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1 = 3024
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2 = 3025
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2 = 3026
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1 = 3027
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3 = 3028
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4 = 3029
+XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5 = 3030
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_1 = 3031
+XML_SCHEMAP_COS_ST_DERIVED_OK_2_2 = 3032
+XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED = 3033
+XML_SCHEMAP_S4S_ELEM_MISSING = 3034
+XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED = 3035
+XML_SCHEMAP_S4S_ATTR_MISSING = 3036
+XML_SCHEMAP_S4S_ATTR_INVALID_VALUE = 3037
+XML_SCHEMAP_SRC_ELEMENT_1 = 3038
+XML_SCHEMAP_SRC_ELEMENT_2_1 = 3039
+XML_SCHEMAP_SRC_ELEMENT_2_2 = 3040
+XML_SCHEMAP_SRC_ELEMENT_3 = 3041
+XML_SCHEMAP_P_PROPS_CORRECT_1 = 3042
+XML_SCHEMAP_P_PROPS_CORRECT_2_1 = 3043
+XML_SCHEMAP_P_PROPS_CORRECT_2_2 = 3044
+XML_SCHEMAP_E_PROPS_CORRECT_2 = 3045
+XML_SCHEMAP_E_PROPS_CORRECT_3 = 3046
+XML_SCHEMAP_E_PROPS_CORRECT_4 = 3047
+XML_SCHEMAP_E_PROPS_CORRECT_5 = 3048
+XML_SCHEMAP_E_PROPS_CORRECT_6 = 3049
+XML_SCHEMAP_SRC_INCLUDE = 3050
+XML_SCHEMAP_SRC_ATTRIBUTE_1 = 3051
+XML_SCHEMAP_SRC_ATTRIBUTE_2 = 3052
+XML_SCHEMAP_SRC_ATTRIBUTE_3_1 = 3053
+XML_SCHEMAP_SRC_ATTRIBUTE_3_2 = 3054
+XML_SCHEMAP_SRC_ATTRIBUTE_4 = 3055
+XML_SCHEMAP_NO_XMLNS = 3056
+XML_SCHEMAP_NO_XSI = 3057
+XML_SCHEMAP_COS_VALID_DEFAULT_1 = 3058
+XML_SCHEMAP_COS_VALID_DEFAULT_2_1 = 3059
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1 = 3060
+XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2 = 3061
+XML_SCHEMAP_CVC_SIMPLE_TYPE = 3062
+XML_SCHEMAP_COS_CT_EXTENDS_1_1 = 3063
+XML_SCHEMAP_SRC_IMPORT_1_1 = 3064
+XML_SCHEMAP_SRC_IMPORT_1_2 = 3065
+XML_SCHEMAP_SRC_IMPORT_2 = 3066
+XML_SCHEMAP_SRC_IMPORT_2_1 = 3067
+XML_SCHEMAP_SRC_IMPORT_2_2 = 3068
+XML_SCHEMAP_INTERNAL = 3069
+XML_SCHEMAP_NOT_DETERMINISTIC = 3070
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1 = 3071
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2 = 3072
+XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3 = 3073
+XML_SCHEMAP_MG_PROPS_CORRECT_1 = 3074
+XML_SCHEMAP_MG_PROPS_CORRECT_2 = 3075
+XML_SCHEMAP_SRC_CT_1 = 3076
+XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3 = 3077
+XML_SCHEMAP_AU_PROPS_CORRECT_2 = 3078
+XML_SCHEMAP_A_PROPS_CORRECT_2 = 3079
+XML_SCHEMAP_C_PROPS_CORRECT = 3080
+XML_SCHEMAP_SRC_REDEFINE = 3081
+XML_SCHEMAP_SRC_IMPORT = 3082
+XML_SCHEMAP_WARN_SKIP_SCHEMA = 3083
+XML_SCHEMAP_WARN_UNLOCATED_SCHEMA = 3084
+XML_SCHEMAP_WARN_ATTR_REDECL_PROH = 3085
+XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH = 3086
+XML_SCHEMAP_AG_PROPS_CORRECT = 3087
+XML_SCHEMAP_COS_CT_EXTENDS_1_2 = 3088
+XML_SCHEMAP_AU_PROPS_CORRECT = 3089
+XML_SCHEMAP_A_PROPS_CORRECT_3 = 3090
+XML_SCHEMAP_COS_ALL_LIMITED = 3091
+XML_SCHEMATRONV_ASSERT = 4000
+XML_SCHEMATRONV_REPORT = 4001
+XML_MODULE_OPEN = 4900
+XML_MODULE_CLOSE = 4901
+XML_CHECK_FOUND_ELEMENT = 5000
+XML_CHECK_FOUND_ATTRIBUTE = 5001
+XML_CHECK_FOUND_TEXT = 5002
+XML_CHECK_FOUND_CDATA = 5003
+XML_CHECK_FOUND_ENTITYREF = 5004
+XML_CHECK_FOUND_ENTITY = 5005
+XML_CHECK_FOUND_PI = 5006
+XML_CHECK_FOUND_COMMENT = 5007
+XML_CHECK_FOUND_DOCTYPE = 5008
+XML_CHECK_FOUND_FRAGMENT = 5009
+XML_CHECK_FOUND_NOTATION = 5010
+XML_CHECK_UNKNOWN_NODE = 5011
+XML_CHECK_ENTITY_TYPE = 5012
+XML_CHECK_NO_PARENT = 5013
+XML_CHECK_NO_DOC = 5014
+XML_CHECK_NO_NAME = 5015
+XML_CHECK_NO_ELEM = 5016
+XML_CHECK_WRONG_DOC = 5017
+XML_CHECK_NO_PREV = 5018
+XML_CHECK_WRONG_PREV = 5019
+XML_CHECK_NO_NEXT = 5020
+XML_CHECK_WRONG_NEXT = 5021
+XML_CHECK_NOT_DTD = 5022
+XML_CHECK_NOT_ATTR = 5023
+XML_CHECK_NOT_ATTR_DECL = 5024
+XML_CHECK_NOT_ELEM_DECL = 5025
+XML_CHECK_NOT_ENTITY_DECL = 5026
+XML_CHECK_NOT_NS_DECL = 5027
+XML_CHECK_NO_HREF = 5028
+XML_CHECK_WRONG_PARENT = 5029
+XML_CHECK_NS_SCOPE = 5030
+XML_CHECK_NS_ANCESTOR = 5031
+XML_CHECK_NOT_UTF8 = 5032
+XML_CHECK_NO_DICT = 5033
+XML_CHECK_NOT_NCNAME = 5034
+XML_CHECK_OUTSIDE_DICT = 5035
+XML_CHECK_WRONG_NAME = 5036
+XML_CHECK_NAME_NOT_NULL = 5037
+XML_I18N_NO_NAME = 6000
+XML_I18N_NO_HANDLER = 6001
+XML_I18N_EXCESS_HANDLER = 6002
+XML_I18N_CONV_FAILED = 6003
+XML_I18N_NO_OUTPUT = 6004
+XML_BUF_OVERFLOW = 7000
+
+# xmlExpNodeType
+XML_EXP_EMPTY = 0
+XML_EXP_FORBID = 1
+XML_EXP_ATOM = 2
+XML_EXP_SEQ = 3
+XML_EXP_OR = 4
+XML_EXP_COUNT = 5
+
+# xmlElementContentType
+XML_ELEMENT_CONTENT_PCDATA = 1
+XML_ELEMENT_CONTENT_ELEMENT = 2
+XML_ELEMENT_CONTENT_SEQ = 3
+XML_ELEMENT_CONTENT_OR = 4
+
+# xmlParserProperties
+XML_PARSER_LOADDTD = 1
+XML_PARSER_DEFAULTATTRS = 2
+XML_PARSER_VALIDATE = 3
+XML_PARSER_SUBST_ENTITIES = 4
+
+# xmlReaderTypes
+XML_READER_TYPE_NONE = 0
+XML_READER_TYPE_ELEMENT = 1
+XML_READER_TYPE_ATTRIBUTE = 2
+XML_READER_TYPE_TEXT = 3
+XML_READER_TYPE_CDATA = 4
+XML_READER_TYPE_ENTITY_REFERENCE = 5
+XML_READER_TYPE_ENTITY = 6
+XML_READER_TYPE_PROCESSING_INSTRUCTION = 7
+XML_READER_TYPE_COMMENT = 8
+XML_READER_TYPE_DOCUMENT = 9
+XML_READER_TYPE_DOCUMENT_TYPE = 10
+XML_READER_TYPE_DOCUMENT_FRAGMENT = 11
+XML_READER_TYPE_NOTATION = 12
+XML_READER_TYPE_WHITESPACE = 13
+XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14
+XML_READER_TYPE_END_ELEMENT = 15
+XML_READER_TYPE_END_ENTITY = 16
+XML_READER_TYPE_XML_DECLARATION = 17
+
+# xmlCatalogPrefer
+XML_CATA_PREFER_NONE = 0
+XML_CATA_PREFER_PUBLIC = 1
+XML_CATA_PREFER_SYSTEM = 2
+
+# xmlElementType
+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
+XML_HTML_DOCUMENT_NODE = 13
+XML_DTD_NODE = 14
+XML_ELEMENT_DECL = 15
+XML_ATTRIBUTE_DECL = 16
+XML_ENTITY_DECL = 17
+XML_NAMESPACE_DECL = 18
+XML_XINCLUDE_START = 19
+XML_XINCLUDE_END = 20
+XML_DOCB_DOCUMENT_NODE = 21
+
+# xlinkActuate
+XLINK_ACTUATE_NONE = 0
+XLINK_ACTUATE_AUTO = 1
+XLINK_ACTUATE_ONREQUEST = 2
+
+# xmlFeature
+XML_WITH_THREAD = 1
+XML_WITH_TREE = 2
+XML_WITH_OUTPUT = 3
+XML_WITH_PUSH = 4
+XML_WITH_READER = 5
+XML_WITH_PATTERN = 6
+XML_WITH_WRITER = 7
+XML_WITH_SAX1 = 8
+XML_WITH_FTP = 9
+XML_WITH_HTTP = 10
+XML_WITH_VALID = 11
+XML_WITH_HTML = 12
+XML_WITH_LEGACY = 13
+XML_WITH_C14N = 14
+XML_WITH_CATALOG = 15
+XML_WITH_XPATH = 16
+XML_WITH_XPTR = 17
+XML_WITH_XINCLUDE = 18
+XML_WITH_ICONV = 19
+XML_WITH_ISO8859X = 20
+XML_WITH_UNICODE = 21
+XML_WITH_REGEXP = 22
+XML_WITH_AUTOMATA = 23
+XML_WITH_EXPR = 24
+XML_WITH_SCHEMAS = 25
+XML_WITH_SCHEMATRON = 26
+XML_WITH_MODULES = 27
+XML_WITH_DEBUG = 28
+XML_WITH_DEBUG_MEM = 29
+XML_WITH_DEBUG_RUN = 30
+XML_WITH_ZLIB = 31
+XML_WITH_ICU = 32
+XML_WITH_LZMA = 33
+XML_WITH_NONE = 99999
+
+# xmlElementContentOccur
+XML_ELEMENT_CONTENT_ONCE = 1
+XML_ELEMENT_CONTENT_OPT = 2
+XML_ELEMENT_CONTENT_MULT = 3
+XML_ELEMENT_CONTENT_PLUS = 4
+
+# xmlXPathError
+XPATH_EXPRESSION_OK = 0
+XPATH_NUMBER_ERROR = 1
+XPATH_UNFINISHED_LITERAL_ERROR = 2
+XPATH_START_LITERAL_ERROR = 3
+XPATH_VARIABLE_REF_ERROR = 4
+XPATH_UNDEF_VARIABLE_ERROR = 5
+XPATH_INVALID_PREDICATE_ERROR = 6
+XPATH_EXPR_ERROR = 7
+XPATH_UNCLOSED_ERROR = 8
+XPATH_UNKNOWN_FUNC_ERROR = 9
+XPATH_INVALID_OPERAND = 10
+XPATH_INVALID_TYPE = 11
+XPATH_INVALID_ARITY = 12
+XPATH_INVALID_CTXT_SIZE = 13
+XPATH_INVALID_CTXT_POSITION = 14
+XPATH_MEMORY_ERROR = 15
+XPTR_SYNTAX_ERROR = 16
+XPTR_RESOURCE_ERROR = 17
+XPTR_SUB_RESOURCE_ERROR = 18
+XPATH_UNDEF_PREFIX_ERROR = 19
+XPATH_ENCODING_ERROR = 20
+XPATH_INVALID_CHAR_ERROR = 21
+XPATH_INVALID_CTXT = 22
+XPATH_STACK_ERROR = 23
+XPATH_FORBID_VARIABLE_ERROR = 24
+
+# xmlTextReaderMode
+XML_TEXTREADER_MODE_INITIAL = 0
+XML_TEXTREADER_MODE_INTERACTIVE = 1
+XML_TEXTREADER_MODE_ERROR = 2
+XML_TEXTREADER_MODE_EOF = 3
+XML_TEXTREADER_MODE_CLOSED = 4
+XML_TEXTREADER_MODE_READING = 5
+
+# xmlErrorLevel
+XML_ERR_NONE = 0
+XML_ERR_WARNING = 1
+XML_ERR_ERROR = 2
+XML_ERR_FATAL = 3
+
+# xmlCharEncoding
+XML_CHAR_ENCODING_ERROR = -1
+XML_CHAR_ENCODING_NONE = 0
+XML_CHAR_ENCODING_UTF8 = 1
+XML_CHAR_ENCODING_UTF16LE = 2
+XML_CHAR_ENCODING_UTF16BE = 3
+XML_CHAR_ENCODING_UCS4LE = 4
+XML_CHAR_ENCODING_UCS4BE = 5
+XML_CHAR_ENCODING_EBCDIC = 6
+XML_CHAR_ENCODING_UCS4_2143 = 7
+XML_CHAR_ENCODING_UCS4_3412 = 8
+XML_CHAR_ENCODING_UCS2 = 9
+XML_CHAR_ENCODING_8859_1 = 10
+XML_CHAR_ENCODING_8859_2 = 11
+XML_CHAR_ENCODING_8859_3 = 12
+XML_CHAR_ENCODING_8859_4 = 13
+XML_CHAR_ENCODING_8859_5 = 14
+XML_CHAR_ENCODING_8859_6 = 15
+XML_CHAR_ENCODING_8859_7 = 16
+XML_CHAR_ENCODING_8859_8 = 17
+XML_CHAR_ENCODING_8859_9 = 18
+XML_CHAR_ENCODING_2022_JP = 19
+XML_CHAR_ENCODING_SHIFT_JIS = 20
+XML_CHAR_ENCODING_EUC_JP = 21
+XML_CHAR_ENCODING_ASCII = 22
+
+# xmlErrorDomain
+XML_FROM_NONE = 0
+XML_FROM_PARSER = 1
+XML_FROM_TREE = 2
+XML_FROM_NAMESPACE = 3
+XML_FROM_DTD = 4
+XML_FROM_HTML = 5
+XML_FROM_MEMORY = 6
+XML_FROM_OUTPUT = 7
+XML_FROM_IO = 8
+XML_FROM_FTP = 9
+XML_FROM_HTTP = 10
+XML_FROM_XINCLUDE = 11
+XML_FROM_XPATH = 12
+XML_FROM_XPOINTER = 13
+XML_FROM_REGEXP = 14
+XML_FROM_DATATYPE = 15
+XML_FROM_SCHEMASP = 16
+XML_FROM_SCHEMASV = 17
+XML_FROM_RELAXNGP = 18
+XML_FROM_RELAXNGV = 19
+XML_FROM_CATALOG = 20
+XML_FROM_C14N = 21
+XML_FROM_XSLT = 22
+XML_FROM_VALID = 23
+XML_FROM_CHECK = 24
+XML_FROM_WRITER = 25
+XML_FROM_MODULE = 26
+XML_FROM_I18N = 27
+XML_FROM_SCHEMATRONV = 28
+XML_FROM_BUFFER = 29
+XML_FROM_URI = 30
+
+# htmlStatus
+HTML_NA = 0
+HTML_INVALID = 1
+HTML_DEPRECATED = 2
+HTML_VALID = 4
+HTML_REQUIRED = 12
+
+# xmlSchemaValidOption
+XML_SCHEMA_VAL_VC_I_CREATE = 1
+
+# xmlSchemaWhitespaceValueType
+XML_SCHEMA_WHITESPACE_UNKNOWN = 0
+XML_SCHEMA_WHITESPACE_PRESERVE = 1
+XML_SCHEMA_WHITESPACE_REPLACE = 2
+XML_SCHEMA_WHITESPACE_COLLAPSE = 3
+
+# htmlParserOption
+HTML_PARSE_RECOVER = 1
+HTML_PARSE_NODEFDTD = 4
+HTML_PARSE_NOERROR = 32
+HTML_PARSE_NOWARNING = 64
+HTML_PARSE_PEDANTIC = 128
+HTML_PARSE_NOBLANKS = 256
+HTML_PARSE_NONET = 2048
+HTML_PARSE_NOIMPLIED = 8192
+HTML_PARSE_COMPACT = 65536
+HTML_PARSE_IGNORE_ENC = 2097152
+
+# xmlRelaxNGValidErr
+XML_RELAXNG_OK = 0
+XML_RELAXNG_ERR_MEMORY = 1
+XML_RELAXNG_ERR_TYPE = 2
+XML_RELAXNG_ERR_TYPEVAL = 3
+XML_RELAXNG_ERR_DUPID = 4
+XML_RELAXNG_ERR_TYPECMP = 5
+XML_RELAXNG_ERR_NOSTATE = 6
+XML_RELAXNG_ERR_NODEFINE = 7
+XML_RELAXNG_ERR_LISTEXTRA = 8
+XML_RELAXNG_ERR_LISTEMPTY = 9
+XML_RELAXNG_ERR_INTERNODATA = 10
+XML_RELAXNG_ERR_INTERSEQ = 11
+XML_RELAXNG_ERR_INTEREXTRA = 12
+XML_RELAXNG_ERR_ELEMNAME = 13
+XML_RELAXNG_ERR_ATTRNAME = 14
+XML_RELAXNG_ERR_ELEMNONS = 15
+XML_RELAXNG_ERR_ATTRNONS = 16
+XML_RELAXNG_ERR_ELEMWRONGNS = 17
+XML_RELAXNG_ERR_ATTRWRONGNS = 18
+XML_RELAXNG_ERR_ELEMEXTRANS = 19
+XML_RELAXNG_ERR_ATTREXTRANS = 20
+XML_RELAXNG_ERR_ELEMNOTEMPTY = 21
+XML_RELAXNG_ERR_NOELEM = 22
+XML_RELAXNG_ERR_NOTELEM = 23
+XML_RELAXNG_ERR_ATTRVALID = 24
+XML_RELAXNG_ERR_CONTENTVALID = 25
+XML_RELAXNG_ERR_EXTRACONTENT = 26
+XML_RELAXNG_ERR_INVALIDATTR = 27
+XML_RELAXNG_ERR_DATAELEM = 28
+XML_RELAXNG_ERR_VALELEM = 29
+XML_RELAXNG_ERR_LISTELEM = 30
+XML_RELAXNG_ERR_DATATYPE = 31
+XML_RELAXNG_ERR_VALUE = 32
+XML_RELAXNG_ERR_LIST = 33
+XML_RELAXNG_ERR_NOGRAMMAR = 34
+XML_RELAXNG_ERR_EXTRADATA = 35
+XML_RELAXNG_ERR_LACKDATA = 36
+XML_RELAXNG_ERR_INTERNAL = 37
+XML_RELAXNG_ERR_ELEMWRONG = 38
+XML_RELAXNG_ERR_TEXTWRONG = 39
+
+# xmlCatalogAllow
+XML_CATA_ALLOW_NONE = 0
+XML_CATA_ALLOW_GLOBAL = 1
+XML_CATA_ALLOW_DOCUMENT = 2
+XML_CATA_ALLOW_ALL = 3
+
+# xmlAttributeType
+XML_ATTRIBUTE_CDATA = 1
+XML_ATTRIBUTE_ID = 2
+XML_ATTRIBUTE_IDREF = 3
+XML_ATTRIBUTE_IDREFS = 4
+XML_ATTRIBUTE_ENTITY = 5
+XML_ATTRIBUTE_ENTITIES = 6
+XML_ATTRIBUTE_NMTOKEN = 7
+XML_ATTRIBUTE_NMTOKENS = 8
+XML_ATTRIBUTE_ENUMERATION = 9
+XML_ATTRIBUTE_NOTATION = 10
+
+# xmlSchematronValidOptions
+XML_SCHEMATRON_OUT_QUIET = 1
+XML_SCHEMATRON_OUT_TEXT = 2
+XML_SCHEMATRON_OUT_XML = 4
+XML_SCHEMATRON_OUT_ERROR = 8
+XML_SCHEMATRON_OUT_FILE = 256
+XML_SCHEMATRON_OUT_BUFFER = 512
+XML_SCHEMATRON_OUT_IO = 1024
+
+# xmlSchemaContentType
+XML_SCHEMA_CONTENT_UNKNOWN = 0
+XML_SCHEMA_CONTENT_EMPTY = 1
+XML_SCHEMA_CONTENT_ELEMENTS = 2
+XML_SCHEMA_CONTENT_MIXED = 3
+XML_SCHEMA_CONTENT_SIMPLE = 4
+XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS = 5
+XML_SCHEMA_CONTENT_BASIC = 6
+XML_SCHEMA_CONTENT_ANY = 7
+
+# xmlSchemaTypeType
+XML_SCHEMA_TYPE_BASIC = 1
+XML_SCHEMA_TYPE_ANY = 2
+XML_SCHEMA_TYPE_FACET = 3
+XML_SCHEMA_TYPE_SIMPLE = 4
+XML_SCHEMA_TYPE_COMPLEX = 5
+XML_SCHEMA_TYPE_SEQUENCE = 6
+XML_SCHEMA_TYPE_CHOICE = 7
+XML_SCHEMA_TYPE_ALL = 8
+XML_SCHEMA_TYPE_SIMPLE_CONTENT = 9
+XML_SCHEMA_TYPE_COMPLEX_CONTENT = 10
+XML_SCHEMA_TYPE_UR = 11
+XML_SCHEMA_TYPE_RESTRICTION = 12
+XML_SCHEMA_TYPE_EXTENSION = 13
+XML_SCHEMA_TYPE_ELEMENT = 14
+XML_SCHEMA_TYPE_ATTRIBUTE = 15
+XML_SCHEMA_TYPE_ATTRIBUTEGROUP = 16
+XML_SCHEMA_TYPE_GROUP = 17
+XML_SCHEMA_TYPE_NOTATION = 18
+XML_SCHEMA_TYPE_LIST = 19
+XML_SCHEMA_TYPE_UNION = 20
+XML_SCHEMA_TYPE_ANY_ATTRIBUTE = 21
+XML_SCHEMA_TYPE_IDC_UNIQUE = 22
+XML_SCHEMA_TYPE_IDC_KEY = 23
+XML_SCHEMA_TYPE_IDC_KEYREF = 24
+XML_SCHEMA_TYPE_PARTICLE = 25
+XML_SCHEMA_TYPE_ATTRIBUTE_USE = 26
+XML_SCHEMA_FACET_MININCLUSIVE = 1000
+XML_SCHEMA_FACET_MINEXCLUSIVE = 1001
+XML_SCHEMA_FACET_MAXINCLUSIVE = 1002
+XML_SCHEMA_FACET_MAXEXCLUSIVE = 1003
+XML_SCHEMA_FACET_TOTALDIGITS = 1004
+XML_SCHEMA_FACET_FRACTIONDIGITS = 1005
+XML_SCHEMA_FACET_PATTERN = 1006
+XML_SCHEMA_FACET_ENUMERATION = 1007
+XML_SCHEMA_FACET_WHITESPACE = 1008
+XML_SCHEMA_FACET_LENGTH = 1009
+XML_SCHEMA_FACET_MAXLENGTH = 1010
+XML_SCHEMA_FACET_MINLENGTH = 1011
+XML_SCHEMA_EXTRA_QNAMEREF = 2000
+XML_SCHEMA_EXTRA_ATTR_USE_PROHIB = 2001
+
+# xmlModuleOption
+XML_MODULE_LAZY = 1
+XML_MODULE_LOCAL = 2
+
+# xmlParserMode
+XML_PARSE_UNKNOWN = 0
+XML_PARSE_DOM = 1
+XML_PARSE_SAX = 2
+XML_PARSE_PUSH_DOM = 3
+XML_PARSE_PUSH_SAX = 4
+XML_PARSE_READER = 5
+
+# xmlC14NMode
+XML_C14N_1_0 = 0
+XML_C14N_EXCLUSIVE_1_0 = 1
+XML_C14N_1_1 = 2
+
+# xmlParserOption
+XML_PARSE_RECOVER = 1
+XML_PARSE_NOENT = 2
+XML_PARSE_DTDLOAD = 4
+XML_PARSE_DTDATTR = 8
+XML_PARSE_DTDVALID = 16
+XML_PARSE_NOERROR = 32
+XML_PARSE_NOWARNING = 64
+XML_PARSE_PEDANTIC = 128
+XML_PARSE_NOBLANKS = 256
+XML_PARSE_SAX1 = 512
+XML_PARSE_XINCLUDE = 1024
+XML_PARSE_NONET = 2048
+XML_PARSE_NODICT = 4096
+XML_PARSE_NSCLEAN = 8192
+XML_PARSE_NOCDATA = 16384
+XML_PARSE_NOXINCNODE = 32768
+XML_PARSE_COMPACT = 65536
+XML_PARSE_OLD10 = 131072
+XML_PARSE_NOBASEFIX = 262144
+XML_PARSE_HUGE = 524288
+XML_PARSE_OLDSAX = 1048576
+XML_PARSE_IGNORE_ENC = 2097152
+XML_PARSE_BIG_LINES = 4194304
+
+# xmlElementTypeVal
+XML_ELEMENT_TYPE_UNDEFINED = 0
+XML_ELEMENT_TYPE_EMPTY = 1
+XML_ELEMENT_TYPE_ANY = 2
+XML_ELEMENT_TYPE_MIXED = 3
+XML_ELEMENT_TYPE_ELEMENT = 4
+
+# xmlDocProperties
+XML_DOC_WELLFORMED = 1
+XML_DOC_NSVALID = 2
+XML_DOC_OLD10 = 4
+XML_DOC_DTDVALID = 8
+XML_DOC_XINCLUDE = 16
+XML_DOC_USERBUILT = 32
+XML_DOC_INTERNAL = 64
+XML_DOC_HTML = 128
+
+# xlinkType
+XLINK_TYPE_NONE = 0
+XLINK_TYPE_SIMPLE = 1
+XLINK_TYPE_EXTENDED = 2
+XLINK_TYPE_EXTENDED_SET = 3
+
+# xmlXPathObjectType
+XPATH_UNDEFINED = 0
+XPATH_NODESET = 1
+XPATH_BOOLEAN = 2
+XPATH_NUMBER = 3
+XPATH_STRING = 4
+XPATH_POINT = 5
+XPATH_RANGE = 6
+XPATH_LOCATIONSET = 7
+XPATH_USERS = 8
+XPATH_XSLT_TREE = 9
+
+# xmlSchemaValidError
+XML_SCHEMAS_ERR_OK = 0
+XML_SCHEMAS_ERR_NOROOT = 1
+XML_SCHEMAS_ERR_UNDECLAREDELEM = 2
+XML_SCHEMAS_ERR_NOTTOPLEVEL = 3
+XML_SCHEMAS_ERR_MISSING = 4
+XML_SCHEMAS_ERR_WRONGELEM = 5
+XML_SCHEMAS_ERR_NOTYPE = 6
+XML_SCHEMAS_ERR_NOROLLBACK = 7
+XML_SCHEMAS_ERR_ISABSTRACT = 8
+XML_SCHEMAS_ERR_NOTEMPTY = 9
+XML_SCHEMAS_ERR_ELEMCONT = 10
+XML_SCHEMAS_ERR_HAVEDEFAULT = 11
+XML_SCHEMAS_ERR_NOTNILLABLE = 12
+XML_SCHEMAS_ERR_EXTRACONTENT = 13
+XML_SCHEMAS_ERR_INVALIDATTR = 14
+XML_SCHEMAS_ERR_INVALIDELEM = 15
+XML_SCHEMAS_ERR_NOTDETERMINIST = 16
+XML_SCHEMAS_ERR_CONSTRUCT = 17
+XML_SCHEMAS_ERR_INTERNAL = 18
+XML_SCHEMAS_ERR_NOTSIMPLE = 19
+XML_SCHEMAS_ERR_ATTRUNKNOWN = 20
+XML_SCHEMAS_ERR_ATTRINVALID = 21
+XML_SCHEMAS_ERR_VALUE = 22
+XML_SCHEMAS_ERR_FACET = 23
+XML_SCHEMAS_ERR_ = 24
+XML_SCHEMAS_ERR_XXX = 25
+
diff --git a/python/libxml2class.txt b/python/libxml2class.txt
new file mode 100644 (file)
index 0000000..ca88544
--- /dev/null
@@ -0,0 +1,1177 @@
+          Generated Classes for libxml2-python
+
+#
+# Global functions of the module
+#
+
+
+# functions from module HTMLparser
+htmlCreateMemoryParserCtxt()
+htmlHandleOmittedElem()
+htmlIsScriptAttribute()
+htmlNewParserCtxt()
+htmlParseDoc()
+htmlParseFile()
+htmlReadDoc()
+htmlReadFd()
+htmlReadFile()
+htmlReadMemory()
+
+# functions from module HTMLtree
+htmlIsBooleanAttr()
+htmlNewDoc()
+htmlNewDocNoDtD()
+
+# functions from module SAX2
+SAXDefaultVersion()
+defaultSAXHandlerInit()
+docbDefaultSAXHandlerInit()
+htmlDefaultSAXHandlerInit()
+
+# functions from module catalog
+catalogAdd()
+catalogCleanup()
+catalogConvert()
+catalogDump()
+catalogGetPublic()
+catalogGetSystem()
+catalogRemove()
+catalogResolve()
+catalogResolvePublic()
+catalogResolveSystem()
+catalogResolveURI()
+catalogSetDebug()
+initializeCatalog()
+loadACatalog()
+loadCatalog()
+loadCatalogs()
+loadSGMLSuperCatalog()
+newCatalog()
+parseCatalogFile()
+
+# functions from module chvalid
+isBaseChar()
+isBlank()
+isChar()
+isCombining()
+isDigit()
+isExtender()
+isIdeographic()
+isPubidChar()
+
+# functions from module debugXML
+boolToText()
+debugDumpString()
+shellPrintXPathError()
+
+# functions from module dict
+dictCleanup()
+initializeDict()
+
+# functions from module encoding
+addEncodingAlias()
+cleanupCharEncodingHandlers()
+cleanupEncodingAliases()
+delEncodingAlias()
+encodingAlias()
+initCharEncodingHandlers()
+
+# functions from module entities
+cleanupPredefinedEntities()
+initializePredefinedEntities()
+predefinedEntity()
+
+# functions from module globals
+cleanupGlobals()
+initGlobals()
+thrDefDefaultBufferSize()
+thrDefDoValidityCheckingDefaultValue()
+thrDefGetWarningsDefaultValue()
+thrDefIndentTreeOutput()
+thrDefKeepBlanksDefaultValue()
+thrDefLineNumbersDefaultValue()
+thrDefLoadExtDtdDefaultValue()
+thrDefParserDebugEntities()
+thrDefPedanticParserDefaultValue()
+thrDefSaveNoEmptyTags()
+thrDefSubstituteEntitiesDefaultValue()
+thrDefTreeIndentString()
+
+# functions from module nanoftp
+nanoFTPCleanup()
+nanoFTPInit()
+nanoFTPProxy()
+nanoFTPScanProxy()
+
+# functions from module nanohttp
+nanoHTTPCleanup()
+nanoHTTPInit()
+nanoHTTPScanProxy()
+
+# functions from module parser
+createDocParserCtxt()
+initParser()
+keepBlanksDefault()
+lineNumbersDefault()
+newParserCtxt()
+parseDTD()
+parseDoc()
+parseEntity()
+parseFile()
+parseMemory()
+pedanticParserDefault()
+readDoc()
+readFd()
+readFile()
+readMemory()
+recoverDoc()
+recoverFile()
+recoverMemory()
+substituteEntitiesDefault()
+
+# functions from module parserInternals
+checkLanguageID()
+copyChar()
+copyCharMultiByte()
+createEntityParserCtxt()
+createFileParserCtxt()
+createMemoryParserCtxt()
+createURLParserCtxt()
+htmlCreateFileParserCtxt()
+htmlInitAutoClose()
+isLetter()
+namePop()
+namePush()
+nodePop()
+nodePush()
+
+# functions from module python
+SAXParseFile()
+createInputBuffer()
+createOutputBuffer()
+createPushParser()
+debugMemory()
+dumpMemory()
+htmlCreatePushParser()
+htmlSAXParseFile()
+memoryUsed()
+newNode()
+pythonCleanupParser()
+setEntityLoader()
+
+# functions from module relaxng
+relaxNGCleanupTypes()
+relaxNGInitTypes()
+relaxNGNewMemParserCtxt()
+relaxNGNewParserCtxt()
+
+# functions from module tree
+buildQName()
+compressMode()
+isXHTML()
+newComment()
+newDoc()
+newPI()
+newText()
+newTextLen()
+setCompressMode()
+validateNCName()
+validateNMToken()
+validateName()
+validateQName()
+
+# functions from module uri
+URIEscape()
+URIEscapeStr()
+URIUnescapeString()
+buildRelativeURI()
+buildURI()
+canonicPath()
+createURI()
+normalizeURIPath()
+parseURI()
+parseURIRaw()
+pathToURI()
+
+# functions from module valid
+newValidCtxt()
+validateNameValue()
+validateNamesValue()
+validateNmtokenValue()
+validateNmtokensValue()
+
+# functions from module xmlIO
+checkFilename()
+cleanupInputCallbacks()
+cleanupOutputCallbacks()
+fileMatch()
+iOFTPMatch()
+iOHTTPMatch()
+normalizeWindowsPath()
+parserGetDirectory()
+registerDefaultInputCallbacks()
+registerDefaultOutputCallbacks()
+registerHTTPPostCallbacks()
+
+# functions from module xmlerror
+lastError()
+resetLastError()
+
+# functions from module xmlreader
+newTextReaderFilename()
+readerForDoc()
+readerForFd()
+readerForFile()
+readerForMemory()
+
+# functions from module xmlregexp
+regexpCompile()
+
+# functions from module xmlschemas
+schemaNewMemParserCtxt()
+schemaNewParserCtxt()
+
+# functions from module xmlschemastypes
+schemaCleanupTypes()
+schemaCollapseString()
+schemaInitTypes()
+schemaWhiteSpaceReplace()
+
+# functions from module xmlstring
+UTF8Charcmp()
+UTF8Size()
+UTF8Strlen()
+UTF8Strloc()
+UTF8Strndup()
+UTF8Strpos()
+UTF8Strsize()
+UTF8Strsub()
+checkUTF8()
+
+# functions from module xmlunicode
+uCSIsAegeanNumbers()
+uCSIsAlphabeticPresentationForms()
+uCSIsArabic()
+uCSIsArabicPresentationFormsA()
+uCSIsArabicPresentationFormsB()
+uCSIsArmenian()
+uCSIsArrows()
+uCSIsBasicLatin()
+uCSIsBengali()
+uCSIsBlock()
+uCSIsBlockElements()
+uCSIsBopomofo()
+uCSIsBopomofoExtended()
+uCSIsBoxDrawing()
+uCSIsBraillePatterns()
+uCSIsBuhid()
+uCSIsByzantineMusicalSymbols()
+uCSIsCJKCompatibility()
+uCSIsCJKCompatibilityForms()
+uCSIsCJKCompatibilityIdeographs()
+uCSIsCJKCompatibilityIdeographsSupplement()
+uCSIsCJKRadicalsSupplement()
+uCSIsCJKSymbolsandPunctuation()
+uCSIsCJKUnifiedIdeographs()
+uCSIsCJKUnifiedIdeographsExtensionA()
+uCSIsCJKUnifiedIdeographsExtensionB()
+uCSIsCat()
+uCSIsCatC()
+uCSIsCatCc()
+uCSIsCatCf()
+uCSIsCatCo()
+uCSIsCatCs()
+uCSIsCatL()
+uCSIsCatLl()
+uCSIsCatLm()
+uCSIsCatLo()
+uCSIsCatLt()
+uCSIsCatLu()
+uCSIsCatM()
+uCSIsCatMc()
+uCSIsCatMe()
+uCSIsCatMn()
+uCSIsCatN()
+uCSIsCatNd()
+uCSIsCatNl()
+uCSIsCatNo()
+uCSIsCatP()
+uCSIsCatPc()
+uCSIsCatPd()
+uCSIsCatPe()
+uCSIsCatPf()
+uCSIsCatPi()
+uCSIsCatPo()
+uCSIsCatPs()
+uCSIsCatS()
+uCSIsCatSc()
+uCSIsCatSk()
+uCSIsCatSm()
+uCSIsCatSo()
+uCSIsCatZ()
+uCSIsCatZl()
+uCSIsCatZp()
+uCSIsCatZs()
+uCSIsCherokee()
+uCSIsCombiningDiacriticalMarks()
+uCSIsCombiningDiacriticalMarksforSymbols()
+uCSIsCombiningHalfMarks()
+uCSIsCombiningMarksforSymbols()
+uCSIsControlPictures()
+uCSIsCurrencySymbols()
+uCSIsCypriotSyllabary()
+uCSIsCyrillic()
+uCSIsCyrillicSupplement()
+uCSIsDeseret()
+uCSIsDevanagari()
+uCSIsDingbats()
+uCSIsEnclosedAlphanumerics()
+uCSIsEnclosedCJKLettersandMonths()
+uCSIsEthiopic()
+uCSIsGeneralPunctuation()
+uCSIsGeometricShapes()
+uCSIsGeorgian()
+uCSIsGothic()
+uCSIsGreek()
+uCSIsGreekExtended()
+uCSIsGreekandCoptic()
+uCSIsGujarati()
+uCSIsGurmukhi()
+uCSIsHalfwidthandFullwidthForms()
+uCSIsHangulCompatibilityJamo()
+uCSIsHangulJamo()
+uCSIsHangulSyllables()
+uCSIsHanunoo()
+uCSIsHebrew()
+uCSIsHighPrivateUseSurrogates()
+uCSIsHighSurrogates()
+uCSIsHiragana()
+uCSIsIPAExtensions()
+uCSIsIdeographicDescriptionCharacters()
+uCSIsKanbun()
+uCSIsKangxiRadicals()
+uCSIsKannada()
+uCSIsKatakana()
+uCSIsKatakanaPhoneticExtensions()
+uCSIsKhmer()
+uCSIsKhmerSymbols()
+uCSIsLao()
+uCSIsLatin1Supplement()
+uCSIsLatinExtendedA()
+uCSIsLatinExtendedAdditional()
+uCSIsLatinExtendedB()
+uCSIsLetterlikeSymbols()
+uCSIsLimbu()
+uCSIsLinearBIdeograms()
+uCSIsLinearBSyllabary()
+uCSIsLowSurrogates()
+uCSIsMalayalam()
+uCSIsMathematicalAlphanumericSymbols()
+uCSIsMathematicalOperators()
+uCSIsMiscellaneousMathematicalSymbolsA()
+uCSIsMiscellaneousMathematicalSymbolsB()
+uCSIsMiscellaneousSymbols()
+uCSIsMiscellaneousSymbolsandArrows()
+uCSIsMiscellaneousTechnical()
+uCSIsMongolian()
+uCSIsMusicalSymbols()
+uCSIsMyanmar()
+uCSIsNumberForms()
+uCSIsOgham()
+uCSIsOldItalic()
+uCSIsOpticalCharacterRecognition()
+uCSIsOriya()
+uCSIsOsmanya()
+uCSIsPhoneticExtensions()
+uCSIsPrivateUse()
+uCSIsPrivateUseArea()
+uCSIsRunic()
+uCSIsShavian()
+uCSIsSinhala()
+uCSIsSmallFormVariants()
+uCSIsSpacingModifierLetters()
+uCSIsSpecials()
+uCSIsSuperscriptsandSubscripts()
+uCSIsSupplementalArrowsA()
+uCSIsSupplementalArrowsB()
+uCSIsSupplementalMathematicalOperators()
+uCSIsSupplementaryPrivateUseAreaA()
+uCSIsSupplementaryPrivateUseAreaB()
+uCSIsSyriac()
+uCSIsTagalog()
+uCSIsTagbanwa()
+uCSIsTags()
+uCSIsTaiLe()
+uCSIsTaiXuanJingSymbols()
+uCSIsTamil()
+uCSIsTelugu()
+uCSIsThaana()
+uCSIsThai()
+uCSIsTibetan()
+uCSIsUgaritic()
+uCSIsUnifiedCanadianAboriginalSyllabics()
+uCSIsVariationSelectors()
+uCSIsVariationSelectorsSupplement()
+uCSIsYiRadicals()
+uCSIsYiSyllables()
+uCSIsYijingHexagramSymbols()
+
+# functions from module xmlversion
+checkVersion()
+
+# functions from module xpathInternals
+valuePop()
+
+
+#
+# Set of classes of the module
+#
+
+
+
+Class xmlNode(xmlCore)
+    # accessors
+    ns()
+    nsDefs()
+
+    # functions from module debugXML
+    debugDumpNode()
+    debugDumpNodeList()
+    debugDumpOneNode()
+    lsCountNode()
+    lsOneNode()
+    shellPrintNode()
+
+    # functions from module tree
+    addChild()
+    addChildList()
+    addContent()
+    addContentLen()
+    addNextSibling()
+    addPrevSibling()
+    addSibling()
+    copyNode()
+    copyNodeList()
+    copyProp()
+    copyPropList()
+    docCopyNode()
+    docCopyNodeList()
+    docSetRootElement()
+    firstElementChild()
+    freeNode()
+    freeNodeList()
+    getBase()
+    getContent()
+    getLang()
+    getSpacePreserve()
+    hasNsProp()
+    hasProp()
+    isBlankNode()
+    isText()
+    lastChild()
+    lastElementChild()
+    lineNo()
+    listGetRawString()
+    listGetString()
+    newChild()
+    newNs()
+    newNsProp()
+    newNsPropEatName()
+    newProp()
+    newTextChild()
+    nextElementSibling()
+    noNsProp()
+    nodePath()
+    nsProp()
+    previousElementSibling()
+    prop()
+    reconciliateNs()
+    replaceNode()
+    searchNs()
+    searchNsByHref()
+    setBase()
+    setContent()
+    setContentLen()
+    setLang()
+    setListDoc()
+    setName()
+    setNs()
+    setNsProp()
+    setProp()
+    setSpacePreserve()
+    setTreeDoc()
+    textConcat()
+    textMerge()
+    unlinkNode()
+    unsetNsProp()
+    unsetProp()
+
+    # functions from module valid
+    isID()
+    isRef()
+    validNormalizeAttributeValue()
+
+    # functions from module xinclude
+    xincludeProcessTree()
+    xincludeProcessTreeFlags()
+
+    # functions from module xmlschemas
+    schemaValidateOneElement()
+
+    # functions from module xpath
+    xpathCastNodeToNumber()
+    xpathCastNodeToString()
+    xpathCmpNodes()
+    xpathNodeEval()
+
+    # functions from module xpathInternals
+    xpathNewNodeSet()
+    xpathNewValueTree()
+    xpathNextAncestor()
+    xpathNextAncestorOrSelf()
+    xpathNextAttribute()
+    xpathNextChild()
+    xpathNextDescendant()
+    xpathNextDescendantOrSelf()
+    xpathNextFollowing()
+    xpathNextFollowingSibling()
+    xpathNextNamespace()
+    xpathNextParent()
+    xpathNextPreceding()
+    xpathNextPrecedingSibling()
+    xpathNextSelf()
+
+    # functions from module xpointer
+    xpointerNewCollapsedRange()
+    xpointerNewContext()
+    xpointerNewLocationSetNodes()
+    xpointerNewRange()
+    xpointerNewRangeNodes()
+
+
+Class xmlDoc(xmlNode)
+
+    # functions from module HTMLparser
+    htmlAutoCloseTag()
+    htmlIsAutoClosed()
+
+    # functions from module HTMLtree
+    htmlDocContentDumpFormatOutput()
+    htmlDocContentDumpOutput()
+    htmlDocDump()
+    htmlGetMetaEncoding()
+    htmlNodeDumpFile()
+    htmlNodeDumpFileFormat()
+    htmlNodeDumpFormatOutput()
+    htmlNodeDumpOutput()
+    htmlSaveFile()
+    htmlSaveFileEnc()
+    htmlSaveFileFormat()
+    htmlSetMetaEncoding()
+
+    # functions from module debugXML
+    debugCheckDocument()
+    debugDumpDocument()
+    debugDumpDocumentHead()
+    debugDumpEntities()
+
+    # functions from module entities
+    addDocEntity()
+    addDtdEntity()
+    docEntity()
+    dtdEntity()
+    encodeEntities()
+    encodeEntitiesReentrant()
+    encodeSpecialChars()
+    newEntity()
+    parameterEntity()
+
+    # functions from module relaxng
+    relaxNGNewDocParserCtxt()
+    relaxNGValidateDoc()
+    relaxNGValidateFullElement()
+    relaxNGValidatePopElement()
+    relaxNGValidatePushElement()
+
+    # functions from module tree
+    copyDoc()
+    copyNode()
+    copyNodeList()
+    createIntSubset()
+    docCompressMode()
+    dump()
+    elemDump()
+    formatDump()
+    freeDoc()
+    getRootElement()
+    intSubset()
+    newCDataBlock()
+    newCharRef()
+    newDocComment()
+    newDocFragment()
+    newDocNode()
+    newDocNodeEatName()
+    newDocPI()
+    newDocProp()
+    newDocRawNode()
+    newDocText()
+    newDocTextLen()
+    newDtd()
+    newGlobalNs()
+    newReference()
+    nodeDumpOutput()
+    nodeGetBase()
+    nodeListGetRawString()
+    nodeListGetString()
+    reconciliateNs()
+    saveFile()
+    saveFileEnc()
+    saveFileTo()
+    saveFormatFile()
+    saveFormatFileEnc()
+    saveFormatFileTo()
+    searchNs()
+    searchNsByHref()
+    setDocCompressMode()
+    setListDoc()
+    setRootElement()
+    setTreeDoc()
+    stringGetNodeList()
+    stringLenGetNodeList()
+
+    # functions from module valid
+    ID()
+    isID()
+    isMixedElement()
+    isRef()
+    removeID()
+    removeRef()
+    validCtxtNormalizeAttributeValue()
+    validNormalizeAttributeValue()
+    validateDocument()
+    validateDocumentFinal()
+    validateDtd()
+    validateDtdFinal()
+    validateElement()
+    validateNotationUse()
+    validateOneAttribute()
+    validateOneElement()
+    validateOneNamespace()
+    validatePopElement()
+    validatePushElement()
+    validateRoot()
+
+    # functions from module xinclude
+    xincludeProcess()
+    xincludeProcessFlags()
+
+    # functions from module xmlreader
+    NewWalker()
+    readerWalker()
+
+    # functions from module xmlschemas
+    schemaNewDocParserCtxt()
+    schemaValidateDoc()
+
+    # functions from module xpath
+    xpathNewContext()
+    xpathOrderDocElems()
+
+    # functions from module xpointer
+    xpointerNewContext()
+
+
+Class parserCtxt(parserCtxtCore)
+    # accessors
+    doc()
+    isValid()
+    lineNumbers()
+    loadSubset()
+    pedantic()
+    replaceEntities()
+    validate()
+    wellFormed()
+
+    # functions from module HTMLparser
+    htmlCtxtReadDoc()
+    htmlCtxtReadFd()
+    htmlCtxtReadFile()
+    htmlCtxtReadMemory()
+    htmlCtxtReset()
+    htmlCtxtUseOptions()
+    htmlFreeParserCtxt()
+    htmlParseCharRef()
+    htmlParseChunk()
+    htmlParseDocument()
+    htmlParseElement()
+
+    # functions from module parser
+    byteConsumed()
+    clearParserCtxt()
+    ctxtReadDoc()
+    ctxtReadFd()
+    ctxtReadFile()
+    ctxtReadMemory()
+    ctxtReset()
+    ctxtResetPush()
+    ctxtUseOptions()
+    initParserCtxt()
+    parseChunk()
+    parseDocument()
+    parseExtParsedEnt()
+    setupParserForBuffer()
+    stopParser()
+
+    # functions from module parserInternals
+    decodeEntities()
+    handleEntity()
+    namespaceParseNCName()
+    namespaceParseNSDef()
+    nextChar()
+    parseAttValue()
+    parseAttributeListDecl()
+    parseCDSect()
+    parseCharData()
+    parseCharRef()
+    parseComment()
+    parseContent()
+    parseDocTypeDecl()
+    parseElement()
+    parseElementDecl()
+    parseEncName()
+    parseEncodingDecl()
+    parseEndTag()
+    parseEntityDecl()
+    parseEntityRef()
+    parseExternalSubset()
+    parseMarkupDecl()
+    parseMisc()
+    parseName()
+    parseNamespace()
+    parseNmtoken()
+    parseNotationDecl()
+    parsePEReference()
+    parsePI()
+    parsePITarget()
+    parsePubidLiteral()
+    parseQuotedString()
+    parseReference()
+    parseSDDecl()
+    parseStartTag()
+    parseSystemLiteral()
+    parseTextDecl()
+    parseVersionInfo()
+    parseVersionNum()
+    parseXMLDecl()
+    parserHandlePEReference()
+    parserHandleReference()
+    popInput()
+    scanName()
+    skipBlankChars()
+    stringDecodeEntities()
+    stringLenDecodeEntities()
+
+
+Class xmlAttr(xmlNode)
+
+    # functions from module debugXML
+    debugDumpAttr()
+    debugDumpAttrList()
+
+    # functions from module tree
+    copyProp()
+    copyPropList()
+    freeProp()
+    freePropList()
+    removeProp()
+
+    # functions from module valid
+    removeID()
+    removeRef()
+
+
+Class xmlAttribute(xmlNode)
+Class catalog()
+
+    # functions from module catalog
+    add()
+    catalogIsEmpty()
+    convertSGMLCatalog()
+    dump()
+    remove()
+    resolve()
+    resolvePublic()
+    resolveSystem()
+    resolveURI()
+
+
+Class xmlDtd(xmlNode)
+
+    # functions from module debugXML
+    debugDumpDTD()
+
+    # functions from module tree
+    copyDtd()
+    freeDtd()
+
+    # functions from module valid
+    dtdAttrDesc()
+    dtdElementDesc()
+    dtdQAttrDesc()
+    dtdQElementDesc()
+
+
+Class xmlElement(xmlNode)
+
+
+Class xmlEntity(xmlNode)
+
+    # functions from module parserInternals
+    handleEntity()
+Class Error()
+    # accessors
+    code()
+    domain()
+    file()
+    level()
+    line()
+    message()
+
+    # functions from module xmlerror
+    copyError()
+    resetError()
+
+
+Class xmlNs(xmlNode)
+
+    # functions from module tree
+    copyNamespace()
+    copyNamespaceList()
+    freeNs()
+    freeNsList()
+    newChild()
+    newDocNode()
+    newDocNodeEatName()
+    newDocRawNode()
+    newNodeEatName()
+    newNsProp()
+    newNsPropEatName()
+    newTextChild()
+    setNs()
+    setNsProp()
+    unsetNsProp()
+
+    # functions from module xpathInternals
+    xpathNodeSetFreeNs()
+
+
+Class outputBuffer(ioWriteWrapper)
+
+    # functions from module HTMLtree
+    htmlDocContentDumpFormatOutput()
+    htmlDocContentDumpOutput()
+    htmlNodeDumpFormatOutput()
+    htmlNodeDumpOutput()
+
+    # functions from module tree
+    nodeDumpOutput()
+    saveFileTo()
+    saveFormatFileTo()
+
+    # functions from module xmlIO
+    getContent()
+    write()
+    writeString()
+
+
+Class inputBuffer(ioReadWrapper)
+
+    # functions from module xmlIO
+    grow()
+    push()
+    read()
+
+    # functions from module xmlreader
+    Setup()
+    newTextReader()
+Class xmlReg()
+
+    # functions from module xmlregexp
+    regexpExec()
+    regexpIsDeterminist()
+    regexpPrint()
+Class relaxNgParserCtxt()
+
+    # functions from module relaxng
+    relaxNGParse()
+    relaxParserSetFlag()
+Class relaxNgSchema()
+
+    # functions from module relaxng
+    relaxNGDump()
+    relaxNGDumpTree()
+    relaxNGNewValidCtxt()
+
+    # functions from module xmlreader
+    RelaxNGSetSchema()
+
+
+Class relaxNgValidCtxt(relaxNgValidCtxtCore)
+
+    # functions from module relaxng
+    relaxNGValidateDoc()
+    relaxNGValidateFullElement()
+    relaxNGValidatePopElement()
+    relaxNGValidatePushCData()
+    relaxNGValidatePushElement()
+
+    # functions from module xmlreader
+    RelaxNGValidateCtxt()
+Class SchemaParserCtxt()
+
+    # functions from module xmlschemas
+    schemaParse()
+Class Schema()
+
+    # functions from module xmlreader
+    SetSchema()
+
+    # functions from module xmlschemas
+    schemaDump()
+    schemaNewValidCtxt()
+
+
+Class SchemaValidCtxt(SchemaValidCtxtCore)
+
+    # functions from module xmlreader
+    SchemaValidateCtxt()
+
+    # functions from module xmlschemas
+    schemaIsValid()
+    schemaSetValidOptions()
+    schemaValidCtxtGetOptions()
+    schemaValidCtxtGetParserCtxt()
+    schemaValidateDoc()
+    schemaValidateFile()
+    schemaValidateOneElement()
+    schemaValidateSetFilename()
+Class xmlTextReaderLocator()
+
+    # functions from module xmlreader
+    BaseURI()
+    LineNumber()
+
+
+Class xmlTextReader(xmlTextReaderCore)
+
+    # functions from module xmlreader
+    AttributeCount()
+    BaseUri()
+    ByteConsumed()
+    Close()
+    CurrentDoc()
+    CurrentNode()
+    Depth()
+    Encoding()
+    Expand()
+    GetAttribute()
+    GetAttributeNo()
+    GetAttributeNs()
+    GetParserColumnNumber()
+    GetParserLineNumber()
+    GetParserProp()
+    GetRemainder()
+    HasAttributes()
+    HasValue()
+    IsDefault()
+    IsEmptyElement()
+    IsNamespaceDecl()
+    IsValid()
+    LocalName()
+    LookupNamespace()
+    MoveToAttribute()
+    MoveToAttributeNo()
+    MoveToAttributeNs()
+    MoveToElement()
+    MoveToFirstAttribute()
+    MoveToNextAttribute()
+    Name()
+    NamespaceUri()
+    NewDoc()
+    NewFd()
+    NewFile()
+    NewMemory()
+    NewWalker()
+    Next()
+    NextSibling()
+    NodeType()
+    Normalization()
+    Prefix()
+    Preserve()
+    QuoteChar()
+    Read()
+    ReadAttributeValue()
+    ReadInnerXml()
+    ReadOuterXml()
+    ReadState()
+    ReadString()
+    RelaxNGSetSchema()
+    RelaxNGValidate()
+    RelaxNGValidateCtxt()
+    SchemaValidate()
+    SchemaValidateCtxt()
+    SetParserProp()
+    SetSchema()
+    Setup()
+    Standalone()
+    String()
+    Value()
+    XmlLang()
+    XmlVersion()
+Class URI()
+    # accessors
+    authority()
+    fragment()
+    opaque()
+    path()
+    port()
+    query()
+    queryRaw()
+    scheme()
+    server()
+    setAuthority()
+    setFragment()
+    setOpaque()
+    setPath()
+    setPort()
+    setQuery()
+    setQueryRaw()
+    setScheme()
+    setServer()
+    setUser()
+    user()
+
+    # functions from module uri
+    parseURIReference()
+    printURI()
+    saveUri()
+
+
+Class ValidCtxt(ValidCtxtCore)
+
+    # functions from module valid
+    validCtxtNormalizeAttributeValue()
+    validateDocument()
+    validateDocumentFinal()
+    validateDtd()
+    validateDtdFinal()
+    validateElement()
+    validateNotationUse()
+    validateOneAttribute()
+    validateOneElement()
+    validateOneNamespace()
+    validatePopElement()
+    validatePushCData()
+    validatePushElement()
+    validateRoot()
+Class xpathContext()
+    # accessors
+    contextDoc()
+    contextNode()
+    contextPosition()
+    contextSize()
+    function()
+    functionURI()
+    setContextDoc()
+    setContextNode()
+
+    # functions from module python
+    registerXPathFunction()
+    xpathRegisterVariable()
+
+    # functions from module xpath
+    xpathContextSetCache()
+    xpathEval()
+    xpathEvalExpression()
+    xpathFreeContext()
+
+    # functions from module xpathInternals
+    xpathNewParserContext()
+    xpathNsLookup()
+    xpathRegisterAllFunctions()
+    xpathRegisterNs()
+    xpathRegisteredFuncsCleanup()
+    xpathRegisteredNsCleanup()
+    xpathRegisteredVariablesCleanup()
+    xpathVariableLookup()
+    xpathVariableLookupNS()
+
+    # functions from module xpointer
+    xpointerEval()
+Class xpathParserContext()
+    # accessors
+    context()
+
+    # functions from module xpathInternals
+    xpathAddValues()
+    xpathBooleanFunction()
+    xpathCeilingFunction()
+    xpathCompareValues()
+    xpathConcatFunction()
+    xpathContainsFunction()
+    xpathCountFunction()
+    xpathDivValues()
+    xpathEqualValues()
+    xpathErr()
+    xpathEvalExpr()
+    xpathFalseFunction()
+    xpathFloorFunction()
+    xpathFreeParserContext()
+    xpathIdFunction()
+    xpathLangFunction()
+    xpathLastFunction()
+    xpathLocalNameFunction()
+    xpathModValues()
+    xpathMultValues()
+    xpathNamespaceURIFunction()
+    xpathNextAncestor()
+    xpathNextAncestorOrSelf()
+    xpathNextAttribute()
+    xpathNextChild()
+    xpathNextDescendant()
+    xpathNextDescendantOrSelf()
+    xpathNextFollowing()
+    xpathNextFollowingSibling()
+    xpathNextNamespace()
+    xpathNextParent()
+    xpathNextPreceding()
+    xpathNextPrecedingSibling()
+    xpathNextSelf()
+    xpathNormalizeFunction()
+    xpathNotEqualValues()
+    xpathNotFunction()
+    xpathNumberFunction()
+    xpathParseNCName()
+    xpathParseName()
+    xpathPopBoolean()
+    xpathPopNumber()
+    xpathPopString()
+    xpathPositionFunction()
+    xpathRoot()
+    xpathRoundFunction()
+    xpathStartsWithFunction()
+    xpathStringFunction()
+    xpathStringLengthFunction()
+    xpathSubValues()
+    xpathSubstringAfterFunction()
+    xpathSubstringBeforeFunction()
+    xpathSubstringFunction()
+    xpathSumFunction()
+    xpathTranslateFunction()
+    xpathTrueFunction()
+    xpathValueFlipSign()
+    xpatherror()
+
+    # functions from module xpointer
+    xpointerEvalRangePredicate()
+    xpointerRangeToFunction()
index eaa5e96..53a0618 100644 (file)
 #include <libxml/xmlschemas.h>
 #endif
 
+/*
+ * for older versions of Python, we don't use PyBytes, but keep PyString
+ * and don't use Capsule but CObjects
+ */
+#if PY_VERSION_HEX < 0x02070000
+#ifndef PyBytes_Check
+#define PyBytes_Check PyString_Check
+#define PyBytes_Size PyString_Size
+#define PyBytes_AsString PyString_AsString
+#define PyBytes_AS_STRING PyString_AS_STRING
+#define PyBytes_GET_SIZE PyString_GET_SIZE
+#endif
+#ifndef PyCapsule_New
+#define PyCapsule_New PyCObject_FromVoidPtrAndDesc
+#define PyCapsule_CheckExact PyCObject_Check
+#define PyCapsule_GetPointer(o, n) PyCObject_GetDesc((o))
+#endif
+#endif
+
 /**
  * ATTRIBUTE_UNUSED:
  *
@@ -150,8 +169,16 @@ typedef struct {
 } PyURI_Object;
 
 /* FILE * have their own internal representation */
+#if PY_MAJOR_VERSION >= 3
+FILE *libxml_PyFileGet(PyObject *f);
+void libxml_PyFileRelease(FILE *f);
+#define PyFile_Get(v) (((v) == Py_None) ? NULL : libxml_PyFileGet(v))
+#define PyFile_Release(f) libxml_PyFileRelease(f)
+#else
 #define PyFile_Get(v) (((v) == Py_None) ? NULL : \
        (PyFile_Check(v) ? (PyFile_AsFile(v)) : stdout))
+#define PyFile_Release(f)
+#endif
 
 #ifdef LIBXML_SCHEMAS_ENABLED
 typedef struct {
@@ -247,3 +274,6 @@ PyObject * libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid);
 #endif /* LIBXML_SCHEMAS_ENABLED */
 PyObject * libxml_xmlErrorPtrWrap(xmlErrorPtr error);
 PyObject * libxml_xmlSchemaSetValidErrors(PyObject * self, PyObject * args);
+PyObject * libxml_xmlRegisterInputCallback(PyObject *self, PyObject *args);
+PyObject * libxml_xmlUnregisterInputCallback(PyObject *self, PyObject *args);
+PyObject * libxml_xmlNodeRemoveNsDef(PyObject * self, PyObject * args);
index b985979..e504323 100755 (executable)
@@ -6,14 +6,14 @@ import sys, os
 from distutils.core import setup, Extension
 
 # Below ROOT, we expect to find include, include/libxml2, lib and bin.
-# On *nix, it is not needed (but should not harm), 
+# On *nix, it is not needed (but should not harm),
 # on Windows, it is set by configure.js.
-ROOT = r'/usr' 
+ROOT = r'/usr'
 
 # Thread-enabled libxml2
 with_threads = 1
 
-# If this flag is set (windows only), 
+# If this flag is set (windows only),
 # a private copy of the dlls are included in the package.
 # If this flag is not set, the libxml2 and libxslt
 # dlls must be found somewhere in the PATH at runtime.
@@ -32,7 +32,7 @@ except:
 if WITHDLLS:
     # libxml dlls (expected in ROOT/bin)
     dlls = [ 'iconv.dll','libxml2.dll','libxslt.dll','libexslt.dll' ]
-    dlls = map(lambda dll: os.path.join(ROOT,'bin',dll),dlls)
+    dlls = [os.path.join(ROOT,'bin',dll) for dll in dlls]
 
     # create __init__.py for the libxmlmods package
     if not os.path.exists("libxmlmods"):
@@ -51,9 +51,9 @@ else:
     libraryPrefix = ''
     platformLibs = ["m","z"]
 
-# those are examined to find 
+# those are examined to find
 # - libxml2/libxml/tree.h
-# - iconv.h 
+# - iconv.h
 # - libxslt/xsltconfig.h
 includes_dir = [
 "/usr/include",
@@ -67,20 +67,20 @@ xml_includes=""
 for dir in includes_dir:
     if not missing(dir + "/libxml2/libxml/tree.h"):
         xml_includes=dir + "/libxml2"
-       break;
+        break;
 
 if xml_includes == "":
-    print "failed to find headers for libxml2: update includes_dir"
+    print("failed to find headers for libxml2: update includes_dir")
     sys.exit(1)
 
 iconv_includes=""
 for dir in includes_dir:
     if not missing(dir + "/iconv.h"):
         iconv_includes=dir
-       break;
+        break;
 
 if iconv_includes == "":
-    print "failed to find headers for libiconv: update includes_dir"
+    print("failed to find headers for libiconv: update includes_dir")
     sys.exit(1)
 
 # those are added in the linker search path for libraries
@@ -90,22 +90,22 @@ os.path.join(ROOT,'lib'),
 
 xml_files = ["libxml2-api.xml", "libxml2-python-api.xml",
              "libxml.c", "libxml.py", "libxml_wrap.h", "types.c",
-            "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
+             "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
 
 xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
              "libxslt.c", "libxsl.py", "libxslt_wrap.h",
-            "xsltgenerator.py"]
+             "xsltgenerator.py"]
 
 if missing("libxml2-py.c") or missing("libxml2.py"):
     try:
-       try:
-           import xmlgenerator
-       except:
-           import generator
+        try:
+            import xmlgenerator
+        except:
+            import generator
     except:
-       print "failed to find and generate stubs for libxml2, aborting ..."
-       print sys.exc_type, sys.exc_value
-       sys.exit(1)
+        print("failed to find and generate stubs for libxml2, aborting ...")
+        print(sys.exc_info()[0], sys.exc_info()[1])
+        sys.exit(1)
 
     head = open("libxml.py", "r")
     generated = open("libxml2class.py", "r")
@@ -116,7 +116,7 @@ if missing("libxml2-py.c") or missing("libxml2.py"):
         else:
             result.write(line)
     for line in generated.readlines():
-       result.write(line)
+        result.write(line)
     head.close()
     generated.close()
     result.close()
@@ -124,41 +124,41 @@ if missing("libxml2-py.c") or missing("libxml2.py"):
 with_xslt=0
 if missing("libxslt-py.c") or missing("libxslt.py"):
     if missing("xsltgenerator.py") or missing("libxslt-api.xml"):
-        print "libxslt stub generator not found, libxslt not built"
+        print("libxslt stub generator not found, libxslt not built")
     else:
-       try:
-           import xsltgenerator
-       except:
-           print "failed to generate stubs for libxslt, aborting ..."
-           print sys.exc_type, sys.exc_value
-       else:
-           head = open("libxsl.py", "r")
-           generated = open("libxsltclass.py", "r")
-           result = open("libxslt.py", "w")
-           for line in head.readlines():
+        try:
+            import xsltgenerator
+        except:
+            print("failed to generate stubs for libxslt, aborting ...")
+            print(sys.exc_info()[0], sys.exc_info()[1])
+        else:
+            head = open("libxsl.py", "r")
+            generated = open("libxsltclass.py", "r")
+            result = open("libxslt.py", "w")
+            for line in head.readlines():
                 if WITHDLLS:
                     result.write(altImport(line))
                 else:
                     result.write(line)
-           for line in generated.readlines():
-               result.write(line)
-           head.close()
-           generated.close()
-           result.close()
-           with_xslt=1
+            for line in generated.readlines():
+                result.write(line)
+            head.close()
+            generated.close()
+            result.close()
+            with_xslt=1
 else:
     with_xslt=1
 
 if with_xslt == 1:
     xslt_includes=""
     for dir in includes_dir:
-       if not missing(dir + "/libxslt/xsltconfig.h"):
-           xslt_includes=dir + "/libxslt"
-           break;
+        if not missing(dir + "/libxslt/xsltconfig.h"):
+            xslt_includes=dir + "/libxslt"
+            break;
 
     if xslt_includes == "":
-       print "failed to find headers for libxslt: update includes_dir"
-       with_xslt = 0
+        print("failed to find headers for libxslt: update includes_dir")
+        with_xslt = 0
 
 
 descr = "libxml2 package"
@@ -194,11 +194,11 @@ if with_xslt == 1:
 
 
 extens=[Extension('libxml2mod', c_files, include_dirs=includes,
-                  library_dirs=libdirs, 
-                  libraries=libs, define_macros=macros)] 
+                  library_dirs=libdirs,
+                  libraries=libs, define_macros=macros)]
 if with_xslt == 1:
     extens.append(Extension('libxsltmod', xslt_c_files, include_dirs=includes,
-                           library_dirs=libdirs, 
+                            library_dirs=libdirs,
                             libraries=libs, define_macros=macros))
 
 if missing("MANIFEST"):
@@ -208,8 +208,8 @@ if missing("MANIFEST"):
     for file in xml_files:
         manifest.write(file + "\n")
     if with_xslt == 1:
-       for file in xslt_files:
-           manifest.write(file + "\n")
+        for file in xslt_files:
+            manifest.write(file + "\n")
     manifest.close()
 
 if WITHDLLS:
@@ -226,7 +226,7 @@ else:
 setup (name = "libxml2-python",
        # On *nix, the version number is created from setup.py.in
        # On windows, it is set by configure.js
-       version = "2.8.0",
+       version = "2.9.2",
        description = descr,
        author = "Daniel Veillard",
        author_email = "veillard@redhat.com",
index 7eaf530..90c2114 100755 (executable)
@@ -6,14 +6,14 @@ import sys, os
 from distutils.core import setup, Extension
 
 # Below ROOT, we expect to find include, include/libxml2, lib and bin.
-# On *nix, it is not needed (but should not harm), 
+# On *nix, it is not needed (but should not harm),
 # on Windows, it is set by configure.js.
-ROOT = r'@prefix@' 
+ROOT = r'@prefix@'
 
 # Thread-enabled libxml2
 with_threads = @WITH_THREADS@
 
-# If this flag is set (windows only), 
+# If this flag is set (windows only),
 # a private copy of the dlls are included in the package.
 # If this flag is not set, the libxml2 and libxslt
 # dlls must be found somewhere in the PATH at runtime.
@@ -32,7 +32,7 @@ except:
 if WITHDLLS:
     # libxml dlls (expected in ROOT/bin)
     dlls = [ 'iconv.dll','libxml2.dll','libxslt.dll','libexslt.dll' ]
-    dlls = map(lambda dll: os.path.join(ROOT,'bin',dll),dlls)
+    dlls = [os.path.join(ROOT,'bin',dll) for dll in dlls]
 
     # create __init__.py for the libxmlmods package
     if not os.path.exists("libxmlmods"):
@@ -51,9 +51,9 @@ else:
     libraryPrefix = ''
     platformLibs = ["m","z"]
 
-# those are examined to find 
+# those are examined to find
 # - libxml2/libxml/tree.h
-# - iconv.h 
+# - iconv.h
 # - libxslt/xsltconfig.h
 includes_dir = [
 "/usr/include",
@@ -67,20 +67,20 @@ xml_includes=""
 for dir in includes_dir:
     if not missing(dir + "/libxml2/libxml/tree.h"):
         xml_includes=dir + "/libxml2"
-       break;
+        break;
 
 if xml_includes == "":
-    print "failed to find headers for libxml2: update includes_dir"
+    print("failed to find headers for libxml2: update includes_dir")
     sys.exit(1)
 
 iconv_includes=""
 for dir in includes_dir:
     if not missing(dir + "/iconv.h"):
         iconv_includes=dir
-       break;
+        break;
 
 if iconv_includes == "":
-    print "failed to find headers for libiconv: update includes_dir"
+    print("failed to find headers for libiconv: update includes_dir")
     sys.exit(1)
 
 # those are added in the linker search path for libraries
@@ -90,22 +90,22 @@ os.path.join(ROOT,'lib'),
 
 xml_files = ["libxml2-api.xml", "libxml2-python-api.xml",
              "libxml.c", "libxml.py", "libxml_wrap.h", "types.c",
-            "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
+             "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
 
 xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
              "libxslt.c", "libxsl.py", "libxslt_wrap.h",
-            "xsltgenerator.py"]
+             "xsltgenerator.py"]
 
 if missing("libxml2-py.c") or missing("libxml2.py"):
     try:
-       try:
-           import xmlgenerator
-       except:
-           import generator
+        try:
+            import xmlgenerator
+        except:
+            import generator
     except:
-       print "failed to find and generate stubs for libxml2, aborting ..."
-       print sys.exc_type, sys.exc_value
-       sys.exit(1)
+        print("failed to find and generate stubs for libxml2, aborting ...")
+        print(sys.exc_info()[0], sys.exc_info()[1])
+        sys.exit(1)
 
     head = open("libxml.py", "r")
     generated = open("libxml2class.py", "r")
@@ -116,7 +116,7 @@ if missing("libxml2-py.c") or missing("libxml2.py"):
         else:
             result.write(line)
     for line in generated.readlines():
-       result.write(line)
+        result.write(line)
     head.close()
     generated.close()
     result.close()
@@ -124,41 +124,41 @@ if missing("libxml2-py.c") or missing("libxml2.py"):
 with_xslt=0
 if missing("libxslt-py.c") or missing("libxslt.py"):
     if missing("xsltgenerator.py") or missing("libxslt-api.xml"):
-        print "libxslt stub generator not found, libxslt not built"
+        print("libxslt stub generator not found, libxslt not built")
     else:
-       try:
-           import xsltgenerator
-       except:
-           print "failed to generate stubs for libxslt, aborting ..."
-           print sys.exc_type, sys.exc_value
-       else:
-           head = open("libxsl.py", "r")
-           generated = open("libxsltclass.py", "r")
-           result = open("libxslt.py", "w")
-           for line in head.readlines():
+        try:
+            import xsltgenerator
+        except:
+            print("failed to generate stubs for libxslt, aborting ...")
+            print(sys.exc_info()[0], sys.exc_info()[1])
+        else:
+            head = open("libxsl.py", "r")
+            generated = open("libxsltclass.py", "r")
+            result = open("libxslt.py", "w")
+            for line in head.readlines():
                 if WITHDLLS:
                     result.write(altImport(line))
                 else:
                     result.write(line)
-           for line in generated.readlines():
-               result.write(line)
-           head.close()
-           generated.close()
-           result.close()
-           with_xslt=1
+            for line in generated.readlines():
+                result.write(line)
+            head.close()
+            generated.close()
+            result.close()
+            with_xslt=1
 else:
     with_xslt=1
 
 if with_xslt == 1:
     xslt_includes=""
     for dir in includes_dir:
-       if not missing(dir + "/libxslt/xsltconfig.h"):
-           xslt_includes=dir + "/libxslt"
-           break;
+        if not missing(dir + "/libxslt/xsltconfig.h"):
+            xslt_includes=dir + "/libxslt"
+            break;
 
     if xslt_includes == "":
-       print "failed to find headers for libxslt: update includes_dir"
-       with_xslt = 0
+        print("failed to find headers for libxslt: update includes_dir")
+        with_xslt = 0
 
 
 descr = "libxml2 package"
@@ -194,11 +194,11 @@ if with_xslt == 1:
 
 
 extens=[Extension('libxml2mod', c_files, include_dirs=includes,
-                  library_dirs=libdirs, 
-                  libraries=libs, define_macros=macros)] 
+                  library_dirs=libdirs,
+                  libraries=libs, define_macros=macros)]
 if with_xslt == 1:
     extens.append(Extension('libxsltmod', xslt_c_files, include_dirs=includes,
-                           library_dirs=libdirs, 
+                            library_dirs=libdirs,
                             libraries=libs, define_macros=macros))
 
 if missing("MANIFEST"):
@@ -208,8 +208,8 @@ if missing("MANIFEST"):
     for file in xml_files:
         manifest.write(file + "\n")
     if with_xslt == 1:
-       for file in xslt_files:
-           manifest.write(file + "\n")
+        for file in xslt_files:
+            manifest.write(file + "\n")
     manifest.close()
 
 if WITHDLLS:
index 52c89fc..95ebead 100644 (file)
@@ -19,6 +19,7 @@ PYTESTS=      \
     xpath.py   \
     outbuf.py  \
     inbuf.py   \
+    input_callback.py \
     resolver.py \
     regexp.py  \
     reader.py  \
@@ -55,8 +56,11 @@ XMLS=                \
     invalid.xml        \
     test.dtd
 
+CLEANFILES = core tmp.xml *.pyc
+
 if WITH_PYTHON
 tests: $(PYTESTS)
+       @for f in $(XMLS) ; do test -f $$f || $(LN_S) $(srcdir)/$$f . ; done
        @echo "## running Python regression tests"
        -@(PYTHONPATH="..:../.libs:$(srcdir)/..:$$PYTHONPATH" ; \
           export PYTHONPATH; \
@@ -69,6 +73,3 @@ tests: $(PYTESTS)
 else
 tests:
 endif
-
-clean:
-       rm -f *.pyc core
index a2aaf89..ffda69b 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 @SET_MAKE@
 
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -35,27 +79,38 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = python/tests
-DIST_COMMON = $(dist_example_DATA) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(dist_example_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -77,14 +132,20 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
 am__installdirs = "$(DESTDIR)$(exampledir)"
 DATA = $(dist_example_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -121,6 +182,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -165,6 +227,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -176,7 +241,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -201,7 +265,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -234,6 +297,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -327,6 +391,7 @@ PYTESTS = \
     xpath.py   \
     outbuf.py  \
     inbuf.py   \
+    input_callback.py \
     resolver.py \
     regexp.py  \
     reader.py  \
@@ -363,6 +428,7 @@ XMLS = \
     invalid.xml        \
     test.dtd
 
+CLEANFILES = core tmp.xml *.pyc
 all: all-am
 
 .SUFFIXES:
@@ -404,8 +470,11 @@ clean-libtool:
        -rm -rf .libs _libs
 install-dist_exampleDATA: $(dist_example_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(exampledir)" || $(MKDIR_P) "$(DESTDIR)$(exampledir)"
        @list='$(dist_example_DATA)'; test -n "$(exampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(exampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(exampledir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -419,14 +488,12 @@ uninstall-dist_exampleDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(dist_example_DATA)'; test -n "$(exampledir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(exampledir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(exampledir)" && rm -f $$files
-tags: TAGS
-TAGS:
+       dir='$(DESTDIR)$(exampledir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
 
-ctags: CTAGS
-CTAGS:
+cscope cscopelist:
 
 
 distdir: $(DISTFILES)
@@ -476,13 +543,19 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -491,6 +564,8 @@ distclean-generic:
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
 clean-am: clean-generic clean-libtool mostlyclean-am
 
 distclean: distclean-am
@@ -558,19 +633,21 @@ uninstall-am: uninstall-dist_exampleDATA
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-       distclean distclean-generic distclean-libtool distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dist_exampleDATA \
-       install-dvi install-dvi-am install-exec install-exec-am \
-       install-html install-html-am install-info install-info-am \
-       install-man install-pdf install-pdf-am install-ps \
-       install-ps-am install-strip installcheck installcheck-am \
-       installdirs maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-       ps ps-am uninstall uninstall-am uninstall-dist_exampleDATA
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_exampleDATA install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+       uninstall-am uninstall-dist_exampleDATA
 
 
 @WITH_PYTHON_TRUE@tests: $(PYTESTS)
+@WITH_PYTHON_TRUE@     @for f in $(XMLS) ; do test -f $$f || $(LN_S) $(srcdir)/$$f . ; done
 @WITH_PYTHON_TRUE@     @echo "## running Python regression tests"
 @WITH_PYTHON_TRUE@     -@(PYTHONPATH="..:../.libs:$(srcdir)/..:$$PYTHONPATH" ; \
 @WITH_PYTHON_TRUE@        export PYTHONPATH; \
@@ -582,9 +659,6 @@ uninstall-am: uninstall-dist_exampleDATA
 @WITH_PYTHON_TRUE@        echo "-- $$test" ; echo "$$log" ; fi ; done)
 @WITH_PYTHON_FALSE@tests:
 
-clean:
-       rm -f *.pyc core
-
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index 9331a27..99132c2 100755 (executable)
@@ -20,7 +20,7 @@ doc = libxml2.parseDoc(
 elem = doc.getRootElement()
 attr = elem.hasNsProp('attr', 'http://abc.org')
 if attr == None or attr.serialize()[:-1] != """<!ATTLIST test abc:attr CDATA #FIXED "def">""":
-    print "Failed to find defaulted attribute abc:attr"
+    print("Failed to find defaulted attribute abc:attr")
     sys.exit(1)
 
 doc.freeDoc()
@@ -28,7 +28,7 @@ doc.freeDoc()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index bfc776c..b2d3f78 100755 (executable)
@@ -23,29 +23,29 @@ doc = libxml2.parseFile("tmp.xml")
 comment = doc.children
 if comment.type != "comment" or \
    comment.content != "This is a generated document":
-   print "error rereading comment"
+   print("error rereading comment")
    sys.exit(1)
 pi = comment.next
 if pi.type != "pi" or pi.name != "test" or pi.content != "PI content":
-   print "error rereading PI"
+   print("error rereading PI")
    sys.exit(1)
 root = pi.next
 if root.name != "doc":
-   print "error rereading root"
+   print("error rereading root")
    sys.exit(1)
 ns = root.ns()
 if ns.name != "my" or ns.content != "http://example.com/doc":
-   print "error rereading namespace"
+   print("error rereading namespace")
    sys.exit(1)
 elem = root.children
 if elem.name != "foo":
-   print "error rereading elem"
+   print("error rereading elem")
    sys.exit(1)
 if elem.getBase(None) != "http://example.com/imgs":
-   print "error rereading base"
+   print("error rereading base")
    sys.exit(1)
 if elem.prop("img") != "image.gif":
-   print "error rereading property"
+   print("error rereading property")
    sys.exit(1)
 
 doc.freeDoc()
@@ -53,7 +53,7 @@ doc.freeDoc()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index ec04323..ca5a5a2 100755 (executable)
@@ -17,25 +17,25 @@ foonode2 = root.children
 
 # Now check that [in]equality tests work ok
 if not ( foonode1 == foonode2 ):
-    print "Error comparing nodes with ==, nodes should be equal but are unequal"
+    print("Error comparing nodes with ==, nodes should be equal but are unequal")
     sys.exit(1)
 if not ( foonode1 != root ):
-    print "Error comparing nodes with ==, nodes should not be equal but are equal"
+    print("Error comparing nodes with ==, nodes should not be equal but are equal")
     sys.exit(1)
 if not ( foonode1 != root ):
-    print "Error comparing nodes with !=, nodes should not be equal but are equal"
+    print("Error comparing nodes with !=, nodes should not be equal but are equal")
 if ( foonode1 != foonode2 ):
-    print "Error comparing nodes with !=, nodes should be equal but are unequal"
+    print("Error comparing nodes with !=, nodes should be equal but are unequal")
 
 # Next check that the hash function for the objects also works ok
 if not (hash(foonode1) == hash(foonode2)):
-    print "Error hash values for two equal nodes are different"
+    print("Error hash values for two equal nodes are different")
     sys.exit(1)
 if not (hash(foonode1) != hash(root)):
-    print "Error hash values for two unequal nodes are not different"
+    print("Error hash values for two unequal nodes are not different")
     sys.exit(1)
 if hash(foonode1) == hash(root):
-    print "Error hash values for two unequal nodes are equal"
+    print("Error hash values for two unequal nodes are equal")
     sys.exit(1)
 
 # Basic tests successful
@@ -44,7 +44,7 @@ doc.freeDoc()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index f2a897a..416e384 100755 (executable)
@@ -23,7 +23,7 @@ s = """<x xmlns="foo"></y>"""
 parserCtxt = libxml2.createPushParser(None,"",0,"test.xml")
 parserCtxt.setErrorHandler(callback, "-->")
 if parserCtxt.getErrorHandler() != (callback,"-->"):
-    print "getErrorHandler failed"
+    print("getErrorHandler failed")
     sys.exit(1)
 parserCtxt.parseChunk(s,len(s),1)
 doc = parserCtxt.doc()
@@ -31,9 +31,9 @@ doc.freeDoc()
 parserCtxt = None
 
 if err != expect:
-    print "error"
-    print "received %s" %(err)
-    print "expected %s" %(expect)
+    print("error")
+    print("received %s" %(err))
+    print("expected %s" %(expect))
     sys.exit(1)
 
 i = 10000
@@ -50,7 +50,7 @@ while i > 0:
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 0f9665a..7787246 100755 (executable)
@@ -35,14 +35,14 @@ source.freeDoc()
 # check the resulting tree
 str = dest.serialize()
 if str != """<root xmlns:foobar="http://example.org/bar" xmlns:default="http://example.org/include" xmlns:foo="http://example.org/foo"><default:fragment><foo:elem bar="tricky"/></default:fragment></root>""":
-    print "reconciliateNs() failed"
+    print("reconciliateNs() failed")
     sys.exit(1)
 target.freeDoc()
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2011f2c..d4049b8 100755 (executable)
@@ -14,7 +14,7 @@ ctxt = libxml2.newValidCtxt()
 doc = libxml2.parseDoc(instance)
 ret = doc.validateDtd(ctxt, dtd)
 if ret != 1:
-    print "error doing DTD validation"
+    print("error doing DTD validation")
     sys.exit(1)
 
 doc.freeDoc()
@@ -25,8 +25,8 @@ del ctxt
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index da6d0c1..530c2ee 100755 (executable)
@@ -24,13 +24,13 @@ except libxml2.parserError:
     got_exc = 1
 
 if got_exc == 0:
-    print "Failed to get a parser exception"
+    print("Failed to get a parser exception")
     sys.exit(1)
 
 if err != expect:
-    print "error"
-    print "received %s" %(err)
-    print "expected %s" %(expect)
+    print("error")
+    print("received %s" %(err))
+    print("expected %s" %(expect))
     sys.exit(1)
 
 i = 10000
@@ -45,7 +45,7 @@ while i > 0:
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index a7cc7a6..0c16674 100755 (executable)
@@ -1,14 +1,19 @@
 #!/usr/bin/python -u
 import sys
 import libxml2
-import StringIO
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
 
 i = 0
 while i < 5000:
-    f = StringIO.StringIO("foobar")
+    f = str_io("foobar")
     buf = libxml2.inputBuffer(f)
     i = i + 1
 
@@ -18,8 +23,8 @@ del buf
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index 8d7a7fc..e41a0d9 100755 (executable)
@@ -20,16 +20,16 @@ class callback:
     def startDocument(self):
         global ctxt
         if ctxt.byteConsumed() != self.startd:
-            print "document start at wrong index: %d expecting %d\n" % (
-                  ctxt.byteConsumed(), self.startd)
+            print("document start at wrong index: %d expecting %d\n" % (
+                  ctxt.byteConsumed(), self.startd))
             sys.exit(1)
 
     def endDocument(self):
         global ctxt
         expect = self.ende + self.delta * (self.count - 1) + self.endd
         if ctxt.byteConsumed() != expect:
-            print "document end at wrong index: %d expecting %d\n" % (
-                  ctxt.byteConsumed(), expect)
+            print("document end at wrong index: %d expecting %d\n" % (
+                  ctxt.byteConsumed(), expect))
             sys.exit(1)
 
     def startElement(self, tag, attrs):
@@ -37,8 +37,8 @@ class callback:
         if tag == "bar1":
             expect = self.starte + self.delta * self.count
             if ctxt.byteConsumed() != expect:
-                print "element start at wrong index: %d expecting %d\n" % (
-                   ctxt.byteConsumed(), expect)
+                print("element start at wrong index: %d expecting %d\n" % (
+                   ctxt.byteConsumed(), expect))
                 sys.exit(1)
             
 
@@ -47,8 +47,8 @@ class callback:
         if tag == "bar1":
             expect = self.ende + self.delta * self.count
             if ctxt.byteConsumed() != expect:
-                print "element end at wrong index: %d expecting %d\n" % (
-                      ctxt.byteConsumed(), expect)
+                print("element end at wrong index: %d expecting %d\n" % (
+                      ctxt.byteConsumed(), expect))
                 sys.exit(1)
             self.count = self.count + 1
 
@@ -107,7 +107,7 @@ ctxt=None
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
diff --git a/python/tests/input_callback.py b/python/tests/input_callback.py
new file mode 100755 (executable)
index 0000000..495ab62
--- /dev/null
@@ -0,0 +1,148 @@
+#!/usr/bin/python -u
+#
+# This tests custom input callbacks
+#
+import sys
+import libxml2
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
+
+# We implement a new scheme, py://strings/ that will reference this dictionary
+pystrings = {
+    'catalogs/catalog.xml' :
+'''<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+  <rewriteSystem systemIdStartString="http://example.com/dtds/" rewritePrefix="../dtds/"/>
+</catalog>''',
+
+    'xml/sample.xml' :
+'''<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE root SYSTEM "http://example.com/dtds/sample.dtd">
+<root>&sample.entity;</root>''',
+
+    'dtds/sample.dtd' :
+'''
+<!ELEMENT root (#PCDATA)>
+<!ENTITY sample.entity "replacement text">'''
+}
+
+prefix = "py://strings/"
+startURL = prefix + "xml/sample.xml"
+catURL = prefix + "catalogs/catalog.xml"
+
+def my_input_cb(URI):
+    if not(URI.startswith(prefix)):
+        return None
+    path = URI[len(prefix):]
+    if path not in pystrings:
+        return None
+    return str_io(pystrings[path])
+
+
+def run_test(desc, docpath, catalog, exp_status="verified", exp_err=[], test_callback=None,
+        root_name="root", root_content="replacement text"):
+    opts = libxml2.XML_PARSE_DTDLOAD | libxml2.XML_PARSE_NONET | libxml2.XML_PARSE_COMPACT
+    actual_err = []
+
+    def my_global_error_cb(ctx, msg):
+        actual_err.append((-1, msg))
+    def my_ctx_error_cb(arg, msg, severity, reserved):
+        actual_err.append((severity, msg))
+
+    libxml2.registerErrorHandler(my_global_error_cb, None)
+    try:
+        parser = libxml2.createURLParserCtxt(docpath, opts)
+        parser.setErrorHandler(my_ctx_error_cb, None)
+        if catalog is not None:
+            parser.addLocalCatalog(catalog)
+        if test_callback is not None:
+            test_callback()
+        parser.parseDocument()
+        doc = parser.doc()
+        actual_status = "loaded"
+        e = doc.getRootElement()
+        if e.name == root_name and e.content == root_content:
+            actual_status = "verified"
+        doc.freeDoc()
+    except libxml2.parserError:
+        actual_status = "not loaded"
+
+    if actual_status != exp_status:
+        print("Test '%s' failed: expect status '%s', actual '%s'" % (desc, exp_status, actual_status))
+        sys.exit(1)
+    elif actual_err != exp_err:
+        print("Test '%s' failed" % desc)
+        print("Expect errors:")
+        for s,m in exp_err: print("  [%2d] '%s'" % (s,m))
+        print("Actual errors:")
+        for s,m in actual_err: print("  [%2d] '%s'" % (s,m))
+        sys.exit(1)
+
+
+# Check that we cannot read custom schema without custom callback
+run_test(desc="Loading entity without custom callback",
+        docpath=startURL, catalog=None,
+        exp_status="not loaded", exp_err=[
+            (-1, "I/O "),
+            (-1, "warning : "),
+            (-1, "failed to load external entity \"py://strings/xml/sample.xml\"\n")
+            ])
+
+# Register handler and try to load the same entity
+libxml2.registerInputCallback(my_input_cb)
+run_test(desc="Loading entity with custom callback",
+        docpath=startURL, catalog=None,
+        exp_status="loaded", exp_err=[
+            (-1, "Attempt to load network entity http://example.com/dtds/sample.dtd"),
+            ( 4, "Entity 'sample.entity' not defined\n")
+            ])
+
+# Register a catalog (also accessible via pystr://) and retry
+run_test(desc="Loading entity with custom callback and catalog",
+        docpath=startURL, catalog=catURL)
+
+# Unregister custom callback when parser is already created
+run_test(desc="Loading entity and unregistering callback",
+        docpath=startURL, catalog=catURL,
+        test_callback=lambda: libxml2.popInputCallbacks(),
+        exp_status="loaded", exp_err=[
+            ( 3, "failed to load external entity \"py://strings/dtds/sample.dtd\"\n"),
+            ( 4, "Entity 'sample.entity' not defined\n")
+            ])
+
+# Try to load the document again
+run_test(desc="Retry loading document after unregistering callback",
+        docpath=startURL, catalog=catURL,
+        exp_status="not loaded", exp_err=[
+            (-1, "I/O "),
+            (-1, "warning : "),
+            (-1, "failed to load external entity \"py://strings/xml/sample.xml\"\n")
+            ])
+
+# But should be able to read standard I/O yet...
+run_test(desc="Loading using standard i/o after unregistering callback",
+        docpath="tst.xml", catalog=None,
+        root_name='doc', root_content='bar')
+
+# Now pop ALL input callbacks, should fail to load even standard I/O
+try:
+    while True:
+        libxml2.popInputCallbacks()
+except IndexError:
+    pass
+
+run_test(desc="Loading using standard i/o after unregistering all callbacks",
+        docpath="tst.xml", catalog=None,
+        exp_status="not loaded", exp_err=[
+            (-1, "I/O "),
+            (-1, "warning : "),
+            (-1, "failed to load external entity \"tst.xml\"\n")
+            ])
+
+print("OK")
+sys.exit(0);
index c06ded3..079399a 100755 (executable)
@@ -19,7 +19,7 @@ def checkNamespaceDefs(node, count):
     nsList = list(namespaceDefs(node))
     #print nsList
     if len(nsList) != count :
-        raise Exception, "Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count)
+        raise Exception("Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count))
     
 # Memory debug specific
 libxml2.debugMemory(1)
@@ -56,7 +56,7 @@ doc.freeDoc()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 09cd9b5..62761cc 100755 (executable)
@@ -1,17 +1,22 @@
 #!/usr/bin/python -u
 import sys
 import libxml2
-import StringIO
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 def testSimpleBufferWrites():
-    f = StringIO.StringIO()
+    f = str_io()
     buf = libxml2.createOutputBuffer(f, "ISO-8859-1")
     buf.write(3, "foo")
     buf.writeString("bar")
     buf.close()
-    
+
     if f.getvalue() != "foobar":
-        print "Failed to save to StringIO"
+        print("Failed to save to StringIO")
         sys.exit(1)
 
 def testSaveDocToBuffer():
@@ -23,15 +28,15 @@ def testSaveDocToBuffer():
 <?xml version="1.0" encoding="UTF-8"?>
 <foo>Hello</foo>
 '''
-    f = StringIO.StringIO()
+    f = str_io()
     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     doc = libxml2.parseDoc(input)
     doc.saveFileTo(buf, 'UTF-8')
     doc.freeDoc()
     if f.getvalue() != expected:
-        print 'xmlDoc.saveFileTo() call failed.'
-        print '     got: %s' % repr(f.getvalue())
-        print 'expected: %s' % repr(expected)
+        print('xmlDoc.saveFileTo() call failed.')
+        print('     got: %s' % repr(f.getvalue()))
+        print('expected: %s' % repr(expected))
         sys.exit(1)
 
 def testSaveFormattedDocToBuffer():
@@ -49,13 +54,13 @@ def testSaveFormattedDocToBuffer():
 ''')
     doc = libxml2.parseDoc(input)
     for i in (0, 1):
-        f = StringIO.StringIO()
+        f = str_io()
         buf = libxml2.createOutputBuffer(f, 'UTF-8')
         doc.saveFormatFileTo(buf, 'UTF-8', i)
         if f.getvalue() != expected[i]:
-            print 'xmlDoc.saveFormatFileTo() call failed.'
-            print '     got: %s' % repr(f.getvalue())
-            print 'expected: %s' % repr(expected[i])
+            print('xmlDoc.saveFormatFileTo() call failed.')
+            print('     got: %s' % repr(f.getvalue()))
+            print('expected: %s' % repr(expected[i]))
             sys.exit(1)
     doc.freeDoc()
 
@@ -69,22 +74,22 @@ def testSaveIntoOutputBuffer():
 <?xml version="1.0" encoding="UTF-8"?>
 <foo>Hello</foo>
 '''
-    f = StringIO.StringIO()
+    f = str_io()
     doc = libxml2.parseDoc(input)
     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     buf.saveFileTo(doc, 'UTF-8')
     if f.getvalue() != expected:
-        print 'outputBuffer.saveFileTo() call failed.'
-        print '     got: %s' % repr(f.getvalue())
-        print 'expected: %s' % repr(expected)
+        print('outputBuffer.saveFileTo() call failed.')
+        print('     got: %s' % repr(f.getvalue()))
+        print('expected: %s' % repr(expected))
         sys.exit(1)
-    f = StringIO.StringIO()
+    f = str_io()
     buf = libxml2.createOutputBuffer(f, 'UTF-8')
     buf.saveFormatFileTo(doc, 'UTF-8', 1)
     if f.getvalue() != expected:
-        print 'outputBuffer.saveFormatFileTo() call failed.'
-        print '     got: %s' % repr(f.getvalue())
-        print 'expected: %s' % repr(expected)
+        print('outputBuffer.saveFormatFileTo() call failed.')
+        print('     got: %s' % repr(f.getvalue()))
+        print('expected: %s' % repr(expected))
         sys.exit(1)
     doc.freeDoc()
 
@@ -99,7 +104,7 @@ if __name__ == '__main__':
 
     libxml2.cleanupParser()
     if libxml2.debugMemory(1) == 0:
-        print "OK"
+        print("OK")
     else:
-        print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+        print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
         libxml2.dumpMemory()
index 5b60a16..0edd61d 100755 (executable)
@@ -10,11 +10,11 @@ ctxt.parseChunk("/>", 2, 1)
 doc = ctxt.doc()
 ctxt=None
 if doc.name != "test.xml":
-    print "document name error"
+    print("document name error")
     sys.exit(1)
 root = doc.children
 if root.name != "foo":
-    print "root element name error"
+    print("root element name error")
     sys.exit(1)
 doc.freeDoc()
 i = 10000
@@ -29,7 +29,7 @@ ctxt=None
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 1c1e786..48f6e82 100755 (executable)
@@ -51,14 +51,14 @@ ctxt=None
 
 reference = "startDocument:startElement foo {'url': 'tst'}:characters: bar:endElement foo:endDocument:"
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Exprected: %s" % reference)
     sys.exit(1)
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index e6e89d9..159d308 100755 (executable)
@@ -52,14 +52,14 @@ ctxt=None
 reference = """startDocument:startElement html None:startElement body None:startElement foo {'url': 'tst'}:error: Tag foo invalid
 :characters: bar:endElement foo:endElement body:endElement html:endDocument:"""
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Exprected: %s" % reference)
     sys.exit(1)
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 6c37762..173ce66 100755 (executable)
@@ -4,91 +4,96 @@
 # this tests the basic APIs of the XmlTextReader interface
 #
 import libxml2
-import StringIO
 import sys
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
 
-f = StringIO.StringIO("""<a><b b1="b1"/><c>content of c</c></a>""")
+f = str_io("""<a><b b1="b1"/><c>content of c</c></a>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test1")
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to first element"
+    print("test1: Error reading to first element")
     sys.exit(1)
 if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 0:
-    print "test1: Error reading the first element"
+    print("test1: Error reading the first element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to second element"
+    print("test1: Error reading to second element")
     sys.exit(1)
 if reader.Name() != "b" or reader.IsEmptyElement() != 1 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 1:
-    print "test1: Error reading the second element"
+    print("test1: Error reading the second element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to third element"
+    print("test1: Error reading to third element")
     sys.exit(1)
 if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 0:
-    print "test1: Error reading the third element"
+    print("test1: Error reading the third element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to text node"
+    print("test1: Error reading to text node")
     sys.exit(1)
 if reader.Name() != "#text" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 3 or reader.HasAttributes() != 0 or \
    reader.Value() != "content of c":
-    print "test1: Error reading the text node"
+    print("test1: Error reading the text node")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to end of third element"
+    print("test1: Error reading to end of third element")
     sys.exit(1)
 if reader.Name() != "c" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 15 or reader.HasAttributes() != 0:
-    print "test1: Error reading the end of third element"
+    print("test1: Error reading the end of third element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test1: Error reading to end of first element"
+    print("test1: Error reading to end of first element")
     sys.exit(1)
 if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 15 or reader.HasAttributes() != 0:
-    print "test1: Error reading the end of first element"
+    print("test1: Error reading the end of first element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 0:
-    print "test1: Error reading to end of document"
+    print("test1: Error reading to end of document")
     sys.exit(1)
 
 #
 # example from the XmlTextReader docs
 #
-f = StringIO.StringIO("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
+f = str_io("""<test xmlns:dt="urn:datatypes" dt:type="int"/>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test2")
 
 ret = reader.Read()
 if ret != 1:
-    print "Error reading test element"
+    print("Error reading test element")
     sys.exit(1)
 if reader.GetAttributeNo(0) != "urn:datatypes" or \
    reader.GetAttributeNo(1) != "int" or \
    reader.GetAttributeNs("type", "urn:datatypes") != "int" or \
    reader.GetAttribute("dt:type") != "int":
-    print "error reading test attributes"
+    print("error reading test attributes")
     sys.exit(1)
 
 #
 # example from the XmlTextReader docs
 #
-f = StringIO.StringIO("""<root xmlns:a="urn:456">
+f = str_io("""<root xmlns:a="urn:456">
 <item>
 <ref href="a:b"/>
 </item>
@@ -100,203 +105,203 @@ ret = reader.Read()
 while ret == 1:
     if reader.Name() == "ref":
         if reader.LookupNamespace("a") != "urn:456":
-            print "error resolving namespace prefix"
+            print("error resolving namespace prefix")
             sys.exit(1)
         break
     ret = reader.Read()
 if ret != 1:
-    print "Error finding the ref element"
+    print("Error finding the ref element")
     sys.exit(1)
 
 #
 # Home made example for the various attribute access functions
 #
-f = StringIO.StringIO("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
+f = str_io("""<testattr xmlns="urn:1" xmlns:a="urn:2" b="b" a:b="a:b"/>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test4")
 ret = reader.Read()
 if ret != 1:
-    print "Error reading the testattr element"
+    print("Error reading the testattr element")
     sys.exit(1)
 #
 # Attribute exploration by index
 #
 if reader.MoveToAttributeNo(0) != 1:
-    print "Failed moveToAttribute(0)"
+    print("Failed moveToAttribute(0)")
     sys.exit(1)
 if reader.Value() != "urn:1":
-    print "Failed to read attribute(0)"
+    print("Failed to read attribute(0)")
     sys.exit(1)
 if reader.Name() != "xmlns":
-    print "Failed to read attribute(0) name"
+    print("Failed to read attribute(0) name")
     sys.exit(1)
 if reader.MoveToAttributeNo(1) != 1:
-    print "Failed moveToAttribute(1)"
+    print("Failed moveToAttribute(1)")
     sys.exit(1)
 if reader.Value() != "urn:2":
-    print "Failed to read attribute(1)"
+    print("Failed to read attribute(1)")
     sys.exit(1)
 if reader.Name() != "xmlns:a":
-    print "Failed to read attribute(1) name"
+    print("Failed to read attribute(1) name")
     sys.exit(1)
 if reader.MoveToAttributeNo(2) != 1:
-    print "Failed moveToAttribute(2)"
+    print("Failed moveToAttribute(2)")
     sys.exit(1)
 if reader.Value() != "b":
-    print "Failed to read attribute(2)"
+    print("Failed to read attribute(2)")
     sys.exit(1)
 if reader.Name() != "b":
-    print "Failed to read attribute(2) name"
+    print("Failed to read attribute(2) name")
     sys.exit(1)
 if reader.MoveToAttributeNo(3) != 1:
-    print "Failed moveToAttribute(3)"
+    print("Failed moveToAttribute(3)")
     sys.exit(1)
 if reader.Value() != "a:b":
-    print "Failed to read attribute(3)"
+    print("Failed to read attribute(3)")
     sys.exit(1)
 if reader.Name() != "a:b":
-    print "Failed to read attribute(3) name"
+    print("Failed to read attribute(3) name")
     sys.exit(1)
 #
 # Attribute exploration by name
 #
 if reader.MoveToAttribute("xmlns") != 1:
-    print "Failed moveToAttribute('xmlns')"
+    print("Failed moveToAttribute('xmlns')")
     sys.exit(1)
 if reader.Value() != "urn:1":
-    print "Failed to read attribute('xmlns')"
+    print("Failed to read attribute('xmlns')")
     sys.exit(1)
 if reader.MoveToAttribute("xmlns:a") != 1:
-    print "Failed moveToAttribute('xmlns')"
+    print("Failed moveToAttribute('xmlns')")
     sys.exit(1)
 if reader.Value() != "urn:2":
-    print "Failed to read attribute('xmlns:a')"
+    print("Failed to read attribute('xmlns:a')")
     sys.exit(1)
 if reader.MoveToAttribute("b") != 1:
-    print "Failed moveToAttribute('b')"
+    print("Failed moveToAttribute('b')")
     sys.exit(1)
 if reader.Value() != "b":
-    print "Failed to read attribute('b')"
+    print("Failed to read attribute('b')")
     sys.exit(1)
 if reader.MoveToAttribute("a:b") != 1:
-    print "Failed moveToAttribute('a:b')"
+    print("Failed moveToAttribute('a:b')")
     sys.exit(1)
 if reader.Value() != "a:b":
-    print "Failed to read attribute('a:b')"
+    print("Failed to read attribute('a:b')")
     sys.exit(1)
 if reader.MoveToAttributeNs("b", "urn:2") != 1:
-    print "Failed moveToAttribute('b', 'urn:2')"
+    print("Failed moveToAttribute('b', 'urn:2')")
     sys.exit(1)
 if reader.Value() != "a:b":
-    print "Failed to read attribute('b', 'urn:2')"
+    print("Failed to read attribute('b', 'urn:2')")
     sys.exit(1)
 #
 # Go back and read in sequence
 #
 if reader.MoveToElement() != 1:
-    print "Failed to move back to element"
+    print("Failed to move back to element")
     sys.exit(1)
 if reader.MoveToFirstAttribute() != 1:
-    print "Failed to move to first attribute"
+    print("Failed to move to first attribute")
     sys.exit(1)
 if reader.Value() != "urn:1":
-    print "Failed to read attribute(0)"
+    print("Failed to read attribute(0)")
     sys.exit(1)
 if reader.Name() != "xmlns":
-    print "Failed to read attribute(0) name"
+    print("Failed to read attribute(0) name")
     sys.exit(1)
 if reader.MoveToNextAttribute() != 1:
-    print "Failed to move to next attribute"
+    print("Failed to move to next attribute")
     sys.exit(1)
 if reader.Value() != "urn:2":
-    print "Failed to read attribute(1)"
+    print("Failed to read attribute(1)")
     sys.exit(1)
 if reader.Name() != "xmlns:a":
-    print "Failed to read attribute(1) name"
+    print("Failed to read attribute(1) name")
     sys.exit(1)
 if reader.MoveToNextAttribute() != 1:
-    print "Failed to move to next attribute"
+    print("Failed to move to next attribute")
     sys.exit(1)
 if reader.Value() != "b":
-    print "Failed to read attribute(2)"
+    print("Failed to read attribute(2)")
     sys.exit(1)
 if reader.Name() != "b":
-    print "Failed to read attribute(2) name"
+    print("Failed to read attribute(2) name")
     sys.exit(1)
 if reader.MoveToNextAttribute() != 1:
-    print "Failed to move to next attribute"
+    print("Failed to move to next attribute")
     sys.exit(1)
 if reader.Value() != "a:b":
-    print "Failed to read attribute(3)"
+    print("Failed to read attribute(3)")
     sys.exit(1)
 if reader.Name() != "a:b":
-    print "Failed to read attribute(3) name"
+    print("Failed to read attribute(3) name")
     sys.exit(1)
 if reader.MoveToNextAttribute() != 0:
-    print "Failed to detect last attribute"
+    print("Failed to detect last attribute")
     sys.exit(1)
 
     
 #
 # a couple of tests for namespace nodes
 #
-f = StringIO.StringIO("""<a xmlns="http://example.com/foo"/>""")
+f = str_io("""<a xmlns="http://example.com/foo"/>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test6")
 ret = reader.Read()
 if ret != 1:
-    print "test6: failed to Read()"
+    print("test6: failed to Read()")
     sys.exit(1)
 ret = reader.MoveToFirstAttribute()
 if ret != 1:
-    print "test6: failed to MoveToFirstAttribute()"
+    print("test6: failed to MoveToFirstAttribute()")
     sys.exit(1)
 if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
    reader.LocalName() != "xmlns" or reader.Name() != "xmlns" or \
    reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
-    print "test6: failed to read the namespace node"
+    print("test6: failed to read the namespace node")
     sys.exit(1)
 
-f = StringIO.StringIO("""<a xmlns:prefix="http://example.com/foo"/>""")
+f = str_io("""<a xmlns:prefix="http://example.com/foo"/>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test7")
 ret = reader.Read()
 if ret != 1:
-    print "test7: failed to Read()"
+    print("test7: failed to Read()")
     sys.exit(1)
 ret = reader.MoveToFirstAttribute()
 if ret != 1:
-    print "test7: failed to MoveToFirstAttribute()"
+    print("test7: failed to MoveToFirstAttribute()")
     sys.exit(1)
 if reader.NamespaceUri() != "http://www.w3.org/2000/xmlns/" or \
    reader.LocalName() != "prefix" or reader.Name() != "xmlns:prefix" or \
    reader.Value() != "http://example.com/foo" or reader.NodeType() != 2:
-    print "test7: failed to read the namespace node"
+    print("test7: failed to read the namespace node")
     sys.exit(1)
 
 #
 # Test for a limit case:
 #
-f = StringIO.StringIO("""<a/>""")
+f = str_io("""<a/>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test8")
 ret = reader.Read()
 if ret != 1:
-    print "test8: failed to read the node"
+    print("test8: failed to read the node")
     sys.exit(1)
 if reader.Name() != "a" or reader.IsEmptyElement() != 1:
-    print "test8: failed to analyze the node"
+    print("test8: failed to analyze the node")
     sys.exit(1)
 ret = reader.Read()
 if ret != 0:
-    print "test8: failed to detect the EOF"
+    print("test8: failed to detect the EOF")
     sys.exit(1)
 
 #
 # Another test provided by Stéphane Bidoul and checked with C#
 #
 def tst_reader(s):
-    f = StringIO.StringIO(s)
+    f = str_io(s)
     input = libxml2.inputBuffer(f)
     reader = input.newTextReader("tst")
     res = ""
@@ -322,8 +327,8 @@ expect="""1 (a) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test5 failed"
-    print res
+    print("test5 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<test><b/><c/></test>"""
@@ -334,8 +339,8 @@ expect="""1 (test) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test9 failed"
-    print res
+    print("test9 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<a><b>bbb</b><c>ccc</c></a>"""
@@ -350,8 +355,8 @@ expect="""1 (a) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test10 failed"
-    print res
+    print("test10 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<test a="a"/>"""
@@ -360,8 +365,8 @@ expect="""1 (test) [None] 1 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test11 failed"
-    print res
+    print("test11 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<test><a>aaa</a><b/></test>"""
@@ -374,8 +379,8 @@ expect="""1 (test) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test12 failed"
-    print res
+    print("test12 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<test><p></p></test>"""
@@ -386,8 +391,8 @@ expect="""1 (test) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test13 failed"
-    print res
+    print("test13 failed")
+    print(res)
     sys.exit(1)
 
 doc="""<p></p>"""
@@ -396,8 +401,8 @@ expect="""1 (p) [None] 0 0
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test14 failed"
-    print res
+    print("test14 failed")
+    print(res)
     sys.exit(1)
 
 #
@@ -421,8 +426,8 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 """
 res = tst_reader(doc)
 if res != expect:
-    print "test15 failed"
-    print res
+    print("test15 failed")
+    print(res)
     sys.exit(1)
 
 #
@@ -435,7 +440,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index ea890ec..8570575 100755 (executable)
@@ -5,8 +5,13 @@
 import sys
 import glob
 import string
-import StringIO
 import libxml2
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
@@ -30,7 +35,11 @@ libxml2.registerErrorHandler(callback, "")
 valid_files = glob.glob("../../test/valid/*.x*")
 valid_files.sort()
 for file in valid_files:
-    if string.find(file, "t8") != -1:
+    if file.find("t8") != -1:
+        continue
+    if file == "../../test/valid/rss.xml":
+        continue
+    if file == "../../test/valid/xlink.xml":
         continue
     reader = libxml2.newTextReaderFilename(file)
     #print "%s:" % (file)
@@ -39,11 +48,11 @@ for file in valid_files:
     while ret == 1:
         ret = reader.Read()
     if ret != 0:
-        print "Error parsing and validating %s" % (file)
+        print("Error parsing and validating %s" % (file))
        #sys.exit(1)
 
 if err != expect:
-    print err
+    print(err)
 
 #
 # another separate test based on Stephane Bidoul one
@@ -79,7 +88,7 @@ expect="""10,test
 res=""
 err=""
 
-input = libxml2.inputBuffer(StringIO.StringIO(s))
+input = libxml2.inputBuffer(str_io(s))
 reader = input.newTextReader("test2")
 reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
 reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
@@ -89,12 +98,12 @@ while reader.Read() == 1:
     res = res + "%s,%s\n" % (reader.NodeType(),reader.Name())
 
 if res != expect:
-    print "test2 failed: unexpected output"
-    print res
+    print("test2 failed: unexpected output")
+    print(res)
     sys.exit(1)
 if err != "":
-    print "test2 failed: validation error found"
-    print err
+    print("test2 failed: validation error found")
+    print(err)
     sys.exit(1)
 
 #
@@ -124,12 +133,12 @@ res=""
 
 def myResolver(URL, ID, ctxt):
     if URL == "tst.ent":
-        return(StringIO.StringIO(tst_ent))
+        return(str_io(tst_ent))
     return None
 
 libxml2.setEntityLoader(myResolver)
 
-input = libxml2.inputBuffer(StringIO.StringIO(s))
+input = libxml2.inputBuffer(str_io(s))
 reader = input.newTextReader("test3")
 reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
 reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
@@ -139,12 +148,12 @@ while reader.Read() == 1:
     res = res + "%s %s\n" % (reader.NodeType(),reader.Name())
 
 if res != expect:
-    print "test3 failed: unexpected output"
-    print res
+    print("test3 failed: unexpected output")
+    print(res)
     sys.exit(1)
 if err != "":
-    print "test3 failed: validation error found"
-    print err
+    print("test3 failed: validation error found")
+    print(err)
     sys.exit(1)
 
 #
@@ -183,7 +192,7 @@ expect="""10 test 0
 res=""
 err=""
 
-input = libxml2.inputBuffer(StringIO.StringIO(s))
+input = libxml2.inputBuffer(str_io(s))
 reader = input.newTextReader("test4")
 reader.SetParserProp(libxml2.PARSER_LOADDTD,1)
 reader.SetParserProp(libxml2.PARSER_DEFAULTATTRS,1)
@@ -193,12 +202,12 @@ while reader.Read() == 1:
     res = res + "%s %s %d\n" % (reader.NodeType(),reader.Name(),reader.Depth())
 
 if res != expect:
-    print "test4 failed: unexpected output"
-    print res
+    print("test4 failed: unexpected output")
+    print(res)
     sys.exit(1)
 if err != "":
-    print "test4 failed: validation error found"
-    print err
+    print("test4 failed: validation error found")
+    print(err)
     sys.exit(1)
 
 #
@@ -228,18 +237,18 @@ expect="""10 test 0
 res=""
 err=""
 
-input = libxml2.inputBuffer(StringIO.StringIO(s))
+input = libxml2.inputBuffer(str_io(s))
 reader = input.newTextReader("test5")
 reader.SetParserProp(libxml2.PARSER_VALIDATE,1)
 while reader.Read() == 1:
     res = res + "%s %s %d\n" % (reader.NodeType(),reader.Name(),reader.Depth())
 
 if res != expect:
-    print "test5 failed: unexpected output"
-    print res
+    print("test5 failed: unexpected output")
+    print(res)
 if err != "":
-    print "test5 failed: validation error found"
-    print err
+    print("test5 failed: validation error found")
+    print(err)
 
 #
 # cleanup
@@ -250,7 +259,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2458c89..4302b6c 100755 (executable)
@@ -3,8 +3,13 @@
 # this tests the entities substitutions with the XmlTextReader interface
 #
 import sys
-import StringIO
 import libxml2
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 docstr="""<?xml version='1.0'?>
 <!DOCTYPE doc [
@@ -18,90 +23,90 @@ libxml2.debugMemory(1)
 #
 # First test, normal don't substitute entities.
 #
-f = StringIO.StringIO(docstr)
+f = str_io(docstr)
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test_noent")
 ret = reader.Read()
 if ret != 1:
-    print "Error reading to root"
+    print("Error reading to root")
     sys.exit(1)
 if reader.Name() == "doc" or reader.NodeType() == 10:
     ret = reader.Read()
 if ret != 1:
-    print "Error reading to root"
+    print("Error reading to root")
     sys.exit(1)
 if reader.Name() != "doc" or reader.NodeType() != 1:
-    print "test_normal: Error reading the root element"
+    print("test_normal: Error reading the root element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_normal: Error reading to the entity"
+    print("test_normal: Error reading to the entity")
     sys.exit(1)
 if reader.Name() != "tst" or reader.NodeType() != 5:
-    print "test_normal: Error reading the entity"
+    print("test_normal: Error reading the entity")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_normal: Error reading to the end of root"
+    print("test_normal: Error reading to the end of root")
     sys.exit(1)
 if reader.Name() != "doc" or reader.NodeType() != 15:
-    print "test_normal: Error reading the end of the root element"
+    print("test_normal: Error reading the end of the root element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 0:
-    print "test_normal: Error detecting the end"
+    print("test_normal: Error detecting the end")
     sys.exit(1)
 
 #
 # Second test, completely substitute the entities.
 #
-f = StringIO.StringIO(docstr)
+f = str_io(docstr)
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test_noent")
 reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES, 1)
 ret = reader.Read()
 if ret != 1:
-    print "Error reading to root"
+    print("Error reading to root")
     sys.exit(1)
 if reader.Name() == "doc" or reader.NodeType() == 10:
     ret = reader.Read()
 if ret != 1:
-    print "Error reading to root"
+    print("Error reading to root")
     sys.exit(1)
 if reader.Name() != "doc" or reader.NodeType() != 1:
-    print "test_noent: Error reading the root element"
+    print("test_noent: Error reading the root element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_noent: Error reading to the entity content"
+    print("test_noent: Error reading to the entity content")
     sys.exit(1)
 if reader.Name() != "p" or reader.NodeType() != 1:
-    print "test_noent: Error reading the p element from entity"
+    print("test_noent: Error reading the p element from entity")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_noent: Error reading to the text node"
+    print("test_noent: Error reading to the text node")
     sys.exit(1)
 if reader.NodeType() != 3 or reader.Value() != "test":
-    print "test_noent: Error reading the text node"
+    print("test_noent: Error reading the text node")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_noent: Error reading to the end of p element"
+    print("test_noent: Error reading to the end of p element")
     sys.exit(1)
 if reader.Name() != "p" or reader.NodeType() != 15:
-    print "test_noent: Error reading the end of the p element"
+    print("test_noent: Error reading the end of the p element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_noent: Error reading to the end of root"
+    print("test_noent: Error reading to the end of root")
     sys.exit(1)
 if reader.Name() != "doc" or reader.NodeType() != 15:
-    print "test_noent: Error reading the end of the root element"
+    print("test_noent: Error reading the end of the root element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 0:
-    print "test_noent: Error detecting the end"
+    print("test_noent: Error detecting the end")
     sys.exit(1)
 
 #
@@ -122,12 +127,12 @@ simplestruct2_ent="""<descr/>"""
 
 def myResolver(URL, ID, ctxt):
     if URL == "simplestruct2.ent":
-        return(StringIO.StringIO(simplestruct2_ent))
+        return(str_io(simplestruct2_ent))
     return None
 
 libxml2.setEntityLoader(myResolver)
 
-input = libxml2.inputBuffer(StringIO.StringIO(s))
+input = libxml2.inputBuffer(str_io(s))
 reader = input.newTextReader("test3")
 reader.SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1)
 while reader.Read() == 1:
@@ -135,8 +140,8 @@ while reader.Read() == 1:
                                    reader.Depth(),reader.IsEmptyElement())
 
 if res != expect:
-    print "test3 failed: unexpected output"
-    print res
+    print("test3 failed: unexpected output")
+    print(res)
     sys.exit(1)
 
 #
@@ -149,7 +154,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 0824929..0bb3e3f 100755 (executable)
@@ -3,14 +3,19 @@
 # this tests the basic APIs of the XmlTextReader interface
 #
 import libxml2
-import StringIO
 import sys
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
 
 def tst_reader(s):
-    f = StringIO.StringIO(s)
+    f = str_io(s)
     input = libxml2.inputBuffer(f)
     reader = input.newTextReader("tst")
     res = ""
@@ -32,14 +37,14 @@ expect="""1 (test) [None] 0
 res = tst_reader("""<test><b/><c/></test>""")
 
 if res != expect:
-    print "Did not get the expected error message:"
-    print res
+    print("Did not get the expected error message:")
+    print(res)
     sys.exit(1)
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index fcbad61..82d0dae 100755 (executable)
@@ -4,7 +4,6 @@
 # this extract the Dragon bibliography entries from the XML specification
 #
 import libxml2
-import StringIO
 import sys
 
 # Memory debug specific
@@ -15,11 +14,11 @@ Ravi Sethi, and Jeffrey D. Ullman.
 <emph>Compilers:  Principles, Techniques, and Tools</emph>.
 Reading:  Addison-Wesley, 1986, rpt. corr. 1988.</bibl>"""
 
-f = open('../../test/valid/REC-xml-19980210.xml')
+f = open('../../test/valid/REC-xml-19980210.xml', 'rb')
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("REC")
 res=""
-while reader.Read():
+while reader.Read() > 0:
     while reader.Name() == 'bibl':
         node = reader.Expand()            # expand the subtree
         if node.xpathEval("@id = 'Aho'"): # use XPath on it
@@ -28,9 +27,9 @@ while reader.Read():
             break;
 
 if res != expect:
-    print "Error: didn't get the expected output"
-    print "got '%s'" % (res)
-    print "expected '%s'" % (expect)
+    print("Error: didn't get the expected output")
+    print("got '%s'" % (res))
+    print("expected '%s'" % (expect))
     
 
 #
@@ -42,7 +41,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 7a34601..ef33b18 100755 (executable)
@@ -3,8 +3,13 @@
 # this tests the entities substitutions with the XmlTextReader interface
 #
 import sys
-import StringIO
 import libxml2
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0"
          datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
@@ -41,7 +46,7 @@ docstr="""<foo>
 <item>100</item>
 </foo>"""
 
-f = StringIO.StringIO(docstr)
+f = str_io(docstr)
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("correct")
 reader.RelaxNGSetSchema(rngs)
@@ -50,11 +55,11 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document"
+    print("Error parsing the document")
     sys.exit(1)
 
 if reader.IsValid() != 1:
-    print "Document failed to validate"
+    print("Document failed to validate")
     sys.exit(1)
 
 #
@@ -84,7 +89,7 @@ def callback(ctx, str):
     err = err + "%s" % (str)
 libxml2.registerErrorHandler(callback, "")
 
-f = StringIO.StringIO(docstr)
+f = str_io(docstr)
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("error")
 reader.RelaxNGSetSchema(rngs)
@@ -93,16 +98,16 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document"
+    print("Error parsing the document")
     sys.exit(1)
 
 if reader.IsValid() != 0:
-    print "Document failed to detect the validation error"
+    print("Document failed to detect the validation error")
     sys.exit(1)
 
 if err != expect:
-    print "Did not get the expected error message:"
-    print err
+    print("Did not get the expected error message:")
+    print(err)
     sys.exit(1)
 
 #
@@ -117,7 +122,7 @@ libxml2.relaxNGCleanupTypes()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 35a426f..c88e370 100755 (executable)
@@ -3,7 +3,6 @@
 # this tests the entities substitutions with the XmlTextReader interface
 #
 import sys
-import StringIO
 import libxml2
 
 # Memory debug specific
@@ -44,12 +43,12 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document test1"
+    print("Error parsing the document test1")
     sys.exit(1)
 
 if result != expect:
-    print "Unexpected result for test1"
-    print result
+    print("Unexpected result for test1")
+    print(result)
     sys.exit(1)
 
 #
@@ -80,12 +79,12 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document test2"
+    print("Error parsing the document test2")
     sys.exit(1)
 
 if result != expect:
-    print "Unexpected result for test2"
-    print result
+    print("Unexpected result for test2")
+    print(result)
     sys.exit(1)
 
 #
@@ -96,7 +95,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 53b7f27..de2dcd6 100755 (executable)
@@ -3,7 +3,6 @@
 # this tests the entities substitutions with the XmlTextReader interface
 #
 import sys
-import StringIO
 import libxml2
 
 # Memory debug specific
@@ -23,7 +22,7 @@ ret = reader.Read()
 ret = reader.Close()
 
 if ret != 0:
-    print "Error closing the document test1"
+    print("Error closing the document test1")
     sys.exit(1)
 
 del reader
@@ -31,7 +30,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
old mode 100644 (file)
new mode 100755 (executable)
index 0dad36e..c8ceba5
@@ -3,8 +3,13 @@
 # this tests the basic APIs of the XmlTextReader interface
 #
 import libxml2
-import StringIO
 import sys
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
@@ -17,7 +22,7 @@ def myErrorHandler(arg,msg,severity,locator):
     global err
     err = err + "%s (%d) %s:%d:%s" % (arg,severity,locator.BaseURI(),locator.LineNumber(),msg)
 
-f = StringIO.StringIO("""<a xmlns="foo"><b b1="b1"/><c>content of c</a>""")
+f = str_io("""<a xmlns="foo"><b b1="b1"/><c>content of c</a>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test1")
 reader.SetErrorHandler(myErrorHandler,"-->")
@@ -25,14 +30,14 @@ while reader.Read() == 1:
     pass
 
 if err != expect:
-    print "error"
-    print "received %s" %(err)
-    print "expected %s" %(expect)
+    print("error")
+    print("received %s" %(err))
+    print("expected %s" %(expect))
     sys.exit(1)
 
 reader.SetErrorHandler(None,None)
 if reader.GetErrorHandler() != (None,None):
-    print "GetErrorHandler failed"
+    print("GetErrorHandler failed")
     sys.exit(1)
 
 #
@@ -45,7 +50,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index b01a49d..fcb9ae3 100755 (executable)
@@ -4,65 +4,70 @@
 # this tests the next API of the XmlTextReader interface
 #
 import libxml2
-import StringIO
 import sys
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
 
-f = StringIO.StringIO("""<a><b><c /></b><d>content of d</d></a>""")
+f = str_io("""<a><b><c /></b><d>content of d</d></a>""")
 input = libxml2.inputBuffer(f)
 reader = input.newTextReader("test_next")
 ret = reader.Read()
 if ret != 1:
-    print "test_next: Error reading to first element"
+    print("test_next: Error reading to first element")
     sys.exit(1)
 if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 0:
-    print "test_next: Error reading the first element"
+    print("test_next: Error reading the first element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_next: Error reading to second element"
+    print("test_next: Error reading to second element")
     sys.exit(1)
 if reader.Name() != "b" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 0:
-    print "test_next: Error reading the second element"
+    print("test_next: Error reading the second element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_next: Error reading to third element"
+    print("test_next: Error reading to third element")
     sys.exit(1)
 if reader.Name() != "c" or reader.NodeType() != 1 or \
    reader.HasAttributes() != 0:
-    print "test_next: Error reading the third element"
+    print("test_next: Error reading the third element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 1:
-    print "test_next: Error reading to end of third element"
+    print("test_next: Error reading to end of third element")
     sys.exit(1)
 if reader.Name() != "b" or reader.NodeType() != 15:
-    print "test_next: Error reading to end of second element"
+    print("test_next: Error reading to end of second element")
     sys.exit(1)
 ret = reader.Next()
 if ret != 1:
-    print "test_next: Error moving to third element"
+    print("test_next: Error moving to third element")
     sys.exit(1)
 if reader.Name() != "d" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 1 or reader.HasAttributes() != 0:
-    print "test_next: Error reading third element"
+    print("test_next: Error reading third element")
     sys.exit(1)
 ret = reader.Next()
 if ret != 1:
-    print "test_next: Error reading to end of first element"
+    print("test_next: Error reading to end of first element")
     sys.exit(1)
 if reader.Name() != "a" or reader.IsEmptyElement() != 0 or \
    reader.NodeType() != 15 or reader.HasAttributes() != 0:
-    print "test_next: Error reading the end of first element"
+    print("test_next: Error reading the end of first element")
     sys.exit(1)
 ret = reader.Read()
 if ret != 0:
-    print "test_next: Error reading to end of document"
+    print("test_next: Error reading to end of document")
     sys.exit(1)
 
 #
@@ -75,7 +80,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
old mode 100644 (file)
new mode 100755 (executable)
index 4c05502..a03e459
@@ -6,19 +6,19 @@ libxml2.debugMemory(1)
 
 re = libxml2.regexpCompile("a|b")
 if re.regexpExec("a") != 1:
-    print "error checking 'a'"
+    print("error checking 'a'")
     sys.exit(1)
 if re.regexpExec("b") != 1:
-    print "error checking 'b'"
+    print("error checking 'b'")
     sys.exit(1)
 if re.regexpExec("ab") != 0:
-    print "error checking 'ab'"
+    print("error checking 'ab'")
     sys.exit(1)
 if re.regexpExec("") != 0:
-    print "error checking 'ab'"
+    print("error checking 'ab'")
     sys.exit(1)
 if re.regexpIsDeterminist() != 1:
-    print "error checking determinism"
+    print("error checking determinism")
     sys.exit(1)
 del re
     
@@ -26,7 +26,7 @@ del re
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2c83635..fa3d327 100755 (executable)
@@ -29,7 +29,7 @@ ctxt = rngs.relaxNGNewValidCtxt()
 doc = libxml2.parseDoc(instance)
 ret = doc.relaxNGValidateDoc(ctxt)
 if ret != 0:
-    print "error doing RelaxNG validation"
+    print("error doing RelaxNG validation")
     sys.exit(1)
 
 doc.freeDoc()
@@ -41,8 +41,8 @@ libxml2.relaxNGCleanupTypes()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index 9f4a478..6f21f52 100755 (executable)
@@ -1,20 +1,25 @@
 #!/usr/bin/python -u
 import sys
 import libxml2
-import StringIO
+try:
+    import StringIO
+    str_io = StringIO.StringIO
+except:
+    import io
+    str_io = io.StringIO
 
 # Memory debug specific
 libxml2.debugMemory(1)
 
 def myResolver(URL, ID, ctxt):
-    return(StringIO.StringIO("<foo/>"))
+    return(str_io("<foo/>"))
 
 libxml2.setEntityLoader(myResolver)
 
 doc = libxml2.parseFile("doesnotexist.xml")
 root = doc.children
 if root.name != "foo":
-    print "root element name error"
+    print("root element name error")
     sys.exit(1)
 doc.freeDoc()
 
@@ -23,7 +28,7 @@ while i < 5000:
     doc = libxml2.parseFile("doesnotexist.xml")
     root = doc.children
     if root.name != "foo":
-        print "root element name error"
+        print("root element name error")
         sys.exit(1)
     doc.freeDoc()
     i = i + 1
@@ -32,8 +37,8 @@ while i < 5000:
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index bfa8423..8089272 100755 (executable)
@@ -33,7 +33,7 @@ ctxt_valid  = ctxt_schema.schemaNewValidCtxt()
 doc = libxml2.parseDoc(instance)
 ret = doc.schemaValidateDoc(ctxt_valid)
 if ret != 0:
-    print "error doing schema validation"
+    print("error doing schema validation")
     sys.exit(1)
 
 doc.freeDoc()
@@ -45,8 +45,8 @@ libxml2.schemaCleanupTypes()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index 91753e7..80b901a 100755 (executable)
@@ -13,13 +13,13 @@ str = doc.serialize()
 if str != """<?xml version="1.0"?>
 <root><foo>hello</foo></root>
 """:
-   print "error serializing XML document 1"
+   print("error serializing XML document 1")
    sys.exit(1)
 str = doc.serialize("iso-8859-1")
 if str != """<?xml version="1.0" encoding="iso-8859-1"?>
 <root><foo>hello</foo></root>
 """:
-   print "error serializing XML document 2"
+   print("error serializing XML document 2")
    sys.exit(1)
 str = doc.serialize(format=1)
 if str != """<?xml version="1.0"?>
@@ -27,7 +27,7 @@ if str != """<?xml version="1.0"?>
   <foo>hello</foo>
 </root>
 """:
-   print "error serializing XML document 3"
+   print("error serializing XML document 3")
    sys.exit(1)
 str = doc.serialize("iso-8859-1", 1)
 if str != """<?xml version="1.0" encoding="iso-8859-1"?>
@@ -35,7 +35,7 @@ if str != """<?xml version="1.0" encoding="iso-8859-1"?>
   <foo>hello</foo>
 </root>
 """:
-   print "error serializing XML document 4"
+   print("error serializing XML document 4")
    sys.exit(1)
 
 #
@@ -44,23 +44,23 @@ if str != """<?xml version="1.0" encoding="iso-8859-1"?>
 root = doc.getRootElement()
 str = root.serialize()
 if str != """<root><foo>hello</foo></root>""":
-   print "error serializing XML root 1"
+   print("error serializing XML root 1")
    sys.exit(1)
 str = root.serialize("iso-8859-1")
 if str != """<root><foo>hello</foo></root>""":
-   print "error serializing XML root 2"
+   print("error serializing XML root 2")
    sys.exit(1)
 str = root.serialize(format=1)
 if str != """<root>
   <foo>hello</foo>
 </root>""":
-   print "error serializing XML root 3"
+   print("error serializing XML root 3")
    sys.exit(1)
 str = root.serialize("iso-8859-1", 1)
 if str != """<root>
   <foo>hello</foo>
 </root>""":
-   print "error serializing XML root 4"
+   print("error serializing XML root 4")
    sys.exit(1)
 doc.freeDoc()
 
@@ -72,13 +72,13 @@ str = doc.serialize()
 if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html><head><title>Hello</title></head><body><p>hello</p></body></html>
 """:
-   print "error serializing HTML document 1"
+   print("error serializing HTML document 1")
    sys.exit(1)
 str = doc.serialize("ISO-8859-1")
 if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>
 """:
-   print "error serializing HTML document 2"
+   print("error serializing HTML document 2")
    sys.exit(1)
 str = doc.serialize(format=1)
 if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
@@ -90,7 +90,7 @@ if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http
 <body><p>hello</p></body>
 </html>
 """:
-   print "error serializing HTML document 3"
+   print("error serializing HTML document 3")
    sys.exit(1)
 str = doc.serialize("iso-8859-1", 1)
 if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
@@ -102,7 +102,7 @@ if str != """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http
 <body><p>hello</p></body>
 </html>
 """:
-   print "error serializing HTML document 4"
+   print("error serializing HTML document 4")
    sys.exit(1)
 
 #
@@ -112,11 +112,11 @@ doc.htmlSetMetaEncoding(None)
 root = doc.getRootElement()
 str = root.serialize()
 if str != """<html><head><title>Hello</title></head><body><p>hello</p></body></html>""":
-   print "error serializing HTML root 1"
+   print("error serializing HTML root 1")
    sys.exit(1)
 str = root.serialize("ISO-8859-1")
 if str != """<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Hello</title></head><body><p>hello</p></body></html>""":
-   print "error serializing HTML root 2"
+   print("error serializing HTML root 2")
    sys.exit(1)
 str = root.serialize(format=1)
 if str != """<html>
@@ -126,7 +126,7 @@ if str != """<html>
 </head>
 <body><p>hello</p></body>
 </html>""":
-   print "error serializing HTML root 3"
+   print("error serializing HTML root 3")
    sys.exit(1)
 str = root.serialize("iso-8859-1", 1)
 if str != """<html>
@@ -136,7 +136,7 @@ if str != """<html>
 </head>
 <body><p>hello</p></body>
 </html>""":
-   print "error serializing HTML root 4"
+   print("error serializing HTML root 4")
    sys.exit(1)
 
 doc.freeDoc()
@@ -144,7 +144,7 @@ doc.freeDoc()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2141875..5a8609e 100755 (executable)
@@ -50,8 +50,8 @@ ctxt=None
 
 reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:"
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -62,8 +62,8 @@ ctxt=None
 
 reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:"
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -74,8 +74,8 @@ ctxt=None
 
 reference = "startDocument:startElement foo None:startElement bar2 None:"
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -84,10 +84,11 @@ ctxt = libxml2.createPushParser(handler, None, 0, "test.xml")
 ctxt.parseChunk(chunk, len(chunk), 0)
 ctxt=None
 
-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
-if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
+reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:"
+if log not in (reference1, reference2):
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -96,10 +97,11 @@ ctxt = libxml2.createPushParser(handler, None, 0, "test.xml")
 ctxt.parseChunk(chunk, len(chunk), 0)
 ctxt=None
 
-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:"
-if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:"
+reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:"
+if log not in (reference1, reference2):
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -108,10 +110,11 @@ ctxt = libxml2.createPushParser(handler, None, 0, "test.xml")
 ctxt.parseChunk(chunk, len(chunk), 0)
 ctxt=None
 
-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
-if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
+reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:"
+if log not in (reference1, reference2):
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 log=""
@@ -122,14 +125,14 @@ ctxt=None
 
 reference = "startDocument:startElement foo None:"
 if log != reference:
-    print "Error got: %s" % log
-    print "Exprected: %s" % reference
+    print("Error got: %s" % log)
+    print("Expected: %s" % reference)
     sys.exit(1)
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index c8ac5ed..2749eb0 100755 (executable)
@@ -1,6 +1,9 @@
 #!/usr/bin/python -u
 import string, sys, time
-import thread
+try:
+    from _thread import get_ident
+except:
+    from thread import get_ident
 from threading import Thread, Lock
 
 import libxml2
@@ -31,8 +34,8 @@ def test(expectedLineNumbersDefault):
     # check a per thread-global
     if expectedLineNumbersDefault != getLineNumbersDefault():
         failed = 1
-        print "FAILED to obtain correct value for " \
-              "lineNumbersDefault in thread %d" % thread.get_ident()
+        print("FAILED to obtain correct value for " \
+              "lineNumbersDefault in thread %d" % get_ident())
     # check ther global error handler 
     # (which is NOT per-thread in the python bindings)
     try:
@@ -51,7 +54,7 @@ libxml2.lineNumbersDefault(1)
 test(1)
 ec = len(eh.errors)
 if ec == 0:
-    print "FAILED: should have obtained errors"
+    print("FAILED: should have obtained errors")
     sys.exit(1)
 
 ts = []
@@ -65,7 +68,7 @@ for t in ts:
     t.join()
 
 if len(eh.errors) != ec+THREADS_COUNT*ec:
-    print "FAILED: did not obtain the correct number of errors"
+    print("FAILED: did not obtain the correct number of errors")
     sys.exit(1)
 
 # set lineNumbersDefault for future new threads
@@ -80,17 +83,17 @@ for t in ts:
     t.join()
 
 if len(eh.errors) != ec+THREADS_COUNT*ec*2:
-    print "FAILED: did not obtain the correct number of errors"
+    print("FAILED: did not obtain the correct number of errors")
     sys.exit(1)
 
 if failed:
-    print "FAILED"
+    print("FAILED")
     sys.exit(1)
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 9540cda..57a7318 100755 (executable)
@@ -7,22 +7,22 @@ libxml2.debugMemory(1)
 
 doc = libxml2.parseFile("tst.xml")
 if doc.name != "tst.xml":
-    print "doc.name failed"
+    print("doc.name failed")
     sys.exit(1)
 root = doc.children
 if root.name != "doc":
-    print "root.name failed"
+    print("root.name failed")
     sys.exit(1)
 child = root.children
 if child.name != "foo":
-    print "child.name failed"
+    print("child.name failed")
     sys.exit(1)
 doc.freeDoc()
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index d26e82c..d5f9be7 100755 (executable)
@@ -17,8 +17,8 @@ class TestCase(unittest.TestCase):
         if libxml2.debugMemory(1) != 0:
             libxml2.dumpMemory() 
             self.fail("Memory leak %d bytes" % (libxml2.debugMemory(1),))
-       else:
-           print "OK"
+        else:
+            print("OK")
 
     def failUnlessXmlError(self,f,args,exc,domain,code,message,level,file,line):
         """Run function f, with arguments args and expect an exception exc;
@@ -27,19 +27,19 @@ class TestCase(unittest.TestCase):
         # disable the default error handler
         libxml2.registerErrorHandler(None,None)
         try:
-           apply(f,args)
+            f(*args)
         except exc:
             e = libxml2.lastError()
             if e is None:
                 self.fail("lastError not set")
             if 0:
-                print "domain = ",e.domain()
-                print "code = ",e.code()
-                print "message =",repr(e.message())
-                print "level =",e.level()
-                print "file =",e.file()
-                print "line =",e.line()
-                print
+                print("domain = ",e.domain())
+                print("code = ",e.code())
+                print("message =",repr(e.message()))
+                print("level =",e.level())
+                print("file =",e.file())
+                print("line =",e.line())
+                print()
             self.failUnlessEqual(domain,e.domain())
             self.failUnlessEqual(code,e.code())
             self.failUnlessEqual(message,e.message())
index 58b7ad8..e4d58af 100755 (executable)
@@ -7,35 +7,35 @@ libxml2.debugMemory(1)
 
 uri = libxml2.parseURI("http://example.org:8088/foo/bar?query=simple#fragid")
 if uri.scheme() != 'http':
-    print "Error parsing URI: wrong scheme"
+    print("Error parsing URI: wrong scheme")
     sys.exit(1)
 if uri.server() != 'example.org':
-    print "Error parsing URI: wrong server"
+    print("Error parsing URI: wrong server")
     sys.exit(1)
 if uri.port() != 8088:
-    print "Error parsing URI: wrong port"
+    print("Error parsing URI: wrong port")
     sys.exit(1)
 if uri.path() != '/foo/bar':
-    print "Error parsing URI: wrong path"
+    print("Error parsing URI: wrong path")
     sys.exit(1)
 if uri.query() != 'query=simple':
-    print "Error parsing URI: wrong query"
+    print("Error parsing URI: wrong query")
     sys.exit(1)
 if uri.fragment() != 'fragid':
-    print "Error parsing URI: wrong query"
+    print("Error parsing URI: wrong query")
     sys.exit(1)
 uri.setScheme("https")
 uri.setPort(223)
 uri.setFragment(None)
 result=uri.saveUri()
 if result != "https://example.org:223/foo/bar?query=simple":
-    print "Error modifying or saving the URI"
+    print("Error modifying or saving the URI")
 uri = None
 
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 553096d..6b34cf3 100755 (executable)
@@ -19,7 +19,7 @@ libxml2mod.xmlSetValidErrors(ctxt._o, error, error)
 doc = libxml2.parseDoc(instance)
 ret = doc.validateDtd(ctxt, dtd)
 if ret != 1:
-    print "error doing DTD validation"
+    print("error doing DTD validation")
     sys.exit(1)
 
 doc.freeDoc()
@@ -30,7 +30,7 @@ del ctxt
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index e47c34d..0ba5a6d 100755 (executable)
@@ -25,10 +25,10 @@ doc = libxml2.parseFile("tst.xml")
 ctxt = doc.xpathNewContext()
 res = ctxt.xpathEval("//*")
 if len(res) != 2:
-    print "xpath query: wrong node set size"
+    print("xpath query: wrong node set size")
     sys.exit(1)
 if res[0].name != "doc" or res[1].name != "foo":
-    print "xpath query: wrong node set value"
+    print("xpath query: wrong node set value")
     sys.exit(1)
 libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
 libxml2.registerXPathFunction(ctxt._o, "bar", None, bar)
@@ -36,28 +36,28 @@ i = 10000
 while i > 0:
     res = ctxt.xpathEval("foo(1)")
     if res != 2:
-        print "xpath extension failure"
+        print("xpath extension failure")
         sys.exit(1)
     i = i - 1
 i = 10000
 while i > 0:
     res = ctxt.xpathEval("bar(1)")
     if res != "3":
-        print "xpath extension failure got %s expecting '3'"
+        print("xpath extension failure got %s expecting '3'")
         sys.exit(1)
     i = i - 1
 doc.freeDoc()
 ctxt.xpathFreeContext()
 
 if called != "foo":
-    print "xpath function: failed to access the context"
-    print "xpath function: %s" % (called)
+    print("xpath function: failed to access the context")
+    print("xpath function: %s" % (called))
     sys.exit(1)
 
 #memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 1222f9f..4b03b8e 100755 (executable)
@@ -11,7 +11,7 @@ class ErrorHandler:
 
     def handler(self, msg, data):
         if data != ARG:
-            raise Exception, "Error handler did not receive correct argument"
+            raise Exception("Error handler did not receive correct argument")
         self.errors.append(msg)
 
 
@@ -34,7 +34,7 @@ ctxt.setValidityErrorHandler(e.handler, e.handler, ARG)
 doc = libxml2.parseDoc(valid)
 ret = doc.validateDtd(ctxt, dtd)
 if ret != 1 or e.errors:
-    print "error doing DTD validation"
+    print("error doing DTD validation")
     sys.exit(1)
 doc.freeDoc()
 
@@ -42,7 +42,7 @@ doc.freeDoc()
 doc = libxml2.parseDoc(invalid)
 ret = doc.validateDtd(ctxt, dtd)
 if ret != 0 or not e.errors:
-    print "Error: document supposed to be invalid"
+    print("Error: document supposed to be invalid")
 doc.freeDoc()
 
 dtd.freeDtd()
@@ -52,8 +52,8 @@ del ctxt
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index 7022efe..57f13a4 100755 (executable)
@@ -11,7 +11,7 @@ class ErrorHandler:
 
     def handler(self, msg, data):
         if data != ARG:
-            raise Exception, "Error handler did not receive correct argument"
+            raise Exception("Error handler did not receive correct argument")
         self.errors.append(msg)
 
 # Memory debug specific
@@ -49,7 +49,7 @@ ctxt.setValidityErrorHandler(e.handler, e.handler, ARG)
 doc = libxml2.parseDoc(valid)
 ret = doc.relaxNGValidateDoc(ctxt)
 if ret != 0 or e.errors:
-    print "error doing RelaxNG validation"
+    print("error doing RelaxNG validation")
     sys.exit(1)
 doc.freeDoc()
 
@@ -57,7 +57,7 @@ doc.freeDoc()
 doc = libxml2.parseDoc(invalid)
 ret = doc.relaxNGValidateDoc(ctxt)
 if ret == 0 or not e.errors:
-    print "Error: document supposed to be RelaxNG invalid"
+    print("Error: document supposed to be RelaxNG invalid")
     sys.exit(1)
 doc.freeDoc()
 
@@ -69,8 +69,8 @@ libxml2.relaxNGCleanupTypes()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index d4d62b2..cc543f3 100755 (executable)
@@ -11,7 +11,7 @@ class ErrorHandler:
 
     def handler(self, msg, data):
         if data != ARG:
-            raise Exception, "Error handler did not receive correct argument"
+            raise Exception("Error handler did not receive correct argument")
         self.errors.append(msg)
 
 # Memory debug specific
@@ -56,7 +56,7 @@ ctxt_valid.setValidityErrorHandler(e.handler, e.handler, ARG)
 doc = libxml2.parseDoc(valid)
 ret = doc.schemaValidateDoc(ctxt_valid)
 if ret != 0 or e.errors:
-    print "error doing schema validation"
+    print("error doing schema validation")
     sys.exit(1)
 doc.freeDoc()
 
@@ -64,7 +64,7 @@ doc.freeDoc()
 doc = libxml2.parseDoc(invalid)
 ret = doc.schemaValidateDoc(ctxt_valid)
 if ret == 0 or not e.errors:
-    print "Error: document supposer to be schema invalid"
+    print("Error: document supposer to be schema invalid")
     sys.exit(1)
 doc.freeDoc()
 
@@ -76,8 +76,8 @@ libxml2.schemaCleanupTypes()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
 
index 0dc86f4..16c0386 100755 (executable)
@@ -12,14 +12,14 @@ doc = ctxt.doc()
 valid = ctxt.isValid()
 
 if doc.name != "valid.xml":
-    print "doc.name failed"
+    print("doc.name failed")
     sys.exit(1)
 root = doc.children
 if root.name != "doc":
-    print "root.name failed"
+    print("root.name failed")
     sys.exit(1)
 if valid != 1:
-    print "validity chec failed"
+    print("validity chec failed")
     sys.exit(1)
 doc.freeDoc()
 
@@ -32,7 +32,7 @@ while i > 0:
     valid = ctxt.isValid()
     doc.freeDoc()
     if valid != 1:
-        print "validity check failed"
+        print("validity check failed")
         sys.exit(1)
     i = i - 1
 
@@ -48,14 +48,14 @@ ctxt.parseDocument()
 doc = ctxt.doc()
 valid = ctxt.isValid()
 if doc.name != "invalid.xml":
-    print "doc.name failed"
+    print("doc.name failed")
     sys.exit(1)
 root = doc.children
 if root.name != "doc":
-    print "root.name failed"
+    print("root.name failed")
     sys.exit(1)
 if valid != 0:
-    print "validity chec failed"
+    print("validity chec failed")
     sys.exit(1)
 doc.freeDoc()
 
@@ -68,7 +68,7 @@ while i > 0:
     valid = ctxt.isValid()
     doc.freeDoc()
     if valid != 0:
-        print "validity check failed"
+        print("validity check failed")
         sys.exit(1)
     i = i - 1
 del ctxt
@@ -76,7 +76,7 @@ del ctxt
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 3b5a62a..47f0557 100755 (executable)
@@ -3,7 +3,6 @@
 # this tests the entities substitutions with the XmlTextReader interface
 #
 import sys
-import StringIO
 import libxml2
 
 # Memory debug specific
@@ -45,12 +44,12 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document test1"
+    print("Error parsing the document test1")
     sys.exit(1)
 
 if result != expect:
-    print "Unexpected result for test1"
-    print result
+    print("Unexpected result for test1")
+    print(result)
     sys.exit(1)
 
 doc.freeDoc()
@@ -85,12 +84,12 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document test2"
+    print("Error parsing the document test2")
     sys.exit(1)
 
 if result != expect:
-    print "Unexpected result for test2"
-    print result
+    print("Unexpected result for test2")
+    print(result)
     sys.exit(1)
 
 doc.freeDoc()
@@ -123,12 +122,12 @@ while ret == 1:
     ret = reader.Read()
 
 if ret != 0:
-    print "Error parsing the document test3"
+    print("Error parsing the document test3")
     sys.exit(1)
 
 if result != expect:
-    print "Unexpected result for test3"
-    print result
+    print("Unexpected result for test3")
+    print(result)
     sys.exit(1)
 
 #
@@ -139,7 +138,7 @@ del reader
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2e036e1..72e6c9d 100755 (executable)
@@ -11,24 +11,24 @@ libxml2.debugMemory(1)
 
 doc = libxml2.parseFile("tst.xml")
 if doc.name != "tst.xml":
-    print "doc.name error"
+    print("doc.name error")
     sys.exit(1);
 
 ctxt = doc.xpathNewContext()
 res = ctxt.xpathEval("//*")
 if len(res) != 2:
-    print "xpath query: wrong node set size"
+    print("xpath query: wrong node set size")
     sys.exit(1)
 if res[0].name != "doc" or res[1].name != "foo":
-    print "xpath query: wrong node set value"
+    print("xpath query: wrong node set value")
     sys.exit(1)
 ctxt.setContextNode(res[0])
 res = ctxt.xpathEval("foo")
 if len(res) != 1:
-    print "xpath query: wrong node set size"
+    print("xpath query: wrong node set size")
     sys.exit(1)
 if res[0].name != "foo":
-    print "xpath query: wrong node set value"
+    print("xpath query: wrong node set value")
     sys.exit(1)
 doc.freeDoc()
 ctxt.xpathFreeContext()
@@ -45,7 +45,7 @@ del ctxt
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 4769626..b83d283 100755 (executable)
@@ -15,10 +15,10 @@ doc = libxml2.parseFile("tst.xml")
 ctxt = doc.xpathNewContext()
 res = ctxt.xpathEval("//*")
 if len(res) != 2:
-    print "xpath query: wrong node set size"
+    print("xpath query: wrong node set size")
     sys.exit(1)
 if res[0].name != "doc" or res[1].name != "foo":
-    print "xpath query: wrong node set value"
+    print("xpath query: wrong node set value")
     sys.exit(1)
 
 libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
@@ -27,14 +27,14 @@ i = 10000
 while i > 0:
     res = ctxt.xpathEval("foo(1)")
     if res != 2:
-        print "xpath extension failure"
+        print("xpath extension failure")
         sys.exit(1)
     i = i - 1
 i = 10000
 while i > 0:
     res = ctxt.xpathEval("bar(1)")
     if res != "3":
-        print "xpath extension failure got %s expecting '3'"
+        print("xpath extension failure got %s expecting '3'")
         sys.exit(1)
     i = i - 1
 doc.freeDoc()
@@ -43,7 +43,7 @@ ctxt.xpathFreeContext()
 # Memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
old mode 100644 (file)
new mode 100755 (executable)
index 39f49e3..33ab61c
@@ -42,24 +42,24 @@ badexprs = (
 for expr in badexprs:
        try:
                ctxt.xpathEval(expr)
-       except libxml2.xpathError, e:
+       except libxml2.xpathError:
                pass
        else:
-               print "Unexpectedly legal expression:", expr
+               print("Unexpectedly legal expression:", expr)
 ctxt.xpathFreeContext()
 doc.freeDoc()
 
 if err != expect:
-    print "error"
-    print "received %s" %(err)
-    print "expected %s" %(expect)
+    print("error")
+    print("received %s" %(err))
+    print("expected %s" %(expect))
     sys.exit(1)
 
 libxml2.cleanupParser()
 leakedbytes = libxml2.debugMemory(True)
 if leakedbytes == 0:
-       print "OK"
+       print("OK")
 else:
-       print "Memory leak", leakedbytes, "bytes"
+       print("Memory leak", leakedbytes, "bytes")
        # drop file to .memdump file in cwd, but won't work if not compiled in
        libxml2.dumpMemory()
index e67e550..379535e 100755 (executable)
@@ -14,8 +14,8 @@ for n in d.xpathEval("//namespace::*"):
 d.freeDoc()
 
 if res != expect:
-    print "test5 failed: unexpected output"
-    print res
+    print("test5 failed: unexpected output")
+    print(res)
 del res
 del d
 del n
@@ -23,7 +23,7 @@ del n
 libxml2.cleanupParser()
 
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 2b5576a..11c8b32 100755 (executable)
@@ -27,21 +27,21 @@ ctxt = doc.xpathNewContext()
 libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
 res = ctxt.xpathEval("foo('hello')")
 if type(res) != type([]):
-    print "Failed to return a nodeset"
+    print("Failed to return a nodeset")
     sys.exit(1)
 if len(res) != 1:
-    print "Unexpected nodeset size"
+    print("Unexpected nodeset size")
     sys.exit(1)
 node = res[0]
 if node.name != 'p':
-    print "Unexpected nodeset element result"
+    print("Unexpected nodeset element result")
     sys.exit(1)
 node = node.children
 if node.type != 'text':
-    print "Unexpected nodeset element children type"
+    print("Unexpected nodeset element children type")
     sys.exit(1)
 if node.content != 'hello':
-    print "Unexpected nodeset element children content"
+    print("Unexpected nodeset element children content")
     sys.exit(1)
 
 doc.freeDoc()
@@ -51,7 +51,7 @@ ctxt.xpathFreeContext()
 #memory debug specific
 libxml2.cleanupParser()
 if libxml2.debugMemory(1) == 0:
-    print "OK"
+    print("OK")
 else:
-    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+    print("Memory leak %d bytes" % (libxml2.debugMemory(1)))
     libxml2.dumpMemory()
index 54b50de..f237677 100644 (file)
@@ -9,6 +9,83 @@
 #include "libxml_wrap.h"
 #include <libxml/xpathInternals.h>
 
+#if PY_MAJOR_VERSION >= 3
+#define PY_IMPORT_STRING_SIZE PyUnicode_FromStringAndSize
+#define PY_IMPORT_STRING PyUnicode_FromString
+#define PY_IMPORT_INT PyLong_FromLong
+#else
+#define PY_IMPORT_STRING_SIZE PyString_FromStringAndSize
+#define PY_IMPORT_STRING PyString_FromString
+#define PY_IMPORT_INT PyInt_FromLong
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+FILE *
+libxml_PyFileGet(PyObject *f) {
+    int fd, flags;
+    FILE *res;
+    const char *mode;
+
+    fd = PyObject_AsFileDescriptor(f);
+    if (!_PyVerify_fd(fd))
+        return(NULL);
+    /*
+     * Get the flags on the fd to understand how it was opened
+     */
+    flags = fcntl(fd, F_GETFL, 0);
+    switch (flags & O_ACCMODE) {
+        case O_RDWR:
+           if (flags & O_APPEND)
+               mode = "a+";
+           else
+               mode = "rw";
+           break;
+        case O_RDONLY:
+           if (flags & O_APPEND)
+               mode = "r+";
+           else
+               mode = "r";
+           break;
+       case O_WRONLY:
+           if (flags & O_APPEND)
+               mode = "a";
+           else
+               mode = "w";
+           break;
+       default:
+           return(NULL);
+    }
+
+    /*
+     * the FILE struct gets a new fd, so that it can be closed
+     * independently of the file descriptor given. The risk though is
+     * lack of sync. So at the python level sync must be implemented
+     * before and after a conversion took place. No way around it
+     * in the Python3 infrastructure !
+     * The duplicated fd and FILE * will be released in the subsequent
+     * call to libxml_PyFileRelease() which must be genrated accodingly
+     */
+    fd = dup(fd);
+    if (fd == -1)
+        return(NULL);
+    res = fdopen(fd, mode);
+    if (res == NULL) {
+        close(fd);
+       return(NULL);
+    }
+    return(res);
+}
+
+void libxml_PyFileRelease(FILE *f) {
+    if (f != NULL)
+        fclose(f);
+}
+#endif
+
 PyObject *
 libxml_intWrap(int val)
 {
@@ -17,7 +94,7 @@ libxml_intWrap(int val)
 #ifdef DEBUG
     printf("libxml_intWrap: val = %d\n", val);
 #endif
-    ret = PyInt_FromLong((long) val);
+    ret = PY_IMPORT_INT((long) val);
     return (ret);
 }
 
@@ -29,7 +106,7 @@ libxml_longWrap(long val)
 #ifdef DEBUG
     printf("libxml_longWrap: val = %ld\n", val);
 #endif
-    ret = PyInt_FromLong(val);
+    ret = PyLong_FromLong(val);
     return (ret);
 }
 
@@ -57,8 +134,7 @@ libxml_charPtrWrap(char *str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString(str);
+    ret = PY_IMPORT_STRING(str);
     xmlFree(str);
     return (ret);
 }
@@ -75,8 +151,7 @@ libxml_charPtrConstWrap(const char *str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString(str);
+    ret = PY_IMPORT_STRING(str);
     return (ret);
 }
 
@@ -92,8 +167,7 @@ libxml_xmlCharPtrWrap(xmlChar * str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString((char *) str);
+    ret = PY_IMPORT_STRING((char *) str);
     xmlFree(str);
     return (ret);
 }
@@ -110,8 +184,7 @@ libxml_xmlCharPtrConstWrap(const xmlChar * str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString((char *) str);
+    ret = PY_IMPORT_STRING((char *) str);
     return (ret);
 }
 
@@ -127,8 +200,7 @@ libxml_constcharPtrWrap(const char *str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString(str);
+    ret = PY_IMPORT_STRING(str);
     return (ret);
 }
 
@@ -144,8 +216,7 @@ libxml_constxmlCharPtrWrap(const xmlChar * str)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    /* TODO: look at deallocation */
-    ret = PyString_FromString((char *) str);
+    ret = PY_IMPORT_STRING((char *) str);
     return (ret);
 }
 
@@ -162,9 +233,7 @@ libxml_xmlDocPtrWrap(xmlDocPtr doc)
         return (Py_None);
     }
     /* TODO: look at deallocation */
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) doc, (char *) "xmlDocPtr",
-                                     NULL);
+    ret = PyCapsule_New((void *) doc, (char *) "xmlDocPtr", NULL);
     return (ret);
 }
 
@@ -180,9 +249,7 @@ libxml_xmlNodePtrWrap(xmlNodePtr node)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) node, (char *) "xmlNodePtr",
-                                     NULL);
+    ret = PyCapsule_New((void *) node, (char *) "xmlNodePtr", NULL);
     return (ret);
 }
 
@@ -198,9 +265,7 @@ libxml_xmlURIPtrWrap(xmlURIPtr uri)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) uri, (char *) "xmlURIPtr",
-                                     NULL);
+    ret = PyCapsule_New((void *) uri, (char *) "xmlURIPtr", NULL);
     return (ret);
 }
 
@@ -216,9 +281,7 @@ libxml_xmlNsPtrWrap(xmlNsPtr ns)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) ns, (char *) "xmlNsPtr",
-                                     NULL);
+    ret = PyCapsule_New((void *) ns, (char *) "xmlNsPtr", NULL);
     return (ret);
 }
 
@@ -234,9 +297,7 @@ libxml_xmlAttrPtrWrap(xmlAttrPtr attr)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) attr, (char *) "xmlAttrPtr",
-                                     NULL);
+    ret = PyCapsule_New((void *) attr, (char *) "xmlAttrPtr", NULL);
     return (ret);
 }
 
@@ -252,9 +313,7 @@ libxml_xmlAttributePtrWrap(xmlAttributePtr attr)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) attr,
-                                     (char *) "xmlAttributePtr", NULL);
+    ret = PyCapsule_New((void *) attr, (char *) "xmlAttributePtr", NULL);
     return (ret);
 }
 
@@ -270,9 +329,7 @@ libxml_xmlElementPtrWrap(xmlElementPtr elem)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) elem,
-                                     (char *) "xmlElementPtr", NULL);
+    ret = PyCapsule_New((void *) elem, (char *) "xmlElementPtr", NULL);
     return (ret);
 }
 
@@ -288,9 +345,7 @@ libxml_xmlXPathContextPtrWrap(xmlXPathContextPtr ctxt)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) ctxt,
-                                     (char *) "xmlXPathContextPtr", NULL);
+    ret = PyCapsule_New((void *) ctxt, (char *) "xmlXPathContextPtr", NULL);
     return (ret);
 }
 
@@ -306,9 +361,7 @@ libxml_xmlXPathParserContextPtrWrap(xmlXPathParserContextPtr ctxt)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret = PyCObject_FromVoidPtrAndDesc((void *) ctxt,
-                                       (char *) "xmlXPathParserContextPtr",
-                                       NULL);
+    ret = PyCapsule_New((void *)ctxt, (char *)"xmlXPathParserContextPtr", NULL);
     return (ret);
 }
 
@@ -325,28 +378,35 @@ libxml_xmlParserCtxtPtrWrap(xmlParserCtxtPtr ctxt)
         return (Py_None);
     }
 
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) ctxt,
-                                     (char *) "xmlParserCtxtPtr", NULL);
+    ret = PyCapsule_New((void *) ctxt, (char *) "xmlParserCtxtPtr", NULL);
     return (ret);
 }
 
 /**
  * libxml_xmlXPathDestructNsNode:
- * cobj: xmlNsPtr namespace node
- * desc: ignored string
+ * cap: xmlNsPtr namespace node capsule object
  *
  * This function is called if and when a namespace node returned in
  * an XPath node set is to be destroyed. That's the only kind of
  * object returned in node set not directly linked to the original
  * xmlDoc document, see xmlXPathNodeSetDupNs.
  */
+#if PY_VERSION_HEX < 0x02070000
+static void
+libxml_xmlXPathDestructNsNode(void *cap, void *desc ATTRIBUTE_UNUSED)
+#else
 static void
-libxml_xmlXPathDestructNsNode(void *cobj, void *desc ATTRIBUTE_UNUSED) {
+libxml_xmlXPathDestructNsNode(PyObject *cap)
+#endif
+{
 #ifdef DEBUG
-    fprintf(stderr, "libxml_xmlXPathDestructNsNode called %p\n", cobj);
+    fprintf(stderr, "libxml_xmlXPathDestructNsNode called %p\n", cap);
+#endif
+#if PY_VERSION_HEX < 0x02070000
+    xmlXPathNodeSetFreeNs((xmlNsPtr) cap);
+#else
+    xmlXPathNodeSetFreeNs((xmlNsPtr) PyCapsule_GetPointer(cap, "xmlNsPtr"));
 #endif
-    xmlXPathNodeSetFreeNs((xmlNsPtr) cobj);
 }
 
 PyObject *
@@ -400,8 +460,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
                 for (i = 0; i < obj->nodesetval->nodeNr; i++) {
                     node = obj->nodesetval->nodeTab[i];
                     if (node->type == XML_NAMESPACE_DECL) {
-                       PyObject *ns = 
-                           PyCObject_FromVoidPtrAndDesc((void *) node,
+                       PyObject *ns = PyCapsule_New((void *) node,
                                      (char *) "xmlNsPtr",
                                     libxml_xmlXPathDestructNsNode);
                        PyList_SetItem(ret, i, ns);
@@ -414,13 +473,13 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
             }
             break;
         case XPATH_BOOLEAN:
-            ret = PyInt_FromLong((long) obj->boolval);
+            ret = PY_IMPORT_INT((long) obj->boolval);
             break;
         case XPATH_NUMBER:
             ret = PyFloat_FromDouble(obj->floatval);
             break;
         case XPATH_STRING:
-            ret = PyString_FromString((char *) obj->stringval);
+           ret = PY_IMPORT_STRING((char *) obj->stringval);
             break;
         case XPATH_POINT:
         {
@@ -429,7 +488,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
             PyObject *tuple;
 
             node = libxml_xmlNodePtrWrap(obj->user);
-            indexIntoNode = PyInt_FromLong((long) obj->index);
+            indexIntoNode = PY_IMPORT_INT((long) obj->index);
 
             tuple = PyTuple_New(2);
             PyTuple_SetItem(tuple, 0, node);
@@ -453,7 +512,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
                 list = PyList_New(1);
 
                 node = libxml_xmlNodePtrWrap(obj->user);
-                indexIntoNode = PyInt_FromLong((long) obj->index);
+                indexIntoNode = PY_IMPORT_INT((long) obj->index);
 
                 tuple = PyTuple_New(2);
                 PyTuple_SetItem(tuple, 0, node);
@@ -471,7 +530,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
                 list = PyList_New(2);
 
                 node = libxml_xmlNodePtrWrap(obj->user);
-                indexIntoNode = PyInt_FromLong((long) obj->index);
+                indexIntoNode = PY_IMPORT_INT((long) obj->index);
 
                 tuple = PyTuple_New(2);
                 PyTuple_SetItem(tuple, 0, node);
@@ -480,7 +539,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
                 PyList_SetItem(list, 0, tuple);
 
                 node = libxml_xmlNodePtrWrap(obj->user2);
-                indexIntoNode = PyInt_FromLong((long) obj->index2);
+                indexIntoNode = PY_IMPORT_INT((long) obj->index2);
 
                 tuple = PyTuple_New(2);
                 PyTuple_SetItem(tuple, 0, node);
@@ -535,7 +594,7 @@ libxml_xmlXPathObjectPtrWrap(xmlXPathObjectPtr obj)
 }
 
 xmlXPathObjectPtr
-libxml_xmlXPathObjectPtrConvert(PyObject * obj)
+libxml_xmlXPathObjectPtrConvert(PyObject *obj)
 {
     xmlXPathObjectPtr ret = NULL;
 
@@ -545,14 +604,14 @@ libxml_xmlXPathObjectPtrConvert(PyObject * obj)
     if (obj == NULL) {
         return (NULL);
     }
-    if PyFloat_Check
-        (obj) {
+    if PyFloat_Check (obj) {
         ret = xmlXPathNewFloat((double) PyFloat_AS_DOUBLE(obj));
-
-    } else if PyInt_Check(obj) {
-
+    } else if PyLong_Check(obj) {
+#ifdef PyLong_AS_LONG
+        ret = xmlXPathNewFloat((double) PyLong_AS_LONG(obj));
+#else
         ret = xmlXPathNewFloat((double) PyInt_AS_LONG(obj));
-
+#endif
 #ifdef PyBool_Check
     } else if PyBool_Check (obj) {
 
@@ -563,15 +622,37 @@ libxml_xmlXPathObjectPtrConvert(PyObject * obj)
           ret = xmlXPathNewBoolean(0);
         }
 #endif
-    } else if PyString_Check
-        (obj) {
+    } else if PyBytes_Check (obj) {
         xmlChar *str;
 
-        str = xmlStrndup((const xmlChar *) PyString_AS_STRING(obj),
-                         PyString_GET_SIZE(obj));
+        str = xmlStrndup((const xmlChar *) PyBytes_AS_STRING(obj),
+                         PyBytes_GET_SIZE(obj));
         ret = xmlXPathWrapString(str);
-    } else if PyList_Check
-        (obj) {
+#ifdef PyUnicode_Check
+    } else if PyUnicode_Check (obj) {
+#if PY_VERSION_HEX >= 0x03030000
+        xmlChar *str;
+       const char *tmp;
+       Py_ssize_t size;
+
+       /* tmp doesn't need to be deallocated */
+        tmp = PyUnicode_AsUTF8AndSize(obj, &size);
+        str = xmlStrndup((const xmlChar *) tmp, (int) size);
+        ret = xmlXPathWrapString(str);
+#else
+        xmlChar *str = NULL;
+        PyObject *b;
+
+       b = PyUnicode_AsUTF8String(obj);
+       if (b != NULL) {
+           str = xmlStrndup((const xmlChar *) PyBytes_AS_STRING(b),
+                            PyBytes_GET_SIZE(b));
+           Py_DECREF(b);
+       }
+       ret = xmlXPathWrapString(str);
+#endif
+#endif
+    } else if PyList_Check (obj) {
         int i;
         PyObject *node;
         xmlNodePtr cur;
@@ -585,28 +666,18 @@ libxml_xmlXPathObjectPtrConvert(PyObject * obj)
                 continue;
 
             cur = NULL;
-            if (PyCObject_Check(node)) {
+            if (PyCapsule_CheckExact(node)) {
 #ifdef DEBUG
-                printf("Got a CObject\n");
+                printf("Got a Capsule\n");
 #endif
                 cur = PyxmlNode_Get(node);
-            } else if (PyInstance_Check(node)) {
-                PyInstanceObject *inst = (PyInstanceObject *) node;
-                PyObject *name = inst->in_class->cl_name;
-
-                if PyString_Check
-                    (name) {
-                    char *type = PyString_AS_STRING(name);
-                    PyObject *wrapper;
-
-                    if (!strcmp(type, "xmlNode")) {
-                        wrapper =
-                            PyObject_GetAttrString(node, (char *) "_o");
-                        if (wrapper != NULL) {
-                            cur = PyxmlNode_Get(wrapper);
-                        }
-                    }
-                    }
+            } else if ((PyObject_HasAttrString(node, (char *) "_o")) &&
+                      (PyObject_HasAttrString(node, (char *) "get_doc"))) {
+               PyObject *wrapper;
+
+               wrapper = PyObject_GetAttrString(node, (char *) "_o");
+               if (wrapper != NULL)
+                   cur = PyxmlNode_Get(wrapper);
             } else {
 #ifdef DEBUG
                 printf("Unknown object in Python return list\n");
@@ -622,7 +693,6 @@ libxml_xmlXPathObjectPtrConvert(PyObject * obj)
         printf("Unable to convert Python Object to XPath");
 #endif
     }
-    Py_DECREF(obj);
     return (ret);
 }
 
@@ -630,7 +700,7 @@ PyObject *
 libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid)
 {
        PyObject *ret;
-       
+
 #ifdef DEBUG
        printf("libxml_xmlValidCtxtPtrWrap: valid = %p\n", valid);
 #endif
@@ -640,7 +710,7 @@ libxml_xmlValidCtxtPtrWrap(xmlValidCtxtPtr valid)
        }
 
        ret = 
-               PyCObject_FromVoidPtrAndDesc((void *) valid,
+               PyCapsule_New((void *) valid,
                                                                         (char *) "xmlValidCtxtPtr", NULL);
 
        return (ret);
@@ -659,7 +729,7 @@ libxml_xmlCatalogPtrWrap(xmlCatalogPtr catal)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) catal,
+        PyCapsule_New((void *) catal,
                                      (char *) "xmlCatalogPtr", NULL);
     return (ret);
 }
@@ -677,7 +747,7 @@ libxml_xmlOutputBufferPtrWrap(xmlOutputBufferPtr buffer)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) buffer,
+        PyCapsule_New((void *) buffer,
                                      (char *) "xmlOutputBufferPtr", NULL);
     return (ret);
 }
@@ -695,7 +765,7 @@ libxml_xmlParserInputBufferPtrWrap(xmlParserInputBufferPtr buffer)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) buffer,
+        PyCapsule_New((void *) buffer,
                                      (char *) "xmlParserInputBufferPtr", NULL);
     return (ret);
 }
@@ -714,7 +784,7 @@ libxml_xmlRegexpPtrWrap(xmlRegexpPtr regexp)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) regexp,
+        PyCapsule_New((void *) regexp,
                                      (char *) "xmlRegexpPtr", NULL);
     return (ret);
 }
@@ -734,7 +804,7 @@ libxml_xmlTextReaderPtrWrap(xmlTextReaderPtr reader)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) reader,
+        PyCapsule_New((void *) reader,
                                      (char *) "xmlTextReaderPtr", NULL);
     return (ret);
 }
@@ -752,7 +822,7 @@ libxml_xmlTextReaderLocatorPtrWrap(xmlTextReaderLocatorPtr locator)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) locator,
+        PyCapsule_New((void *) locator,
                                      (char *) "xmlTextReaderLocatorPtr", NULL);
     return (ret);
 }
@@ -772,7 +842,7 @@ libxml_xmlRelaxNGPtrWrap(xmlRelaxNGPtr ctxt)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+        PyCapsule_New((void *) ctxt,
                                      (char *) "xmlRelaxNGPtr", NULL);
     return (ret);
 }
@@ -790,7 +860,7 @@ libxml_xmlRelaxNGParserCtxtPtrWrap(xmlRelaxNGParserCtxtPtr ctxt)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+        PyCapsule_New((void *) ctxt,
                                      (char *) "xmlRelaxNGParserCtxtPtr", NULL);
     return (ret);
 }
@@ -807,7 +877,7 @@ libxml_xmlRelaxNGValidCtxtPtrWrap(xmlRelaxNGValidCtxtPtr valid)
         return (Py_None);
     }
     ret =
-        PyCObject_FromVoidPtrAndDesc((void *) valid,
+        PyCapsule_New((void *) valid,
                                      (char *) "xmlRelaxNGValidCtxtPtr", NULL);
     return (ret);
 }
@@ -825,7 +895,7 @@ libxml_xmlSchemaPtrWrap(xmlSchemaPtr ctxt)
                return (Py_None);
        }
        ret =
-               PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+               PyCapsule_New((void *) ctxt,
                                                                         (char *) "xmlSchemaPtr", NULL);
        return (ret);
 }
@@ -843,7 +913,7 @@ libxml_xmlSchemaParserCtxtPtrWrap(xmlSchemaParserCtxtPtr ctxt)
                return (Py_None);
        }
        ret = 
-               PyCObject_FromVoidPtrAndDesc((void *) ctxt,
+               PyCapsule_New((void *) ctxt,
                                                                         (char *) "xmlSchemaParserCtxtPtr", NULL);
 
        return (ret);
@@ -863,7 +933,7 @@ libxml_xmlSchemaValidCtxtPtrWrap(xmlSchemaValidCtxtPtr valid)
        }
 
        ret = 
-               PyCObject_FromVoidPtrAndDesc((void *) valid,
+               PyCapsule_New((void *) valid,
                                                                         (char *) "xmlSchemaValidCtxtPtr", NULL);
 
        return (ret);
@@ -882,8 +952,6 @@ libxml_xmlErrorPtrWrap(xmlErrorPtr error)
         Py_INCREF(Py_None);
         return (Py_None);
     }
-    ret =
-        PyCObject_FromVoidPtrAndDesc((void *) error,
-                                     (char *) "xmlErrorPtr", NULL);
+    ret = PyCapsule_New((void *) error, (char *) "xmlErrorPtr", NULL);
     return (ret);
 }
index 18f6a0b..8d88e95 100644 (file)
--- a/relaxng.c
+++ b/relaxng.c
 static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
     "http://relaxng.org/ns/structure/1.0";
 
-#define IS_RELAXNG(node, type)                                         \
+#define IS_RELAXNG(node, typ                                         \
    ((node != NULL) && (node->ns != NULL) &&                            \
-    (xmlStrEqual(node->name, (const xmlChar *) type)) &&               \
+    (node->type == XML_ELEMENT_NODE) &&                                        \
+    (xmlStrEqual(node->name, (const xmlChar *) typ)) &&                \
     (xmlStrEqual(node->ns->href, xmlRelaxNGNs)))
 
 
@@ -60,7 +61,7 @@ static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
 
 #define DEBUG_LIST 1
 
-#define DEBUG_INCLUDE 1 
+#define DEBUG_INCLUDE 1
 
 #define DEBUG_ERROR 1
 
@@ -71,7 +72,7 @@ static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
 
 #define MAX_ERROR 5
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -421,7 +422,7 @@ struct _xmlRelaxNGDocument {
 
 /************************************************************************
  *                                                                     *
- *             Some factorized error routines                          *
+ *             Some factorized error routines                          *
  *                                                                     *
  ************************************************************************/
 
@@ -564,9 +565,9 @@ xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
 }
 
 /************************************************************************
- *                                                                     *
- *             Preliminary type checking interfaces                    *
- *                                                                     *
+ *                                                                     *
+ *             Preliminary type checking interfaces                    *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -654,9 +655,9 @@ struct _xmlRelaxNGTypeLibrary {
 };
 
 /************************************************************************
- *                                                                     *
- *                     Allocation functions                            *
- *                                                                     *
+ *                                                                     *
+ *                     Allocation functions                            *
+ *                                                                     *
  ************************************************************************/
 static void xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar);
 static void xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define);
@@ -1094,7 +1095,7 @@ xmlRelaxNGAddStates(xmlRelaxNGValidCtxtPtr ctxt,
 {
     int i;
 
-    if (state == NULL) {
+    if (state == NULL || states == NULL) {
         return (-1);
     }
     if (states->nbState >= states->maxState) {
@@ -1397,9 +1398,9 @@ xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Semi internal functions                         *
- *                                                                     *
+ *                                                                     *
+ *                     Semi internal functions                         *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -1429,9 +1430,9 @@ xmlRelaxParserSetFlag(xmlRelaxNGParserCtxtPtr ctxt, int flags)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Document functions                              *
- *                                                                     *
+ *                                                                     *
+ *                     Document functions                              *
+ *                                                                     *
  ************************************************************************/
 static xmlDocPtr xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt,
                                       xmlDocPtr doc);
@@ -2007,9 +2008,9 @@ xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Error functions                                 *
- *                                                                     *
+ *                                                                     *
+ *                     Error functions                                 *
+ *                                                                     *
  ************************************************************************/
 
 #define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL, 0);
@@ -2360,7 +2361,7 @@ xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
      * generate the error directly
      */
     if (((ctxt->flags & FLAGS_IGNORABLE) == 0) ||
-        (ctxt->flags & FLAGS_NEGATIVE)) {
+        (ctxt->flags & FLAGS_NEGATIVE)) {
         xmlNodePtr node, seq;
 
         /*
@@ -2390,9 +2391,9 @@ xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
 
 
 /************************************************************************
- *                                                                     *
- *                     Type library hooks                              *
- *                                                                     *
+ *                                                                     *
+ *                     Type library hooks                              *
+ *                                                                     *
  ************************************************************************/
 static xmlChar *xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt,
                                     const xmlChar * str);
@@ -2594,13 +2595,10 @@ xmlRelaxNGSchemaTypeCompare(void *data ATTRIBUTE_UNUSED,
     }
     ret = xmlSchemaValPredefTypeNode(typ, value2, &res2, ctxt2);
     if (ret != 0) {
-       if ((comp1 == NULL) && (res1 != NULL))
+       if (res1 != (xmlSchemaValPtr) comp1)
            xmlSchemaFreeValue(res1);
         return (-1);
     }
-    if (res1 == NULL) {
-        return (-1);
-    }
     ret = xmlSchemaCompareValues(res1, res2);
     if (res1 != (xmlSchemaValPtr) comp1)
         xmlSchemaFreeValue(res1);
@@ -2847,12 +2845,12 @@ xmlRelaxNGCleanupTypes(void)
 }
 
 /************************************************************************
- *                                                                     *
- *             Compiling element content into regexp                   *
- *                                                                     *
+ *                                                                     *
+ *             Compiling element content into regexp                   *
+ *                                                                     *
  * Sometime the element content can be compiled into a pure regexp,    *
  * This allows a faster execution and streamability at that level      *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 /* from automata.c but not exported */
@@ -3325,9 +3323,9 @@ xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Parsing functions                               *
- *                                                                     *
+ *                                                                     *
+ *                     Parsing functions                               *
+ *                                                                     *
  ************************************************************************/
 
 static xmlRelaxNGDefinePtr xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr
@@ -6602,7 +6600,7 @@ xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
     }
 
     /*
-     * Apply 4.17 mergingd rules to defines and starts
+     * Apply 4.17 merging rules to defines and starts
      */
     xmlRelaxNGCombineStart(ctxt, ret);
     if (ret->defs != NULL) {
@@ -6654,12 +6652,17 @@ xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
     ctxt->define = NULL;
     if (IS_RELAXNG(node, "grammar")) {
         schema->topgrammar = xmlRelaxNGParseGrammar(ctxt, node->children);
+        if (schema->topgrammar == NULL) {
+            xmlRelaxNGFree(schema);
+            return (NULL);
+        }
     } else {
         xmlRelaxNGGrammarPtr tmp, ret;
 
         schema->topgrammar = ret = xmlRelaxNGNewGrammar(ctxt);
         if (schema->topgrammar == NULL) {
-            return (schema);
+            xmlRelaxNGFree(schema);
+            return (NULL);
         }
         /*
          * Link the new grammar in the tree
@@ -6705,9 +6708,9 @@ xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Reading RelaxNGs                                *
- *                                                                     *
+ *                                                                     *
+ *                     Reading RelaxNGs                                *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -7316,7 +7319,7 @@ xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
                     }
                 }
                 /*
-                 * Thisd is not an else since "include" is transformed
+                 * This is not an else since "include" is transformed
                  * into a div
                  */
                 if (xmlStrEqual(cur->name, BAD_CAST "div")) {
@@ -7345,13 +7348,13 @@ xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
                     if (ns != NULL)
                         xmlFree(ns);
                    /*
-                    * Since we are about to delete cur, if it's nsDef is non-NULL we
+                    * Since we are about to delete cur, if its nsDef is non-NULL we
                     * need to preserve it (it contains the ns definitions for the
                     * children we just moved).  We'll just stick it on to the end
                     * of cur->parent's list, since it's never going to be re-serialized
                     * (bug 143738).
                     */
-                   if (cur->nsDef != NULL) {
+                   if ((cur->nsDef != NULL) && (cur->parent != NULL)) {
                        xmlNsPtr parDef = (xmlNsPtr)&cur->parent->nsDef;
                        while (parDef->next != NULL)
                            parDef = parDef->next;
@@ -7369,7 +7372,8 @@ xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
         else if ((cur->type == XML_TEXT_NODE) ||
                  (cur->type == XML_CDATA_SECTION_NODE)) {
             if (IS_BLANK_NODE(cur)) {
-                if (cur->parent->type == XML_ELEMENT_NODE) {
+                if ((cur->parent != NULL) &&
+                   (cur->parent->type == XML_ELEMENT_NODE)) {
                     if ((!xmlStrEqual(cur->parent->name, BAD_CAST "value"))
                         &&
                         (!xmlStrEqual
@@ -7521,7 +7525,7 @@ xmlRelaxNGParse(xmlRelaxNGParserCtxtPtr ctxt)
         xmlRngPErr(ctxt, (xmlNodePtr) doc,
                   XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
                    (ctxt->URL ? ctxt->URL : BAD_CAST "schemas"), NULL);
-       
+
         xmlFreeDoc(ctxt->document);
         ctxt->document = NULL;
         return (NULL);
@@ -7663,9 +7667,9 @@ xmlRelaxNGSetParserStructuredErrors(xmlRelaxNGParserCtxtPtr ctxt,
 #ifdef LIBXML_OUTPUT_ENABLED
 
 /************************************************************************
- *                                                                     *
- *                     Dump back a compiled form                       *
- *                                                                     *
+ *                                                                     *
+ *                     Dump back a compiled form                       *
+ *                                                                     *
  ************************************************************************/
 static void xmlRelaxNGDumpDefine(FILE * output,
                                  xmlRelaxNGDefinePtr define);
@@ -7806,7 +7810,7 @@ xmlRelaxNGDumpDefine(FILE * output, xmlRelaxNGDefinePtr define)
  * xmlRelaxNGDumpGrammar:
  * @output:  the file output
  * @grammar:  a grammar structure
- * @top:  is this a top grammar 
+ * @top:  is this a top grammar
  *
  * Dump a RelaxNG structure back
  */
@@ -7899,9 +7903,9 @@ xmlRelaxNGDumpTree(FILE * output, xmlRelaxNGPtr schema)
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 /************************************************************************
- *                                                                     *
- *             Validation of compiled content                          *
- *                                                                     *
+ *                                                                     *
+ *             Validation of compiled content                          *
+ *                                                                     *
  ************************************************************************/
 static int xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
                                         xmlRelaxNGDefinePtr define);
@@ -8044,9 +8048,9 @@ xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
- *             Progressive validation of when possible                 *
- *                                                                     *
+ *                                                                     *
+ *             Progressive validation of when possible                 *
+ *                                                                     *
  ************************************************************************/
 static int xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
                                            xmlRelaxNGDefinePtr defines);
@@ -8346,7 +8350,7 @@ xmlRelaxNGValidatePushElement(xmlRelaxNGValidCtxtPtr ctxt,
  * xmlRelaxNGValidatePushCData:
  * @ctxt:  the RelaxNG validation context
  * @data:  some character data read
- * @len:  the lenght of the data
+ * @len:  the length of the data
  *
  * check the CData parsed for validation in the current stack
  *
@@ -8480,9 +8484,9 @@ xmlRelaxNGValidateFullElement(xmlRelaxNGValidCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
- *             Generic interpreted validation implementation           *
- *                                                                     *
+ *                                                                     *
+ *             Generic interpreted validation implementation           *
+ *                                                                     *
  ************************************************************************/
 static int xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
                                    xmlRelaxNGDefinePtr define);
@@ -9049,6 +9053,19 @@ xmlRelaxNGAttributeMatch(xmlRelaxNGValidCtxtPtr ctxt,
                 return (ret);
             list = list->next;
         }
+    } else if (define->type == XML_RELAXNG_CHOICE) {
+        xmlRelaxNGDefinePtr list;
+
+        list = define->nameClass;
+        while (list != NULL) {
+            ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
+            if (ret == 1)
+                return (1);
+            if (ret < 0)
+                return (ret);
+            list = list->next;
+        }
+        return (0);
     } else {
     TODO}
     return (1);
@@ -9408,6 +9425,10 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
     oldstate = ctxt->state;
     for (i = 0; i < nbgroups; i++) {
         ctxt->state = xmlRelaxNGCopyValidState(ctxt, oldstate);
+       if (ctxt->state == NULL) {
+           ret = -1;
+           break;
+       }
         group = partitions->groups[i];
         if (lasts[i] != NULL) {
             last = lasts[i]->next;
@@ -10842,9 +10863,9 @@ xmlRelaxNGCleanPSVI(xmlNodePtr node) {
     return;
 }
 /************************************************************************
- *                                                                     *
- *                     Validation interfaces                           *
- *                                                                     *
+ *                                                                     *
+ *                     Validation interfaces                           *
+ *                                                                     *
  ************************************************************************/
 
 /**
index acdad7c..f4902af 100644 (file)
@@ -1,5 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><head><style>
+<html>
+<head>
+<style>
 .......
 ...............................................................
 ...............................................................
@@ -63,4 +65,6 @@
 ...............................................................
 ...............................................................
 ...............................................................
-</style></head></html>
+</style>
+</head>
+</html>
index 929ed8a..8489033 100644 (file)
@@ -1,6 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>This service is temporary down</title></head>
+<head>
+  <title>This service is temporary down</title>
+</head>
+
 <body bgcolor="#FFFFFF">
 <h1 align="center">Sorry, this service is temporary down</h1>
 We are doing our best to get it back on-line,
index 0433f48..f7feaa6 100644 (file)
@@ -1,4 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body bgcolor="#FFFFFF">\r
-                <a href="mailto:katherine@cbfanc.org,website@bis.doc.gov?subject=South%20San%20Francisco%20BIS%20Seminar%20-%20October%2016th"></a><br>
-</body></html>
+<html>\r
+<body bgcolor="#FFFFFF">\r
+                <a href="mailto:katherine@cbfanc.org,website@bis.doc.gov?subject=South%20San%20Francisco%20BIS%20Seminar%20-%20October%2016th"></a><br>\r
+</body>\r
+</html>
index 1a54517..cacf4ed 100644 (file)
@@ -1,2 +1,4 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body><hr></body></html>
+<html><body>
+<hr>
+</body></html>
index b3e6b41..e2261ea 100644 (file)
@@ -1,16 +1,24 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html>
-<head><title>gnome-xml push mode bug</title></head>
+<head>
+<title>gnome-xml push mode bug</title>
+</head>
 <body>
 
-<table border="4"><tr>
-<td bgcolor="white">
+<table border="4">
+  <tr>
+    <td bgcolor="white">
        Foo1
-       <table border="4"><tr><td>Foo2<p></p>
+       <table border="4">
+         <tr>
+           <td>Foo2<p></p>
 <p></p>
-</td></tr></table>
 </td>
+</tr>
+</table>
+    </td>
     <td bgcolor="blue">Foo3</td>
-   </tr></table>
-</body>
+   </tr>
+  </table>
+  </body>
 </html>
index 2c7e230..4f959e9 100644 (file)
@@ -7,7 +7,9 @@
           function NS_NullWindow(){this.window;}
           function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}
           window.open=NS_NewOpen;
-</script><!-- END Naviscope Javascript --><!-- saved from url=(0027)http://www.agents-tech.com/ --><meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+</script>
+<!-- END Naviscope Javascript --><!-- saved from url=(0027)http://www.agents-tech.com/ -->
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
 <meta content="Copernic.com Inc. develops innovative agent technology solutions to efficiently access and manage the overwhelming quantity of information available on the Internet and intranets." name="DESCRIPTION">
 <meta content="agent,technology,intranet,extranet,management,filtering,ranking,solution,service,intelligent,intelligence,client,server,architecture,developer,development,information,telecommunication,announcement,press,product,profile,contact,multi-agent,meta-search,metasearch,multi-thread,mobile,wireless,shopping,robot,PCS,Copernic,engine,toolkit,CDK,EDK" name="KEYWORDS">
 <meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
index e66e256..e9d5e44 100644 (file)
@@ -1,21 +1,24 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <!-- saved from url=(0025)http://bp6.gamesquad.net/ --><!-- BEGIN Naviscope Javascript --><html>
 <head>
-<title>BP6.com #1 online resource for the BP6 Mobo....</title>
+<title>BP6.com #1 online resource for the BP6 Mobo....</title>\r
 <script language="javascript">\r
           NS_ActualOpen=window.open;\r
           function NS_NullWindow(){this.window;}\r
           function NS_NewOpen(url,nam,atr){return(new NS_NullWindow());}\r
           window.open=NS_NewOpen;\r
-</script><!-- END Naviscope Javascript --><!--last modified on Tuesday, February 22, 2000 11:47 PM --><meta content="text/html;CHARSET=iso-8859-1" http-equiv="Content-Type">
-<meta content="Tim" name="Author">
+</script>\r
+<!-- END Naviscope Javascript --><!--last modified on Tuesday, February 22, 2000 11:47 PM -->\r
+<meta content="text/html;CHARSET=iso-8859-1" http-equiv="Content-Type">\r
+<meta content="Tim" name="Author">\r
 <style type="text/css">A.nav {\r
        COLOR: #003399; TEXT-DECORATION: none\r
 }\r
 A.nav:hover {\r
        COLOR: #3366cc; TEXT-DECORATION: underline\r
 }\r
-</style>
+</style>\r
+\r
 <script language="JavaScript">
 <!-- Idea by:  Nic Wolfe (Nic@TimelapseProductions.com) -->
 <!-- Web URL:  http://fineline.xs.mw -->
@@ -30,33 +33,46 @@ id = day.getTime();
 eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0, location=0, statusbars=0, menubars=0, resizable=0, width=145, height=250');");
 }
 // End -->
-</script><meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
-</head>
+</script>\r
+\r
+<meta content="MSHTML 5.00.3103.1000" name="GENERATOR">
+</head>\r
 <body alink="red" bgcolor="black" link="red" text="white" vlink="red">\r
 <p>\r
 </p>
 <div align="center">\r
-<table border="0" cellpadding="0" cellspacing="0" width="80%"><tbody>
-<tr>
-<td valign="top" width="31"><a href="http://bp6.gamesquad.net/"><img align="bottom" border="0" height="74" src="doc3_files/logo.gif" width="252"></a></td>\r
+<table border="0" cellpadding="0" cellspacing="0" width="80%">\r
+  <tbody>\r
+  <tr>\r
+    <td valign="top" width="31"><a href="http://bp6.gamesquad.net/"><img align="bottom" border="0" height="74" src="doc3_files/logo.gif" width="252"></a></td>\r
     <td align="left" bgcolor="#000000">
-<img height="15" src="doc3_files/spacer.gif" width="15"><!-- START GAMESQUAD.NET IFRAME RICH MEDIA CODE --><!-- © 2000 GameSquad.net All Rights Reserved. --><iframe border="0" frameborder="no" height="60" marginheight="0" marginwidth="0" scrolling="no" src="doc3_files/adcycle.htm" width="468">
+<img height="15" src="doc3_files/spacer.gif" width="15"><!-- START GAMESQUAD.NET IFRAME RICH MEDIA CODE --> <!-- © 2000 GameSquad.net All Rights Reserved. --><iframe border="0" frameborder="no" height="60" marginheight="0" marginwidth="0" scrolling="no" src="doc3_files/adcycle.htm" width="468">
 <a href="http://ads.gamesquad.net/addclick.exe/adclick.cgi?REGION=game%7Ctech%7Cent&amp;id=1" target="_top"><img src="http://ads.gamesquad.net/addclick.exe/adcycle.cgi?group=52&amp;media=1&amp;id=1" width="468" height="60" border="0" alt="GSN ROS Ad"></a>
-</iframe><!-- END GAMESQUAD.NET IFRAME RICH MEDIA CODE --><br><img height="15" src="doc3_files/spacer.gif" width="400">
-</td>
-</tr>
-<tr><td bgcolor="#003399" colspan="2">\r
+</iframe><!-- END GAMESQUAD.NET IFRAME RICH MEDIA CODE --><br><img height="15" src="doc3_files/spacer.gif" width="400"> </td>
+</tr>\r
+  <tr>\r
+    <td bgcolor="#003399" colspan="2">\r
       <p align="right"><img align="right" border="0" height="18" hspace="0" src="doc3_files/trcorner.gif" width="20"><img align="left" border="0" height="18" hspace="0" src="doc3_files/tlcorner.gif" width="20"><font face="Verdana" size="2">Monday, July 31st, 2000</font> </p>
-</td></tr>
-<tr><td colspan="2">\r
-      <table bgcolor="#003399" border="0" cellpadding="0" cellspacing="4" width="100%"><tbody><tr><td bgcolor="#666666" width="100%">\r
+</td>
+</tr>\r
+  <tr>\r
+    <td colspan="2">\r
+      <table bgcolor="#003399" border="0" cellpadding="0" cellspacing="4" width="100%"><tbody>\r
+        <tr>\r
+          <td bgcolor="#666666" width="100%">\r
             <center>\r
             <p>\r
             </p>
-<table bgcolor="black" border="0" cellpadding="0" cellspacing="1" width="100%"><tbody><tr><td background="doc3_files/hscan.gif" bgcolor="#666666" width="100%">
-<img height="1" src="doc3_files/spacer.gif" width="738"><br><center>\r
-                  <table border="0" cellpadding="2" cellspacing="0" width="91%"><tbody><tr>
-<td valign="top" width="15%">\r
+<table bgcolor="black" border="0" cellpadding="0" cellspacing="1" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td background="doc3_files/hscan.gif" bgcolor="#666666" width="100%">
+<img height="1" src="doc3_files/spacer.gif" width="738"><br>\r
+                  <center>\r
+                  <table border="0" cellpadding="2" cellspacing="0" width="91%">\r
+                    <tbody>\r
+                    <tr>\r
+                      <td valign="top" width="15%">\r
                         <p align="center"><a href="http://bp6.gamesquad.net/specs.phtml"><img align="bottom" alt="Abit BP6 Motherboard specification and information." border="0" height="45" src="doc3_files/bp6icon.gif" width="70"></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/specs.phtml"><font color="white" face="Verdana" size="1">BP6 Specs</font></a> \r
                       </p>
 </td>\r
@@ -84,35 +100,63 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
                         <p align="center"><a href="http://www.gentus.com/"><img align="bottom" alt="Taking a first look at the Abit Linux release called " border="0" height="45" src="doc3_files/gentusbox.gif" width="70" gentus></a><br><a href="http://www.gentus.com/"><font color="white" face="Verdana" size="1">Gentus</font></a> \r
                   </p>
 </td>
-</tr></tbody></table>
+</tr>
+</tbody>
+</table>
 </center>
-</td></tr></tbody></table>
+</td>
+</tr>
+</tbody>
+</table>
 </center>
-</td></tr></tbody></table>
-</td></tr>
+</td>
+</tr>
 </tbody></table>
-<table bgcolor="#003399" border="0" cellspacing="6" width="80%"><tbody><tr>
-<td bgcolor="black" valign="top" width="10%">\r
-      <table border="0" cellpadding="3" cellspacing="0" width="100%"><tbody><tr><td width="100%">
-<img height="1" src="doc3_files/spacer.gif" width="111"><br><b><font color="yellow" face="Verdana" size="2">REVIEWS</font></b><font face="Verdana" size="2"><br><hr align="center"></font><a href="http://bp6.gamesquad.net/bp6reviews.phtml"><font color="white" face="Verdana" size="1">BP6 Reviews</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/h2o.phtml"><font color="white" face="Verdana" size="1">BP6 Watercooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bxcool.phtml"><font color="white" face="Verdana" size="1">BX Chipset Cooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/benchmark.phtml"><font color="white" face="Verdana" size="1">Benchmarks</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bp6fsb.phtml"><font color="white" face="Verdana" size="1">BP6FSB Utility</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/powerleap.phtml"><font color="white" face="Verdana" size="1">PowerLeap NEO S370</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/seti.phtml"><font color="white" face="Verdana" size="1">SETI on the BP6</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs.phtml"><font color="white" face="Verdana" size="1">Golden Orbs I</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs/orbs2.phtml"><font color="white" face="Verdana" size="1">Golden Orbs II</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/Q6fix.phtml"><font color="white" face="Verdana" size="1">VTT Solution</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">NAVIGATE</font></b><font color="yellow" face="Verdana" size="2"> \r
-            <hr align="center"></font><a href="http://www.bp6.com/"><font color="white" face="Verdana" size="1">News</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/chat.phtml"><font color="white" face="Verdana" size="1">Online Text Chat</font></a><font face="Verdana" size="1"><br></font><a href="javascript:popUp('chat_popup.htm')"><font color="white" face="Verdana" size="1">Voice Chat</font></a><br><a href="http://216.247.220.192/Forum"><font color="white" face="Verdana" size="1">Messageboard</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/cooling"><font color="white" face="Verdana" size="1">Temp. Converter</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Picture Gallery</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bios.phtml"><font color="white" face="Verdana" size="1">Latest BIOS</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/files/"><font color="white" face="Verdana" size="1">Drivers &amp; Files</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">UGM of the week</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/contest.phtml"><font color="white" face="Verdana" size="1">BP6 Contest</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">OTHER STUFF</font></b><font color="yellow" face="Verdana" size="2"> \r
+</td>
+</tr>
+</tbody>
+</table>\r
+<table bgcolor="#003399" border="0" cellspacing="6" width="80%">\r
+  <tbody>\r
+  <tr>\r
+    <td bgcolor="black" valign="top" width="10%">\r
+      <table border="0" cellpadding="3" cellspacing="0" width="100%">\r
+        <tbody>\r
+        <tr>\r
+          <td width="100%">
+<img height="1" src="doc3_files/spacer.gif" width="111"><br><b><font color="yellow" face="Verdana" size="2">REVIEWS</font></b><font face="Verdana" size="2"><br>\r
+            <hr align="center">\r
+            </font><a href="http://bp6.gamesquad.net/bp6reviews.phtml"><font color="white" face="Verdana" size="1">BP6 Reviews</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/h2o.phtml"><font color="white" face="Verdana" size="1">BP6 Watercooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bxcool.phtml"><font color="white" face="Verdana" size="1">BX Chipset Cooling</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/benchmark.phtml"><font color="white" face="Verdana" size="1">Benchmarks</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bp6fsb.phtml"><font color="white" face="Verdana" size="1">BP6FSB Utility</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/powerleap.phtml"><font color="white" face="Verdana" size="1">PowerLeap NEO S370</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/seti.phtml"><font color="white" face="Verdana" size="1">SETI on the BP6</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs.phtml"><font color="white" face="Verdana" size="1">Golden Orbs I</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/orbs/orbs2.phtml"><font color="white" face="Verdana" size="1">Golden Orbs II</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/Q6fix.phtml"><font color="white" face="Verdana" size="1">VTT Solution</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">NAVIGATE</font></b><font color="yellow" face="Verdana" size="2"> \r
+            <hr align="center">\r
+            </font><a href="http://www.bp6.com/"><font color="white" face="Verdana" size="1">News</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/chat.phtml"><font color="white" face="Verdana" size="1">Online Text Chat</font></a><font face="Verdana" size="1"><br></font><a href="javascript:popUp('chat_popup.htm')"><font color="white" face="Verdana" size="1">Voice Chat</font></a><br><a href="http://216.247.220.192/Forum"><font color="white" face="Verdana" size="1">Messageboard</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/cooling"><font color="white" face="Verdana" size="1">Temp. Converter</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Picture Gallery</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/bios.phtml"><font color="white" face="Verdana" size="1">Latest BIOS</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/files/"><font color="white" face="Verdana" size="1">Drivers &amp; Files</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">UGM of the week</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/contest.phtml"><font color="white" face="Verdana" size="1">BP6 Contest</font></a><font face="Verdana" size="1"><br><br></font><b><font color="yellow" face="Verdana" size="2">OTHER STUFF</font></b><font color="yellow" face="Verdana" size="2"> \r
 \r
-            <hr align="center"></font><a href="http://bp6.gamesquad.net/whois.phtml"><font color="white" face="Verdana" size="1">Who is Tim?</font></a><font face="Verdana" size="1"><br></font><a href="mailto:tim@bp6.com"><font color="white" face="Verdana" size="1">Contact BP6.com</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Affiliates Section</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Sponsors Section <br></font></a><a href="http://bp6.gamesquad.net/links.phtml"><font color="white" face="Verdana" size="1">Links<br><br></font></a><b><font color="yellow" face="Verdana" size="2">PC SPECIALS</font></b><font color="yellow" face="Verdana" size="2"> \r
-            <hr align="center"></font><a href="http://bp6.gamesquad.net/specials.phtml"><font color="white" face="Verdana" size="1">Vendor \r
+            <hr align="center">\r
+            </font><a href="http://bp6.gamesquad.net/whois.phtml"><font color="white" face="Verdana" size="1">Who is Tim?</font></a><font face="Verdana" size="1"><br></font><a href="mailto:tim@bp6.com"><font color="white" face="Verdana" size="1">Contact BP6.com</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Affiliates Section</font></a><font face="Verdana" size="1"><br></font><a href="http://bp6.gamesquad.net/uc.phtml"><font color="white" face="Verdana" size="1">Sponsors Section <br></font></a><a href="http://bp6.gamesquad.net/links.phtml"><font color="white" face="Verdana" size="1">Links<br><br></font></a><b><font color="yellow" face="Verdana" size="2">PC SPECIALS</font></b><font color="yellow" face="Verdana" size="2"> \r
+            <hr align="center">\r
+            </font><a href="http://bp6.gamesquad.net/specials.phtml"><font color="white" face="Verdana" size="1">Vendor \r
             Specials<br><br></font></a><br><b><font color="yellow" face="Verdana" size="2">Pic of the day</font></b>\r
-            <hr>
-<center>\r
+            <hr>\r
+             \r
+            <center>\r
             <p align="center"><font face="Verdana, Arial, Helvetica" size="1"><a href="http://bp6.gamesquad.net/cgi-bin/schlabo/potd.pl"><img alt="No picture is available for today." border="0" src="doc3_files/potd_na_110x83.gif"></a> </font></p>
 </center>
-<br><center></center>
+<br>\r
+            <center></center>
 <br><!--<A HREF="code:javascript:ID_FTPWebView.InvokeHelp()"><FONT SIZE="1" COLOR="white" FACE="Verdana">FTP Help</FONT></A>-->
-</td></tr></tbody></table>
+</td>
+</tr>
+</tbody>
+</table>
 </td>\r
     <td bgcolor="white" valign="top" width="80%">
-<img height="1" src="doc3_files/spacer.gif" width="490"><br><center>\r
+<img height="1" src="doc3_files/spacer.gif" width="490"><br>\r
+      <center>\r
       <p>\r
       </p>
-<table bgcolor="white" border="0" cellpadding="10" cellspacing="0" height="100%" width="100%"><tbody><tr><td bgcolor="white" valign="top" width="100%">\r
+<table bgcolor="white" border="0" cellpadding="10" cellspacing="0" height="100%" width="100%">\r
+        <tbody>\r
+        <tr>\r
+          <td bgcolor="white" valign="top" width="100%">\r
             <center>
 <a href="http://www.encounter2001.com/" target="_blank"><img border="0" height="60" src="doc3_files/banner2.gif" width="468"></a> \r
             </center>
@@ -128,8 +172,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             the heck is a Peltier?!?! - 10:05AM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964587833,74573,">HELLO \r
             EVERYONE!!! - 10:03PM PDT</a></font><br><font face="arial" size="1"><a class="nav" href="http://bp6.gamesquad.net/index.phtml#newsitem964429577,13375,">BP6 \r
             Q3 server up and running.. - 2:06AM PDT</a></font><br><br><!-- NP v3.7.5 --><a name="newsitem965012956,78924,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday, \r
-                  July 30, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday, \r
+                  July 30, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Chat with \r
             ABIT</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 8:09PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/965012956,78924,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a> \r
@@ -141,8 +191,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             BP6-2??<br>[EricBoeing] We already have a micro ATX dual flip-chip \r
             board<br>[EricBoeing] but it's OEM only<br>[EricBoeing] the full ATX \r
             version should be out Septemberish<br></font><br><br><a name="newsitem964766837,26344,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Thursday, \r
-                  July 27, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Thursday, \r
+                  July 27, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Fixed \r
             wallpaper</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 11:47PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/964766837,26344,.html"><img border="0" src="doc3_files/comments.gif">5 comments</a> \r
@@ -155,7 +211,9 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             error.<br>And 1 more person, THANK YOU TIM for letting me borrow \r
             your server space ;-)<br><br>If you need a weird resolution, feel \r
             free to <a href="mailto:Holodeck2@home.com">e-mail</a> me requesting \r
-            for one.<br>If you have ideas or more errors to point out, <a href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</a><br><br><a href="doc3_files/3-800.jpg" target="800">800x600 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1024.jpg" target="800">1024x768 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1152.jpg" target="800">1152x864 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1280x1024.jpg" target="800">1280x1024 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1600.jpg" target="800">1600x1200 </a><br><p>Enjoy :-)<br></p>
+            for one.<br>If you have ideas or more errors to point out, <a href="mailto:Holodeck2@home.com">mailto:Holodeck2@home.com</a><br><br><a href="doc3_files/3-800.jpg" target="800">800x600 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1024.jpg" target="800">1024x768 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1152.jpg" target="800">1152x864 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1280x1024.jpg" target="800">1280x1024 </a><br><a href="http://www.bp6.com/pics/holodeck2/wallpaper/3-1600.jpg" target="800">1600x1200 </a><br>\r
+            <p>Enjoy :-)<br>\r
+            </p>
 <p><a href="mailto:Holodeck2@home.com">Holodeck2,</a><br>[H]ard at \r
             work on the Brand Spanking New Wallpaper.<br></p></font><br><br><a name="newsitem964762841,25865,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Seti update</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 10:40PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/964762841,25865,.html"><img border="0" src="doc3_files/comments.gif">5 comments</a> \r
@@ -183,8 +241,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
              | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Need some cooling for your Videocard \r
             memory to get a little extra overclockability and FPS? <a href="http://www.overclockershideout.com/RamSinks.html" target="_BLANK">Overclockers Hiedout Ram Sinks</a> They just notified \r
             me of their new design.<br><img border="1" src="doc3_files/ramsink.jpg"></font><br><br><a name="newsitem964671589,7831,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Wednesday, July 26, \r
-            2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Wednesday, July 26, \r
+            2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">is it \r
             [H]ard?</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 9:19PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/964671589,7831,.html"><img border="0" src="doc3_files/comments.gif">0 comments</a> \r
@@ -212,8 +276,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             sleeping it would be like 4 in the morning here. Just to let you \r
             know <img src="doc3_files/smile.gif"><br>I'm not angry at anyone... \r
             good thing I have a long fuse <img src="doc3_files/tongue.gif"><br></font><br><br><a name="newsitem964587833,74573,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Tuesday, \r
-                  July 25, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Tuesday, \r
+                  July 25, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">HELLO \r
             EVERYONE!!!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:Holodeck@bp6.com">Holodeck2</a> @ 10:03PM \r
             PDT</small>  <br><font color="black" face="Arial" size="2">Hello \r
@@ -233,8 +303,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             if I&#8217;m in front of my comp and not trying to frag someone)<br><a href="http://www.icq.com/download">ICQ: </a>82640218 (rarely \r
             on)<br><br>P.S. If someone named &#8220;Digital Vortex&#8221; on either Quake 3 \r
             or 2 frags you, it&#8217;s probably me. ;-)<br></font><br><br><a name="newsitem964429577,13375,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday, \r
-                  July 24, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday, \r
+                  July 24, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">BP6 Q3 server up and \r
             running..</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 2:06AM PDT</small>  <a href="http://bp6.gamesquad.net/news/964429577,13375,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a> \r
              | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">Setup a Q3 server for anyone wanting \r
@@ -254,8 +330,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             system, and flash again. This is also good as a failsafe in case you \r
             don't believe in Virus Protecting your computer. (Thanks to Fred for \r
             link)<br><a href="http://www.ioss.com.tw/eg/rd1/RD1info0004.PDF" target="_NEW">Manufacturers Brochure</a> (PDF Format)<br><a href="http://192.216.185.10/mwave/doc/A06950.html" target='_BLANK"'>Another info page</a><br><a href="http://192.216.185.10/mwave/ProdMB-AC-MW.hmx?UID=&amp;CID=&amp;updepts=MB&amp;DNAME=%3Cb%3EMotherboards%3C%2Fb%3E&amp;Back=ProdMB-AC-MW.hmx?" target="_BLANK">Available for about $20</a><br><br><img src="doc3_files/rd1.jpg"></font><br><br><a name="newsitem963875853,12731,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday, \r
-                  July 17, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Monday, \r
+                  July 17, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">How To \r
             Overclock</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 4:17PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/963875853,12731,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a> \r
@@ -277,7 +359,8 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             PDT</small>  <a href="http://bp6.gamesquad.net/news/963859982,88982,.html"><img border="0" src="doc3_files/comments.gif">1 comments</a> \r
              | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">We all need to have some fun \r
             sometimes! Check out this little web site that sells 'nerd' clothing \r
-            ;) (I like the bibs in the Junior Hackerz section) :-Þ<br><br><div align="center"><a href="http://www.nerdgear.com/" target="_blank"><img border="0" src="doc3_files/nerdinside.gif"></a></div></font><br><br><a name="newsitem963819796,9688,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Dual PSU Wiring diagram... (preview to \r
+            ;) (I like the bibs in the Junior Hackerz section) :-Þ<br><br>\r
+            <div align="center"><a href="http://www.nerdgear.com/" target="_blank"><img border="0" src="doc3_files/nerdinside.gif"></a></div></font><br><br><a name="newsitem963819796,9688,"></a><b><u><font color="#003366" face="Verdana, Arial" size="2">Dual PSU Wiring diagram... (preview to \r
             Part 1 Watercooling Project)</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:tim@bp6.com">tim</a> @ 12:43AM PDT</small>  <a href="http://bp6.gamesquad.net/news/963819796,9688,.html"><img border="0" src="doc3_files/comments.gif">11 comments</a> \r
              | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">When is comes to overclocking your \r
             system, cooling plays a big role. Powering all of those fans in your \r
@@ -293,8 +376,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             <br><br>View Diagram 1 <a href="http://bp6.gamesquad.net/images/wiring.jpg" target="_BLANK">here</a>.<br>View Diagram 2 <a href="http://bp6.gamesquad.net/images/psu2.gif" target="_BLANK">here</a>.<br><br>I used Tap-In Squeeze Connectors and \r
             22 guage wire to connect the wires. You can get them at Radio Shack \r
             Part# 64-3053 or <a href="http://www.radioshack.com/ProductCatalog/ProductDetail/Index/1,2098,,00.html?SKUString1=64&amp;SKUString2=3053" target="_blank">click here</a>.</font><br><br><a name="newsitem963766655,78511,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday, \r
-                  July 16, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Sunday, \r
+                  July 16, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">RAM Overclocking? \r
             Hmmmmm.</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 9:57AM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/963766655,78511,.html"><img border="0" src="doc3_files/comments.gif">3 comments</a> \r
@@ -319,9 +408,16 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
              | <a href="http://bp6.gamesquad.net/#news_top">top</a></font> <br><font color="black" face="Arial" size="2">A follow up on the 'Weekly CPU \r
             Prices', this guide will help you determine which cpu is best for \r
             you (and your board ;-)). Sent to me by Spanky, here's the \r
-            link:<br><br><li><a href="http://www6.tomshardware.com/howto/00q2/000412/index.html" target="_blank">http://www6.tomshardware.com/howto/00q2/000412/index.html</a></li></font><br><br><a name="newsitem963685749,28290,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Saturday, \r
-                  July 15, 2000</b></font></td></tr></tbody></table>
+            link:<br><br>\r
+            <li><a href="http://www6.tomshardware.com/howto/00q2/000412/index.html" target="_blank">http://www6.tomshardware.com/howto/00q2/000412/index.html</a></li></font><br><br><a name="newsitem963685749,28290,"></a>\r
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Saturday, \r
+                  July 15, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Weekly CPU \r
             Prices</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 11:29AM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/963685749,28290,.html"><img border="0" src="doc3_files/comments.gif">2 comments</a> \r
@@ -341,8 +437,14 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             any porno piccies in my mailbox! I have enough of those!) Kidding \r
             guys.<br><br>Okay, that's all for now.<br><br>The \r
             ÐÐ.</font><br><br><a name="newsitem963619505,3764,"></a>\r
-            <table bgcolor="#003399" width="100%"><tbody><tr><td><font color="#ffffff" face="Verdana,arial" size="2"><b>Friday, \r
-                  July 14, 2000</b></font></td></tr></tbody></table>
+            <table bgcolor="#003399" width="100%">\r
+              <tbody>\r
+              <tr>\r
+                <td><font color="#ffffff" face="Verdana,arial" size="2"><b>Friday, \r
+                  July 14, 2000</b></font></td>
+</tr>
+</tbody>
+</table>
 <br><!--<hr noshade width=100%>--><b><u><font color="#003366" face="Verdana, Arial" size="2">Hey \r
             There!</font></u></b><br><font color="#0066cc" face="Arial" size="1"><small>Posted by <a class="nav" href="mailto:killz@i82hq.com">DareDevil</a> @ 5:05PM \r
             PDT</small>  <a href="http://bp6.gamesquad.net/news/963619505,3764,.html"><img border="0" src="doc3_files/comments.gif">7 comments</a> \r
@@ -351,15 +453,22 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             I'll be posting up news from time to time now so, if you'd like, you \r
             may send me some news to be posted if you find any ( we don't want \r
             to flood Tim ;-) ).<br><br>My e-mail address is <a href="mailto:killz@i82hq.com">killz@i82hq.com</a><br><br>Ciao for \r
-            now.<br><br>The ÐÐ.</font><br><br></font><center><iframe frameborder="0" height="60" marginheight="0" marginwidth="0" noresize scrolling="no" src="doc3_files/ad_iframe.htm" width="468"><a href="http://ads.adflight.com/go_static.asp?asid=7708" target="_top"><img width="468" height="60" border="0" alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&amp;sid=1881&amp;asid=7708"></a></iframe></center>
-</td></tr></tbody></table>
+            now.<br><br>The ÐÐ.</font><br><br>\r
+            </font><center><iframe frameborder="0" height="60" marginheight="0" marginwidth="0" noresize scrolling="no" src="doc3_files/ad_iframe.htm" width="468"><a href="http://ads.adflight.com/go_static.asp?asid=7708" target="_top"><img width="468" height="60" border="0" alt="Advertisement" src="http://ads.adflight.com/ad_static.asp?pid=2097&amp;sid=1881&amp;asid=7708"></a></iframe></center>
+</td>
+</tr>
+</tbody>
+</table>
 </center>
 </td>\r
     <td bgcolor="silver" valign="top" width="10%">\r
       <center>\r
       <p>\r
       </p>
-<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td colstart="1">\r
+<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%">\r
+        <tbody>\r
+        <tr>\r
+          <td colstart="1">\r
             <center>
 <!--   <FORM ACTION="/cgi-bin/subscribe.pl" METHOD="POST" ENCTYPE="application/x-www-form-urlencoded">\r
                                                <IMG SRC="/images/spacer.gif" WIDTH="111" HEIGHT="1"><BR>\r
@@ -375,7 +484,10 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
             <form action="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?search" method="post">Search news<br><input name="searchstring" size="13"><br><input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Submit"><br><a href="http://bp6.gamesquad.net/cgi-bin/news/viewnews.cgi?newsall">News \r
             archive</a>
 </form></font> </center>
-</td></tr></tbody></table>
+</td>
+</tr>
+</tbody>
+</table>
 <!--                           <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" BGCOLOR="silver">\r
                                        <TR>\r
                                                <TD WIDTH="100%">\r
@@ -384,7 +496,11 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
                                                </TD>\r
                                        </TR>\r
                                </TABLE> \r
---><table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="middle" width="100%">
+-->\r
+      <table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" width="100%">\r
+        <tbody>\r
+        <tr>\r
+          <td align="middle" width="100%">
 <!-- BEGIN GoTo.com Search Box -->\r
             <script language="javascript" type="text/javascript">\r
                                                        <!--\r
@@ -415,31 +531,49 @@ eval("page" + id + " = window.open(URL, '" + id + "', 'toolbars=0, scrollbars=0,
                                                        document.write("ype=gif&size=100x90>");\r
                                                        }\r
                                                        // -->\r
-                                                       </script><b><noscript></noscript></b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"><img align="bottom" border="0" height="90" ismap src="doc3_files/100x90.gif" width="100"></a><b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"> \r
+                                                       </script>\r
+            <b><noscript></noscript></b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"><img align="bottom" border="0" height="90" ismap src="doc3_files/100x90.gif" width="100"></a><b><a href="http://www.goto.com/d/search/ssn/?fromGIF=true" target="_blank"> \r
             </a></b><b></b><b><!-- END GoTo.com Search Box --></b><!-- Pricewatch Search Box -->\r
             <form action="http://www.pricewatch.com/search/search.asp" method="get" target="_Blank">\r
             <center>\r
             <p><b><font color="white" face="ARIAL, HELVETICA" size="1">PC Price \r
-            Search<br></font></b><input maxlength="30" name="criteria" size="10"><br><input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Search"></p>
+            Search<br></font></b><input maxlength="30" name="criteria" size="10"><br><input name="submit" style="BACKGROUND-COLOR: #000000; COLOR: #ffffff; FONT-FAMILY: Verdana; FONT-SIZE: xx-small; FONT-WEIGHT: bold" type="submit" value="Search"> \r
+            </p>
 </center>
 </form>
 <!-- Pricewatch Search Box --><a href="http://www.puicorp.com/bp6specials.htm" target="_BLANK"><img src="doc3_files/puibp6.gif"></a><br><br><br><br><a href="http://store.yahoo.com/dunamis-site/maxtor.html" target="_BLANK"><img alt="BP6.com Special - Enter CODE: BP6-hd in the order (notes) to receive a discount" src="doc3_files/hd5.gif"><font size="1"><br>BP6.COM \r
-            Special<br>Code:BP6-hd</font></a> </td></tr></tbody></table>
-<table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%"><tbody><tr><td width="100%"> </td></tr></tbody></table>
+            Special<br>Code:BP6-hd</font></a> </td>
+</tr>
+</tbody>
+</table>\r
+      <table bgcolor="silver" border="0" cellpadding="0" cellspacing="0" height="100%" width="100%">\r
+        <tbody>\r
+        <tr>\r
+          <td width="100%"> </td>
+</tr>
+</tbody>
+</table>
 </center>
 </td>
-</tr></tbody></table>
-<!--   </TABLE>--><center></center>
+</tr>
+</tbody>
+</table>
+<!--   </TABLE>-->\r
+<center></center>
 <tr>
-<td colspan="3" valign="TOP" height="70"> </td> </tr>
-<table border="0" width="780"><tbody>
-<tr><td width="780">\r
+<td colspan="3" valign="TOP" height="70"> </td> </tr>\r
+<table border="0" width="780">\r
+  <tbody>\r
+  <tr>\r
+    <td width="780">\r
       <p align="center"><font color="#999999" face="verdana,arial" size="1">Copyright \r
       ©1999-2000 BP6.com, All rights reserved.<br>Got news? Send it to </font><a href="mailto:tim@bp6.com"><font color="white" face="Verdana" size="1">Tim</font></a> </p>
-</td></tr>
+</td>
+</tr>
 <!--   <TR>            <TD WIDTH="780">                        <P ALIGN="CENTER"><FONT SIZE="1" COLOR="#999999" FACE="Verdana,arial">Site design by Tim Brinkley</FONT>                </TD>   </TR> -->
-</tbody></table>
+</tbody>
+</table>
 </div>\r
-<script> window.open=NS_ActualOpen; </script>
+<script> window.open=NS_ActualOpen; </script>\r
 </body>
 </html>
index 6e53680..f84424c 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body><p tst="a&amp;b" tst2="a&amp;b" tst3="a &amp; b">
+<html><body>
+<p tst="a&amp;b" tst2="a&amp;b" tst3="a &amp; b">
 a&amp;b
 a&amp;b
 a &amp; b
-</p></body></html>
+</p>
+</body></html>
index 0b85caf..8e854d3 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body>
+<html>
+<body>
 <form>
   <input type="text" name="test" value="&scaron;">
 </form>
-</body></html>
+</body>
+</html>
index a1244dd..8affc19 100644 (file)
@@ -1,10 +1,12 @@
 <!DOCTYPE html PUBLIC "-//IETF//DTD HTML//EN">
 <html>
+
 <head>
 <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
 <title>README - Microsoft FrontPage 2000 Server Extensions</title>
 <meta name="Microsoft Theme" content="none">
 </head>
+
 <body>
 <font face="Verdana">
 <h1><a name="top">Microsoft FrontPage 2000 Server Extensions, UNIX</a></h1>
 
 </p>
 <ul>
-<li>Authoring FrontPage webs</li>
+  <li>Authoring FrontPage webs</li>
   <li>Administering FrontPage webs</li>
   <li>Browse-time FrontPage web functionality</li>
 </ul>
+
+
 <h2>Contents&nbsp;</h2>
 
-<a href="#relnotes">Release Notes</a><br><a href="#moreinfo">Resources for More Information</a>
+<a href="#relnotes">Release Notes</a><br>
+<a href="#moreinfo">Resources for More Information</a>
 <p>&nbsp;</p>
 <hr>
 <h2><a name="relnotes">Release Notes</a></h2>
@@ -30,7 +35,9 @@
 <p>This section provides complementary or late-breaking 
 information to supplement the Microsoft FrontPage Server Extensions documentation.</p>
 
-<p><a href="#apache">Apache 1.3.4 Support</a><br><a href="#upgrading">Upgrading from previous version of FrontPage Server Extensions</a><br><a href="#executables">Uploading files into executable folders</a></p>
+<p><a href="#apache">Apache 1.3.4 Support</a><br>
+<a href="#upgrading">Upgrading from previous version of FrontPage Server Extensions</a><br>
+<a href="#executables">Uploading files into executable folders</a></p>
 
 
 <p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
@@ -100,12 +107,17 @@ see the FrontPage 2000 Server Extensions Resource Kit at <a href="http://officeu
 
 
 <hr>
+
+
+
 <h2><a name="moreinfo">Resources for More Information</a></h2>
 
 <p>This section lists sources of more information about the
 FrontPage Server Extensions.</p>
 
-<p><a href="#serk">Server Extensions Resource Kit</a><br><a href="#serkupdate">Server Extensions Resource Kit Update</a><br><a href="#kb">Knowledge Base</a></p>
+<p><a href="#serk">Server Extensions Resource Kit</a><br>
+<a href="#serkupdate">Server Extensions Resource Kit Update</a><br>
+<a href="#kb">Knowledge Base</a></p>
 
 
 <p align="right"><font size="1"><a href="#top">Top of Page</a></font></p>
index 596d54d..44ceebc 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><meta charset="iso-8859-1"></head>
+<head>
+<meta charset="iso-8859-1">
+</head>
 <body>
   <p>tr&egrave;s</p>
 </body>
index f4e4edb..62391dc 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title></title></head>
+<head>
+  <title></title>
+</head>
 <body>
 <ul>
 <li>First item
@@ -8,5 +10,6 @@
 <li>Second item, closes the first one
 </li>
 </ul>
+
 </body>
 </html>
index ca28039..c29f74f 100644 (file)
@@ -1,2 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><head><meta name="Author" content="Root &lt;root@aol.com&gt;"></head></html>
+<html>
+<head>
+<meta name="Author" content="Root &lt;root@aol.com&gt;">
+</head>
+</html>
index 09d98ce..454e943 100644 (file)
@@ -1,10 +1,10 @@
 <!DOCTYPE html>
 <html>
-<head>
-<title>omg</title>
-<noscript><link rel="stylesheet" href="http://foo.com"></noscript>
-</head>
-<body id="xxx">
+    <head>
+        <title>omg</title>
+        <noscript><link rel="stylesheet" href="http://foo.com"></noscript>
+    </head>
+    <body id="xxx">
         <p>yo</p>
     </body>
 </html>
index 5308b6d..f83a7cb 100644 (file)
@@ -1,4 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html><body>
+<html>
+<body>
 <pre><a href="toto"></a><img src="titi"></pre>
-</body></html>
+</body>
+</html>
index 5fdc6a2..ea0be18 100644 (file)
@@ -1,6 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <?xml-stylesheet href="./css/ht2html.css" type="text/css"?><html>
-<!-- THIS PAGE IS AUTOMATICALLY GENERATED.  DO NOT EDIT. --><head><title>Python Programming Language</title></head>
+<!-- THIS PAGE IS AUTOMATICALLY GENERATED.  DO NOT EDIT. -->
+<head>
+<title>Python Programming Language</title>
+</head>
 <body>
 </body>
 </html>
index ef9f2e1..893d6a2 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>Regression test 1</title></head>
+<head>
+<title>Regression test 1</title>
+</head>
 <body>
 <h1>Regression test 1</h1>
 <p>
index ac12028..88cf9d3 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>Regression test 2</title></head>
+<head>
+<title>Regression test 2</title>
+</head>
 <body>
 <h1>Regression test 2</h1>
 <p>
index 7b1bc1d..d35ac0d 100644 (file)
@@ -1,6 +1,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>Regression test 3</title></head>
+<head>
+<title>Regression test 3</title>
+</head>
 <body>
 <h1>Regression test 3</h1>
 <p>
index f6a6ab8..eb1ba09 100644 (file)
@@ -1,11 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>Regression test 4</title></head>
+<head>
+<title>Regression test 4</title>
+</head>
 <body>
 <h1>Regression test 4</h1>
 <p>
 Wrong close of tag P
 </p>
 <hr>
+
 </body>
 </html>
index 550c66f..71cf72e 100644 (file)
@@ -1,5 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html><body>
 <td></td>
-<td><!-- <a><b> --></td>
+<td>
+<!-- <a><b> -->
+</td>
 </body></html>
index 908723e..5b95a1f 100644 (file)
@@ -4,6 +4,7 @@
 <body>
 <script language="javascript">
     if (window.open<max) ;
-</script><input onclick="if(window.open&lt;max);">
+</script>
+<input onclick="if(window.open&lt;max);">
 </body>
 </html>
index 2be4f93..2ad9b95 100644 (file)
@@ -1,14 +1,15 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+       <head>
+               <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>Test Page</title>
 </head>
 <body>
 <div id="portal">
 <script type="text/javascript">
        documen.write("Příliš žluťoučký kůň úpěl ďábelksé ódy");
-</script><p>
+</script>
+       <p>
        Příliš žluťoučký kůň úpěl ďábelksé ódy;
        </p>
 </div>
index 98a2716..eaa8864 100644 (file)
@@ -1,11 +1,13 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
-<head><title>Linux Today</title></head>
+<head> <title>Linux Today</title>
+</head>
 <body bgcolor="White" link="Blue" text="Black" vlink="Black" alink="Red">
 
 <center>
-<table border="0" width="100%" cellspacing="0" cellpadding="0"><tr bgcolor="#FFFFFF">
-<td height="90">
+<table border="0" width="100%" cellspacing="0" cellpadding="0">
+        <tr bgcolor="#FFFFFF">
+                <td height="90">
 <a href="http://linuxtoday.com/cgi-bin/click.pl?adnum=49"><img src="/pics/door_linux.gif" border="0" width="468" height="60" alt="Atipa Linux solutions. Your reliable cluster, server, and workstation solution. Win a Free Celeron Linux Workstation!"></a>
 
                 </td>
@@ -13,7 +15,8 @@
 <img src="/pics/lt.gif" vspace="5" alt="Linux Today Logo"><br><font size="-1"><a href="http://linux.com">linux.com</a> partner</font><p></p>
 </td>
 
-        </tr></table>
+        </tr>
+</table>
 <font size="2" face="Helvetica">
 [ <a href="http://linuxtoday.com/">headlines</a> |
 <a href="http://features.linuxtoday.com/">features</a> |
index 903723c..b37a1c7 100644 (file)
@@ -1,11 +1,13 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head><base target="contents"></head>
+<html>\r
+<head>\r
+<base target="contents">\r
+</head>\r
 <body>
 <a name="ProblemDomain.Package"><h2>Component Package diagram ProblemDomain</h2>\r
 </a><p></p>
-<hr>
-<dl>
+<hr>\r
+<dl>\r
 <dt>
 <b>Stereotype </b>problem domain</dt>\r
 <dt>
 <dd>Interface, thats stores and manipulates the Family Tree.\r
 </dd>
 </dd>
-</dl>
+</dl>\r
 <p></p>
-<hr>
-<dl>
+<hr>\r
+<dl>\r
+\r
 <dt><h4>Class <a href="HumanInterface.FamilyFrame.html#HumanInterface.FamilyFrame">HumanInterface.FamilyFrame</a>
 </h4></dt>\r
 <dt><h4>Class <a href="ProblemDomain.Birth.html#ProblemDomain.Birth">ProblemDomain.Birth</a>
 </h4></dt>\r
 <dt><h4>Class <a href="ProblemDomain.Note.html#ProblemDomain.Note">ProblemDomain.Note</a>
 </h4></dt>\r
-</dl>
+</dl>\r
+\r
 <h4><b>Links</b></h4>\r
 <ul><li>
 <b>Link to </b><a href="HumanInterface.Package.html#HumanInterface.Package">HumanInterface</a>
-</li></ul>
-<dir></dir>
+</li></ul>\r
+<dir></dir>\r
 <ul><li>
 <b>Link to </b><a href="DataManagement.FlatFile.Package.html#DataManagement.FlatFile.Package">DataManagement.FlatFile</a>
-</li></ul>
-<dir></dir>
+</li></ul>\r
+<dir></dir>\r
 <ul><li>
 <b>Link to </b><a href="DataManagement.Package.html#DataManagement.Package">DataManagement</a>
-</li></ul>
-<dir></dir>
+</li></ul>\r
+<dir></dir>\r
 </body>
 </html>
index 42fbb43..66a498a 100644 (file)
@@ -1,5 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
 <html>
+
 <head>
 <meta http-equiv="Content-Language" content="en-us">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@@ -7,24 +8,28 @@
 <link rel="SHORTCUT ICON" href="favicon.ico">
 <title>شهير بلاگ</title>
 </head>
+
 <body>
 
 <table border="0" width="100%" id="MainTBL" cellspacing="0" cellpadding="0">
-<tr>
-<td class="Header1">
-               <table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%"><tr>
-<td>
+       <tr>
+               <td class="Header1">
+               <table border="0" width="100%" cellspacing="0" cellpadding="0" height="100%">
+                       <tr>
+                               <td>
                                <img border="0" src="Shell/Shahir.ShahidSales1.png" width="442" height="110">
 </td>
                                <td> </td>
-                       </tr></table>
-</td>
+                       </tr>
+               </table>
+               </td>
        </tr>
-<tr>
-<td height="28">
+       <tr>
+               <td height="28">
                        <div id="SideBar1">
-                               <table width="100%"><tr>
-<td>
+                               <table width="100%">
+                               <tr>
+                               <td>
                                 <span class="Item">
 <a href="Index.asp">
 خانه </a></span> <span class="Item">
@@ -52,13 +57,19 @@ RSS </a></span> <span class="Item">
                                </p>
 </div>
                                </td>
-                               </tr></table>
-</div>
+                               </tr>
+                               </table>
+                       </div>
                </td>
        </tr>
-<tr><td valign="top">
-               <table border="0" width="100%" cellspacing="0" cellpadding="0" id="Content"><tr><td class="Right" valign="top" style="padding-right: 60px">
-                                       <table width="100%"><tr><td valign="top">
+       <tr>
+               <td valign="top">
+               <table border="0" width="100%" cellspacing="0" cellpadding="0" id="Content">
+                       <tr>
+                               <td class="Right" valign="top" style="padding-right: 60px">
+                                       <table width="100%">
+                                               <tr>
+                                                       <td valign="top">
                                                                
 <script>
 var tgs = new Array( 'div','td','tr','a');
@@ -78,9 +89,11 @@ function ChangeSize( trgt,sz ) {
                for ( j = 0 ; j < cTags.length ; j++ ) cTags[ j ].style.fontSize = sz; //szs[ sz ];
        }
 }
-</script><table width="100%" id="NewsDetail">
-<tr>
-<td valign="top">
+</script>
+
+<table width="100%" id="NewsDetail">
+       <tr>
+               <td valign="top">
                <div class="News_Info">
                        تاريخ درج: <font color="#000000">چهارشنبه، 29 اسفند 1386 
                        - Wednesday, March 19, 2008</font>      
@@ -88,32 +101,42 @@ function ChangeSize( trgt,sz ) {
                        دفعات مشاهده: <font color="#000000">2688</font> 
                        بار      كد: <font color="#000000">341</font>
                </div>
-               <br><!--
+               <br>
+               <!--
                <div>&#1575;&#1606;&#1583;&#1575;&#1586;&#1607; &#1601;&#1608;&#1606;&#1578;:&nbsp;
                <a href="javascript:ChangeSize('NewsBody','7pt')"><font size="1">&#1705;&#1608;&#1670;&#1705;</font></a>&nbsp;
                <a href="javascript:ChangeSize('NewsBody','10pt')"><font size="2">&#1605;&#1593;&#1605;&#1608;&#1604;&#1740;</font></a>&nbsp;
                <a href="javascript:ChangeSize('NewsBody','13pt')"><font size="3">&#1576;&#1586;&#1585;&#1711;</font></a>&nbsp;
-               </div>--><div class="Titr1">
+               </div>-->
+               
+
+               <div class="Titr1">
                         </div>
-               <br><div id="NewsBody">
+               <br>
+               <div id="NewsBody">
                        
                        <div class="Image">
                                
                                <a href="showimage.aspx?path=Files_Upload%5C302.JPG&amp;Width=" rel="lightbox" title="شهير بلاگ">
-                               <img src="showimage.aspx?path=Files_Upload%5C302.JPG&amp;Width=220" align="left" border="1"></a>
+                               <img src="showimage.aspx?path=Files_Upload%5C302.JPG&amp;Width=220" align="left" border="1">
+                               </a>
 </div>
-                       <strong><font size="4"><font color="#0000ff">عکس</font> <font color="#0000ff">محصول هنر یکی از همکاران است. روی آن کلیک کند.</font></font></strong><s1></s1>
+                       <strong><font size="4"><font color="#0000ff">عکس</font> <font color="#0000ff">محصول هنر یکی از همکاران است. روی آن کلیک کند.</font></font></strong><s1>  </s1>
 </div>
-               <br><div align="left">
+               <br>
+               <div align="left">
                        <a href="printfriendly.asp?id=341">
                        <img src="shell/PrintFriendly.png" border="0"></a>
                        <a href="#" onclick="window.open('SendNews.asp?PageID=341','myWin','toolbar=no,directories=no,location=no,status=no,menubar=no,resizable=yes,scrollbars=no,width=500, height=200'); return false">
-                       <img border="0" src="Shell/SendToFriends.jpg" width="140" height="30"></a>
+                       <img border="0" src="Shell/SendToFriends.jpg" width="140" height="30">
+                       </a>
                </div>
                <br>
-</td>
+               </td>
        </tr>
-<tr><td> <br><hr>
+       <tr>
+               <td> <br>
+               <hr>
 <div id="Comments"><ul>
 <b>نظرات
                کاربران:</b><br><li>
@@ -153,15 +176,18 @@ function ChangeSize( trgt,sz ) {
                دیشلمه....شما تشریف نمی آورید؟</li>
 <br><br><li>
 <font color="blue">سیاوش:</font><br><font size="1">4/3/2008 - 9:28:00 PM</font><br>مرد هزار چهره مرد هزار چهره کیست؟شخصیتی ساخته و پرداخته مهران مدیری، پیمان قاسم خانی و دیگر نویسندگان؟ تنها هدفش آنست که چند روز تعطیلات، مارا سرگم کند و دیگر هیچ؟ مرد هزار چهره یک طنز است یک طنز تلخ، برداشتی واقعی از جامعه ایرانی. من جوانم پس دردآشنای جوانانم و خود را با خود و دیگر جوانان طرف می کنم بسیار اند جوانانی که مصداق مرد هزار چهره هستند جوانانی سودا زده یا به قول خود مسعود "جو گیر" که هر با محصولی کهنه را با تعریفی جدید به آنها ارائه کنند چنان با تمام و جود می پذیرند که گویی راه فائق آمدن بر تمام مشکلاتشان را یافته اند و می خرند، خواه این تحفه تئوری بر گرفته از تفکرات خشک و فسیلی گروهی باشد یا مدل ملیجک وار لباسی در پشت ویترین فروشگاه. مهم نیست چه باشد! مهم نیست دلیل انتخابش چه باشد! مهم نیست نتیجه این انتخاب چیست! تنها مهم است که می گویند از این طرف بفرمائید!حال این بفرمائید چه معنایی دارد باز هم مهم نیست!!! وای بر ما که نه خود را می شناسیم و نه در جهت شناخت خویش قدم می گذاریم. وای بر ما که دیگر حتی ندای درون خویش را نمی توانیم بشنویم. وای بر ما که نمی دانیم چه می خواهیم و هر بار که چیزی می خواهیم و در مسیر وصال پا می گذاریم به میانه راه نرسیده چنان مجذوب زرق و برق راههای دیگر می شویم که مبدا و مقصد را یکجا فراموش می کنیم. وای بر ما که نمی توانیم در برابر هر آنچه در مقابل انسانیت ما ایستاده "نه"بگوییم. درست است که ما جوانان به تنهایی مقصر نیستیم اما چون شروع تقصیریم پس می توانیم از ابتدا مانع مشکل هم باشیم. با احترام سیاوش<br>
- <br><font color="#800000">بسیار زیبا سیاوش جان. درود بر تو. شهیر</font>
+ <br>
+<font color="#800000">بسیار زیبا سیاوش جان. درود بر تو. شهیر</font>
 </li>
 <br><br><li>
 <font color="blue">احسان __ خط سوم:</font><br><font size="1">4/3/2008 - 8:21:00 PM</font><br>با سلام و ادای احترام وکسب اجازه از شهیر عزیز . از عماد جان عزیزم بخاطر زحمتی که کشیدند و اطلاعات خوبی که دادند ، به سهم خودم تشکر می کنم . با کمال شرمندگی از اینکه "بدون هماهنگی" و " اجازه ای قبلی شما" و "بسرعت" ، معدود اشتباهات تایپی را که با توجه به حجم مطلب ، امری کاملا اجتناب ناپذیر است ، سعی کردم که اصلاح کنم ، از شما پوزش می خواهم . البته عماد جان عزیزم ، بد نیست بدانید که در میزان اشتباه در تایپ هرگز به پای بنده نخواهید رسید ! شاهد ادعای حقیر، شهیر و حسین جان عزیزم هستند که خبردارند که چگونه بنده در یک فقره عملیات تایپ ، دو صفحه ای کامل را جا انداختم !!! کافی است بپرسید ، در نهایت صداقت ، بر این رکورد بی نظیر و تاریخی شهادت خواهند داد ! باز هم از زحمات عماد جان و نیز سوالات خوب حسین جان تشکر می کنم که ان وعده ای مقاله ای عیدانه ای مفصل شهیر را در باره ای زنده یاد مرحوم مصدق ، در وسع خود بجای اوردند . ضمن انکه هیچکدام از دوستان، این زحمت ارزشمند عماد جان را دلیل ان نخواهند دانست که شهیرعزیز بعد از بازگشت از مسافرت ، سر فرصت وعده ای خود را عمل نکنند . مشتاقانه اما نه عجولانه ، منتظر مقاله ای شهیر هم خواهیم ماند. با احترام : احسان<br>
- <br><font color="#800000">احسان جان، من فکر کردم قضیه شامل مرور زمان شده است. تا امروز که نرسیده ام دست به این پروژه بزنم. اگر عشق به حفظ ارتباط با شما ها نبود تا روز 25 اپریل به خودم مرخصی می دادم. در این سفر خدا می داند چند هزار مایل در 3 قاره را پیموده ام. از پوست کلفت خودم در عجبم که چطوری تونستم اخبار را دنبال کنم و چند مقاله کوتاه بنویسم. گرفتاری زیاد بود. شهیر</font>
+ <br>
+<font color="#800000">احسان جان، من فکر کردم قضیه شامل مرور زمان شده است. تا امروز که نرسیده ام دست به این پروژه بزنم. اگر عشق به حفظ ارتباط با شما ها نبود تا روز 25 اپریل به خودم مرخصی می دادم. در این سفر خدا می داند چند هزار مایل در 3 قاره را پیموده ام. از پوست کلفت خودم در عجبم که چطوری تونستم اخبار را دنبال کنم و چند مقاله کوتاه بنویسم. گرفتاری زیاد بود. شهیر</font>
 </li>
 <br><br><li>
 <font color="blue">عماد ۲۴ ساله از اصفهان:</font><br><font size="1">4/3/2008 - 7:14:00 PM</font><br>شهير جان اگر طولانی شد ببخشيد چاره ای نبود احسان جان از کمک شما نيز در ويرايش اين مطلب متشکرم اميدوارم حسين عزیز نيز راضی باشد<br>
- <br><font color="#800000">ممنون از زحمتی که کشیدی عماد جان. شهیر</font>
+ <br>
+<font color="#800000">ممنون از زحمتی که کشیدی عماد جان. شهیر</font>
 </li>
 <br><br><li>
 <font color="blue">حسین:</font><br><font size="1">4/3/2008 - 7:04:00 PM</font><br>سلام آقا شهیر با اجازه شما خواستم از عماد عزیز وهمچنین سرور بزرگوار آقااحسان تشکر کنم وبه آقا عمادبگویم دستت درد نکنه بابت زحمتت وفوق العاده عالی بود.قسمتی که نوشتید" خود دکتر مصدق در تقریراتشان به اشتباه بودن تصمیمشان مبنی بر استعفاء اقرار می کنند"واقعا جالب وحاکی از روح بلند دکتر مصدق هست .بااینکه سوالات خرد وریز زیاد هست اما از اینکه به سوالات عمده من با توجه به کتاب دکتر مصدق پاسخ دادید بازهم تشکر میکنم .میخواستم این پاسخ را برای نویسنده مقاله رجانیوز copy&amp;paste <br>
@@ -173,11 +199,17 @@ function ChangeSize( trgt,sz ) {
 <font color="blue">حاجی جفرسون:</font><br><font size="1">4/3/2008 - 6:06:00 PM FOO!</font><br>با درود از قدیم گفته اند که یک کلمه هم از مادر عروس بشنوید. بنابراین به افاضات اخیر کشور دوست و برادر و سوسیالیست چین عزیز و جان جانان کمونیست عنایت بفرمایید: رادیو فردا: ديپلمات ها در وين گفته اند: که چين، از مخالفان تشديد تحريم های ايران در شورای امينت، اطلاعات خود درباره ارتباط برنامه هسته ای تهران با تلاش برای دستيابی سلاح اتمی را در اختيار آژانس بين المللی انرژی اتمی قرار داده است. العجب!!!!!! انتخاب :با وجود اینکه چین به شدت با تحریمهای شورای امنیت سازمان ملل علیه ایران مخالفت می کرد، اطلاعاتی در رابطه با فعالیتهای هسته ای ایران در اختیار مقامات آژانس بین المللی انرژی اتمی قرار داده که بر اساس آن ایران در تلاش برای دست یابی به سلاح های اتمی است. به گزارش خبرنگار سرویس بین الملل خبرگزاری انتخاب به نقل از فاکس نیوز؛جان بولتون ،نمایندۀ پیشین ایالات متحدۀ امریکا در سازمان ملل،در این باره گفت: اقدام اینچنینی از سوی چین به دلیل روابط نظامی که میان دو کشور [ایران و چین] برقرار است، بسیار قابل توجه است. خبرنگار انتخاب می افزاید؛ در حالی چین به این اقدام دست زده است که همکاری های تجاری و نظامی ایران با این کشور بطور بی سابقه ای افزایش یافته است. یا باب الحوائج!!!!! رادیو زمانه: چین با وجود مخالفت با تحریم‌های شدید شورای امنیت علیه تهران، اطلاعاتی درباره تلاش‌های تهران برای ساخت تسلیحات هسته‌ای به آژانس بین‌المللی انرژی اتمی ارائه کرده است. آسوشیتدپرس با اعلام این خبر به نقل از چند دیپلمات آشنا با پرونده هسته‌ای ایران نوشت، پکن به همراه مسکو همواره بر سر راه شورای امنیت و امریکا برای اعمال مجازات های سخت تر علیه تهران به دلیل مقاومت هسته ای این کشور به صورت یک مانع عمل کرده‌اند. این گزارش می افزاید، تصمیم چین برای ارائه اطلاعاتی جهت استفاده در تحقیقات آژانس انرژی اتمی درباره برنامه تسلیحات هسته‌ای ایران، گویای افزایش نارضایتی بین‌المللی درباره برنامه هسته‌ای جمهوری اسلامی است که حتی تلاش برای ساخت چنین تسلیحاتی را نیز تکذیب می‌کند. بر اساس این گزارش، دو دیپلمات بلندپایه که ارتباط نزدیکی با آژانس بین‌المللی انرژی اتمی دارند این اقدام چین را برملا کرده‌اند. آژانس بین‌المللی انرژی اتمی از اظهار نظر در این باره خودداری کرده است. العجب. من مامور و معذور..حالا از پدر عروس چند کلمه بشنوید: سخنگوی آژانس بین المللی انرژی اتمی ادعای برخی از رسانه های غربی را درباره این که چین اطلاعاتی را درباره برنامه هسته ای ایران در اختیار آژانس قرار داده است ، تکذیب کرد . ملیسا فلمینگ در گفت و گو با خبرنگار واحد مرکزی خبر تاکید کرد : آژانس بین المللی انرژی اتمی هرگز درباره اطلاعات محرمانه دریافتی از کشورها اظهار نظر نمی کند . وی گفت: هم
 </li>
 </ul></div>
-</td></tr>
+</td>
+</tr>
 </table>
-</td></tr></table>
-</td></tr></table>
-</td></tr>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</td>
+</tr>
 </table>
 </body>
 </html>
index f7123e8..74d366e 100644 (file)
@@ -3,81 +3,91 @@
 <head><title>Top Stories News from Wired News</title></head>
 <body bgcolor="#FFFFFF" text="#000000" link="#333399" vlink="#660066" alink="#666699">
 
-<table border="0" width="600" cellspacing="0" cellpadding="0"><tr>
-<td valign="top" align="LEFT"><table border="0" cellpadding="0" cellspacing="0" width="468" height="60" bgcolor="#FFFFFF">
+<table border="0" width="600" cellspacing="0" cellpadding="0">
+  <tr>
+    <td valign="top" align="LEFT"><table border="0" cellpadding="0" cellspacing="0" width="468" height="60" bgcolor="#FFFFFF">
 <form method="GET" action="http://nsads.hotwired.com/event.ng/Type=click&amp;ProfileID=9688&amp;RunID=14074&amp;AdID=22584&amp;GroupID=1&amp;FamilyID=2684&amp;TagValues=8.25.156.159.166.171.172.174.179.180.181.182.183.196.197.199.208.389.412.436.2041.6750.78456.79630.81880&amp;Redirect=http://www.springstreet.com/aa/citysearch.htm" id="form1" name="form1">\r
 <tr>
 <td bgcolor="#330099"><input name="city" type="text" size="7" maxlength="20" value="Seattle"></td>\r
 <td rowspan="2" align="LEFT" bgcolor="FFFFFF"><input type="IMAGE" src="http://static.wired.com/advertising/blipverts/allapartments/990625jpa_ssthome.gif" width="375" height="60" border="0" value="search" hspace="0" alt="Search over 6,000,000 Apts with SpringStreet"></td>
-</tr>
+</tr>\r
 <tr><td bgcolor="#330099">\r
-<select name="state"><option value="WA" selected>WA\r
+<select name="state">\r
+<option value="WA" selected>WA\r
 </option>
 <option value="AL">AL</option>
-<option value="AK">AK</option>
-<option value="AZ">AZ</option>
-<option value="AR">AR</option>
-<option value="CA">CA</option>
-<option value="CO">CO</option>
-<option value="CT">CT</option>
-<option value="DE">DE</option>
-<option value="DC">DC</option>
-<option value="FL">FL</option>
+<option value="AK">AK</option>\r
+<option value="AZ">AZ</option>\r
+<option value="AR">AR</option>\r
+<option value="CA">CA</option>\r
+<option value="CO">CO</option>\r
+<option value="CT">CT</option>\r
+<option value="DE">DE</option>\r
+<option value="DC">DC</option>\r
+<option value="FL">FL</option>\r
 <option value="GA">GA</option>
-<option value="HI">HI</option>
-<option value="ID">ID</option>
-<option value="IL">IL</option>
+<option value="HI">HI</option>\r
+<option value="ID">ID</option>\r
+<option value="IL">IL</option>\r
 <option value="IN">IN</option>
 <option value="IA">IA</option>
 <option value="KS">KS</option>
-<option value="KY">KY</option>
-<option value="LA">LA</option>
+<option value="KY">KY</option>\r
+<option value="LA">LA</option>\r
 <option value="ME">ME</option>
-<option value="MD">MD</option>
-<option value="MA">MA</option>
+<option value="MD">MD</option>\r
+<option value="MA">MA</option>\r
 <option value="MI">MI</option>
 <option value="MN">MN</option>
-<option value="MS">MS</option>
-<option value="MO">MO</option>
+<option value="MS">MS</option>\r
+<option value="MO">MO</option>\r
 <option value="MT">MT</option>
-<option value="NE">NE</option>
+<option value="NE">NE</option>\r
 <option value="NV">NV</option>
-<option value="NH">NH</option>
-<option value="NJ">NJ</option>
+<option value="NH">NH</option>\r
+<option value="NJ">NJ</option>\r
 <option value="NM">NM</option>
-<option value="NY">NY</option>
-<option value="NC">NC</option>
-<option value="ND">ND</option>
+<option value="NY">NY</option>\r
+<option value="NC">NC</option>\r
+<option value="ND">ND</option>\r
 <option value="OH">OH</option>
-<option value="OK">OK</option>
-<option value="OR">OR</option>
-<option value="PA">PA</option>
+<option value="OK">OK</option>\r
+<option value="OR">OR</option>\r
+<option value="PA">PA</option>\r
 <option value="PR">PR</option>
-<option value="RI">RI</option>
-<option value="SC">SC</option>
+<option value="RI">RI</option>\r
+<option value="SC">SC</option> \r
 <option value="SD">SD</option>
 <option value="TN">TN</option>
-<option value="TX">TX</option>
-<option value="UT">UT</option>
-<option value="VT">VT</option>
-<option value="VA">VA</option>
-<option value="WA">WA</option>
-<option value="WV">WV</option>
-<option value="WI">WI</option>
-<option value="WY">WY</option></select><input type="hidden" name="source" value="2hb8bhc059">
+<option value="TX">TX</option>\r
+<option value="UT">UT</option>\r
+<option value="VT">VT</option>\r
+<option value="VA">VA</option>\r
+<option value="WA">WA</option>\r
+<option value="WV">WV</option>\r
+<option value="WI">WI</option>\r
+<option value="WY">WY</option>\r
+</select><input type="hidden" name="source" value="2hb8bhc059">\r
 </td></tr>
 </form>\r
 </table></td>
     <td valign="top" align="RIGHT"><a href="http://nsads.hotwired.com/event.ng/Type=click&amp;ProfileID=5597&amp;RunID=17167&amp;AdID=22588&amp;GroupID=1&amp;FamilyID=3228&amp;TagValues=8.25.159.171.172.174.179.180.181.182.183.196.197.199.208.241.389.412.436.2035.6749.6750.70367.78456.79630.81880&amp;Redirect=http:%2F%2Fwww.hp.com%2Fgo%2Foriginal%20" target="_top"><img src="http://static.wired.com/advertising/blipverts/hp_colorinkjet/hp_970c_120x60_6.gif" border="1" height="60" width="120" alt="True to the Original"></a></td>
-  </tr></table>
-<!-- WIRED NEWS header --><!-- CMD_HOST = scoop.hotwired.com --><a name="#"></a>
+  </tr>
+</table>
+
+<!-- WIRED NEWS header -->
+<!-- CMD_HOST = scoop.hotwired.com -->
+
+<a name="#"></a>
 <table border="0" width="600" cellspacing="0" cellpadding="0">
-<tr>
+
+  <tr>
 <td></td>
 <td colspan="2"><img src="http://static.wired.com/news/images/spacer.gif" height="5" width="447" alt=""></td>
-</tr>
-<tr>
-<td valign="BOTTOM" align="RIGHT" class="wired" bgcolor="#FFFFFF"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/wired_000000.gif" width="153" height="30" border="0"></a></td>
+</tr> 
+
+ <tr> 
+      <td valign="BOTTOM" align="RIGHT" class="wired" bgcolor="#FFFFFF"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/wired_000000.gif" width="153" height="30" border="0"></a></td>
       <td bgcolor="#FF0000" valign="BOTTOM" align="LEFT" width="97"><a href="/news/0,1287,,00.html"><img src="http://static.wired.com/news/images/news_ffffff.gif" width="103" height="30" border="0"></a></td>
 
 
 
 
         </tr>
-<tr>
-<td valign="MIDDLE" align="RIGHT" bgcolor="#FFFFFF"><img src="http://static.wired.com/news/images/spacer.gif" width="1" height="30"></td>
+    <tr> 
+      <td valign="MIDDLE" align="RIGHT" bgcolor="#FFFFFF"><img src="http://static.wired.com/news/images/spacer.gif" width="1" height="30"></td>
       
       <td colspan="2" bgcolor="#999999">
 
        <table border="0" cellspacing="0" cellpadding="5">
 <form name="RedirectSearch" action="http://redirect.wired.com/search">
-                <tr>
-<td> 
+                <tr>  
+            <td> 
 <font face="courier" size="1"><input type="TEXT" name="query" size="20" value=""></font>
             </td>
 
             <td>
-<select name="url"><option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=vignette.hts&amp;Collection=vignette&amp;QueryMode=Internet&amp;Query=" selected>Wired News</option>
-<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=webmonkey.hts&amp;Collection=webmonkey&amp;QueryMode=Internet&amp;Query=">Webmonkey</option>
-<option value="http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=webmonkey_guides.hts&amp;QueryMode=Internet&amp;Query=">Webmonkey Guides</option>
-<option value="http://search.hotwired.com/search97/s97.vts?collection=hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=hotwired_archive.hts&amp;QueryMode=Internet&amp;Query=">HotWired Archives</option>
-<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=magazine.hts&amp;Collection=magazine&amp;QueryMode=Internet&amp;Query=">Wired Magazine</option>
-<option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=animation.hts&amp;Collection=animation&amp;QueryMode=Internet&amp;Query=">Animation Express</option>
-<option value="http://search.hotwired.com/search97/s97.vts?collection=suck&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=suck.hts&amp;QueryMode=Internet&amp;Query=">Suck.com</option>
-<option value="http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=uber_hotwired.hts&amp;QueryMode=Internet&amp;Query=">All of HotWired</option>
-<option value="http://www.hotbot.com/?SM=MC&amp;DV=0&amp;LG=any&amp;RD=RG&amp;DC=10&amp;DE=2&amp;_v=2&amp;OPs=MDRTP&amp;MT=">The Web -&gt; HotBot</option></select>
-</td>
+<select name="url">
+
+  <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=vignette.hts&amp;Collection=vignette&amp;QueryMode=Internet&amp;Query=" selected>Wired News</option>
+  <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=webmonkey.hts&amp;Collection=webmonkey&amp;QueryMode=Internet&amp;Query=">Webmonkey</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=webmonkey_guides&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=webmonkey_guides.hts&amp;QueryMode=Internet&amp;Query=">Webmonkey Guides</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=hotwired_archive.hts&amp;QueryMode=Internet&amp;Query=">HotWired Archives</option>
+  <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=magazine.hts&amp;Collection=magazine&amp;QueryMode=Internet&amp;Query=">Wired Magazine</option>
+  <option value="http://search.hotwired.com/search97/s97.vts?Action=FilterSearch&amp;Filter=docs_filter.hts&amp;ResultTemplate=animation.hts&amp;Collection=animation&amp;QueryMode=Internet&amp;Query=">Animation Express</option> 
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=suck&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=suck.hts&amp;QueryMode=Internet&amp;Query=">Suck.com</option>
+ <option value="http://search.hotwired.com/search97/s97.vts?collection=uber_hotwired&amp;Action=FilterSearch&amp;filter=docs_filter.hts&amp;ResultTemplate=uber_hotwired.hts&amp;QueryMode=Internet&amp;Query=">All of HotWired</option>
+ <option value="http://www.hotbot.com/?SM=MC&amp;DV=0&amp;LG=any&amp;RD=RG&amp;DC=10&amp;DE=2&amp;_v=2&amp;OPs=MDRTP&amp;MT=">The Web -&gt; HotBot</option>
+</select>
+
+
+
+            </td>
             <td> 
               <input type="SUBMIT" name="SUBMIT" value="SEARCH">
-</td>
+            </td>
           </tr>
-</form>        
+  </form>        
        </table>
-</td>
+          </td>
         </tr>
 <!-- 
 <TR>
 </TR>
 -->
 </table>
-<!-- end WIRED NEWS header --><!-- begin upper left side Navigation --><table border="0" cellpadding="3" cellspacing="0" align="LEFT" bgcolor="#FFFFFF">
-<tr>
-<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
+<!-- end WIRED NEWS header -->
+
+<!-- begin upper left side Navigation -->
+
+<table border="0" cellpadding="3" cellspacing="0" align="LEFT" bgcolor="#FFFFFF">
+  <tr> 
+    <td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
       <img src="http://static.wired.com/news/images/spacer.gif" width="147" height="1" border="0"><br><b>SECTIONS</b></font></td>
   </tr>
+
 <tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/business/0,1367,,00.html">Business</a></font></td></tr>
 <tr><td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/culture/0,1284,,00.html">Culture</a></font></td></tr>
 <tr><td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/technology/0,1282,,00.html">Technology</a></font></td></tr>
 <td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF">
 <b>WIRE SERVICE NEWS</b></font></td>
 </tr>
+
 <tr>
 <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/">Top Headlines</a></font></td>
 </tr>
+
 <tr>
 <td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/sports/">Sports</a></font></td>
 </tr>
+
 <tr>
 <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="/news/news/reuters/business/">Finance</a></font></td>
 </tr>
-<!-- End upper left nav --><!-- Begin lower Left Nav --><tr>
-<td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
+<!-- End upper left nav --><!-- Begin lower Left Nav -->
+    <tr> 
+    <td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
       <b><font size="1">FREE DELIVERY</font></b></font></td>
     </tr>
-<tr>
-<td bgcolor="#99FF99">
-<table cellspacing="0" cellpadding="0" border="0"><tr>
+    <tr> 
+    <td bgcolor="#99FF99">
+<table cellspacing="0" cellpadding="0" border="0">
+               <tr>
 <td bgcolor="#99FF99">
                 <form action="http://r.hotwired.com/r/hw_wm_r_nav_nwsltr/http://perl.hotwired.com/massmail/cgiParser.cgi" method="get" target="_top">
 
- <input type="hidden" name="success_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html"><input type="hidden" name="failure_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html"><input type="hidden" name="LIST" value="wn_ascii"><input type="hidden" name="SOURCE" value="other"><input type="hidden" name="ACTION" value="subscribe"><input type="TEXT" name="from" size="10" value="enter email">&nbsp;
+ <input type="hidden" name="success_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html">
+<input type="hidden" name="failure_page" value="http://www.hotwired.com/email/signup/wirednews-ascii.html">
+<input type="hidden" name="LIST" value="wn_ascii">
+<input type="hidden" name="SOURCE" value="other">
+ <input type="hidden" name="ACTION" value="subscribe">
+<input type="TEXT" name="from" size="10" value="enter email">&nbsp;
 </form>
 </td> 
                <td valign="top" bgcolor="#99FF99">
-               <input type="SUBMIT" name="SUBMIT" value="GO">
-</td>
-       </tr></table>
+               <input type="SUBMIT" name="SUBMIT" value="GO"> 
+
+  </td>
+       </tr>    
+</table>
 </td>
   </tr>
-<tr>
-<td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
+  <tr> 
+    <td bgcolor="#FF0000"><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"> 
       <b><font size="1">STOCKS</font></b></font></td>
   </tr>
-<tr>
-<td bgcolor="#99FF99"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Get Quote:</font></td>
+  <tr> 
+    <td bgcolor="#99FF99"><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Get Quote:</font></td>
   </tr>
-<tr>
-<td bgcolor="#99FF99" marginwidth="0" marginheight="0"><form method="get" action="http://r.wired.com/r/10020/http://stocks.wired.com/stocks_quotes.asp">
+  <tr>
+    <td bgcolor="#99FF99" marginwidth="0" marginheight="0"><form method="get" action="http://r.wired.com/r/10020/http://stocks.wired.com/stocks_quotes.asp">
 <input type="TEXT" name="Symbol" size="12">&nbsp;<input type="SUBMIT" name="submit" value="GO">
 </form></td>
   </tr>
-<!-- BEGIN BUTTON ADS --><tr>
+<!-- BEGIN BUTTON ADS -->
+  
+ <tr>
 <td bgcolor="#CCFFCC">
-<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">Financial Services</font><br><center>
+<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">Financial Services</font><br>
+<center>
 <img src="http://static.wired.com/news/images/spacer.gif" height="3" width="5" alt=""><br><img src="http://static.wired.com/news/images/button_ads_news10.gif" width="143" height="56" border="0" alt="" usemap="#buttons" hspace="0" vspace="0">
 </center>
 
-<map name="buttons"><area shape="RECT" alt="Datek" coords="0,0,69,24" href="http://r.wired.com/r/1649/http://ads16.focalink.com/SmartBanner/page/1266.631">
-<area shape="RECT" alt="Wired Index Fund" coords="73,0,142,24" href="http://r.wired.com/r/227/http://www.gffunds.com/wired">
-<area shape="RECT" alt="internet.com Index Fund" coords="73,31,142,55" href="http://r.wired.com/r/298/http://www.gffunds.com/isdex/">
-<area shape="RECT" alt="GetSmart's MortgageFinder" coords="0,31,69,55" href="http://r.wired.com/r/294/http://www.getsmartinc.com/mortgage/HomeBanner?BANNERNAME=www.getsmartinc.com/mwired001m6075x25"></map>
-</td>
-  </tr>
-<!-- END BUTTON ADS --><tr>
-<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/51/http://stocks.wired.com/">Today's Summary</a></font></td>
+<map name="buttons">
+        <area shape="RECT" alt="Datek" coords="0,0,69,24" href="http://r.wired.com/r/1649/http://ads16.focalink.com/SmartBanner/page/1266.631">
+        <area shape="RECT" alt="Wired Index Fund" coords="73,0,142,24" href="http://r.wired.com/r/227/http://www.gffunds.com/wired">
+        <area shape="RECT" alt="internet.com Index Fund" coords="73,31,142,55" href="http://r.wired.com/r/298/http://www.gffunds.com/isdex/">
+        <area shape="RECT" alt="GetSmart's MortgageFinder" coords="0,31,69,55" href="http://r.wired.com/r/294/http://www.getsmartinc.com/mortgage/HomeBanner?BANNERNAME=www.getsmartinc.com/mwired001m6075x25"></map>
+        </td>
+  </tr> <!-- END BUTTON ADS -->
+  
+  <tr> 
+    <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/51/http://stocks.wired.com/">Today's Summary</a></font></td>
   </tr>
-<tr>
-<td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://r.wired.com/r/hb_fin_r_wn_top/http://stocks.wired.com/stocks_indexes_detail.asp?Symbol=%24WIRED">Wired Index</a> | <a href="http://redirect.wired.com/redir/52/http://stocks.wired.com/stocks_indexes.asp%20">All Indexes</a></font></td>
+  <tr> 
+    <td bgcolor="#CCFFCC"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://r.wired.com/r/hb_fin_r_wn_top/http://stocks.wired.com/stocks_indexes_detail.asp?Symbol=%24WIRED">Wired Index</a> | <a href="http://redirect.wired.com/redir/52/http://stocks.wired.com/stocks_indexes.asp%20">All Indexes</a></font></td>
   </tr>
-<tr>
-<td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/53/http://stocks.wired.com/stocks_portfolios.asp">Portfolios</a></font></td>
+  <tr> 
+    <td bgcolor="#99FF99"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000"><a href="http://redirect.wired.com/redir/53/http://stocks.wired.com/stocks_portfolios.asp">Portfolios</a></font></td>
   </tr>
-<!-- BEGIN B&N spot --><tr>
-<td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>FIND A BOOK</b></font></td>
+
+<!-- BEGIN B&N spot -->
+
+<tr> 
+ <td bgcolor="#FF0000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>FIND A BOOK</b></font></td>
 </tr>
 <tr><td bgcolor="#CCFFCC">
 <table cellspacing="0" cellpadding="0" border="0" width="145">
-<tr><td bgcolor="#CCFFCC">
+                <tr><td bgcolor="#CCFFCC">
                 <form action="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click">
-<input type="hidden" name="sourceid" value="383471"><input type="hidden" name="categoryid" value="categorydropdown"><font size="2">
-                <select name="Subjects" size="4"><option value="301">Business Top 20
+<input type="hidden" name="sourceid" value="383471">
+<input type="hidden" name="categoryid" value="categorydropdown">
+                <font size="2">
+                <select name="Subjects" size="4">
+<option value="301">Business Top 20
 </option>
 <option value="500">Computers
 </option>
  </option></select></font>
 </form>
 </td></tr>
-<tr align="left" valign="top">
-<td valign="top" bgcolor="#CCFFCC"> <input type="submit" value="GO"><img src="http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&amp;is_search=Y" border="0" align="top"><!--
+ <tr align="left" valign="top">
+                <td valign="top" bgcolor="#CCFFCC"> <input type="submit" value="GO">
+
+<img src="http://barnesandnoble.bfast.com/booklink/serve?sourceid=383471&amp;is_search=Y" border="0" align="top">
+<!--
 <IMG SRC="http://www.wired.com/partner/bn/trackingimg/ot_wn_nav_c_bn.gif" border=0 width=1 height=1 align=top>
 -->
 </td>
                  
                 </tr>
-<tr align="left" valign="top">
-<td align="left" valign="top" colspan="2" rowspan="1" bgcolor="#CCFFCC">
+                <tr align="left" valign="top">
+        <td align="left" valign="top" colspan="2" rowspan="1" bgcolor="#CCFFCC">
 <p>
         <font size="1" face="Verdana, Arial, Helvetica, " color="#000000">Powered by <a href="http://r.wired.com/r/wn_nav_c_bn/http://barnesandnoble.bfast.com/booklink/click?sourceid=383471">barnesandnoble.com</a>
  </font>
-<br clear="all"></p>
+<br clear="all">
+
+
+</p>
 </td>
-        </tr>
-</table>
+        </tr>  
+        </table>
+
 </td></tr>
-<!-- END B&N spot --><!-- BEGIN MAGAZINE SPOT --><tr>
-<td bgcolor="#000000"><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>WIRED 
+ <!-- END B&N spot -->   
+  
+<!-- BEGIN MAGAZINE SPOT -->
+
+ <tr> 
+    <td bgcolor="#000000"><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="1"><b>WIRED 
       MAGAZINE </b></font></td>
   </tr>
-<tr>
+<tr> 
 <td bgcolor="#FFFF99" align="CENTER">
 <font face="verdana, arial, helvetica, sans-serif" size="1">
 <b>
-<br><a href="http://www.wired.com/wired/"><img src="http://static.wired.com/news/images/wiredcover.gif" width="91" height="109" border="0" alt="Wired Magazine"></a><br></b>
+<br>
+
+<a href="http://www.wired.com/wired/"><img src="http://static.wired.com/news/images/wiredcover.gif" width="91" height="109" border="0" alt="Wired Magazine"></a><br></b>
 
 Issue 7.11
 </font>
 </td>
 </tr>
-<tr>
+
+<tr> 
 <td bgcolor="#FFFF99" align="center">
 <font face="verdana, arial, helvetica, sans-serif" size="1"> 
 
@@ -285,96 +347,201 @@ Issue 7.11
 </font>
 </td>
 </tr>
-<!-- END MAGAZINE SPOT --><tr>
-<td bgcolor="#000000"> 
+<!-- END MAGAZINE SPOT -->
+
+  <tr>
+    <td bgcolor="#000000"> 
     <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTWIRED</b></font>
 </td>
   </tr>
-<tr>
-<td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
-<a href="http://www.hotwired.com/">Frontdoor</a><br><a href="http://www.hotwired.com/webmonkey/">Webmonkey</a><br><a href="http://www.hotwired.com/webmonkey/guides/index.html">Webmonkey Guides</a><br><a href="http://www.hotwired.com/rgb/">RGB Gallery</a><br><a href="http://www.hotwired.com/animation/">Animation Express</a><br><a href="http://go.suck.com/su_wnfd">Suck.com</a><br></font>
+  <tr> 
+    <td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://www.hotwired.com/">Frontdoor</a><br>
+<a href="http://www.hotwired.com/webmonkey/">Webmonkey</a><br>
+<a href="http://www.hotwired.com/webmonkey/guides/index.html">Webmonkey Guides</a><br>
+<a href="http://www.hotwired.com/rgb/">RGB Gallery</a><br>
+<a href="http://www.hotwired.com/animation/">Animation Express</a><br>
+<a href="http://go.suck.com/su_wnfd">Suck.com</a><br>
+</font>
 </td>
   </tr>
-<tr>
-<td bgcolor="#000000"> 
+  
+    <tr>
+    <td bgcolor="#000000"> 
     <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HOTBOT</b></font>
 </td>
   </tr>
-<tr>
-<td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
-<a href="http://redirect.wired.com/redir/54/http://www.hotbot.com/">Search</a><br><a href="http://shop.hotbot.com/">Shopping</a><br></font>
+  <tr> 
+    <td bgcolor="#FFFF99"> <font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">
+<a href="http://redirect.wired.com/redir/54/http://www.hotbot.com/">Search</a><br>
+<a href="http://shop.hotbot.com/">Shopping</a><br>
+</font>
 </td>
   </tr>
-<tr>
+  
+  <tr>
 <td>
-  <br><font face="Verdana, Arial, Helvetica, sans-serif" size="1">
+  <br>
+  <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
   <font face="Verdana, Arial, Helvetica, sans-serif" size="1">
-  Wired News <a href="/news/who/0,1362,,00.html">staff</a><br><br><!-- Wired News is <a href="http://www.wired.com/news/jobs.html">hiring</a><br><br> --><b><a href="/news/feedback/0,1364,,00.html">Contact us</a></b></font>
+  Wired News <a href="/news/who/0,1362,,00.html">staff</a><br><br>
+
+  <!-- Wired News is <a href="http://www.wired.com/news/jobs.html">hiring</a><br><br> -->
+
+  <b><a href="/news/feedback/0,1364,,00.html">Contact us</a></b></font>
 
   
-  <br><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1">Wired News  delivered<br>by <a href="/news/palmpilot/0,1365,,00.html">PalmPilot</a>,<br><a href="http://www.hotwired.com/email/signup/wn_outlook.html">Outlook  Express</a>,<br><a href="http://redirect.wired.com/redir/55/http://form.netscape.com/ibd/html/ibd_frameset.html">In-Box Direct</a>,<br>
-or <a href="/news/pointcast/0,1366,,00.html">PointCast</a></font><br><!-- TRACKING --><img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt=""></font>
+  <br><br>
+  
+  <font face="Verdana, Arial, Helvetica, sans-serif" size="1">Wired News  delivered<br>by <a href="/news/palmpilot/0,1365,,00.html">PalmPilot</a>,<br><a href="http://www.hotwired.com/email/signup/wn_outlook.html">Outlook  Express</a>,<br><a href="http://redirect.wired.com/redir/55/http://form.netscape.com/ibd/html/ibd_frameset.html">In-Box Direct</a>,<br>
+or <a href="/news/pointcast/0,1366,,00.html">PointCast</a></font><br>
+
+<!-- TRACKING -->
+<img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt="">
+</font>
 </td>
   </tr>
+
 </table>
-<!-- end lower left side Navigation --><!-- CONTENT TABLE --><table border="0" width="447" cellspacing="0" cellpadding="0" bordercolor="#66FF00">
-<tr>
-<td valign="TOP" align="LEFT" rowspan="2">
+
+<!-- end lower left side Navigation -->
+<!-- CONTENT TABLE -->
+
+<table border="0" width="447" cellspacing="0" cellpadding="0" bordercolor="#66FF00">
+ <tr>
+  <td valign="TOP" align="LEFT" rowspan="2">
    <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="15" alt=""><br>
-</td>
+  </td>
   <td colspan="3" valign="TOP" align="LEFT">
-<img src="http://static.wired.com/news/images/spacer.gif" height="7" width="432" alt=""><br><!-- SQL query for Package here --><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Nomad's Land</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- IBD_SUBJECT: Homeless, but ID'd, in Seattle --><font face="Arial, Helvetica, sans-serif" size="5"><b><a href="/news/politics/0,1283,31911,00.html">Homeless, but ID'd, in Seattle</a></b></font><br><font size="1" face="Verdana, Arial, Geneva, sans-serif" color="#FF0000">8:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The city council approves a plan to track the homeless by a numbering system, saying it'll improve services. The implications worry privacy advocates, naturally. By Craig Bicknell.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><table bgcolor="#F0F0F0" cellpadding="0" cellspacing="0" border="0" width="147" align="RIGHT">
-<!-- Commentary Frag Begin --><tr>
-<td bgcolor="#000000">&nbsp;</td>
+<img src="http://static.wired.com/news/images/spacer.gif" height="7" width="432" alt=""><br>
+
+
+<!-- SQL query for Package here -->
+
+<font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Nomad's Land</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- IBD_SUBJECT: Homeless, but ID'd, in Seattle --><font face="Arial, Helvetica, sans-serif" size="5"><b><a href="/news/politics/0,1283,31911,00.html">Homeless, but ID'd, in Seattle</a></b></font><br><font size="1" face="Verdana, Arial, Geneva, sans-serif" color="#FF0000">8:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The city council approves a plan to track the homeless by a numbering system, saying it'll improve services. The implications worry privacy advocates, naturally. By Craig Bicknell.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><table bgcolor="#F0F0F0" cellpadding="0" cellspacing="0" border="0" width="147" align="RIGHT">
+ <!-- Commentary Frag Begin -->
+        <tr>
+          <td bgcolor="#000000">&nbsp;</td>
           <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>HITS &amp; MISC.</b></font></td>
         </tr>
-<tr>
-<td>&nbsp;</td>
+        <tr>
+          <td>&nbsp;</td>
           <td>
-<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31664,00.html">Calendar of E-Vents</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Ongoing goings-on. </font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31926,00.html">Rants &amp; Raves</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br></font></font>
+<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br>
+
+               <font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31664,00.html">Calendar of E-Vents</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Ongoing goings-on. </font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/commentarySection/0,1292,31926,00.html">Rants &amp; Raves</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Readers on Apple's G4 ... AOL's passwords ... MS vs. Linux.</font><br><br>  </font></font>
 </td>
         </tr>
-<!-- Commentary Frag End --><tr>
+<!-- Commentary Frag End -->
+<tr> 
 <td align="left" bgcolor="#000000">&nbsp;</td> 
 <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>CURRENT HOO-HA</b></font></td>
 </tr>
-<tr>
+
+<tr> 
 <td>&nbsp;</td>
 <td>
-<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/mp3/0,1285,,00.html">MP3 Rocks the Web</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Download the sound.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_fd_mp3_r_mscm_txt/http://webfarm.mediaplex.com/click_thru_request/164-1361b-1052" style="text-decoration:none"><font color="#000000">Musicmaker</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/wireless/0,1382,,00.html">The Wireless World</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Networking gets unplugged.  <br><i>Sponsored by <a href="http://www.ericsson.se/get/internet/default.shtml" style="text-decoration:none"><font color="#000000">Ericsson</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/digiwood/0,1412,,00.html">Digital Hollywood</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">The buzz of tech.</font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ipo/0,1350,,00.html">IPO Outlook</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Deals in the pipeline.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_ipo_r_sun_txt/http://sun.com/ads/smi/brand/hotwired.html" style="text-decoration:none"><font color="#000000">Sun</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ebiz/0,1272,,00.html">E-Biz</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Business unusual.  <br><i>Sponsored by <a href="http://r.wired.com/r/wn_fd_r_ebiz_ibm_txt/http://www.ibm.com" style="text-decoration:none"><font color="#000000">IBM</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/medtech/0,1286,,00.html">Med-Tech Center</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">From the bleeding edge.<br><i>Sponsored by WebMD</i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/linux/0,1411,,00.html">The Linux Effect</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Not just for geeks.</font><br><br><img src="http://static.wired.com/news/images/spacer.gif" height="7" width="5" alt=""><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/exec/0,1370,,00.html">Executive Summary</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">CEOs, COOs, CIOs unite.  <br><i>Sponsored by <a href="http://r.wired.com/r/wn_exec_r_vign/http://www.vignette.com/" style="text-decoration:none"><font color="#000000">Vignette</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/school/0,1383,,00.html">Making the Grade</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Reading, writing, and ROM.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_sch_r_nav_uop/http://ads25.focalink.com/SmartBanner/page?12630.53" style="text-decoration:none"><font color="#000000">U of Phoenix</font></a></i></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/infostructure/0,1377,,00.html">Infostructure</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">An IS/IT resource <br><i>Sponsored by <a href="http://r.wired.com/r/wn_is_r_ssec/http://ad.doubleclick.net/clk;653163;3599571;s?http://www.sprintbiz.com/s%0Aervlet/appservlet?from=/wired/sprint/&amp;template=/security/security.html&amp;SITE=%0Awired.com&amp;BANNER=Sprint" style="text-decoration:none"><font color="#000000">Sprint</font></a></i></font></font><br><br><font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/y2k/0,1360,,00.html">Y2K Watch</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Tick... Tick... Tick...</font><br><br><font face="Arial, Helvetica, sans-serif" size="2"><b><i><a href="/news/special_reports/1,1293,,00.html">More Hoo-Ha</a></i></b></font><br>&nbsp;<br></font></font></font></font></font></font></font></font>
+<img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt="">
+<br>
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/mp3/0,1285,,00.html">MP3 Rocks the Web</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Download the sound.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_fd_mp3_r_mscm_txt/http://webfarm.mediaplex.com/click_thru_request/164-1361b-1052" style="text-decoration:none"><font color="#000000">Musicmaker</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/wireless/0,1382,,00.html">The Wireless World</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Networking gets unplugged.  <br><i>Sponsored by <a href="http://www.ericsson.se/get/internet/default.shtml" style="text-decoration:none"><font color="#000000">Ericsson</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/digiwood/0,1412,,00.html">Digital Hollywood</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">The buzz of tech.</font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ipo/0,1350,,00.html">IPO Outlook</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Deals in the pipeline.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_ipo_r_sun_txt/http://sun.com/ads/smi/brand/hotwired.html" style="text-decoration:none"><font color="#000000">Sun</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/ebiz/0,1272,,00.html">E-Biz</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Business unusual.  <br><i>Sponsored by <a href="http://r.wired.com/r/wn_fd_r_ebiz_ibm_txt/http://www.ibm.com" style="text-decoration:none"><font color="#000000">IBM</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/medtech/0,1286,,00.html">Med-Tech Center</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">From the bleeding edge.<br><i>Sponsored by WebMD</i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/linux/0,1411,,00.html">The Linux Effect</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Not just for geeks.</font><br><br> <img src="http://static.wired.com/news/images/spacer.gif" height="7" width="5" alt=""><br>
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/exec/0,1370,,00.html">Executive Summary</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">CEOs, COOs, CIOs unite.  <br><i>Sponsored by <a href="http://r.wired.com/r/wn_exec_r_vign/http://www.vignette.com/" style="text-decoration:none"><font color="#000000">Vignette</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/school/0,1383,,00.html">Making the Grade</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Reading, writing, and ROM.  <br><i>Sponsored by <a href="http://r.hotwired.com/r/wn_sch_r_nav_uop/http://ads25.focalink.com/SmartBanner/page?12630.53" style="text-decoration:none"><font color="#000000">U of Phoenix</font></a></i></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/infostructure/0,1377,,00.html">Infostructure</a></b></font><br><font size="1" face="Arial, Helvetica, sans-serif" color="#000000">An IS/IT resource <br><i>Sponsored by <a href="http://r.wired.com/r/wn_is_r_ssec/http://ad.doubleclick.net/clk;653163;3599571;s?http://www.sprintbiz.com/s%0Aervlet/appservlet?from=/wired/sprint/&amp;template=/security/security.html&amp;SITE=%0Awired.com&amp;BANNER=Sprint" style="text-decoration:none"><font color="#000000">Sprint</font></a></i></font></font><br><br> 
+
+<font size="2" face="Arial,Helvetica, sans-serif"><b><a href="/news/y2k/0,1360,,00.html">Y2K Watch</a></b></font><br><font size="2" face="Arial, Helvetica, sans-serif"><font size="1" face="Arial, Geneva, sans-serif" color="#000000">Tick... Tick... Tick...</font><br><br> 
+
+<font face="Arial, Helvetica, sans-serif" size="2"><b><i><a href="/news/special_reports/1,1293,,00.html">More Hoo-Ha</a></i></b></font><br>&nbsp;<br>
+
+</font></font></font></font></font></font></font></font>
 </td>
 </tr>
-<!-- start of Gen News --><tr>
-<td bgcolor="#000000">&nbsp;</td>
+<!-- start of Gen News -->
+                <tr> 
+                  <td bgcolor="#000000">&nbsp;</td>
           <td bgcolor="#000000"><font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b>MEANWHILE...</b></font></td>
         </tr>
-<tr>
-<td>&nbsp;</td>
+
+        <tr> 
+          <td>&nbsp;</td>
           <td align="left" valign="top">
-          <img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br><!-- 31942 --><font size="2" face="Arial, Helvetica, sans-serif" color="#000000"><b>F&uuml;hrer Furor</b></font><br><font size="1" face="Arial, Geneva, sans-serif" color="#000000"><p>\r
+          <img src="http://static.wired.com/news/images/spacer.gif" height="5" width="5" alt=""><br>
+
+
+<!-- 31942 -->
+<font size="2" face="Arial, Helvetica, sans-serif" color="#000000"><b>F&uuml;hrer Furor</b></font><br><font size="1" face="Arial, Geneva, sans-serif" color="#000000"><p>\r
 Contruction workers in Berlin opened an old wound in the German psyche this week when they accidentally stumbled across Adolf Hitler's bunker while excavating near the Brandenburg Gate. The bunker, just south of the Gate, was where Hitler and his closest associates barricaded themselves as the Red Army approached Berlin in the waning days of World War II. It is also where the F&uuml;hrer and his bride, Eva Braun, committed suicide rather than fall into the hands of the Russians. Although the bunker's location has never been a mystery, it has been sealed off since the end of the war to keep neo-Nazis from turning it into a shrine.\r
 <br></p>
 <li>More from <a href="http://www.lycos.com/news/flash/hitlerbunker.html?v=wn1015&amp;lpv=1">Lycos</a>
 </li></font><br><br>
-</td>
+ </td>
         </tr>
 <!-- end of Gen News -->
 </table>
+
+
 <font size="1">&nbsp;<br></font>
 
-<br><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Other Top Stories</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- SQL query here --><!-- IBD_SUBJECT:Wall Street Keeps Reeling --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31934,00.html">Wall Street Keeps Reeling</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">10:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Dow and Nasdaq suffer sizeable losses during the first half of Friday trading. Why? Wholesale prices are the highest this decade, and Greenspan is concerned about stock prices.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:The Market's Madness --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31935,00.html">The Market's Madness</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">9:10 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The bulls and the bears are in the midst of a Battle Royale, and all this turbulence is not a healthy thing. So say the experts.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:'Want a Loan? What's Your Race?' --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/politics/0,1283,31533,00.html">'Want a Loan? What's Your Race?'</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Federal Reserve is in the middle of changing banking regulations to let banks collect data on the race, sex, religion, and national origin of their customers. By Declan McCullagh. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><br><!-- IBD_SUBJECT:Music Regs: A Bagful of Noise --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31832,00.html">Music Regs: A Bagful of Noise</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The struggle to come up with a digital music standard that would minimize download piracy is pushing right up against the holiday gift-giving season. By Jennifer Sullivan.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Can't Beat 'Em? Green 'Em --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31927,00.html">Can't Beat 'Em? Green 'Em</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">High-tech companies are notoriously environmentally unfriendly, and a growing number of "Greenies" are trying to change things from the inside ... with varying results. By Chris Gaither.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:Y2K Cloud Over MS Office --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31932,00.html">Y2K Cloud Over MS Office</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Windows NT sales remain strong, but corporate clients are wary of upgrading to MS Office 2000. Analysts say that means strong, but not stunning, Microsoft earnings. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><font color="#FF0000" face="Verdana, Arial, Geneva, sans-serif" size="1">Med-Tech</font><br><!-- IBD_SUBJECT:Biochips for Custom Chemo --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31914,00.html">Biochips for Custom Chemo</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Different cancer patients need different medicine, but doctors can rarely determine the best match. New biochip technology promises chemotherapy tailored to a tumor's genetic make-up. By Kristen Philipkoski.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:High Stakes in Priceline Suit --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31916,00.html">High Stakes in Priceline Suit</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">It's not just another round of Redmond-bashing. A Priceline.com lawsuit against Microsoft's Expedia.com may have a big impact on how Net companies protect their business models. By Joanna Glasner.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Biodiversity Merges Online --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31918,00.html">Biodiversity Merges Online</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The far-flung databases on global biodiversity get together to form one monster database. Soon the red-eyed tree frog will be eyeing those Swedish lingonberries. From the Environment News Service.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- SQL above --><!------TRADES---------><br><font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Elsewhere Today</i></b></font><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br><!-- SQL query here --><font face="helvetica, arial" size="3"><b><a href="http://www.thestandard.com/articles/display/0,1449,6975,00.html?home.tf">FCC: Hands-Off on Broadband</a></b></font><br><font face="geneva, arial" size="2"><cite>The Industry Standard</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.lycos.com/stories/TopNews/19991014RTNEWS-ARMS-TREATY.asp">White House Lashes Out on Treaty</a></b></font><br><font face="geneva, arial" size="2">Lycos</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.pathfinder.com/time/magazine/articles/0,3266,32207,00.html">Steve Jobs at 44</a></b></font><br><font face="geneva, arial" size="2"><cite>Time</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2353608,00.html">Computers May Run on Gas</a></b></font><br><font face="geneva, arial" size="2">ZDNN</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.nytimes.com/library/tech/99/10/biztech/articles/14free.html">Much Is Free in the Wired World</a></b></font><br><font face="geneva, arial" size="2"><cite>The New York Times</cite> (Registration Required)</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.usatoday.com/life/cyber/nb/nb4.htm">Melissa: I'm Baaaack</a></b></font><br><font face="geneva, arial" size="2"><cite>USA Today</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.msnbc.com/news/322926.asp">Domain Owners Surrender Privacy</a></b></font><br><font face="geneva, arial" size="2">MSNBC</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.washingtonpost.com/wp-srv/business/longterm/tech/techthursday/download/download.htm">Dividing to Conquer in VC Game</a></b></font><br><font face="geneva, arial" size="2"><cite>The Washington Post</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.salon.com/tech/books/1999/10/14/redhat_book/index.html">The Red Hat Diaries</a></b></font><br><font face="geneva, arial" size="2">Salon</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.bbc.co.uk/hi/english/sci/tech/newsid_473000/473856.stm">Screensaver to Predict Climate</a></b></font><br><font face="geneva, arial" size="2">BBC News</font><br><br><!-- SQL above --><!-- - - - - - - - - - - - - -->
-</td>
+<br>
+
+<font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Other Top Stories</i></b></font><br>
+<img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br>
+
+<!-- SQL query here -->
+<!-- IBD_SUBJECT:Wall Street Keeps Reeling --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31934,00.html">Wall Street Keeps Reeling</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">10:15 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Dow and Nasdaq suffer sizeable losses during the first half of Friday trading. Why? Wholesale prices are the highest this decade, and Greenspan is concerned about stock prices.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:The Market's Madness --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/reuters/0,1349,31935,00.html">The Market's Madness</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">9:10 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The bulls and the bears are in the midst of a Battle Royale, and all this turbulence is not a healthy thing. So say the experts.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/reuters/0,1349,,00.html">in&nbsp;Reuters</a></i></font><br><br><!-- IBD_SUBJECT:'Want a Loan? What's Your Race?' --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/politics/0,1283,31533,00.html">'Want a Loan? What's Your Race?'</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The Federal Reserve is in the middle of changing banking regulations to let banks collect data on the race, sex, religion, and national origin of their customers. By Declan McCullagh. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/politics/0,1283,,00.html">in&nbsp;Politics</a></i></font><br><br><!-- IBD_SUBJECT:Music Regs: A Bagful of Noise --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31832,00.html">Music Regs: A Bagful of Noise</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The struggle to come up with a digital music standard that would minimize download piracy is pushing right up against the holiday gift-giving season. By Jennifer Sullivan.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Can't Beat 'Em? Green 'Em --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31927,00.html">Can't Beat 'Em? Green 'Em</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">High-tech companies are notoriously environmentally unfriendly, and a growing number of "Greenies" are trying to change things from the inside ... with varying results. By Chris Gaither.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:Y2K Cloud Over MS Office --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31932,00.html">Y2K Cloud Over MS Office</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Windows NT sales remain strong, but corporate clients are wary of upgrading to MS Office 2000. Analysts say that means strong, but not stunning, Microsoft earnings. </font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><font color="#FF0000" face="Verdana, Arial, Geneva, sans-serif" size="1">Med-Tech</font><br><!-- IBD_SUBJECT:Biochips for Custom Chemo --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31914,00.html">Biochips for Custom Chemo</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">Different cancer patients need different medicine, but doctors can rarely determine the best match. New biochip technology promises chemotherapy tailored to a tumor's genetic make-up. By Kristen Philipkoski.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- IBD_SUBJECT:High Stakes in Priceline Suit --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/business/0,1367,31916,00.html">High Stakes in Priceline Suit</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">It's not just another round of Redmond-bashing. A Priceline.com lawsuit against Microsoft's Expedia.com may have a big impact on how Net companies protect their business models. By Joanna Glasner.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/business/0,1367,,00.html">in&nbsp;Business</a></i></font><br><br><!-- IBD_SUBJECT:Biodiversity Merges Online --><font face="Arial, Helvetica, sans-serif" size="3"><b><a href="/news/technology/0,1282,31918,00.html">Biodiversity Merges Online</a></b></font><br><font color="#ff0000" face="Verdana, Arial, Geneva, sans-serif" size="1">3:00 a.m.</font>&nbsp;<font face="Verdana, Arial, Geneva, sans-serif" size="2">The far-flung databases on global biodiversity get together to form one monster database. Soon the red-eyed tree frog will be eyeing those Swedish lingonberries. From the Environment News Service.</font><br><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><i><a href="/news/technology/0,1282,,00.html">in&nbsp;Technology</a></i></font><br><br><!-- SQL above -->
+
+
+        
+<!------TRADES--------->
+<br>
+<font face="Verdana, Arial, Geneva, sans-serif" size="2"><b><i>Elsewhere Today</i></b></font><br>
+<img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" alt=""><br>
+
+<!-- SQL query here -->
+<font face="helvetica, arial" size="3"><b><a href="http://www.thestandard.com/articles/display/0,1449,6975,00.html?home.tf">FCC: Hands-Off on Broadband</a></b></font><br><font face="geneva, arial" size="2"><cite>The Industry Standard</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.lycos.com/stories/TopNews/19991014RTNEWS-ARMS-TREATY.asp">White House Lashes Out on Treaty</a></b></font><br><font face="geneva, arial" size="2">Lycos</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.pathfinder.com/time/magazine/articles/0,3266,32207,00.html">Steve Jobs at 44</a></b></font><br><font face="geneva, arial" size="2"><cite>Time</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.zdnet.com/zdnn/stories/news/0,4586,2353608,00.html">Computers May Run on Gas</a></b></font><br><font face="geneva, arial" size="2">ZDNN</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.nytimes.com/library/tech/99/10/biztech/articles/14free.html">Much Is Free in the Wired World</a></b></font><br><font face="geneva, arial" size="2"><cite>The New York Times</cite> (Registration Required)</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.usatoday.com/life/cyber/nb/nb4.htm">Melissa: I'm Baaaack</a></b></font><br><font face="geneva, arial" size="2"><cite>USA Today</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.msnbc.com/news/322926.asp">Domain Owners Surrender Privacy</a></b></font><br><font face="geneva, arial" size="2">MSNBC</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.washingtonpost.com/wp-srv/business/longterm/tech/techthursday/download/download.htm">Dividing to Conquer in VC Game</a></b></font><br><font face="geneva, arial" size="2"><cite>The Washington Post</cite></font><br><br><font face="helvetica, arial" size="3"><b><a href="http://www.salon.com/tech/books/1999/10/14/redhat_book/index.html">The Red Hat Diaries</a></b></font><br><font face="geneva, arial" size="2">Salon</font><br><br><font face="helvetica, arial" size="3"><b><a href="http://news.bbc.co.uk/hi/english/sci/tech/newsid_473000/473856.stm">Screensaver to Predict Climate</a></b></font><br><font face="geneva, arial" size="2">BBC News</font><br><br><!-- SQL above -->
+
+
+
+<!-- - - - - - - - - - - - - -->
+   </td>
   </tr>
-<tr>
-<td valign="TOP" align="LEFT">
 
-    <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="280" alt=""><br><!-- FOOTER --><br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" border="0" usemap="#navstrip.map" alt=""><br><img src="http://static.wired.com/news/images/navstrip_off.gif" height="17" width="126" usemap="#navstrip.map" border="0" alt=""><br><br><p><font face="Verdana, Arial, Geneva, sans-serif" size="1">
+  <tr>
+   <td valign="TOP" align="LEFT">
+
+    <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="280" alt=""><br>
+       
+    <!-- FOOTER -->
+
+<br><img src="http://static.wired.com/news/images/pix155.gif" height="10" width="155" border="0" usemap="#navstrip.map" alt="">
+<br>
+
+<img src="http://static.wired.com/news/images/navstrip_off.gif" height="17" width="126" usemap="#navstrip.map" border="0" alt=""><br><br>
+
+<p><font face="Verdana, Arial, Geneva, sans-serif" size="1">
 <a href="http://www.wired.com/news/feedback.html">Send us feedback</a>
 &nbsp;|&nbsp;
 <a href="http://www.hotwired.com/jobs/">Work at Wired Digital</a>
 &nbsp;|&nbsp;
 <a href="http://home.wired.com/advertising/">Advertise with us</a>
-<br><a href="http://home.wired.com/">About Wired Digital</a>
+<br>
+<a href="http://home.wired.com/">About Wired Digital</a>
 &nbsp;|&nbsp;
 <a href="http://www.wired.com/home/digital/privacy/">Our Privacy Policy</a></font>
 
@@ -382,19 +549,28 @@ Contruction workers in Berlin opened an old wound in the German psyche this week
 </p>
 <p><font face="Verdana, Arial, Geneva" size="1"><a href="http://www.wired.com/home/copyright.html">Copyright</a> &copy; 1994-99 Wired Digital Inc. All rights reserved.</font>
 
-<br><!-- TRACKING --><img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt=""><map name="navstrip.map"><area shape="rect" coords="0,0,14,16" href="/news">
+<br>
+<!-- TRACKING -->
+<img src="http://www.wired.com/special/modx/news.gif" height="1" width="1" alt="">
+
+<map name="navstrip.map">
+<area shape="rect" coords="0,0,14,16" href="/news">
 <area shape="rect" coords="15,0 31,16" href="/news/business/">
 <area shape="rect" coords="32,0,48,16" href="/news/culture/">
 <area shape="rect" coords="49,0,65,16" href="/news/technology/">
-<area shape="rect" coords="66,0,83,16" href="/news/politics/"></map></p>
+<area shape="rect" coords="66,0,83,16" href="/news/politics/">
+</map>
+ </p>
 </td>
    <td valign="TOP" align="LEFT">
     <img src="http://static.wired.com/news/images/spacer.gif" height="1" width="5" alt="">
-</td>
+   </td>
    <td valign="TOP" align="LEFT">
    </td>
   </tr>
 </table>
+
+
 <br>
 </body>
 </html>
diff --git a/result/VC/AttributeDefaultLegal.rdr b/result/VC/AttributeDefaultLegal.rdr
new file mode 100644 (file)
index 0000000..6b61686
--- /dev/null
@@ -0,0 +1,12 @@
+./test/VC/AttributeDefaultLegal:4: validity error : Attribute doc of At: invalid default value
+<!ATTLIST doc At NMTOKEN "$$$">
+                              ^
+./test/VC/AttributeDefaultLegal:6: validity error : Attribute doc of bad: invalid default value
+<!ATTLIST doc bad IDREF "1abc_2">
+                                ^
+./test/VC/AttributeDefaultLegal:8: validity error : Attribute doc of bad2: invalid default value
+<!ATTLIST doc bad2 IDREFS "abc:1 1abc_2">
+                                        ^
+./test/VC/AttributeDefaultLegal:11: element doc: validity error : No declaration for attribute val of element doc
+<doc val="v1"/>
+             ^
diff --git a/result/VC/AttributeNmtokens.rdr b/result/VC/AttributeNmtokens.rdr
new file mode 100644 (file)
index 0000000..4c19285
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/AttributeNmtokens:6: element test: validity error : Syntax of value for attribute attr1 of test is not valid
+<test attr1=" a&#x9;b "/>
+                       ^
diff --git a/result/VC/DuplicateType.rdr b/result/VC/DuplicateType.rdr
new file mode 100644 (file)
index 0000000..34e2c20
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/DuplicateType:3: validity error : Definition of a has duplicate references of c
+<!ELEMENT a (#PCDATA | b | c | d | c)*>
+                                       ^
diff --git a/result/VC/ElementValid.rdr b/result/VC/ElementValid.rdr
new file mode 100644 (file)
index 0000000..d6b50a7
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/ElementValid:3: validity error : Validation failed: no DTD found !
+<doc/>
+    ^
diff --git a/result/VC/ElementValid2.rdr b/result/VC/ElementValid2.rdr
new file mode 100644 (file)
index 0000000..cae331b
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid2:4: element p: validity error : No declaration for element p
+<doc><p/></doc>
+         ^
+./test/VC/ElementValid2:5: element p: validity error : No declaration for element p
+
+^
diff --git a/result/VC/ElementValid3.rdr b/result/VC/ElementValid3.rdr
new file mode 100644 (file)
index 0000000..5f4e03e
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid3:4: element doc: validity error : Element doc was declared EMPTY this one has content
+<doc>Oops, this element was declared EMPTY</doc>
+                                                ^
+./test/VC/ElementValid3:5: element doc: validity error : Element doc was declared EMPTY this one has content
+
+^
diff --git a/result/VC/ElementValid4.rdr b/result/VC/ElementValid4.rdr
new file mode 100644 (file)
index 0000000..289a527
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid4:7: element doc: validity error : Element c is not declared in doc list of possible children
+<doc> This <b>seems</b> Ok <a/> but this <c>was not declared</c></doc>
+                                                                      ^
+./test/VC/ElementValid4:8: element doc: validity error : Element c is not declared in doc list of possible children
+
+^
diff --git a/result/VC/ElementValid5.rdr b/result/VC/ElementValid5.rdr
new file mode 100644 (file)
index 0000000..899d759
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid5:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b* , c+), got (a b c b)
+<doc><a/><b> but this</b><c>was not declared</c><b>seems</b></doc>
+                                                                  ^
+./test/VC/ElementValid5:8: element doc: validity error : Element doc content does not follow the DTD, Misplaced b
+
+^
diff --git a/result/VC/ElementValid6.rdr b/result/VC/ElementValid6.rdr
new file mode 100644 (file)
index 0000000..aeafd6b
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid6:7: element doc: validity error : Element doc content does not follow the DTD, expecting (a , b? , c+)?, got (a b)
+<doc><a/><b>lacks c</b></doc>
+                             ^
+./test/VC/ElementValid6:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child
+
+^
diff --git a/result/VC/ElementValid7.rdr b/result/VC/ElementValid7.rdr
new file mode 100644 (file)
index 0000000..f001fd2
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/ElementValid7:7: element doc: validity error : Element doc content does not follow the DTD, expecting ((a | b)* , c+ , a , b? , c , a?), got (a b a c c a)
+<doc><a/><b/><a/><c/><c/><a/></doc>
+                                   ^
+./test/VC/ElementValid7:8: element doc: validity error : Element doc content does not follow the DTD, Expecting more child
+
+^
diff --git a/result/VC/ElementValid8.rdr b/result/VC/ElementValid8.rdr
new file mode 100644 (file)
index 0000000..f1b0dad
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/ElementValid8:7: validity error : Content model of doc is not determinist: ((a , b) | (a , c))
+<doc><a/><c> doc is non-deterministic </c></doc>
+                                                ^
diff --git a/result/VC/Enumeration.rdr b/result/VC/Enumeration.rdr
new file mode 100644 (file)
index 0000000..30896fc
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/Enumeration:5: element doc: validity error : Value "v4" for attribute val of doc is not among the enumerated set
+<doc val="v4"></doc>
+             ^
diff --git a/result/VC/NS1.rdr b/result/VC/NS1.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/VC/NS2.rdr b/result/VC/NS2.rdr
new file mode 100644 (file)
index 0000000..abd1f88
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/NS2:9: element doc: validity error : No declaration for attribute attr of element doc
+<ns:doc ns:attr="val" xmlns:ns="http://www.example.org/test/">
+                                                             ^
diff --git a/result/VC/NS3.rdr b/result/VC/NS3.rdr
new file mode 100644 (file)
index 0000000..72c0117
--- /dev/null
@@ -0,0 +1,9 @@
+./test/VC/NS3:9: element foo: validity error : Value for attribute xmlns of foo is different from default "http://example.com/fooo"
+xmlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"
+                                                                               ^
+./test/VC/NS3:9: element foo: validity error : Value for attribute xmlns of foo must be "http://example.com/fooo"
+xmlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"
+                                                                               ^
+./test/VC/NS3:9: element foo: validity error : Element foo namespace name for default namespace does not match the DTD
+mlns="http://example.com/foo" xmlns:foo="http://example.com/fo" foo:info="toto"/
+                                                                               ^
diff --git a/result/VC/OneID.rdr b/result/VC/OneID.rdr
new file mode 100644 (file)
index 0000000..a2c894f
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/OneID:4: validity error : Element doc has too may ID attributes defined : id
+<!ATTLIST doc id ID #IMPLIED>
+                            ^
+./test/VC/OneID:4: validity error : Element doc has 2 ID attribute defined in the internal subset : id
+<!ATTLIST doc id ID #IMPLIED>
+                            ^
diff --git a/result/VC/OneID2.rdr b/result/VC/OneID2.rdr
new file mode 100644 (file)
index 0000000..2af04f1
--- /dev/null
@@ -0,0 +1,6 @@
+./test/VC/OneID2:3: validity error : Element doc has too may ID attributes defined : id
+<!ATTLIST doc id ID #IMPLIED>
+                            ^
+./test/VC/OneID2:3: validity error : Element doc has 2 ID attribute defined in the internal subset : id
+<!ATTLIST doc id ID #IMPLIED>
+                            ^
diff --git a/result/VC/OneID3.rdr b/result/VC/OneID3.rdr
new file mode 100644 (file)
index 0000000..9accece
--- /dev/null
@@ -0,0 +1,6 @@
+test/VC/dtds/doc.dtd:2: validity error : Element doc has too may ID attributes defined : val
+<!ATTLIST doc val ID #IMPLIED>
+                             ^
+test/VC/dtds/doc.dtd:2: validity error : Element doc has 2 ID attribute defined in the external subset : val
+<!ATTLIST doc val ID #IMPLIED>
+                             ^
diff --git a/result/VC/PENesting.rdr b/result/VC/PENesting.rdr
new file mode 100644 (file)
index 0000000..7f82e13
--- /dev/null
@@ -0,0 +1,4 @@
+./test/VC/PENesting:1: parser error : StartTag: invalid element name
+<!ENTITY % pe1 "EMPTY> <!ELEMENT e2 EMPTY>"> 
+ ^
+./test/VC/PENesting : failed to parse
diff --git a/result/VC/PENesting2.rdr b/result/VC/PENesting2.rdr
new file mode 100644 (file)
index 0000000..71cb053
--- /dev/null
@@ -0,0 +1,4 @@
+./test/VC/PENesting2:1: parser error : StartTag: invalid element name
+<!ENTITY % p1 "(A|B">
+ ^
+./test/VC/PENesting2 : failed to parse
diff --git a/result/VC/UniqueElementTypeDeclaration.rdr b/result/VC/UniqueElementTypeDeclaration.rdr
new file mode 100644 (file)
index 0000000..8537041
--- /dev/null
@@ -0,0 +1,3 @@
+test/VC/dtds/a.dtd:1: validity error : Redefinition of element a
+<!ELEMENT a (#PCDATA | b | c)*>
+                               ^
diff --git a/result/VC/UniqueElementTypeDeclaration2.rdr b/result/VC/UniqueElementTypeDeclaration2.rdr
new file mode 100644 (file)
index 0000000..c328d92
--- /dev/null
@@ -0,0 +1,3 @@
+./test/VC/UniqueElementTypeDeclaration2:6: validity error : Redefinition of element a
+<!ELEMENT a (#PCDATA | b | c)*>
+                               ^
index 67dcf22..52d2861 100644 (file)
@@ -12,9 +12,7 @@ SAX.externalSubset(attributes, , )
 SAX.getEntity(ent)
 SAX.getEntity(recursive)
 SAX.getEntity(ent)
-SAX.getEntity(recursive)
 SAX.getEntity(ent)
-SAX.getEntity(recursive)
 SAX.startElement(attributes, nmtoken=' &ent;   &ent; &ent; ', nmtokens=' Test\r
      this  normalization ')
 SAX.endElement(attributes)
index 859a970..3e8cfd9 100644 (file)
@@ -12,9 +12,7 @@ SAX.externalSubset(attributes, , )
 SAX.getEntity(ent)
 SAX.getEntity(recursive)
 SAX.getEntity(ent)
-SAX.getEntity(recursive)
 SAX.getEntity(ent)
-SAX.getEntity(recursive)
 SAX.startElementNs(attributes, NULL, NULL, 0, 2, 0, nmtoken='&ent...', 17, nmtokens='Test...', 25)
 SAX.endElementNs(attributes, NULL, NULL)
 SAX.endDocument()
index e86c7f9..425be39 100644 (file)
@@ -4,7 +4,8 @@
 ./test/errors/content1.xml:7: parser error : expected '>'
 <!ELEMENT aElement (a |b * >
                          ^
-./test/errors/content1.xml:7: parser error : internal error
+./test/errors/content1.xml:7: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
 <!ELEMENT aElement (a |b * >
                          ^
 ./test/errors/content1.xml:7: parser error : DOCTYPE improperly terminated
index da346f8..d806a63 100644 (file)
@@ -4,7 +4,8 @@
 ./test/errors/content1.xml:7: parser error : expected '>'
 <!ELEMENT aElement (a |b * >
                          ^
-./test/errors/content1.xml:7: parser error : internal error
+./test/errors/content1.xml:7: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
 <!ELEMENT aElement (a |b * >
                          ^
 ./test/errors/content1.xml:7: parser error : DOCTYPE improperly terminated
diff --git a/result/errors/extparsedent.xml b/result/errors/extparsedent.xml
new file mode 100644 (file)
index 0000000..07e4c54
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE foo [
+<!ENTITY c PUBLIC "bar" "/etc/doesnotexist">
+]>
+<root>&c;</root>
diff --git a/result/errors/extparsedent.xml.err b/result/errors/extparsedent.xml.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/errors/extparsedent.xml.str b/result/errors/extparsedent.xml.str
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/japancrlf.xml b/result/japancrlf.xml
new file mode 100644 (file)
index 0000000..60b307c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<入力メッセージ xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826">
+       <c8c:Ele xmlns:c8c="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"/>
+</入力メッセージ>
diff --git a/result/japancrlf.xml.rde b/result/japancrlf.xml.rde
new file mode 100644 (file)
index 0000000..0bc5af7
--- /dev/null
@@ -0,0 +1,7 @@
+0 1 入力メッセージ 0 0
+1 14 #text 0 1 
+       
+1 1 c8c:Ele 1 0
+1 14 #text 0 1 
+
+0 15 入力メッセージ 0 0
diff --git a/result/japancrlf.xml.rdr b/result/japancrlf.xml.rdr
new file mode 100644 (file)
index 0000000..0bc5af7
--- /dev/null
@@ -0,0 +1,7 @@
+0 1 入力メッセージ 0 0
+1 14 #text 0 1 
+       
+1 1 c8c:Ele 1 0
+1 14 #text 0 1 
+
+0 15 入力メッセージ 0 0
diff --git a/result/japancrlf.xml.sax b/result/japancrlf.xml.sax
new file mode 100644 (file)
index 0000000..c3bbdc6
--- /dev/null
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElement(入力メッセージ, xmlns='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826')
+SAX.characters(
+       , 2)
+SAX.startElement(c8c:Ele, xmlns:c8c='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826')
+SAX.endElement(c8c:Ele)
+SAX.characters(
+, 1)
+SAX.endElement(入力メッセージ)
+SAX.endDocument()
diff --git a/result/japancrlf.xml.sax2 b/result/japancrlf.xml.sax2
new file mode 100644 (file)
index 0000000..878eae4
--- /dev/null
@@ -0,0 +1,11 @@
+SAX.setDocumentLocator()
+SAX.startDocument()
+SAX.startElementNs(入力メッセージ, NULL, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 1, xmlns='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 0, 0)
+SAX.characters(
+       , 2)
+SAX.startElementNs(Ele, c8c, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 1, xmlns:c8c='http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826', 0, 0)
+SAX.endElementNs(Ele, c8c, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826')
+SAX.characters(
+, 1)
+SAX.endElementNs(入力メッセージ, NULL, 'http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826')
+SAX.endDocument()
diff --git a/result/noent/japancrlf.xml b/result/noent/japancrlf.xml
new file mode 100644 (file)
index 0000000..60b307c
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<入力メッセージ xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826">
+       <c8c:Ele xmlns:c8c="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"/>
+</入力メッセージ>
diff --git a/result/relaxng/710744_1 b/result/relaxng/710744_1
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/relaxng/710744_1.err b/result/relaxng/710744_1.err
new file mode 100644 (file)
index 0000000..77437eb
--- /dev/null
@@ -0,0 +1 @@
+./test/relaxng/710744_1.xml validates
diff --git a/result/relaxng/710744_2 b/result/relaxng/710744_2
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/relaxng/710744_2.err b/result/relaxng/710744_2.err
new file mode 100644 (file)
index 0000000..ee8d8ac
--- /dev/null
@@ -0,0 +1,2 @@
+./test/relaxng/710744_2.xml:3: element test: Relax-NG validity error : Invalid attribute foo for element test
+./test/relaxng/710744_2.xml fails to validate
diff --git a/result/valid/127772.xml.err.rdr b/result/valid/127772.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/694228.xml b/result/valid/694228.xml
new file mode 100644 (file)
index 0000000..057c926
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root SYSTEM "dtds/694228.dtd">
+<root>
+  &entity;
+</root>
diff --git a/result/valid/694228.xml.err b/result/valid/694228.xml.err
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/694228.xml.err.rdr b/result/valid/694228.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/REC-xml-19980210.xml.err.rdr b/result/valid/REC-xml-19980210.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/UTF16Entity.xml.err.rdr b/result/valid/UTF16Entity.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/dia.xml.err.rdr b/result/valid/dia.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/id1.xml.err.rdr b/result/valid/id1.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/id2.xml.err.rdr b/result/valid/id2.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/id3.xml.err.rdr b/result/valid/id3.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/index.xml.err.rdr b/result/valid/index.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/mixed_ns.xml.err.rdr b/result/valid/mixed_ns.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/notes.xml.err.rdr b/result/valid/notes.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/ns.xml.err.rdr b/result/valid/ns.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/ns2.xml.err.rdr b/result/valid/ns2.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/objednavka.xml.err.rdr b/result/valid/objednavka.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/rss.xml.err.rdr b/result/valid/rss.xml.err.rdr
new file mode 100644 (file)
index 0000000..2ec7c9e
--- /dev/null
@@ -0,0 +1,3 @@
+./test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version
+</rss>
+      ^
diff --git a/result/valid/t10.xml.err.rdr b/result/valid/t10.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/t11.xml.err.rdr b/result/valid/t11.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/t4.dtd.err.rdr b/result/valid/t4.dtd.err.rdr
new file mode 100644 (file)
index 0000000..23a3258
--- /dev/null
@@ -0,0 +1,6 @@
+./test/valid/t4.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+ ^
+./test/valid/t4.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+ ^
diff --git a/result/valid/t4.xml.err.rdr b/result/valid/t4.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/t4a.dtd.err.rdr b/result/valid/t4a.dtd.err.rdr
new file mode 100644 (file)
index 0000000..48cdd5f
--- /dev/null
@@ -0,0 +1,6 @@
+./test/valid/t4a.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % percent "&#x25;">
+ ^
+./test/valid/t4a.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % percent "&#x25;">
+ ^
diff --git a/result/valid/t4a.xml.err.rdr b/result/valid/t4a.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/t6.dtd.err.rdr b/result/valid/t6.dtd.err.rdr
new file mode 100644 (file)
index 0000000..6e84d68
--- /dev/null
@@ -0,0 +1,6 @@
+./test/valid/t6.dtd:1: parser error : StartTag: invalid element name
+<!ENTITY % xdef "def">
+ ^
+./test/valid/t6.dtd:1: parser error : Extra content at the end of the document
+<!ENTITY % xdef "def">
+ ^
diff --git a/result/valid/t6.xml.err.rdr b/result/valid/t6.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
index 7ae7bb4..d795788 100644 (file)
@@ -1,4 +1,5 @@
-Entity: line 1: parser error : internal error
+Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
  %defroot; 
           ^
 Entity: line 1: 
diff --git a/result/valid/t8.xml.err.rdr b/result/valid/t8.xml.err.rdr
new file mode 100644 (file)
index 0000000..c198a16
--- /dev/null
@@ -0,0 +1,14 @@
+Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
+ %defroot; 
+          ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : DOCTYPE improperly terminated
+ %defroot; 
+          ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+./test/valid/t8.xml : failed to parse
index 7ae7bb4..d795788 100644 (file)
@@ -1,4 +1,5 @@
-Entity: line 1: parser error : internal error
+Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
  %defroot; 
           ^
 Entity: line 1: 
diff --git a/result/valid/t8a.xml.err.rdr b/result/valid/t8a.xml.err.rdr
new file mode 100644 (file)
index 0000000..b6bdcbe
--- /dev/null
@@ -0,0 +1,14 @@
+Entity: line 1: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
+
+ %defroot; 
+          ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+Entity: line 1: parser error : DOCTYPE improperly terminated
+ %defroot; 
+          ^
+Entity: line 1: 
+&lt;!ELEMENT root (middle) >
+^
+./test/valid/t8a.xml : failed to parse
diff --git a/result/valid/t9.xml.err.rdr b/result/valid/t9.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/t9a.xml.err.rdr b/result/valid/t9a.xml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/xhtml1.xhtml.err.rdr b/result/valid/xhtml1.xhtml.err.rdr
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/result/valid/xlink.xml.err.rdr b/result/valid/xlink.xml.err.rdr
new file mode 100644 (file)
index 0000000..38594f4
--- /dev/null
@@ -0,0 +1,4 @@
+./test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
+       <p><termdef id="dt-arc" term="Arc">An <ter
+                                         ^
+validity error : attribute def line 199 references an unknown ID "dt-xlg"
index d1dc2ca..aaab13e 100644 (file)
@@ -1,16 +1,13 @@
 /*
- * runsuite.c: C program to run libxml2 againts published testsuites 
+ * runsuite.c: C program to run libxml2 againts published testsuites
  *
  * See Copyright for the status of this software.
  *
  * daniel@veillard.com
  */
 
-#ifdef HAVE_CONFIG_H
 #include "libxml.h"
-#else
 #include <stdio.h>
-#endif
 
 #if !defined(_WIN32) || defined(__CYGWIN__)
 #include <unistd.h>
 static FILE *logfile = NULL;
 static int verbose = 0;
 
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
-#define vsnprintf _vsnprintf
-#define snprintf _snprintf
-#endif
 
 /************************************************************************
  *                                                                     *
@@ -130,7 +123,7 @@ static int addEntity(char *name, char *content) {
  * which is shared to the current running test. We also don't want to have
  * network downloads modifying tests.
  */
-static xmlParserInputPtr 
+static xmlParserInputPtr
 testExternalEntityLoader(const char *URL, const char *ID,
                         xmlParserCtxtPtr ctxt) {
     xmlParserInputPtr ret;
@@ -159,7 +152,7 @@ testExternalEntityLoader(const char *URL, const char *ID,
         fprintf(stderr, "Failed to find resource %s\n", URL);
     }
 #endif
-      
+
     return(ret);
 }
 
@@ -422,7 +415,7 @@ installDirs(xmlNodePtr tst, const xmlChar *base) {
     xmlFree(res);
 }
 
-static int 
+static int
 xsdTestCase(xmlNodePtr tst) {
     xmlNodePtr test, tmp, cur;
     xmlBufferPtr buf;
@@ -449,7 +442,7 @@ xsdTestCase(xmlNodePtr tst) {
     if (cur == NULL) {
         return(xsdIncorectTestCase(tst));
     }
-    
+
     test = getNext(cur, "./*");
     if (test == NULL) {
         fprintf(stderr, "Failed to find test in correct line %ld\n",
@@ -495,7 +488,7 @@ xsdTestCase(xmlNodePtr tst) {
        if (test == NULL) {
            fprintf(stderr, "Failed to find test in <valid> line %ld\n",
                    xmlGetLineNo(tmp));
-           
+
        } else {
            xmlBufferEmpty(buf);
            if (dtd != NULL)
@@ -554,7 +547,7 @@ xsdTestCase(xmlNodePtr tst) {
        if (test == NULL) {
            fprintf(stderr, "Failed to find test in <invalid> line %ld\n",
                    xmlGetLineNo(tmp));
-           
+
        } else {
            xmlBufferEmpty(buf);
            xmlNodeDump(buf, test->doc, test, 0, 0);
@@ -615,7 +608,7 @@ done:
     return(ret);
 }
 
-static int 
+static int
 xsdTestSuite(xmlNodePtr cur) {
     if (verbose) {
        xmlChar *doc = getString(cur, "string(documentation)");
@@ -630,11 +623,11 @@ xsdTestSuite(xmlNodePtr cur) {
         xsdTestCase(cur);
        cur = getNext(cur, "following-sibling::testCase[1]");
     }
-        
+
     return(0);
 }
 
-static int 
+static int
 xsdTest(void) {
     xmlDocPtr doc;
     xmlNodePtr cur;
@@ -672,7 +665,7 @@ done:
     return(ret);
 }
 
-static int 
+static int
 rngTestSuite(xmlNodePtr cur) {
     if (verbose) {
        xmlChar *doc = getString(cur, "string(documentation)");
@@ -693,11 +686,11 @@ rngTestSuite(xmlNodePtr cur) {
         xsdTestSuite(cur);
        cur = getNext(cur, "following-sibling::testSuite[1]");
     }
-        
+
     return(0);
 }
 
-static int 
+static int
 rngTest1(void) {
     xmlDocPtr doc;
     xmlNodePtr cur;
@@ -735,7 +728,7 @@ done:
     return(ret);
 }
 
-static int 
+static int
 rngTest2(void) {
     xmlDocPtr doc;
     xmlNodePtr cur;
@@ -945,7 +938,7 @@ xstcTestGroup(xmlNodePtr cur, const char *base) {
        instance = getNext(cur, "./ts:instanceTest[1]");
        while (instance != NULL) {
            if (schemas != NULL) {
-               xstcTestInstance(instance, schemas, path, base);                
+               xstcTestInstance(instance, schemas, path, base);
            } else {
                /*
                * We'll automatically mark the instances as failed
index dd74c88..02fe09a 100644 (file)
--- a/runtest.c
+++ b/runtest.c
  * daniel@veillard.com
  */
 
-#ifdef HAVE_CONFIG_H
 #include "libxml.h"
-#else
 #include <stdio.h>
-#endif
 
 #if !defined(_WIN32) || defined(__CYGWIN__)
 #include <unistd.h>
@@ -195,10 +192,6 @@ static void globfree(glob_t *pglob) {
     }
 }
 
-#if !defined(__MINGW32__)
-#define vsnprintf _vsnprintf
-#define snprintf _snprintf
-#endif
 #else
 #include <glob.h>
 #endif
@@ -1686,7 +1679,8 @@ saxParseTest(const char *filename, const char *result,
     }
     if (ret != 0) {
         fprintf(stderr, "Failed to parse %s\n", filename);
-       return(1);
+       ret = 1;
+       goto done;
     }
 #ifdef LIBXML_HTML_ENABLED
     if (options & XML_PARSE_HTML) {
@@ -1708,6 +1702,8 @@ saxParseTest(const char *filename, const char *result,
         fprintf(stderr, "Got a difference for %s\n", filename);
         ret = 1;
     }
+
+done:
     if (temp != NULL) {
         unlink(temp);
         free(temp);
@@ -2100,7 +2096,7 @@ static void processNode(FILE *out, xmlTextReaderPtr reader) {
 }
 static int
 streamProcessTest(const char *filename, const char *result, const char *err,
-                  xmlTextReaderPtr reader, const char *rng) {
+                  xmlTextReaderPtr reader, const char *rng, int options) {
     int ret;
     char *temp = NULL;
     FILE *t = NULL;
@@ -2196,7 +2192,7 @@ streamParseTest(const char *filename, const char *result, const char *err,
     int ret;
 
     reader = xmlReaderForFile(filename, NULL, options);
-    ret = streamProcessTest(filename, result, err, reader, NULL);
+    ret = streamProcessTest(filename, result, err, reader, NULL, options);
     xmlFreeTextReader(reader);
     return(ret);
 }
@@ -2224,7 +2220,7 @@ walkerParseTest(const char *filename, const char *result, const char *err,
        return(-1);
     }
     reader = xmlReaderWalker(doc);
-    ret = streamProcessTest(filename, result, err, reader, NULL);
+    ret = streamProcessTest(filename, result, err, reader, NULL, options);
     xmlFreeTextReader(reader);
     xmlFreeDoc(doc);
     return(ret);
@@ -2256,7 +2252,7 @@ streamMemParseTest(const char *filename, const char *result, const char *err,
        return(-1);
     }
     reader = xmlReaderForMemory(base, size, filename, NULL, options);
-    ret = streamProcessTest(filename, result, err, reader, NULL);
+    ret = streamProcessTest(filename, result, err, reader, NULL, options);
     free((char *)base);
     xmlFreeTextReader(reader);
     return(ret);
@@ -2731,7 +2727,7 @@ static const char *urip_testURLs[] = {
     "file:///path/to/a%20b.html",
     "/path/to/a b.html",
     "/path/to/a%20b.html",
-    "urip://example.com/résumé.html",
+    "urip://example.com/r" "\xe9" "sum" "\xe9" ".html",
     "urip://example.com/test?a=1&b=2%263&c=4#foo",
     NULL
 };
@@ -3315,9 +3311,11 @@ rngStreamTest(const char *filename,
            fprintf(stderr, "Failed to build reder for %s\n", instance);
        }
        if (disable_err == 1)
-           ret = streamProcessTest(instance, result, NULL, reader, filename);
+           ret = streamProcessTest(instance, result, NULL, reader, filename,
+                                   options);
        else
-           ret = streamProcessTest(instance, result, err, reader, filename);
+           ret = streamProcessTest(instance, result, err, reader, filename,
+                                   options);
        xmlFreeTextReader(reader);
        if (ret != 0) {
            fprintf(stderr, "instance %s failed\n", instance);
@@ -3939,60 +3937,7 @@ thread_specific_data(void *private_data)
     return ((void *) Okay);
 }
 
-#if defined(linux) || defined(__sun) || defined(__APPLE_CC__)
-
-#include <pthread.h>
-
-static pthread_t tid[MAX_ARGC];
-
-static int
-testThread(void)
-{
-    unsigned int i, repeat;
-    unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
-    void *results[MAX_ARGC];
-    int ret;
-    int res = 0;
-
-    xmlInitParser();
-
-    for (repeat = 0; repeat < 500; repeat++) {
-        xmlLoadCatalog(catalog);
-        nb_tests++;
-
-        for (i = 0; i < num_threads; i++) {
-            results[i] = NULL;
-            tid[i] = (pthread_t) - 1;
-        }
-
-        for (i = 0; i < num_threads; i++) {
-            ret = pthread_create(&tid[i], 0, thread_specific_data,
-                                 (void *) testfiles[i]);
-            if (ret != 0) {
-                fprintf(stderr, "pthread_create failed\n");
-                return (1);
-            }
-        }
-        for (i = 0; i < num_threads; i++) {
-            ret = pthread_join(tid[i], &results[i]);
-            if (ret != 0) {
-                fprintf(stderr, "pthread_join failed\n");
-                return (1);
-            }
-        }
-
-        xmlCatalogCleanup();
-        for (i = 0; i < num_threads; i++)
-            if (results[i] != (void *) Okay) {
-                fprintf(stderr, "Thread %d handling %s failed\n",
-                        i, testfiles[i]);
-                res = 1;
-            }
-    }
-    return (res);
-}
-
-#elif defined WIN32
+#if defined WIN32
 #include <windows.h>
 #include <string.h>
 
@@ -4118,6 +4063,59 @@ testThread(void)
         return(1);
     return (0);
 }
+
+#elif defined HAVE_PTHREAD_H
+#include <pthread.h>
+
+static pthread_t tid[MAX_ARGC];
+
+static int
+testThread(void)
+{
+    unsigned int i, repeat;
+    unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
+    void *results[MAX_ARGC];
+    int ret;
+    int res = 0;
+
+    xmlInitParser();
+
+    for (repeat = 0; repeat < 500; repeat++) {
+        xmlLoadCatalog(catalog);
+        nb_tests++;
+
+        for (i = 0; i < num_threads; i++) {
+            results[i] = NULL;
+            tid[i] = (pthread_t) - 1;
+        }
+
+        for (i = 0; i < num_threads; i++) {
+            ret = pthread_create(&tid[i], 0, thread_specific_data,
+                                 (void *) testfiles[i]);
+            if (ret != 0) {
+                fprintf(stderr, "pthread_create failed\n");
+                return (1);
+            }
+        }
+        for (i = 0; i < num_threads; i++) {
+            ret = pthread_join(tid[i], &results[i]);
+            if (ret != 0) {
+                fprintf(stderr, "pthread_join failed\n");
+                return (1);
+            }
+        }
+
+        xmlCatalogCleanup();
+        for (i = 0; i < num_threads; i++)
+            if (results[i] != (void *) Okay) {
+                fprintf(stderr, "Thread %d handling %s failed\n",
+                        i, testfiles[i]);
+                res = 1;
+            }
+    }
+    return (res);
+}
+
 #else
 static int
 testThread(void)
@@ -4210,6 +4208,14 @@ testDesc testDescriptions[] = {
     { "Validity checking regression tests" ,
       errParseTest, "./test/VC/*", "result/VC/", NULL, "",
       XML_PARSE_DTDVALID },
+#ifdef LIBXML_READER_ENABLED
+    { "Streaming validity checking regression tests" ,
+      streamParseTest, "./test/valid/*.xml", "result/valid/", NULL, ".err.rdr",
+      XML_PARSE_DTDVALID },
+    { "Streaming validity error checking regression tests" ,
+      streamParseTest, "./test/VC/*", "result/VC/", NULL, ".rdr",
+      XML_PARSE_DTDVALID },
+#endif
     { "General documents valid regression tests" ,
       errParseTest, "./test/valid/*", "result/valid/", "", ".err",
       XML_PARSE_DTDVALID },
index 52d50d7..cef20f4 100644 (file)
@@ -6,11 +6,8 @@
  * daniel@veillard.com
  */
 
-#ifdef HAVE_CONFIG_H
 #include "libxml.h"
-#else
 #include <stdio.h>
-#endif
 
 #ifdef LIBXML_XPATH_ENABLED
 
@@ -37,10 +34,6 @@ static int verbose = 0;
 
 #define NB_EXPECTED_ERRORS 15
 
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
-#define vsnprintf _vsnprintf
-#define snprintf _snprintf
-#endif
 
 const char *skipped_tests[] = {
 /* http://lists.w3.org/Archives/Public/public-xml-testsuite/2008Jul/0000.html */
@@ -390,7 +383,7 @@ xmlconfTestItem(xmlDocPtr doc, xmlNodePtr cur) {
     if (xmlStrEqual(type, BAD_CAST "not-wf")) {
         if (nstest == 0)
            xmlconfTestNotWF((char *) id, (char *) filename, options);
-        else 
+        else
            xmlconfTestNotNSWF((char *) id, (char *) filename, options);
     } else if (xmlStrEqual(type, BAD_CAST "valid")) {
         options |= XML_PARSE_DTDVALID;
diff --git a/save.h b/save.h
new file mode 100644 (file)
index 0000000..2c32a10
--- /dev/null
+++ b/save.h
@@ -0,0 +1,35 @@
+/*
+ * Summary: Internal Interfaces for saving in libxml2
+ * Description: this module describes a few interfaces which were
+ *              addded along with the API changes in 2.9.0
+ *              those are private routines at this point
+ *
+ * Copy: See Copyright for the status of this software.
+ *
+ * Author: Daniel Veillard
+ */
+
+#ifndef __XML_SAVE_H__
+#define __XML_SAVE_H__
+
+#include <libxml/tree.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef LIBXML_OUTPUT_ENABLED
+void xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
+                                   xmlAttrPtr attr, const xmlChar * string);
+void xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table);
+void xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem);
+void xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr);
+void xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent);
+xmlChar *xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __XML_SAVE_H__ */
+
index 07709e2..eb4befe 100644 (file)
@@ -53,7 +53,7 @@ static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS;
 
 #define NEXT_SCHEMATRON(node)                                          \
    while (node != NULL) {                                              \
-       if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) &&  \
+       if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) &&  \
            ((xmlStrEqual(node->ns->href, xmlSchematronNs)) ||          \
            (xmlStrEqual(node->ns->href, xmlOldSchematronNs))))         \
           break;                                                       \
@@ -65,7 +65,7 @@ static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS;
  *
  * macro to flag unimplemented blocks
  */
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -165,8 +165,10 @@ struct _xmlSchematronValidCtxt {
 
     FILE *outputFile;          /* if using XML_SCHEMATRON_OUT_FILE */
     xmlBufferPtr outputBuffer; /* if using XML_SCHEMATRON_OUT_BUFFER */
+#ifdef LIBXML_OUTPUT_ENABLED
     xmlOutputWriteCallback iowrite; /* if using XML_SCHEMATRON_OUT_IO */
     xmlOutputCloseCallback  ioclose;
+#endif
     void *ioctx;
 
     /* error reporting data */
@@ -240,7 +242,7 @@ xmlSchematronPErrMemory(xmlSchematronParserCtxtPtr ctxt,
  * @msg: the error message
  * @str1: extra data
  * @str2: extra data
- * 
+ *
  * Handle a parser error
  */
 static void
@@ -568,7 +570,7 @@ xmlSchematronFree(xmlSchematronPtr schema)
 
     if (schema->namespaces != NULL)
         xmlFree((char **) schema->namespaces);
-    
+
     xmlSchematronFreeRules(schema->rules);
     xmlSchematronFreePatterns(schema->patterns);
     xmlDictFree(schema->dict);
@@ -826,9 +828,9 @@ xmlSchematronAddNamespace(xmlSchematronParserCtxtPtr ctxt,
         ctxt->namespaces = tmp;
        ctxt->maxNamespaces *= 2;
     }
-    ctxt->namespaces[2 * ctxt->nbNamespaces] = 
+    ctxt->namespaces[2 * ctxt->nbNamespaces] =
         xmlDictLookup(ctxt->dict, ns, -1);
-    ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = 
+    ctxt->namespaces[2 * ctxt->nbNamespaces + 1] =
         xmlDictLookup(ctxt->dict, prefix, -1);
     ctxt->nbNamespaces++;
     ctxt->namespaces[2 * ctxt->nbNamespaces] = NULL;
@@ -1288,7 +1290,7 @@ xmlSchematronReportOutput(xmlSchematronValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
  *         to be deallocated by teh caller
  */
 static xmlChar *
-xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt, 
+xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
                          xmlNodePtr test, xmlNodePtr cur) {
     xmlChar *ret = NULL;
     xmlNodePtr child, node;
@@ -1314,7 +1316,7 @@ xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
                xmlFree(path);
            }
 
-           if ((node->ns == NULL) || (node->ns->prefix == NULL)) 
+           if ((node->ns == NULL) || (node->ns->prefix == NULL))
                ret = xmlStrcat(ret, node->name);
            else {
                ret = xmlStrcat(ret, node->ns->prefix);
@@ -1365,7 +1367,7 @@ xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
  * been done.
  */
 static void
-xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt, 
+xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt,
                   xmlSchematronTestPtr test, xmlNodePtr cur, xmlSchematronPatternPtr pattern, int success) {
     if ((ctxt == NULL) || (cur == NULL) || (test == NULL))
         return;
@@ -1445,7 +1447,7 @@ xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt,
  * called from the validation engine when starting to check a pattern
  */
 static void
-xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt, 
+xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt,
                           xmlSchematronPatternPtr pattern) {
     if ((ctxt == NULL) || (pattern == NULL))
         return;
@@ -1572,7 +1574,7 @@ xmlSchematronNextNode(xmlNodePtr cur) {
            (cur->type != XML_DTD_NODE))
            return(cur);
     }
-    
+
     do {
        cur = cur->parent;
        if (cur == NULL) break;
@@ -1589,7 +1591,7 @@ xmlSchematronNextNode(xmlNodePtr cur) {
  * xmlSchematronRunTest:
  * @ctxt:  the schema validation context
  * @test:  the current test
- * @instance:  the document instace tree 
+ * @instance:  the document instace tree
  * @cur:  the current node in the instance
  *
  * Validate a rule against a tree instance at a given position
@@ -1653,7 +1655,7 @@ xmlSchematronRunTest(xmlSchematronValidCtxtPtr ctxt,
 /**
  * xmlSchematronValidateDoc:
  * @ctxt:  the schema validation context
- * @instance:  the document instace tree 
+ * @instance:  the document instace tree
  *
  * Validate a tree instance against the schematron
  *
@@ -1697,7 +1699,7 @@ xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
                }
                rule = rule->next;
            }
-           
+
            cur = xmlSchematronNextNode(cur);
        }
     } else {
@@ -1705,14 +1707,14 @@ xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
         * Process all contexts one at a time
         */
        pattern = ctxt->schema->patterns;
-       
+
        while (pattern != NULL) {
            xmlSchematronReportPattern(ctxt, pattern);
 
            /*
             * TODO convert the pattern rule to a direct XPath and
             * compute directly instead of using the pattern matching
-            * over the full document... 
+            * over the full document...
             * Check the exact semantic
             */
            cur = root;
@@ -1728,7 +1730,7 @@ xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
                    }
                    rule = rule->patnext;
                }
-               
+
                cur = xmlSchematronNextNode(cur);
            }
            pattern = pattern->next;
diff --git a/test/errors/extparsedent.xml b/test/errors/extparsedent.xml
new file mode 100644 (file)
index 0000000..07e4c54
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<!DOCTYPE foo [
+<!ENTITY c PUBLIC "bar" "/etc/doesnotexist">
+]>
+<root>&c;</root>
diff --git a/test/japancrlf.xml b/test/japancrlf.xml
new file mode 100644 (file)
index 0000000..480cb2d
--- /dev/null
@@ -0,0 +1,6 @@
+<入力メッセージ\r
+       xmlns="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826">\r
+       <c8c:Ele\r
+               xmlns:c8c="http://schemas.cordys.com/webapps/1.0/bpm/c8c8b82a-0ac0-3d19-01e2-bda74af9b826"\r
+       />\r
+</入力メッセージ>
\ No newline at end of file
diff --git a/test/relaxng/710744.rng b/test/relaxng/710744.rng
new file mode 100644 (file)
index 0000000..aeea0b8
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0">
+  <start>
+    <element name="test" ns="http://example.com/1/">
+      <zeroOrMore>
+        <attribute>
+          <choice>
+            <nsName ns="http://example.com/1/"/>
+            <nsName ns="http://example.com/2/"/>
+          </choice>
+          <text/>
+        </attribute>
+      </zeroOrMore>
+    </element>
+  </start>
+</grammar>
diff --git a/test/relaxng/710744_1.xml b/test/relaxng/710744_1.xml
new file mode 100644 (file)
index 0000000..f17c808
--- /dev/null
@@ -0,0 +1,2 @@
+<ex1:test xmlns:ex1="http://example.com/1/"
+          ex1:foo="bar"/>
diff --git a/test/relaxng/710744_2.xml b/test/relaxng/710744_2.xml
new file mode 100644 (file)
index 0000000..1aef3a9
--- /dev/null
@@ -0,0 +1,3 @@
+<ex1:test xmlns:ex1="http://example.com/1/"
+          xmlns:ex3="http://example.com/3/"
+          ex3:foo="bar"/>
diff --git a/test/valid/694228.xml b/test/valid/694228.xml
new file mode 100644 (file)
index 0000000..057c926
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root SYSTEM "dtds/694228.dtd">
+<root>
+  &entity;
+</root>
diff --git a/test/valid/dtds/694228.dtd b/test/valid/dtds/694228.dtd
new file mode 100644 (file)
index 0000000..7abc19f
--- /dev/null
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!ENTITY entity "This is an external entity that uses non-ASCII characters… 日本">
+<!ELEMENT root (#PCDATA)>
index 2f575ce..6c4de90 100644 (file)
@@ -70,10 +70,10 @@ testRegexpFile(const char *filename) {
            continue;
        len = strlen(expr);
        len--;
-       while ((len >= 0) && 
+       while ((len >= 0) &&
               ((expr[len] == '\n') || (expr[len] == '\t') ||
                (expr[len] == '\r') || (expr[len] == ' '))) len--;
-       expr[len + 1] = 0;      
+       expr[len + 1] = 0;
        if (len >= 0) {
            if ((am != NULL) && (expr[0] == 't') && (expr[1] == ' ')) {
                char *ptr = &expr[2];
index f735a29..86e58f2 100644 (file)
@@ -3,7 +3,7 @@
  * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315)
  *
  * See Copyright for the status of this software.
- * 
+ *
  * Author: Aleksey Sanin <aleksey@aleksey.com>
  */
 #include "libxml.h"
 
 #include <stdio.h>
 #include <string.h>
+#ifndef STDOUT_FILENO
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #else
 #define STDOUT_FILENO fileno(stdout)
 #endif /* HAVE_UNISTD_H */
+#endif
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
@@ -54,11 +56,11 @@ static xmlChar **parse_list(xmlChar *str);
 
 /* static void print_xpath_nodes(xmlNodeSetPtr nodes); */
 
-static int 
+static int
 test_c14n(const char* xml_filename, int with_comments, int mode,
        const char* xpath_filename, xmlChar **inclusive_namespaces) {
     xmlDocPtr doc;
-    xmlXPathObjectPtr xpath = NULL; 
+    xmlXPathObjectPtr xpath = NULL;
     xmlChar *result = NULL;
     int ret;
 
@@ -74,34 +76,34 @@ test_c14n(const char* xml_filename, int with_comments, int mode,
        fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
        return(-1);
     }
-    
+
     /*
      * Check the document is of the right kind
-     */    
+     */
     if(xmlDocGetRootElement(doc) == NULL) {
         fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename);
        xmlFreeDoc(doc);
        return(-1);
     }
 
-    /* 
-     * load xpath file if specified 
+    /*
+     * load xpath file if specified
      */
     if(xpath_filename) {
        xpath = load_xpath_expr(doc, xpath_filename);
        if(xpath == NULL) {
            fprintf(stderr,"Error: unable to evaluate xpath expression\n");
-           xmlFreeDoc(doc); 
+           xmlFreeDoc(doc);
            return(-1);
        }
     }
 
     /*
      * Canonical form
-     */      
+     */
     /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */
-    ret = xmlC14NDocDumpMemory(doc, 
-           (xpath) ? xpath->nodesetval : NULL, 
+    ret = xmlC14NDocDumpMemory(doc,
+           (xpath) ? xpath->nodesetval : NULL,
            mode, inclusive_namespaces,
            with_comments, &result);
     if(ret >= 0) {
@@ -114,25 +116,25 @@ test_c14n(const char* xml_filename, int with_comments, int mode,
     } else {
        fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret);
        if(result != NULL) xmlFree(result);
-       xmlFreeDoc(doc); 
+       xmlFreeDoc(doc);
        return(-1);
     }
-        
+
     /*
      * Cleanup
-     */ 
+     */
     if(xpath != NULL) xmlXPathFreeObject(xpath);
-    xmlFreeDoc(doc);    
+    xmlFreeDoc(doc);
 
     return(ret);
 }
 
 int main(int argc, char **argv) {
     int ret = -1;
-    
+
     /*
      * Init libxml
-     */     
+     */
     xmlInitParser();
     LIBXML_TEST_VERSION
 
@@ -152,14 +154,14 @@ int main(int argc, char **argv) {
        ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL);
     } else if(strcmp(argv[1], "--exc-with-comments") == 0) {
        xmlChar **list;
-       
+
        /* load exclusive namespace from command line */
        list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
        ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
        if(list != NULL) xmlFree(list);
     } else if(strcmp(argv[1], "--exc-without-comments") == 0) {
        xmlChar **list;
-       
+
        /* load exclusive namespace from command line */
        list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
        ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
@@ -169,7 +171,7 @@ int main(int argc, char **argv) {
        usage(argv[0]);
     }
 
-    /* 
+    /*
      * Shutdown libxml
      */
     xmlCleanupParser();
@@ -235,13 +237,13 @@ parse_list(xmlChar *str) {
 
 static xmlXPathObjectPtr
 load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
-    xmlXPathObjectPtr xpath; 
+    xmlXPathObjectPtr xpath;
     xmlDocPtr doc;
     xmlChar *expr;
-    xmlXPathContextPtr ctx; 
+    xmlXPathContextPtr ctx;
     xmlNodePtr node;
     xmlNsPtr ns;
-    
+
     /*
      * load XPath expr as a file
      */
@@ -253,10 +255,10 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
        fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
        return(NULL);
     }
-    
+
     /*
      * Check the document is of the right kind
-     */    
+     */
     if(xmlDocGetRootElement(doc) == NULL) {
         fprintf(stderr,"Error: empty document for file \"%s\"\n", filename);
        xmlFreeDoc(doc);
@@ -267,8 +269,8 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
     while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) {
        node = node->next;
     }
-    
-    if(node == NULL) {   
+
+    if(node == NULL) {
         fprintf(stderr,"Error: XPath element expected in the file  \"%s\"\n", filename);
        xmlFreeDoc(doc);
        return(NULL);
@@ -284,8 +286,8 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
     ctx = xmlXPathNewContext(parent_doc);
     if(ctx == NULL) {
         fprintf(stderr,"Error: unable to create new context\n");
-        xmlFree(expr); 
-        xmlFreeDoc(doc); 
+        xmlFree(expr);
+        xmlFreeDoc(doc);
         return(NULL);
     }
 
@@ -296,31 +298,31 @@ load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
     while(ns != NULL) {
        if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) {
            fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href);
-           xmlFree(expr); 
-           xmlXPathFreeContext(ctx); 
-           xmlFreeDoc(doc); 
+           xmlFree(expr);
+           xmlXPathFreeContext(ctx);
+           xmlFreeDoc(doc);
            return(NULL);
        }
        ns = ns->next;
     }
 
-    /*  
+    /*
      * Evaluate xpath
      */
     xpath = xmlXPathEvalExpression(expr, ctx);
     if(xpath == NULL) {
         fprintf(stderr,"Error: unable to evaluate xpath expression\n");
-       xmlFree(expr); 
-        xmlXPathFreeContext(ctx); 
-        xmlFreeDoc(doc); 
+       xmlFree(expr);
+        xmlXPathFreeContext(ctx);
+        xmlFreeDoc(doc);
         return(NULL);
     }
 
     /* print_xpath_nodes(xpath->nodesetval); */
 
-    xmlFree(expr); 
-    xmlXPathFreeContext(ctx); 
-    xmlFreeDoc(doc); 
+    xmlFree(expr);
+    xmlXPathFreeContext(ctx);
+    xmlFreeDoc(doc);
     return(xpath);
 }
 
@@ -329,28 +331,28 @@ static void
 print_xpath_nodes(xmlNodeSetPtr nodes) {
     xmlNodePtr cur;
     int i;
-    
-    if(nodes == NULL ){ 
+
+    if(nodes == NULL ){
        fprintf(stderr, "Error: no nodes set defined\n");
        return;
     }
-    
+
     fprintf(stderr, "Nodes Set:\n-----\n");
     for(i = 0; i < nodes->nodeNr; ++i) {
        if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
            xmlNsPtr ns;
-           
+
            ns = (xmlNsPtr)nodes->nodeTab[i];
            cur = (xmlNodePtr)ns->next;
-           fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n", 
+           fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n",
                    ns->prefix, ns->href,
                    (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
        } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
-           cur = nodes->nodeTab[i];    
-           fprintf(stderr, "element node \"%s:%s\"\n", 
+           cur = nodes->nodeTab[i];
+           fprintf(stderr, "element node \"%s:%s\"\n",
                    (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
        } else {
-           cur = nodes->nodeTab[i];    
+           cur = nodes->nodeTab[i];
            fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type);
        }
     }
index f350342..9b42778 100644 (file)
@@ -179,7 +179,7 @@ resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xm
 {
     /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
 
-    
+
     fprintf(stdout, "SAX.resolveEntity(");
     if (publicId != NULL)
        fprintf(stdout, "%s", (char *)publicId);
@@ -233,8 +233,8 @@ getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
 /**
  * entityDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the entity name 
- * @type:  the entity type 
+ * @name:  the entity name
+ * @type:  the entity type
  * @publicId: The public ID of the entity
  * @systemId: The system ID of the entity
  * @content: the entity value (without processing).
@@ -252,8 +252,8 @@ entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
 /**
  * attributeDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the attribute name 
- * @type:  the attribute type 
+ * @name:  the attribute name
+ * @type:  the attribute type
  *
  * An attribute definition has been parsed
  */
@@ -269,8 +269,8 @@ attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *elem, const xmlCha
 /**
  * elementDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the element name 
- * @type:  the element type 
+ * @name:  the element name
+ * @type:  the element type
  * @content: the element value (without processing).
  *
  * An element definition has been parsed
@@ -453,7 +453,7 @@ cdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
  * @ctxt:  An XML parser context
  * @name:  The entity name
  *
- * called when an entity reference is detected. 
+ * called when an entity reference is detected.
  */
 static void
 referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
@@ -687,7 +687,7 @@ parseSAXFile(char *filename) {
                fclose(f);
            }
        }
-    } else {   
+    } else {
 #endif /* LIBXML_PUSH_ENABLED */
        doc = htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL);
        if (doc != NULL) {
@@ -746,7 +746,7 @@ parseAndPrintFile(char *filename) {
            }
            fclose(f);
        }
-    } else {   
+    } else {
        doc = htmlReadFile(filename, NULL, options);
     }
 #else
@@ -774,7 +774,7 @@ parseAndPrintFile(char *filename) {
     /*
      * print it.
      */
-    if (!noout) { 
+    if (!noout) {
 #ifdef LIBXML_DEBUG_ENABLED
        if (!debug) {
            if (encoding)
@@ -789,7 +789,7 @@ parseAndPrintFile(char *filename) {
        else
            htmlDocDump(stdout, doc);
 #endif
-    }  
+    }
 #endif /* LIBXML_OUTPUT_ENABLED */
 
     /*
@@ -838,13 +838,13 @@ int main(int argc, char **argv) {
                for (count = 0;count < 100 * repeat;count++) {
                    if (sax)
                        parseSAXFile(argv[i]);
-                   else   
+                   else
                        parseAndPrintFile(argv[i]);
-               }    
+               }
            } else {
                if (sax)
                    parseSAXFile(argv[i]);
-               else   
+               else
                    parseAndPrintFile(argv[i]);
            }
            files ++;
index 8293c45..e399f5c 100644 (file)
@@ -39,7 +39,7 @@
 #endif
 
 typedef int (*hello_world_t)(void);
+
 int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
     xmlChar filename[PATH_MAX];
     xmlModulePtr module = NULL;
@@ -62,7 +62,7 @@ int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
            fprintf(stderr, "Lookup returned NULL\n");
            return(1);
        }
-       
+
         (*hello_world)();
 
         xmlModuleClose(module);
index 626536e..21dac94 100644 (file)
@@ -49,10 +49,10 @@ testRegexpFile(const char *filename) {
     while (fgets(expression, 4500, input) != NULL) {
        len = strlen(expression);
        len--;
-       while ((len >= 0) && 
+       while ((len >= 0) &&
               ((expression[len] == '\n') || (expression[len] == '\t') ||
                (expression[len] == '\r') || (expression[len] == ' '))) len--;
-       expression[len + 1] = 0;      
+       expression[len + 1] = 0;
        if (len >= 0) {
            if (expression[0] == '#')
                continue;
@@ -103,10 +103,10 @@ runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
     while (fgets(expression, 4500, input) != NULL) {
        len = strlen(expression);
        len--;
-       while ((len >= 0) && 
+       while ((len >= 0) &&
               ((expression[len] == '\n') || (expression[len] == '\t') ||
                (expression[len] == '\r') || (expression[len] == ' '))) len--;
-       expression[len + 1] = 0;      
+       expression[len + 1] = 0;
        if (len >= 0) {
            if (expression[0] == '#')
                continue;
@@ -115,7 +115,7 @@ runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
 
                if (expr != NULL) {
                    xmlExpFree(ctxt, expr);
-                   if (xmlExpCtxtNbNodes(ctxt) != 0) 
+                   if (xmlExpCtxtNbNodes(ctxt) != 0)
                        printf(" Parse/free of Expression leaked %d\n",
                               xmlExpCtxtNbNodes(ctxt));
                    expr = NULL;
@@ -142,7 +142,7 @@ runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
                    break;
                } else {
                    int ret;
-                   
+
                    nodes2 = xmlExpCtxtNbNodes(ctxt);
                    ret = xmlExpSubsume(ctxt, expr, sub);
 
@@ -174,14 +174,14 @@ runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
     }
     if (expr != NULL) {
        xmlExpFree(ctxt, expr);
-       if (xmlExpCtxtNbNodes(ctxt) != 0) 
+       if (xmlExpCtxtNbNodes(ctxt) != 0)
            printf(" Parse/free of Expression leaked %d\n",
                   xmlExpCtxtNbNodes(ctxt));
     }
     fclose(input);
 }
 
-static void 
+static void
 testReduce(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr, const char *tst) {
     xmlBufferPtr xmlExpBuf;
     xmlExpNodePtr sub, deriv;
@@ -213,7 +213,7 @@ testReduce(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr, const char *tst) {
     xmlExpFree(ctxt, sub);
 }
 
-static void 
+static void
 exprDebug(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr) {
     xmlBufferPtr xmlExpBuf;
     xmlExpNodePtr deriv;
index e18b3c2..8e94a7a 100644 (file)
@@ -49,7 +49,7 @@ static int debug = 0;
 #endif
 static int noout = 0;
 static int tree = 0;
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
 static int memory = 0;
 #endif
 
@@ -65,7 +65,7 @@ int main(int argc, char **argv) {
            debug++;
        else
 #endif
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
            memory++;
         } else
@@ -84,12 +84,12 @@ int main(int argc, char **argv) {
            if (schema == NULL) {
                xmlRelaxNGParserCtxtPtr ctxt;
 
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
                if (memory) {
                    int fd;
                    struct stat info;
                    const char *base;
-                   if (stat(argv[i], &info) < 0) 
+                   if (stat(argv[i], &info) < 0)
                        break;
                    if ((fd = open(argv[i], O_RDONLY)) < 0)
                        break;
@@ -174,7 +174,7 @@ int main(int argc, char **argv) {
 #endif
        printf("\t--noout : do not print the result\n");
        printf("\t--tree : print the intermediate Relax-NG document tree\n");
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        printf("\t--memory : test the schemas in memory parsing\n");
 #endif
     }
index cd16268..81c4b93 100644 (file)
--- a/testSAX.c
+++ b/testSAX.c
@@ -71,7 +71,7 @@ static int timing = 0;
  * function calls
  */
 
-#ifndef HAVE_GETTIMEOFDAY 
+#ifndef HAVE_GETTIMEOFDAY
 #ifdef HAVE_SYS_TIMEB_H
 #ifdef HAVE_SYS_TIME_H
 #ifdef HAVE_FTIME
@@ -368,7 +368,7 @@ resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xm
        return(NULL);
     /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
 
-    
+
     fprintf(stdout, "SAX.resolveEntity(");
     if (publicId != NULL)
        fprintf(stdout, "%s", (char *)publicId);
@@ -428,8 +428,8 @@ getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
 /**
  * entityDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the entity name 
- * @type:  the entity type 
+ * @name:  the entity name
+ * @type:  the entity type
  * @publicId: The public ID of the entity
  * @systemId: The system ID of the entity
  * @content: the entity value (without processing).
@@ -458,8 +458,8 @@ const xmlChar *nullstr = BAD_CAST "(null)";
 /**
  * attributeDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the attribute name 
- * @type:  the attribute type 
+ * @name:  the attribute name
+ * @type:  the attribute type
  *
  * An attribute definition has been parsed
  */
@@ -483,8 +483,8 @@ attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
 /**
  * elementDeclDebug:
  * @ctxt:  An XML parser context
- * @name:  the element name 
- * @type:  the element type 
+ * @name:  the element name
+ * @type:  the element type
  * @content: the element value (without processing).
  *
  * An element definition has been parsed
@@ -670,7 +670,7 @@ charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
  * @ctxt:  An XML parser context
  * @name:  The entity name
  *
- * called when an entity reference is detected. 
+ * called when an entity reference is detected.
  */
 static void
 referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
@@ -906,7 +906,7 @@ startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
     else
        fprintf(stdout, ", '%s'", (char *) URI);
     fprintf(stdout, ", %d", nb_namespaces);
-    
+
     if (namespaces != NULL) {
         for (i = 0;i < nb_namespaces * 2;i++) {
            fprintf(stdout, ", xmlns");
@@ -1131,7 +1131,7 @@ int main(int argc, char **argv) {
     int files = 0;
 
     LIBXML_TEST_VERSION        /* be safe, plus calls xmlInitParser */
-    
+
     for (i = 1; i < argc ; i++) {
        if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
            debug++;
index 47f8b39..b98e631 100644 (file)
@@ -49,7 +49,7 @@
 static int debug = 0;
 #endif
 static int noout = 0;
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
 static int memory = 0;
 #endif
 
@@ -65,7 +65,7 @@ int main(int argc, char **argv) {
            debug++;
        else
 #endif
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
            memory++;
         } else
@@ -80,12 +80,12 @@ int main(int argc, char **argv) {
            if (schema == NULL) {
                xmlSchemaParserCtxtPtr ctxt;
 
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
                if (memory) {
                    int fd;
                    struct stat info;
                    const char *base;
-                   if (stat(argv[i], &info) < 0) 
+                   if (stat(argv[i], &info) < 0)
                        break;
                    if ((fd = open(argv[i], O_RDONLY)) < 0)
                        break;
@@ -164,7 +164,7 @@ int main(int argc, char **argv) {
        printf("\t--debug : dump a debug tree of the in-memory document\n");
 #endif
        printf("\t--noout : do not print the result\n");
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        printf("\t--memory : test the schemas in memory parsing\n");
 #endif
     }
index 6ed702e..3d1a5ba 100644 (file)
@@ -104,7 +104,7 @@ main()
                for (i = 0; i < num_threads; i++)
                {
                        DWORD useless;
-                       tid[i] = CreateThread(NULL, 0, 
+                       tid[i] = CreateThread(NULL, 0,
                                thread_specific_data, testfiles[i], 0, &useless);
                        if (tid[i] == NULL)
                        {
@@ -113,7 +113,7 @@ main()
                        }
                }
 
-               if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED) 
+               if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED)
                        perror ("WaitForMultipleObjects failed");
 
                for (i = 0; i < num_threads; i++)
@@ -129,7 +129,7 @@ main()
 
                xmlCatalogCleanup();
                for (i = 0; i < num_threads; i++) {
-                   if (results[i] != (DWORD) Okay) 
+                   if (results[i] != (DWORD) Okay)
                        printf("Thread %d handling %s failed\n", i, testfiles[i]);
                }
        }
index 677419a..ebb9ff7 100644 (file)
@@ -51,7 +51,7 @@ static xmlDocPtr document = NULL;
 /*
  * Default document
  */
-static xmlChar buffer[] = 
+static xmlChar buffer[] =
 "<?xml version=\"1.0\"?>\n\
 <EXAMPLE prop1=\"gnome is great\" prop2=\"&amp; linux too\">\n\
   <head>\n\
@@ -79,7 +79,7 @@ static void
 testXPath(const char *str) {
     xmlXPathObjectPtr res;
     xmlXPathContextPtr ctxt;
-    
+
 #if defined(LIBXML_XPTR_ENABLED)
     if (xptr) {
        ctxt = xmlXPtrNewContext(document, NULL, NULL);
@@ -96,7 +96,7 @@ testXPath(const char *str) {
 
            comp = xmlXPathCompile(BAD_CAST str);
            if (comp != NULL) {
-               if (tree) 
+               if (tree)
                    xmlXPathDebugDumpCompExpr(stdout, comp, 0);
 
                res = xmlXPathCompiledEval(comp, ctxt);
@@ -127,10 +127,10 @@ testXPathFile(const char *filename) {
     while (fgets(expression, 4500, input) != NULL) {
        len = strlen(expression);
        len--;
-       while ((len >= 0) && 
+       while ((len >= 0) &&
               ((expression[len] == '\n') || (expression[len] == '\t') ||
                (expression[len] == '\r') || (expression[len] == ' '))) len--;
-       expression[len + 1] = 0;      
+       expression[len + 1] = 0;
        if (len >= 0) {
            printf("\n========================\nExpression: %s\n", expression) ;
            testXPath(expression);
@@ -150,7 +150,7 @@ int main(int argc, char **argv) {
 #if defined(LIBXML_XPTR_ENABLED)
        if ((!strcmp(argv[i], "-xptr")) || (!strcmp(argv[i], "--xptr")))
            xptr++;
-       else 
+       else
 #endif
        if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
            debug++;
@@ -172,10 +172,12 @@ int main(int argc, char **argv) {
     xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
     xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
     xmlSubstituteEntitiesDefaultValue = 1;
+#ifdef LIBXML_SAX1_ENABLED
     if (nocdata != 0) {
        xmlDefaultSAXHandlerInit();
        xmlDefaultSAXHandler.cdataBlock = NULL;
     }
+#endif
     if (document == NULL) {
         if (filename == NULL)
            document = xmlReadDoc(buffer,NULL,NULL,XML_PARSE_COMPACT);
@@ -211,7 +213,7 @@ int main(int argc, char **argv) {
        printf("\t--file : or\n");
        printf("\t-f     : read queries from files, args\n");
     }
-    if (document != NULL) 
+    if (document != NULL)
        xmlFreeDoc(document);
     xmlCleanupParser();
     xmlMemoryDump();
index 4f4b39b..0367ffd 100644 (file)
--- a/testapi.c
+++ b/testapi.c
@@ -8,20 +8,14 @@
  * daniel@veillard.com
  */
 
-#ifdef HAVE_CONFIG_H
 #include "libxml.h"
-#else
 #include <stdio.h>
-#endif
 
 #include <stdlib.h> /* for putenv() */
 #include <string.h>
 #include <libxml/xmlerror.h>
 #include <libxml/relaxng.h>
 
-#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
-#define snprintf _snprintf
-#endif
 
 static int testlibxml2(void);
 static int test_module(const char *module);
@@ -107,7 +101,7 @@ get_api_attr(void) {
     if ((api_root == NULL) || (api_root->type != XML_ELEMENT_NODE)) {
         get_api_root();
     }
-    if (api_root == NULL) 
+    if (api_root == NULL)
         return(NULL);
     if (api_root->properties != NULL) {
         api_attr = api_root->properties;
@@ -127,8 +121,10 @@ int main(int argc, char **argv) {
     int ret;
     int blocks, mem;
 
+#ifdef HAVE_PUTENV
     /* access to the proxy can slow up regression tests a lot */
     putenv((char *) "http_proxy=");
+#endif
 
     memset(chartab, 0, sizeof(chartab));
     strncpy((char *) chartab, "  chartab\n", 20);
@@ -201,7 +197,7 @@ int main(int argc, char **argv) {
 #include <libxml/xpointer.h>
 #include <libxml/debugXML.h>
 
-/* 
+/*
   We manually define xmlErrMemory because it's normal declaration
   is "hidden" by #ifdef IN_LIBXML
 */
@@ -291,7 +287,7 @@ static void des_long(int no ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED, int nr
 static xmlChar gen_xmlChar(int no, int nr ATTRIBUTE_UNUSED) {
     if (no == 0) return('a');
     if (no == 1) return(' ');
-    if (no == 2) return((xmlChar) 'ø');
+    if (no == 2) return((xmlChar) '\xf8');
     return(0);
 }
 
@@ -399,7 +395,7 @@ static void des_debug_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIB
 static xmlChar *gen_const_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) {
     if (no == 0) return((xmlChar *) "foo");
     if (no == 1) return((xmlChar *) "<foo/>");
-    if (no == 2) return((xmlChar *) "nøne");
+    if (no == 2) return((xmlChar *) "n" "\xf8" "ne");
     if (no == 3) return((xmlChar *) " 2ab ");
     return(NULL);
 }
@@ -543,7 +539,7 @@ static void des_xmlNodePtr(int no, xmlNodePtr val, int nr ATTRIBUTE_UNUSED) {
 
 #define gen_nb_xmlDtdPtr 3
 static xmlDtdPtr gen_xmlDtdPtr(int no, int nr ATTRIBUTE_UNUSED) {
-    if (no == 0) 
+    if (no == 0)
         return(xmlNewDtd(NULL, BAD_CAST "dtd", BAD_CAST"foo", BAD_CAST"bar"));
     if (no == 1) return(get_api_dtd());
     return(NULL);
@@ -740,7 +736,7 @@ static void des_xmlSchemaValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchemaValidCtx
 #endif /* LIBXML_SCHEMAS_ENABLED */
 
 #define gen_nb_xmlHashDeallocator 2
-static void 
+static void
 test_xmlHashDeallocator(void *payload ATTRIBUTE_UNUSED, xmlChar *name ATTRIBUTE_UNUSED) {
 }
 
@@ -4065,7 +4061,7 @@ static int
 test_xmlSAX2EndElement(void) {
     int test_ret = 0;
 
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef LIBXML_SAX1_ENABLED
     int mem_base;
     void * ctx; /* the user data (XML parser context) */
@@ -5030,7 +5026,7 @@ static int
 test_xmlSAX2StartElement(void) {
     int test_ret = 0;
 
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef LIBXML_SAX1_ENABLED
     int mem_base;
     void * ctx; /* the user data (XML parser context) */
@@ -8252,6 +8248,16 @@ test_xmlDictExists(void) {
 
 
 static int
+test_xmlDictGetUsage(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlDictLookup(void) {
     int test_ret = 0;
 
@@ -8416,6 +8422,16 @@ test_xmlDictReference(void) {
 
 
 static int
+test_xmlDictSetLimit(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlDictSize(void) {
     int test_ret = 0;
 
@@ -8475,15 +8491,17 @@ static int
 test_dict(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing dict : 10 of 11 functions ...\n");
+    if (quiet == 0) printf("Testing dict : 10 of 13 functions ...\n");
     test_ret += test_xmlDictCleanup();
     test_ret += test_xmlDictCreate();
     test_ret += test_xmlDictCreateSub();
     test_ret += test_xmlDictExists();
+    test_ret += test_xmlDictGetUsage();
     test_ret += test_xmlDictLookup();
     test_ret += test_xmlDictOwns();
     test_ret += test_xmlDictQLookup();
     test_ret += test_xmlDictReference();
+    test_ret += test_xmlDictSetLimit();
     test_ret += test_xmlDictSize();
     test_ret += test_xmlInitializeDict();
 
@@ -9436,27 +9454,34 @@ test_xmlEncodeEntitiesReentrant(void) {
 }
 
 
+#define gen_nb_const_xmlDoc_ptr 1
+static xmlDoc * gen_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+    return(NULL);
+}
+static void des_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, const xmlDoc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
 static int
 test_xmlEncodeSpecialChars(void) {
     int test_ret = 0;
 
     int mem_base;
     xmlChar * ret_val;
-    xmlDocPtr doc; /* the document containing the string */
+    xmlDoc * doc; /* the document containing the string */
     int n_doc;
     xmlChar * input; /* A string to convert to XML. */
     int n_input;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_input = 0;n_input < gen_nb_const_xmlChar_ptr;n_input++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         input = gen_const_xmlChar_ptr(n_input, 1);
 
-        ret_val = xmlEncodeSpecialChars(doc, (const xmlChar *)input);
+        ret_val = xmlEncodeSpecialChars((const xmlDoc *)doc, (const xmlChar *)input);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_input, (const xmlChar *)input, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -9481,21 +9506,21 @@ test_xmlGetDocEntity(void) {
 
     int mem_base;
     xmlEntityPtr ret_val;
-    xmlDocPtr doc; /* the document referencing the entity */
+    xmlDoc * doc; /* the document referencing the entity */
     int n_doc;
     xmlChar * name; /* the entity name */
     int n_name;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
 
-        ret_val = xmlGetDocEntity(doc, (const xmlChar *)name);
+        ret_val = xmlGetDocEntity((const xmlDoc *)doc, (const xmlChar *)name);
         desret_xmlEntityPtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -17814,7 +17839,7 @@ test_xmlRelaxNGValidatePushCData(void) {
     int n_ctxt;
     xmlChar * data; /* some character data read */
     int n_data;
-    int len; /* the lenght of the data */
+    int len; /* the length of the data */
     int n_len;
 
     for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
@@ -18252,7 +18277,7 @@ static int
 test_xmlAddPrevSibling(void) {
     int test_ret = 0;
 
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
     int mem_base;
     xmlNodePtr ret_val;
     xmlNodePtr cur; /* the child node */
@@ -18385,6 +18410,167 @@ test_xmlAttrSerializeTxtContent(void) {
 }
 
 
+#define gen_nb_const_xmlBuf_ptr 1
+static xmlBuf * gen_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+    return(NULL);
+}
+static void des_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, const xmlBuf * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlBufContent(void) {
+    int test_ret = 0;
+
+    int mem_base;
+    xmlChar * ret_val;
+    xmlBuf * buf; /* the buffer */
+    int n_buf;
+
+    for (n_buf = 0;n_buf < gen_nb_const_xmlBuf_ptr;n_buf++) {
+        mem_base = xmlMemBlocks();
+        buf = gen_const_xmlBuf_ptr(n_buf, 0);
+
+        ret_val = xmlBufContent((const xmlBuf *)buf);
+        desret_xmlChar_ptr(ret_val);
+        call_tests++;
+        des_const_xmlBuf_ptr(n_buf, (const xmlBuf *)buf, 0);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlBufContent",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_buf);
+            printf("\n");
+        }
+    }
+    function_tests++;
+
+    return(test_ret);
+}
+
+
+#define gen_nb_xmlBufPtr 1
+static xmlBufPtr gen_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+    return(NULL);
+}
+static void des_xmlBufPtr(int no ATTRIBUTE_UNUSED, xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlBufEnd(void) {
+    int test_ret = 0;
+
+    int mem_base;
+    xmlChar * ret_val;
+    xmlBufPtr buf; /* the buffer */
+    int n_buf;
+
+    for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) {
+        mem_base = xmlMemBlocks();
+        buf = gen_xmlBufPtr(n_buf, 0);
+
+        ret_val = xmlBufEnd(buf);
+        desret_xmlChar_ptr(ret_val);
+        call_tests++;
+        des_xmlBufPtr(n_buf, buf, 0);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlBufEnd",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_buf);
+            printf("\n");
+        }
+    }
+    function_tests++;
+
+    return(test_ret);
+}
+
+
+#define gen_nb_const_xmlNode_ptr 1
+static xmlNode * gen_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+    return(NULL);
+}
+static void des_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, const xmlNode * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlBufGetNodeContent(void) {
+    int test_ret = 0;
+
+    int mem_base;
+    int ret_val;
+    xmlBufPtr buf; /* a buffer xmlBufPtr */
+    int n_buf;
+    xmlNode * cur; /* the node being read */
+    int n_cur;
+
+    for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
+        mem_base = xmlMemBlocks();
+        buf = gen_xmlBufPtr(n_buf, 0);
+        cur = gen_const_xmlNode_ptr(n_cur, 1);
+
+        ret_val = xmlBufGetNodeContent(buf, (const xmlNode *)cur);
+        desret_int(ret_val);
+        call_tests++;
+        des_xmlBufPtr(n_buf, buf, 0);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlBufGetNodeContent",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_buf);
+            printf(" %d", n_cur);
+            printf("\n");
+        }
+    }
+    }
+    function_tests++;
+
+    return(test_ret);
+}
+
+
+static int
+test_xmlBufNodeDump(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
+test_xmlBufShrink(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+#define gen_nb_const_xmlBufPtr 1
+static xmlBufPtr gen_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+    return(NULL);
+}
+static void des_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, const xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+}
+
+static int
+test_xmlBufUse(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
 static int
 test_xmlBufferAdd(void) {
     int test_ret = 0;
@@ -18555,11 +18741,11 @@ test_xmlBufferCat(void) {
 }
 
 
-#define gen_nb_const_xmlBufferPtr 1
-static xmlBufferPtr gen_const_xmlBufferPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+#define gen_nb_const_xmlBuffer_ptr 1
+static xmlBuffer * gen_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
     return(NULL);
 }
-static void des_const_xmlBufferPtr(int no ATTRIBUTE_UNUSED, const xmlBufferPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
+static void des_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, const xmlBuffer * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
 }
 
 static int
@@ -18568,17 +18754,17 @@ test_xmlBufferContent(void) {
 
     int mem_base;
     const xmlChar * ret_val;
-    xmlBufferPtr buf; /* the buffer */
+    xmlBuffer * buf; /* the buffer */
     int n_buf;
 
-    for (n_buf = 0;n_buf < gen_nb_const_xmlBufferPtr;n_buf++) {
+    for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) {
         mem_base = xmlMemBlocks();
-        buf = gen_const_xmlBufferPtr(n_buf, 0);
+        buf = gen_const_xmlBuffer_ptr(n_buf, 0);
 
-        ret_val = xmlBufferContent((const xmlBufferPtr)buf);
+        ret_val = xmlBufferContent((const xmlBuffer *)buf);
         desret_const_xmlChar_ptr(ret_val);
         call_tests++;
-        des_const_xmlBufferPtr(n_buf, (const xmlBufferPtr)buf, 0);
+        des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlBufferContent",
@@ -18746,17 +18932,17 @@ test_xmlBufferLength(void) {
 
     int mem_base;
     int ret_val;
-    xmlBufferPtr buf; /* the buffer */
+    xmlBuffer * buf; /* the buffer */
     int n_buf;
 
-    for (n_buf = 0;n_buf < gen_nb_const_xmlBufferPtr;n_buf++) {
+    for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) {
         mem_base = xmlMemBlocks();
-        buf = gen_const_xmlBufferPtr(n_buf, 0);
+        buf = gen_const_xmlBuffer_ptr(n_buf, 0);
 
-        ret_val = xmlBufferLength((const xmlBufferPtr)buf);
+        ret_val = xmlBufferLength((const xmlBuffer *)buf);
         desret_int(ret_val);
         call_tests++;
-        des_const_xmlBufferPtr(n_buf, (const xmlBufferPtr)buf, 0);
+        des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlBufferLength",
@@ -19242,16 +19428,16 @@ test_xmlCopyNode(void) {
     int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */
     int n_extended;
 
-    for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
     for (n_extended = 0;n_extended < gen_nb_int;n_extended++) {
         mem_base = xmlMemBlocks();
-        node = gen_const_xmlNodePtr(n_node, 0);
+        node = gen_xmlNodePtr(n_node, 0);
         extended = gen_int(n_extended, 1);
 
-        ret_val = xmlCopyNode((const xmlNodePtr)node, extended);
+        ret_val = xmlCopyNode(node, extended);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 0);
+        des_xmlNodePtr(n_node, node, 0);
         des_int(n_extended, extended, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -19279,14 +19465,14 @@ test_xmlCopyNodeList(void) {
     xmlNodePtr node; /* the first node in the list. */
     int n_node;
 
-    for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
         mem_base = xmlMemBlocks();
-        node = gen_const_xmlNodePtr(n_node, 0);
+        node = gen_xmlNodePtr(n_node, 0);
 
-        ret_val = xmlCopyNodeList((const xmlNodePtr)node);
+        ret_val = xmlCopyNodeList(node);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 0);
+        des_xmlNodePtr(n_node, node, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlCopyNodeList",
@@ -19711,18 +19897,18 @@ test_xmlDocCopyNode(void) {
     int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */
     int n_extended;
 
-    for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
     for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
     for (n_extended = 0;n_extended < gen_nb_int;n_extended++) {
         mem_base = xmlMemBlocks();
-        node = gen_const_xmlNodePtr(n_node, 0);
+        node = gen_xmlNodePtr(n_node, 0);
         doc = gen_xmlDocPtr(n_doc, 1);
         extended = gen_int(n_extended, 2);
 
-        ret_val = xmlDocCopyNode((const xmlNodePtr)node, doc, extended);
+        ret_val = xmlDocCopyNode(node, doc, extended);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 0);
+        des_xmlNodePtr(n_node, node, 0);
         des_xmlDocPtr(n_doc, doc, 1);
         des_int(n_extended, extended, 2);
         xmlResetLastError();
@@ -19756,16 +19942,16 @@ test_xmlDocCopyNodeList(void) {
     int n_node;
 
     for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
-    for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
         mem_base = xmlMemBlocks();
         doc = gen_xmlDocPtr(n_doc, 0);
-        node = gen_const_xmlNodePtr(n_node, 1);
+        node = gen_xmlNodePtr(n_node, 1);
 
-        ret_val = xmlDocCopyNodeList(doc, (const xmlNodePtr)node);
+        ret_val = xmlDocCopyNodeList(doc, node);
         desret_xmlNodePtr(ret_val);
         call_tests++;
         des_xmlDocPtr(n_doc, doc, 0);
-        des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 1);
+        des_xmlNodePtr(n_node, node, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlDocCopyNodeList",
@@ -20090,17 +20276,17 @@ test_xmlDocGetRootElement(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
 
-        ret_val = xmlDocGetRootElement(doc);
+        ret_val = xmlDocGetRootElement((const xmlDoc *)doc);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlDocGetRootElement",
@@ -20294,17 +20480,17 @@ test_xmlGetDocCompressMode(void) {
 
     int mem_base;
     int ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
 
-        ret_val = xmlGetDocCompressMode(doc);
+        ret_val = xmlGetDocCompressMode((const xmlDoc *)doc);
         desret_int(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlGetDocCompressMode",
@@ -20326,17 +20512,17 @@ test_xmlGetIntSubset(void) {
 
     int mem_base;
     xmlDtdPtr ret_val;
-    xmlDocPtr doc; /* the document pointer */
+    xmlDoc * doc; /* the document pointer */
     int n_doc;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
 
-        ret_val = xmlGetIntSubset(doc);
+        ret_val = xmlGetIntSubset((const xmlDoc *)doc);
         desret_xmlDtdPtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlGetIntSubset",
@@ -20358,17 +20544,17 @@ test_xmlGetLastChild(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlNodePtr parent; /* the parent node */
+    xmlNode * parent; /* the parent node */
     int n_parent;
 
-    for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
+    for (n_parent = 0;n_parent < gen_nb_const_xmlNode_ptr;n_parent++) {
         mem_base = xmlMemBlocks();
-        parent = gen_xmlNodePtr(n_parent, 0);
+        parent = gen_const_xmlNode_ptr(n_parent, 0);
 
-        ret_val = xmlGetLastChild(parent);
+        ret_val = xmlGetLastChild((const xmlNode *)parent);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_parent, parent, 0);
+        des_const_xmlNode_ptr(n_parent, (const xmlNode *)parent, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlGetLastChild",
@@ -20390,17 +20576,17 @@ test_xmlGetLineNo(void) {
 
     int mem_base;
     long ret_val;
-    xmlNodePtr node; /* valid node */
+    xmlNode * node; /* valid node */
     int n_node;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
 
-        ret_val = xmlGetLineNo(node);
+        ret_val = xmlGetLineNo((const xmlNode *)node);
         desret_long(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlGetLineNo",
@@ -20422,21 +20608,21 @@ test_xmlGetNoNsProp(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
     xmlChar * name; /* the attribute name */
     int n_name;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
 
-        ret_val = xmlGetNoNsProp(node, (const xmlChar *)name);
+        ret_val = xmlGetNoNsProp((const xmlNode *)node, (const xmlChar *)name);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -20462,17 +20648,17 @@ test_xmlGetNodePath(void) {
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr node; /* a node */
+    xmlNode * node; /* a node */
     int n_node;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
 
-        ret_val = xmlGetNodePath(node);
+        ret_val = xmlGetNodePath((const xmlNode *)node);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlGetNodePath",
@@ -20505,25 +20691,25 @@ test_xmlGetNsProp(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
     xmlChar * name; /* the attribute name */
     int n_name;
     xmlChar * nameSpace; /* the URI of the namespace */
     int n_nameSpace;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
     for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
         nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2);
 
-        ret_val = xmlGetNsProp(node, (const xmlChar *)name, (const xmlChar *)nameSpace);
+        ret_val = xmlGetNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2);
         xmlResetLastError();
@@ -20551,21 +20737,21 @@ test_xmlGetProp(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
     xmlChar * name; /* the attribute name */
     int n_name;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
 
-        ret_val = xmlGetProp(node, (const xmlChar *)name);
+        ret_val = xmlGetProp((const xmlNode *)node, (const xmlChar *)name);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -20590,25 +20776,25 @@ test_xmlHasNsProp(void) {
 
     int mem_base;
     xmlAttrPtr ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
     xmlChar * name; /* the attribute name */
     int n_name;
     xmlChar * nameSpace; /* the URI of the namespace */
     int n_nameSpace;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
     for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
         nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2);
 
-        ret_val = xmlHasNsProp(node, (const xmlChar *)name, (const xmlChar *)nameSpace);
+        ret_val = xmlHasNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace);
         desret_xmlAttrPtr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2);
         xmlResetLastError();
@@ -20636,21 +20822,21 @@ test_xmlHasProp(void) {
 
     int mem_base;
     xmlAttrPtr ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
     xmlChar * name; /* the attribute name */
     int n_name;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
 
-        ret_val = xmlHasProp(node, (const xmlChar *)name);
+        ret_val = xmlHasProp((const xmlNode *)node, (const xmlChar *)name);
         desret_xmlAttrPtr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -20675,17 +20861,17 @@ test_xmlIsBlankNode(void) {
 
     int mem_base;
     int ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
 
-        ret_val = xmlIsBlankNode(node);
+        ret_val = xmlIsBlankNode((const xmlNode *)node);
         desret_int(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlIsBlankNode",
@@ -21314,21 +21500,21 @@ test_xmlNewDocText(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
     xmlChar * content; /* the text content */
     int n_content;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         content = gen_const_xmlChar_ptr(n_content, 1);
 
-        ret_val = xmlNewDocText(doc, (const xmlChar *)content);
+        ret_val = xmlNewDocText((const xmlDoc *)doc, (const xmlChar *)content);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -21772,21 +21958,21 @@ test_xmlNewReference(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
     xmlChar * name; /* the reference name, or the reference string with & and ; */
     int n_name;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         name = gen_const_xmlChar_ptr(n_name, 1);
 
-        ret_val = xmlNewReference(doc, (const xmlChar *)name);
+        ret_val = xmlNewReference((const xmlDoc *)doc, (const xmlChar *)name);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -22056,20 +22242,20 @@ test_xmlNodeBufGetContent(void) {
     int ret_val;
     xmlBufferPtr buffer; /* a buffer */
     int n_buffer;
-    xmlNodePtr cur; /* the node being read */
+    xmlNode * cur; /* the node being read */
     int n_cur;
 
     for (n_buffer = 0;n_buffer < gen_nb_xmlBufferPtr;n_buffer++) {
-    for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
         mem_base = xmlMemBlocks();
         buffer = gen_xmlBufferPtr(n_buffer, 0);
-        cur = gen_xmlNodePtr(n_cur, 1);
+        cur = gen_const_xmlNode_ptr(n_cur, 1);
 
-        ret_val = xmlNodeBufGetContent(buffer, cur);
+        ret_val = xmlNodeBufGetContent(buffer, (const xmlNode *)cur);
         desret_int(ret_val);
         call_tests++;
         des_xmlBufferPtr(n_buffer, buffer, 0);
-        des_xmlNodePtr(n_cur, cur, 1);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeBufGetContent",
@@ -22222,22 +22408,22 @@ test_xmlNodeGetBase(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlDocPtr doc; /* the document the node pertains to */
+    xmlDoc * doc; /* the document the node pertains to */
     int n_doc;
-    xmlNodePtr cur; /* the node being checked */
+    xmlNode * cur; /* the node being checked */
     int n_cur;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
-    for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
-        cur = gen_xmlNodePtr(n_cur, 1);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
+        cur = gen_const_xmlNode_ptr(n_cur, 1);
 
-        ret_val = xmlNodeGetBase(doc, cur);
+        ret_val = xmlNodeGetBase((const xmlDoc *)doc, (const xmlNode *)cur);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
-        des_xmlNodePtr(n_cur, cur, 1);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeGetBase",
@@ -22261,17 +22447,17 @@ test_xmlNodeGetContent(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr cur; /* the node being read */
+    xmlNode * cur; /* the node being read */
     int n_cur;
 
-    for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
         mem_base = xmlMemBlocks();
-        cur = gen_xmlNodePtr(n_cur, 0);
+        cur = gen_const_xmlNode_ptr(n_cur, 0);
 
-        ret_val = xmlNodeGetContent(cur);
+        ret_val = xmlNodeGetContent((const xmlNode *)cur);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_cur, cur, 0);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeGetContent",
@@ -22293,17 +22479,17 @@ test_xmlNodeGetLang(void) {
 
     int mem_base;
     xmlChar * ret_val;
-    xmlNodePtr cur; /* the node being checked */
+    xmlNode * cur; /* the node being checked */
     int n_cur;
 
-    for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
         mem_base = xmlMemBlocks();
-        cur = gen_xmlNodePtr(n_cur, 0);
+        cur = gen_const_xmlNode_ptr(n_cur, 0);
 
-        ret_val = xmlNodeGetLang(cur);
+        ret_val = xmlNodeGetLang((const xmlNode *)cur);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_cur, cur, 0);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeGetLang",
@@ -22325,17 +22511,17 @@ test_xmlNodeGetSpacePreserve(void) {
 
     int mem_base;
     int ret_val;
-    xmlNodePtr cur; /* the node being checked */
+    xmlNode * cur; /* the node being checked */
     int n_cur;
 
-    for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
+    for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
         mem_base = xmlMemBlocks();
-        cur = gen_xmlNodePtr(n_cur, 0);
+        cur = gen_const_xmlNode_ptr(n_cur, 0);
 
-        ret_val = xmlNodeGetSpacePreserve(cur);
+        ret_val = xmlNodeGetSpacePreserve((const xmlNode *)cur);
         desret_int(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_cur, cur, 0);
+        des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeGetSpacePreserve",
@@ -22357,17 +22543,17 @@ test_xmlNodeIsText(void) {
 
     int mem_base;
     int ret_val;
-    xmlNodePtr node; /* the node */
+    xmlNode * node; /* the node */
     int n_node;
 
-    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
         mem_base = xmlMemBlocks();
-        node = gen_xmlNodePtr(n_node, 0);
+        node = gen_const_xmlNode_ptr(n_node, 0);
 
-        ret_val = xmlNodeIsText(node);
+        ret_val = xmlNodeIsText((const xmlNode *)node);
         desret_int(ret_val);
         call_tests++;
-        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
             printf("Leak of %d blocks found in xmlNodeIsText",
@@ -22390,26 +22576,26 @@ test_xmlNodeListGetRawString(void) {
 #if defined(LIBXML_TREE_ENABLED)
     int mem_base;
     xmlChar * ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
-    xmlNodePtr list; /* a Node list */
+    xmlNode * list; /* a Node list */
     int n_list;
     int inLine; /* should we replace entity contents or show their external form */
     int n_inLine;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
-    for (n_list = 0;n_list < gen_nb_xmlNodePtr;n_list++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
+    for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) {
     for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
-        list = gen_xmlNodePtr(n_list, 1);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
+        list = gen_const_xmlNode_ptr(n_list, 1);
         inLine = gen_int(n_inLine, 2);
 
-        ret_val = xmlNodeListGetRawString(doc, list, inLine);
+        ret_val = xmlNodeListGetRawString((const xmlDoc *)doc, (const xmlNode *)list, inLine);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
-        des_xmlNodePtr(n_list, list, 1);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
+        des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1);
         des_int(n_inLine, inLine, 2);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -22439,24 +22625,24 @@ test_xmlNodeListGetString(void) {
     xmlChar * ret_val;
     xmlDocPtr doc; /* the document */
     int n_doc;
-    xmlNodePtr list; /* a Node list */
+    xmlNode * list; /* a Node list */
     int n_list;
     int inLine; /* should we replace entity contents or show their external form */
     int n_inLine;
 
     for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
-    for (n_list = 0;n_list < gen_nb_xmlNodePtr;n_list++) {
+    for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) {
     for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) {
         mem_base = xmlMemBlocks();
         doc = gen_xmlDocPtr(n_doc, 0);
-        list = gen_xmlNodePtr(n_list, 1);
+        list = gen_const_xmlNode_ptr(n_list, 1);
         inLine = gen_int(n_inLine, 2);
 
-        ret_val = xmlNodeListGetString(doc, list, inLine);
+        ret_val = xmlNodeListGetString(doc, (const xmlNode *)list, inLine);
         desret_xmlChar_ptr(ret_val);
         call_tests++;
         des_xmlDocPtr(n_doc, doc, 0);
-        des_xmlNodePtr(n_list, list, 1);
+        des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1);
         des_int(n_inLine, inLine, 2);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -23584,21 +23770,21 @@ test_xmlStringGetNodeList(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
     xmlChar * value; /* the value of the attribute */
     int n_value;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         value = gen_const_xmlChar_ptr(n_value, 1);
 
-        ret_val = xmlStringGetNodeList(doc, (const xmlChar *)value);
+        ret_val = xmlStringGetNodeList((const xmlDoc *)doc, (const xmlChar *)value);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
         xmlResetLastError();
         if (mem_base != xmlMemBlocks()) {
@@ -23623,25 +23809,25 @@ test_xmlStringLenGetNodeList(void) {
 
     int mem_base;
     xmlNodePtr ret_val;
-    xmlDocPtr doc; /* the document */
+    xmlDoc * doc; /* the document */
     int n_doc;
     xmlChar * value; /* the value of the text */
     int n_value;
     int len; /* the length of the string value */
     int n_len;
 
-    for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
+    for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
     for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
     for (n_len = 0;n_len < gen_nb_int;n_len++) {
         mem_base = xmlMemBlocks();
-        doc = gen_xmlDocPtr(n_doc, 0);
+        doc = gen_const_xmlDoc_ptr(n_doc, 0);
         value = gen_const_xmlChar_ptr(n_value, 1);
         len = gen_int(n_len, 2);
 
-        ret_val = xmlStringLenGetNodeList(doc, (const xmlChar *)value, len);
+        ret_val = xmlStringLenGetNodeList((const xmlDoc *)doc, (const xmlChar *)value, len);
         desret_xmlNodePtr(ret_val);
         call_tests++;
-        des_xmlDocPtr(n_doc, doc, 0);
+        des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
         des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
         des_int(n_len, len, 2);
         xmlResetLastError();
@@ -23844,7 +24030,7 @@ static int
 test_xmlValidateNCName(void) {
     int test_ret = 0;
 
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 #ifdef LIBXML_TREE_ENABLED
     int mem_base;
     int ret_val;
@@ -24015,13 +24201,19 @@ static int
 test_tree(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing tree : 139 of 158 functions ...\n");
+    if (quiet == 0) printf("Testing tree : 142 of 164 functions ...\n");
     test_ret += test_xmlAddChild();
     test_ret += test_xmlAddChildList();
     test_ret += test_xmlAddNextSibling();
     test_ret += test_xmlAddPrevSibling();
     test_ret += test_xmlAddSibling();
     test_ret += test_xmlAttrSerializeTxtContent();
+    test_ret += test_xmlBufContent();
+    test_ret += test_xmlBufEnd();
+    test_ret += test_xmlBufGetNodeContent();
+    test_ret += test_xmlBufNodeDump();
+    test_ret += test_xmlBufShrink();
+    test_ret += test_xmlBufUse();
     test_ret += test_xmlBufferAdd();
     test_ret += test_xmlBufferAddHead();
     test_ret += test_xmlBufferCCat();
@@ -26923,7 +27115,7 @@ test_xmlValidatePushCData(void) {
     int n_ctxt;
     xmlChar * data; /* some character data read */
     int n_data;
-    int len; /* the lenght of the data */
+    int len; /* the length of the data */
     int n_len;
 
     for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
@@ -28405,6 +28597,50 @@ test_xmlOutputBufferFlush(void) {
 
 
 static int
+test_xmlOutputBufferGetContent(void) {
+    int test_ret = 0;
+
+#if defined(LIBXML_OUTPUT_ENABLED)
+    int mem_base;
+    const xmlChar * ret_val;
+    xmlOutputBufferPtr out; /* an xmlOutputBufferPtr */
+    int n_out;
+
+    for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
+        mem_base = xmlMemBlocks();
+        out = gen_xmlOutputBufferPtr(n_out, 0);
+
+        ret_val = xmlOutputBufferGetContent(out);
+        desret_const_xmlChar_ptr(ret_val);
+        call_tests++;
+        des_xmlOutputBufferPtr(n_out, out, 0);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlOutputBufferGetContent",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_out);
+            printf("\n");
+        }
+    }
+    function_tests++;
+#endif
+
+    return(test_ret);
+}
+
+
+static int
+test_xmlOutputBufferGetSize(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlOutputBufferWrite(void) {
     int test_ret = 0;
 
@@ -28948,7 +29184,7 @@ static int
 test_xmlIO(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing xmlIO : 39 of 48 functions ...\n");
+    if (quiet == 0) printf("Testing xmlIO : 40 of 50 functions ...\n");
     test_ret += test_xmlAllocOutputBuffer();
     test_ret += test_xmlAllocParserInputBuffer();
     test_ret += test_xmlCheckFilename();
@@ -28974,6 +29210,8 @@ test_xmlIO(void) {
     test_ret += test_xmlOutputBufferCreateFile();
     test_ret += test_xmlOutputBufferCreateFilename();
     test_ret += test_xmlOutputBufferFlush();
+    test_ret += test_xmlOutputBufferGetContent();
+    test_ret += test_xmlOutputBufferGetSize();
     test_ret += test_xmlOutputBufferWrite();
     test_ret += test_xmlOutputBufferWriteEscape();
     test_ret += test_xmlOutputBufferWriteString();
@@ -32950,7 +33188,7 @@ test_xmlExpGetLanguage(void) {
     int n_exp;
     xmlChar ** langList; /* where to store the tokens */
     int n_langList;
-    int len; /* the allocated lenght of @list */
+    int len; /* the allocated length of @list */
     int n_len;
 
     for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
@@ -33005,7 +33243,7 @@ test_xmlExpGetStart(void) {
     int n_exp;
     xmlChar ** tokList; /* where to store the tokens */
     int n_tokList;
-    int len; /* the allocated lenght of @list */
+    int len; /* the allocated length of @list */
     int n_len;
 
     for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
@@ -34604,6 +34842,55 @@ test_xmlSchemaValidateOneElement(void) {
 
 
 static int
+test_xmlSchemaValidateSetFilename(void) {
+    int test_ret = 0;
+
+#if defined(LIBXML_SCHEMAS_ENABLED)
+    int mem_base;
+    xmlSchemaValidCtxtPtr vctxt; /* the schema validation context */
+    int n_vctxt;
+    const char * filename; /* the file name */
+    int n_filename;
+
+    for (n_vctxt = 0;n_vctxt < gen_nb_xmlSchemaValidCtxtPtr;n_vctxt++) {
+    for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
+        mem_base = xmlMemBlocks();
+        vctxt = gen_xmlSchemaValidCtxtPtr(n_vctxt, 0);
+        filename = gen_filepath(n_filename, 1);
+
+        xmlSchemaValidateSetFilename(vctxt, filename);
+        call_tests++;
+        des_xmlSchemaValidCtxtPtr(n_vctxt, vctxt, 0);
+        des_filepath(n_filename, filename, 1);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlSchemaValidateSetFilename",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_vctxt);
+            printf(" %d", n_filename);
+            printf("\n");
+        }
+    }
+    }
+    function_tests++;
+#endif
+
+    return(test_ret);
+}
+
+
+static int
+test_xmlSchemaValidateSetLocator(void) {
+    int test_ret = 0;
+
+
+    /* missing type support */
+    return(test_ret);
+}
+
+
+static int
 test_xmlSchemaValidateStream(void) {
     int test_ret = 0;
 
@@ -34668,7 +34955,7 @@ static int
 test_xmlschemas(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing xmlschemas : 15 of 25 functions ...\n");
+    if (quiet == 0) printf("Testing xmlschemas : 16 of 27 functions ...\n");
     test_ret += test_xmlSchemaDump();
     test_ret += test_xmlSchemaGetParserErrors();
     test_ret += test_xmlSchemaGetValidErrors();
@@ -34690,6 +34977,8 @@ test_xmlschemas(void) {
     test_ret += test_xmlSchemaValidateDoc();
     test_ret += test_xmlSchemaValidateFile();
     test_ret += test_xmlSchemaValidateOneElement();
+    test_ret += test_xmlSchemaValidateSetFilename();
+    test_ret += test_xmlSchemaValidateSetLocator();
     test_ret += test_xmlSchemaValidateStream();
 
     if (test_ret != 0)
@@ -43571,6 +43860,47 @@ test_xmlTextWriterSetIndentString(void) {
 
 
 static int
+test_xmlTextWriterSetQuoteChar(void) {
+    int test_ret = 0;
+
+#if defined(LIBXML_WRITER_ENABLED)
+    int mem_base;
+    int ret_val;
+    xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
+    int n_writer;
+    xmlChar quotechar; /* the quote character */
+    int n_quotechar;
+
+    for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
+    for (n_quotechar = 0;n_quotechar < gen_nb_xmlChar;n_quotechar++) {
+        mem_base = xmlMemBlocks();
+        writer = gen_xmlTextWriterPtr(n_writer, 0);
+        quotechar = gen_xmlChar(n_quotechar, 1);
+
+        ret_val = xmlTextWriterSetQuoteChar(writer, quotechar);
+        desret_int(ret_val);
+        call_tests++;
+        des_xmlTextWriterPtr(n_writer, writer, 0);
+        des_xmlChar(n_quotechar, quotechar, 1);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlTextWriterSetQuoteChar",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_writer);
+            printf(" %d", n_quotechar);
+            printf("\n");
+        }
+    }
+    }
+    function_tests++;
+#endif
+
+    return(test_ret);
+}
+
+
+static int
 test_xmlTextWriterStartAttribute(void) {
     int test_ret = 0;
 
@@ -45432,7 +45762,7 @@ static int
 test_xmlwriter(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing xmlwriter : 51 of 79 functions ...\n");
+    if (quiet == 0) printf("Testing xmlwriter : 52 of 80 functions ...\n");
     test_ret += test_xmlNewTextWriter();
     test_ret += test_xmlNewTextWriterFilename();
     test_ret += test_xmlNewTextWriterMemory();
@@ -45452,6 +45782,7 @@ test_xmlwriter(void) {
     test_ret += test_xmlTextWriterFullEndElement();
     test_ret += test_xmlTextWriterSetIndent();
     test_ret += test_xmlTextWriterSetIndentString();
+    test_ret += test_xmlTextWriterSetQuoteChar();
     test_ret += test_xmlTextWriterStartAttribute();
     test_ret += test_xmlTextWriterStartAttributeNS();
     test_ret += test_xmlTextWriterStartCDATA();
@@ -46542,6 +46873,54 @@ test_xmlXPathNewContext(void) {
 
 
 static int
+test_xmlXPathNodeEval(void) {
+    int test_ret = 0;
+
+#if defined(LIBXML_XPATH_ENABLED)
+    int mem_base;
+    xmlXPathObjectPtr ret_val;
+    xmlNodePtr node; /* the node to to use as the context node */
+    int n_node;
+    xmlChar * str; /* the XPath expression */
+    int n_str;
+    xmlXPathContextPtr ctx; /* the XPath context */
+    int n_ctx;
+
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
+    for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
+        mem_base = xmlMemBlocks();
+        node = gen_xmlNodePtr(n_node, 0);
+        str = gen_const_xmlChar_ptr(n_str, 1);
+        ctx = gen_xmlXPathContextPtr(n_ctx, 2);
+
+        ret_val = xmlXPathNodeEval(node, (const xmlChar *)str, ctx);
+        desret_xmlXPathObjectPtr(ret_val);
+        call_tests++;
+        des_xmlNodePtr(n_node, node, 0);
+        des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
+        des_xmlXPathContextPtr(n_ctx, ctx, 2);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlXPathNodeEval",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_node);
+            printf(" %d", n_str);
+            printf(" %d", n_ctx);
+            printf("\n");
+        }
+    }
+    }
+    }
+    function_tests++;
+#endif
+
+    return(test_ret);
+}
+
+
+static int
 test_xmlXPathNodeSetCreate(void) {
     int test_ret = 0;
 
@@ -46642,11 +47021,52 @@ test_xmlXPathOrderDocElems(void) {
     return(test_ret);
 }
 
+
+static int
+test_xmlXPathSetContextNode(void) {
+    int test_ret = 0;
+
+#if defined(LIBXML_XPATH_ENABLED)
+    int mem_base;
+    int ret_val;
+    xmlNodePtr node; /* the node to to use as the context node */
+    int n_node;
+    xmlXPathContextPtr ctx; /* the XPath context */
+    int n_ctx;
+
+    for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
+    for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
+        mem_base = xmlMemBlocks();
+        node = gen_xmlNodePtr(n_node, 0);
+        ctx = gen_xmlXPathContextPtr(n_ctx, 1);
+
+        ret_val = xmlXPathSetContextNode(node, ctx);
+        desret_int(ret_val);
+        call_tests++;
+        des_xmlNodePtr(n_node, node, 0);
+        des_xmlXPathContextPtr(n_ctx, ctx, 1);
+        xmlResetLastError();
+        if (mem_base != xmlMemBlocks()) {
+            printf("Leak of %d blocks found in xmlXPathSetContextNode",
+                  xmlMemBlocks() - mem_base);
+           test_ret++;
+            printf(" %d", n_node);
+            printf(" %d", n_ctx);
+            printf("\n");
+        }
+    }
+    }
+    function_tests++;
+#endif
+
+    return(test_ret);
+}
+
 static int
 test_xpath(void) {
     int test_ret = 0;
 
-    if (quiet == 0) printf("Testing xpath : 30 of 38 functions ...\n");
+    if (quiet == 0) printf("Testing xpath : 32 of 40 functions ...\n");
     test_ret += test_xmlXPathCastBooleanToNumber();
     test_ret += test_xmlXPathCastBooleanToString();
     test_ret += test_xmlXPathCastNodeSetToBoolean();
@@ -46677,9 +47097,11 @@ test_xpath(void) {
     test_ret += test_xmlXPathIsInf();
     test_ret += test_xmlXPathIsNaN();
     test_ret += test_xmlXPathNewContext();
+    test_ret += test_xmlXPathNodeEval();
     test_ret += test_xmlXPathNodeSetCreate();
     test_ret += test_xmlXPathObjectCopy();
     test_ret += test_xmlXPathOrderDocElems();
+    test_ret += test_xmlXPathSetContextNode();
 
     if (test_ret != 0)
        printf("Module xpath: %d errors\n", test_ret);
@@ -48815,6 +49237,7 @@ test_xmlXPathNodeSetAdd(void) {
 
 #if defined(LIBXML_XPATH_ENABLED)
     int mem_base;
+    int ret_val;
     xmlNodeSetPtr cur; /* the initial node set */
     int n_cur;
     xmlNodePtr val; /* a new xmlNodePtr */
@@ -48826,7 +49249,8 @@ test_xmlXPathNodeSetAdd(void) {
         cur = gen_xmlNodeSetPtr(n_cur, 0);
         val = gen_xmlNodePtr(n_val, 1);
 
-        xmlXPathNodeSetAdd(cur, val);
+        ret_val = xmlXPathNodeSetAdd(cur, val);
+        desret_int(ret_val);
         call_tests++;
         des_xmlNodeSetPtr(n_cur, cur, 0);
         des_xmlNodePtr(n_val, val, 1);
@@ -48854,6 +49278,7 @@ test_xmlXPathNodeSetAddNs(void) {
 
 #if defined(LIBXML_XPATH_ENABLED)
     int mem_base;
+    int ret_val;
     xmlNodeSetPtr cur; /* the initial node set */
     int n_cur;
     xmlNodePtr node; /* the hosting node */
@@ -48869,7 +49294,8 @@ test_xmlXPathNodeSetAddNs(void) {
         node = gen_xmlNodePtr(n_node, 1);
         ns = gen_xmlNsPtr(n_ns, 2);
 
-        xmlXPathNodeSetAddNs(cur, node, ns);
+        ret_val = xmlXPathNodeSetAddNs(cur, node, ns);
+        desret_int(ret_val);
         call_tests++;
         des_xmlNodeSetPtr(n_cur, cur, 0);
         des_xmlNodePtr(n_node, node, 1);
@@ -48900,6 +49326,7 @@ test_xmlXPathNodeSetAddUnique(void) {
 
 #if defined(LIBXML_XPATH_ENABLED)
     int mem_base;
+    int ret_val;
     xmlNodeSetPtr cur; /* the initial node set */
     int n_cur;
     xmlNodePtr val; /* a new xmlNodePtr */
@@ -48911,7 +49338,8 @@ test_xmlXPathNodeSetAddUnique(void) {
         cur = gen_xmlNodeSetPtr(n_cur, 0);
         val = gen_xmlNodePtr(n_val, 1);
 
-        xmlXPathNodeSetAddUnique(cur, val);
+        ret_val = xmlXPathNodeSetAddUnique(cur, val);
+        desret_int(ret_val);
         call_tests++;
         des_xmlNodeSetPtr(n_cur, cur, 0);
         des_xmlNodePtr(n_val, val, 1);
index 3bfd9c0..0d08792 100644 (file)
@@ -10,6 +10,8 @@
 #include <libxml/parser.h>
 #include <libxml/parserInternals.h>
 
+#include "buf.h"
+
 int lastError;
 
 static void errorHandler(void *unused, xmlErrorPtr err) {
@@ -121,7 +123,7 @@ static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
         * We should see no error in remaning cases
         */
        else if ((lastError != 0) || (res == NULL)) {
-           fprintf(stderr, 
+           fprintf(stderr,
                "Failed to parse document for Bytes 0x%02X 0x%02X\n", i, j);
        }
        if (res != NULL)
@@ -409,7 +411,7 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
         * We should see no error in remaining cases
         */
        else if ((lastError != 0) || (len != 3)) {
-           fprintf(stderr, 
+           fprintf(stderr,
                "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
                    i, j, K);
        }
@@ -418,7 +420,7 @@ static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
         * Finally check the value is right
         */
        else if (c != value) {
-           fprintf(stderr, 
+           fprintf(stderr,
     "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
                i, j, data[2], value, c);
        }
@@ -489,7 +491,7 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
         * There are values in that range that are not allowed in XML-1.0
         */
        else if (((value > 0xD7FF) && (value <0xE000)) ||
-                ((value > 0xFFFD) && (value <0x10000)) || 
+                ((value > 0xFFFD) && (value <0x10000)) ||
                 (value > 0x10FFFF)) {
            if (lastError != XML_ERR_INVALID_CHAR)
                fprintf(stderr,
@@ -501,7 +503,7 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
         * We should see no error in remaining cases
         */
        else if ((lastError != 0) || (len != 4)) {
-           fprintf(stderr, 
+           fprintf(stderr,
                "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
                    i, j, K);
        }
@@ -510,7 +512,7 @@ static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
         * Finally check the value is right
         */
        else if (c != value) {
-           fprintf(stderr, 
+           fprintf(stderr,
     "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
                i, j, data[2], value, c);
        }
@@ -558,9 +560,9 @@ static void testCharRanges(void) {
     }
     input->filename = NULL;
     input->buf = buf;
-    input->base = input->buf->buffer->content;
-    input->cur = input->buf->buffer->content;
-    input->end = &input->buf->buffer->content[4];
+    input->cur =
+    input->base = xmlBufContent(input->buf->buffer);
+    input->end = input->base + 4;
     inputPush(ctxt, input);
 
     printf("testing char range: 1");
diff --git a/testlimits.c b/testlimits.c
new file mode 100644 (file)
index 0000000..577f593
--- /dev/null
@@ -0,0 +1,1637 @@
+/*
+ * testlimits.c: C program to run libxml2 regression tests checking various
+ *       limits in document size. Will consume a lot of RAM and CPU cycles
+ *
+ * To compile on Unixes:
+ * cc -o testlimits `xml2-config --cflags` testlimits.c `xml2-config --libs` -lpthread
+ *
+ * See Copyright for the status of this software.
+ *
+ * daniel@veillard.com
+ */
+
+#include "libxml.h"
+#include <stdio.h>
+
+#if !defined(_WIN32) || defined(__CYGWIN__)
+#include <unistd.h>
+#endif
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+
+#include <libxml/parser.h>
+#include <libxml/parserInternals.h>
+#include <libxml/tree.h>
+#include <libxml/uri.h>
+#ifdef LIBXML_READER_ENABLED
+#include <libxml/xmlreader.h>
+#endif
+
+static int verbose = 0;
+static int tests_quiet = 0;
+
+/************************************************************************
+ *                                                                     *
+ *             time handling                                           *
+ *                                                                     *
+ ************************************************************************/
+
+/* maximum time for one parsing before declaring a timeout */
+#define MAX_TIME 2 /* seconds */
+
+static clock_t t0;
+int timeout = 0;
+
+static void reset_timout(void) {
+    timeout = 0;
+    t0 = clock();
+}
+
+static int check_time(void) {
+    clock_t tnow = clock();
+    if (((tnow - t0) / CLOCKS_PER_SEC) > MAX_TIME) {
+        timeout = 1;
+        return(0);
+    }
+    return(1);
+}
+
+/************************************************************************
+ *                                                                     *
+ *             Huge document generator                                 *
+ *                                                                     *
+ ************************************************************************/
+
+#include <libxml/xmlIO.h>
+
+/*
+ * Huge documents are built using fixed start and end chunks
+ * and filling between the two an unconventional amount of char data
+ */
+typedef struct hugeTest hugeTest;
+typedef hugeTest *hugeTestPtr;
+struct hugeTest {
+    const char *description;
+    const char *name;
+    const char *start;
+    const char *end;
+};
+
+static struct hugeTest hugeTests[] = {
+    { "Huge text node", "huge:textNode", "<foo>", "</foo>" },
+    { "Huge attribute node", "huge:attrNode", "<foo bar='", "'/>" },
+    { "Huge comment node", "huge:commentNode", "<foo><!--", "--></foo>" },
+    { "Huge PI node", "huge:piNode", "<foo><?bar ", "?></foo>" },
+};
+
+static const char *current;
+static int rlen;
+static unsigned int currentTest = 0;
+static int instate = 0;
+
+/**
+ * hugeMatch:
+ * @URI: an URI to test
+ *
+ * Check for an huge: query
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+static int
+hugeMatch(const char * URI) {
+    if ((URI != NULL) && (!strncmp(URI, "huge:", 5)))
+        return(1);
+    return(0);
+}
+
+/**
+ * hugeOpen:
+ * @URI: an URI to test
+ *
+ * Return a pointer to the huge: query handler, in this example simply
+ * the current pointer...
+ *
+ * Returns an Input context or NULL in case or error
+ */
+static void *
+hugeOpen(const char * URI) {
+    if ((URI == NULL) || (strncmp(URI, "huge:", 5)))
+        return(NULL);
+
+    for (currentTest = 0;currentTest < sizeof(hugeTests)/sizeof(hugeTests[0]);
+         currentTest++)
+         if (!strcmp(hugeTests[currentTest].name, URI))
+             goto found;
+
+    return(NULL);
+
+found:
+    rlen = strlen(hugeTests[currentTest].start);
+    current = hugeTests[currentTest].start;
+    instate = 0;
+    return((void *) current);
+}
+
+/**
+ * hugeClose:
+ * @context: the read context
+ *
+ * Close the huge: query handler
+ *
+ * Returns 0 or -1 in case of error
+ */
+static int
+hugeClose(void * context) {
+    if (context == NULL) return(-1);
+    fprintf(stderr, "\n");
+    return(0);
+}
+
+#define CHUNK 4096
+
+char filling[CHUNK + 1];
+
+static void fillFilling(void) {
+    int i;
+
+    for (i = 0;i < CHUNK;i++) {
+        filling[i] = 'a';
+    }
+    filling[CHUNK] = 0;
+}
+
+size_t maxlen = 64 * 1024 * 1024;
+size_t curlen = 0;
+size_t dotlen;
+
+/**
+ * hugeRead:
+ * @context: the read context
+ * @buffer: where to store data
+ * @len: number of bytes to read
+ *
+ * Implement an huge: query read.
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+static int
+hugeRead(void *context, char *buffer, int len)
+{
+    if ((context == NULL) || (buffer == NULL) || (len < 0))
+        return (-1);
+
+    if (instate == 0) {
+        if (len >= rlen) {
+            len = rlen;
+            rlen = 0;
+            memcpy(buffer, current, len);
+            instate = 1;
+            curlen = 0;
+            dotlen = maxlen / 10;
+        } else {
+            memcpy(buffer, current, len);
+            rlen -= len;
+            current += len;
+        }
+    } else if (instate == 2) {
+        if (len >= rlen) {
+            len = rlen;
+            rlen = 0;
+            memcpy(buffer, current, len);
+            instate = 3;
+            curlen = 0;
+        } else {
+            memcpy(buffer, current, len);
+            rlen -= len;
+            current += len;
+        }
+    } else if (instate == 1) {
+        if (len > CHUNK) len = CHUNK;
+        memcpy(buffer, &filling[0], len);
+        curlen += len;
+        if (curlen >= maxlen) {
+            rlen = strlen(hugeTests[currentTest].end);
+            current = hugeTests[currentTest].end;
+            instate = 2;
+       } else {
+            if (curlen > dotlen) {
+                fprintf(stderr, ".");
+                dotlen += maxlen / 10;
+            }
+        }
+    } else
+      len = 0;
+    return (len);
+}
+
+/************************************************************************
+ *                                                                     *
+ *             Crazy document generator                                *
+ *                                                                     *
+ ************************************************************************/
+
+unsigned int crazy_indx = 0;
+
+const char *crazy = "<?xml version='1.0' encoding='UTF-8'?>\
+<?tst ?>\
+<!-- tst -->\
+<!DOCTYPE foo [\
+<?tst ?>\
+<!-- tst -->\
+<!ELEMENT foo (#PCDATA)>\
+<!ELEMENT p (#PCDATA|emph)* >\
+]>\
+<?tst ?>\
+<!-- tst -->\
+<foo bar='foo'>\
+<?tst ?>\
+<!-- tst -->\
+foo\
+<![CDATA[ ]]>\
+</foo>\
+<?tst ?>\
+<!-- tst -->";
+
+/**
+ * crazyMatch:
+ * @URI: an URI to test
+ *
+ * Check for a crazy: query
+ *
+ * Returns 1 if yes and 0 if another Input module should be used
+ */
+static int
+crazyMatch(const char * URI) {
+    if ((URI != NULL) && (!strncmp(URI, "crazy:", 6)))
+        return(1);
+    return(0);
+}
+
+/**
+ * crazyOpen:
+ * @URI: an URI to test
+ *
+ * Return a pointer to the crazy: query handler, in this example simply
+ * the current pointer...
+ *
+ * Returns an Input context or NULL in case or error
+ */
+static void *
+crazyOpen(const char * URI) {
+    if ((URI == NULL) || (strncmp(URI, "crazy:", 6)))
+        return(NULL);
+
+    if (crazy_indx > strlen(crazy))
+        return(NULL);
+    reset_timout();
+    rlen = crazy_indx;
+    current = &crazy[0];
+    instate = 0;
+    return((void *) current);
+}
+
+/**
+ * crazyClose:
+ * @context: the read context
+ *
+ * Close the crazy: query handler
+ *
+ * Returns 0 or -1 in case of error
+ */
+static int
+crazyClose(void * context) {
+    if (context == NULL) return(-1);
+    return(0);
+}
+
+
+/**
+ * crazyRead:
+ * @context: the read context
+ * @buffer: where to store data
+ * @len: number of bytes to read
+ *
+ * Implement an crazy: query read.
+ *
+ * Returns the number of bytes read or -1 in case of error
+ */
+static int
+crazyRead(void *context, char *buffer, int len)
+{
+    if ((context == NULL) || (buffer == NULL) || (len < 0))
+        return (-1);
+
+    if ((check_time() <= 0) && (instate == 1)) {
+        fprintf(stderr, "\ntimeout in crazy(%d)\n", crazy_indx);
+        rlen = strlen(crazy) - crazy_indx;
+        current = &crazy[crazy_indx];
+        instate = 2;
+    }
+    if (instate == 0) {
+        if (len >= rlen) {
+            len = rlen;
+            rlen = 0;
+            memcpy(buffer, current, len);
+            instate = 1;
+            curlen = 0;
+        } else {
+            memcpy(buffer, current, len);
+            rlen -= len;
+            current += len;
+        }
+    } else if (instate == 2) {
+        if (len >= rlen) {
+            len = rlen;
+            rlen = 0;
+            memcpy(buffer, current, len);
+            instate = 3;
+            curlen = 0;
+        } else {
+            memcpy(buffer, current, len);
+            rlen -= len;
+            current += len;
+        }
+    } else if (instate == 1) {
+        if (len > CHUNK) len = CHUNK;
+        memcpy(buffer, &filling[0], len);
+        curlen += len;
+        if (curlen >= maxlen) {
+            rlen = strlen(crazy) - crazy_indx;
+            current = &crazy[crazy_indx];
+            instate = 2;
+        }
+    } else
+      len = 0;
+    return (len);
+}
+/************************************************************************
+ *                                                                     *
+ *             Libxml2 specific routines                               *
+ *                                                                     *
+ ************************************************************************/
+
+static int nb_tests = 0;
+static int nb_errors = 0;
+static int nb_leaks = 0;
+static int extraMemoryFromResolver = 0;
+
+/*
+ * We need to trap calls to the resolver to not account memory for the catalog
+ * which is shared to the current running test. We also don't want to have
+ * network downloads modifying tests.
+ */
+static xmlParserInputPtr
+testExternalEntityLoader(const char *URL, const char *ID,
+                        xmlParserCtxtPtr ctxt) {
+    xmlParserInputPtr ret;
+    int memused = xmlMemUsed();
+
+    ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
+    extraMemoryFromResolver += xmlMemUsed() - memused;
+
+    return(ret);
+}
+
+/*
+ * Trapping the error messages at the generic level to grab the equivalent of
+ * stderr messages on CLI tools.
+ */
+static char testErrors[32769];
+static int testErrorsSize = 0;
+
+static void XMLCDECL
+channel(void *ctx  ATTRIBUTE_UNUSED, const char *msg, ...) {
+    va_list args;
+    int res;
+
+    if (testErrorsSize >= 32768)
+        return;
+    va_start(args, msg);
+    res = vsnprintf(&testErrors[testErrorsSize],
+                    32768 - testErrorsSize,
+                   msg, args);
+    va_end(args);
+    if (testErrorsSize + res >= 32768) {
+        /* buffer is full */
+       testErrorsSize = 32768;
+       testErrors[testErrorsSize] = 0;
+    } else {
+        testErrorsSize += res;
+    }
+    testErrors[testErrorsSize] = 0;
+}
+
+/**
+ * xmlParserPrintFileContext:
+ * @input:  an xmlParserInputPtr input
+ *
+ * Displays current context within the input content for error tracking
+ */
+
+static void
+xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
+               xmlGenericErrorFunc chanl, void *data ) {
+    const xmlChar *cur, *base;
+    unsigned int n, col;       /* GCC warns if signed, because compared with sizeof() */
+    xmlChar  content[81]; /* space for 80 chars + line terminator */
+    xmlChar *ctnt;
+
+    if (input == NULL) return;
+    cur = input->cur;
+    base = input->base;
+    /* skip backwards over any end-of-lines */
+    while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
+       cur--;
+    }
+    n = 0;
+    /* search backwards for beginning-of-line (to max buff size) */
+    while ((n++ < (sizeof(content)-1)) && (cur > base) &&
+   (*(cur) != '\n') && (*(cur) != '\r'))
+        cur--;
+    if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
+    /* calculate the error position in terms of the current position */
+    col = input->cur - cur;
+    /* search forward for end-of-line (to max buff size) */
+    n = 0;
+    ctnt = content;
+    /* copy selected text to our buffer */
+    while ((*cur != 0) && (*(cur) != '\n') &&
+   (*(cur) != '\r') && (n < sizeof(content)-1)) {
+               *ctnt++ = *cur++;
+       n++;
+    }
+    *ctnt = 0;
+    /* print out the selected text */
+    chanl(data ,"%s\n", content);
+    /* create blank line with problem pointer */
+    n = 0;
+    ctnt = content;
+    /* (leave buffer space for pointer + line terminator) */
+    while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
+       if (*(ctnt) != '\t')
+           *(ctnt) = ' ';
+       ctnt++;
+    }
+    *ctnt++ = '^';
+    *ctnt = 0;
+    chanl(data ,"%s\n", content);
+}
+
+static void
+testStructuredErrorHandler(void *ctx  ATTRIBUTE_UNUSED, xmlErrorPtr err) {
+    char *file = NULL;
+    int line = 0;
+    int code = -1;
+    int domain;
+    void *data = NULL;
+    const char *str;
+    const xmlChar *name = NULL;
+    xmlNodePtr node;
+    xmlErrorLevel level;
+    xmlParserInputPtr input = NULL;
+    xmlParserInputPtr cur = NULL;
+    xmlParserCtxtPtr ctxt = NULL;
+
+    if (err == NULL)
+        return;
+
+    file = err->file;
+    line = err->line;
+    code = err->code;
+    domain = err->domain;
+    level = err->level;
+    node = err->node;
+    if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
+        (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
+       (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
+       ctxt = err->ctxt;
+    }
+    str = err->message;
+
+    if (code == XML_ERR_OK)
+        return;
+
+    if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
+        name = node->name;
+
+    /*
+     * Maintain the compatibility with the legacy error handling
+     */
+    if (ctxt != NULL) {
+        input = ctxt->input;
+        if ((input != NULL) && (input->filename == NULL) &&
+            (ctxt->inputNr > 1)) {
+            cur = input;
+            input = ctxt->inputTab[ctxt->inputNr - 2];
+        }
+        if (input != NULL) {
+            if (input->filename)
+                channel(data, "%s:%d: ", input->filename, input->line);
+            else if ((line != 0) && (domain == XML_FROM_PARSER))
+                channel(data, "Entity: line %d: ", input->line);
+        }
+    } else {
+        if (file != NULL)
+            channel(data, "%s:%d: ", file, line);
+        else if ((line != 0) && (domain == XML_FROM_PARSER))
+            channel(data, "Entity: line %d: ", line);
+    }
+    if (name != NULL) {
+        channel(data, "element %s: ", name);
+    }
+    if (code == XML_ERR_OK)
+        return;
+    switch (domain) {
+        case XML_FROM_PARSER:
+            channel(data, "parser ");
+            break;
+        case XML_FROM_NAMESPACE:
+            channel(data, "namespace ");
+            break;
+        case XML_FROM_DTD:
+        case XML_FROM_VALID:
+            channel(data, "validity ");
+            break;
+        case XML_FROM_HTML:
+            channel(data, "HTML parser ");
+            break;
+        case XML_FROM_MEMORY:
+            channel(data, "memory ");
+            break;
+        case XML_FROM_OUTPUT:
+            channel(data, "output ");
+            break;
+        case XML_FROM_IO:
+            channel(data, "I/O ");
+            break;
+        case XML_FROM_XINCLUDE:
+            channel(data, "XInclude ");
+            break;
+        case XML_FROM_XPATH:
+            channel(data, "XPath ");
+            break;
+        case XML_FROM_XPOINTER:
+            channel(data, "parser ");
+            break;
+        case XML_FROM_REGEXP:
+            channel(data, "regexp ");
+            break;
+        case XML_FROM_MODULE:
+            channel(data, "module ");
+            break;
+        case XML_FROM_SCHEMASV:
+            channel(data, "Schemas validity ");
+            break;
+        case XML_FROM_SCHEMASP:
+            channel(data, "Schemas parser ");
+            break;
+        case XML_FROM_RELAXNGP:
+            channel(data, "Relax-NG parser ");
+            break;
+        case XML_FROM_RELAXNGV:
+            channel(data, "Relax-NG validity ");
+            break;
+        case XML_FROM_CATALOG:
+            channel(data, "Catalog ");
+            break;
+        case XML_FROM_C14N:
+            channel(data, "C14N ");
+            break;
+        case XML_FROM_XSLT:
+            channel(data, "XSLT ");
+            break;
+        default:
+            break;
+    }
+    if (code == XML_ERR_OK)
+        return;
+    switch (level) {
+        case XML_ERR_NONE:
+            channel(data, ": ");
+            break;
+        case XML_ERR_WARNING:
+            channel(data, "warning : ");
+            break;
+        case XML_ERR_ERROR:
+            channel(data, "error : ");
+            break;
+        case XML_ERR_FATAL:
+            channel(data, "error : ");
+            break;
+    }
+    if (code == XML_ERR_OK)
+        return;
+    if (str != NULL) {
+        int len;
+       len = xmlStrlen((const xmlChar *)str);
+       if ((len > 0) && (str[len - 1] != '\n'))
+           channel(data, "%s\n", str);
+       else
+           channel(data, "%s", str);
+    } else {
+        channel(data, "%s\n", "out of memory error");
+    }
+    if (code == XML_ERR_OK)
+        return;
+
+    if (ctxt != NULL) {
+        xmlParserPrintFileContextInternal(input, channel, data);
+        if (cur != NULL) {
+            if (cur->filename)
+                channel(data, "%s:%d: \n", cur->filename, cur->line);
+            else if ((line != 0) && (domain == XML_FROM_PARSER))
+                channel(data, "Entity: line %d: \n", cur->line);
+            xmlParserPrintFileContextInternal(cur, channel, data);
+        }
+    }
+    if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
+        (err->int1 < 100) &&
+       (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
+       xmlChar buf[150];
+       int i;
+
+       channel(data, "%s\n", err->str1);
+       for (i=0;i < err->int1;i++)
+            buf[i] = ' ';
+       buf[i++] = '^';
+       buf[i] = 0;
+       channel(data, "%s\n", buf);
+    }
+}
+
+static void
+initializeLibxml2(void) {
+    xmlGetWarningsDefaultValue = 0;
+    xmlPedanticParserDefault(0);
+
+    xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
+    xmlInitParser();
+    xmlSetExternalEntityLoader(testExternalEntityLoader);
+    xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
+    /*
+     * register the new I/O handlers
+     */
+    if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen,
+                                  hugeRead, hugeClose) < 0) {
+        fprintf(stderr, "failed to register Huge handlers\n");
+       exit(1);
+    }
+    if (xmlRegisterInputCallbacks(crazyMatch, crazyOpen,
+                                  crazyRead, crazyClose) < 0) {
+        fprintf(stderr, "failed to register Crazy handlers\n");
+       exit(1);
+    }
+}
+
+/************************************************************************
+ *                                                                     *
+ *             SAX empty callbacks                                     *
+ *                                                                     *
+ ************************************************************************/
+
+unsigned long callbacks = 0;
+
+/**
+ * isStandaloneCallback:
+ * @ctxt:  An XML parser context
+ *
+ * Is this document tagged standalone ?
+ *
+ * Returns 1 if true
+ */
+static int
+isStandaloneCallback(void *ctx ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (0);
+}
+
+/**
+ * hasInternalSubsetCallback:
+ * @ctxt:  An XML parser context
+ *
+ * Does this document has an internal subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasInternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (0);
+}
+
+/**
+ * hasExternalSubsetCallback:
+ * @ctxt:  An XML parser context
+ *
+ * Does this document has an external subset
+ *
+ * Returns 1 if true
+ */
+static int
+hasExternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (0);
+}
+
+/**
+ * internalSubsetCallback:
+ * @ctxt:  An XML parser context
+ *
+ * Does this document has an internal subset
+ */
+static void
+internalSubsetCallback(void *ctx ATTRIBUTE_UNUSED,
+                       const xmlChar * name ATTRIBUTE_UNUSED,
+                       const xmlChar * ExternalID ATTRIBUTE_UNUSED,
+                       const xmlChar * SystemID ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * externalSubsetCallback:
+ * @ctxt:  An XML parser context
+ *
+ * Does this document has an external subset
+ */
+static void
+externalSubsetCallback(void *ctx ATTRIBUTE_UNUSED,
+                       const xmlChar * name ATTRIBUTE_UNUSED,
+                       const xmlChar * ExternalID ATTRIBUTE_UNUSED,
+                       const xmlChar * SystemID ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * resolveEntityCallback:
+ * @ctxt:  An XML parser context
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * Special entity resolver, better left to the parser, it has
+ * more context than the application layer.
+ * The default behaviour is to NOT resolve the entities, in that case
+ * the ENTITY_REF nodes are built in the structure (and the parameter
+ * values).
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlParserInputPtr
+resolveEntityCallback(void *ctx ATTRIBUTE_UNUSED,
+                      const xmlChar * publicId ATTRIBUTE_UNUSED,
+                      const xmlChar * systemId ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (NULL);
+}
+
+/**
+ * getEntityCallback:
+ * @ctxt:  An XML parser context
+ * @name: The entity name
+ *
+ * Get an entity by name
+ *
+ * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
+ */
+static xmlEntityPtr
+getEntityCallback(void *ctx ATTRIBUTE_UNUSED,
+                  const xmlChar * name ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (NULL);
+}
+
+/**
+ * getParameterEntityCallback:
+ * @ctxt:  An XML parser context
+ * @name: The entity name
+ *
+ * Get a parameter entity by name
+ *
+ * Returns the xmlParserInputPtr
+ */
+static xmlEntityPtr
+getParameterEntityCallback(void *ctx ATTRIBUTE_UNUSED,
+                           const xmlChar * name ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return (NULL);
+}
+
+
+/**
+ * entityDeclCallback:
+ * @ctxt:  An XML parser context
+ * @name:  the entity name
+ * @type:  the entity type
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @content: the entity value (without processing).
+ *
+ * An entity definition has been parsed
+ */
+static void
+entityDeclCallback(void *ctx ATTRIBUTE_UNUSED,
+                   const xmlChar * name ATTRIBUTE_UNUSED,
+                   int type ATTRIBUTE_UNUSED,
+                   const xmlChar * publicId ATTRIBUTE_UNUSED,
+                   const xmlChar * systemId ATTRIBUTE_UNUSED,
+                   xmlChar * content ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * attributeDeclCallback:
+ * @ctxt:  An XML parser context
+ * @name:  the attribute name
+ * @type:  the attribute type
+ *
+ * An attribute definition has been parsed
+ */
+static void
+attributeDeclCallback(void *ctx ATTRIBUTE_UNUSED,
+                      const xmlChar * elem ATTRIBUTE_UNUSED,
+                      const xmlChar * name ATTRIBUTE_UNUSED,
+                      int type ATTRIBUTE_UNUSED, int def ATTRIBUTE_UNUSED,
+                      const xmlChar * defaultValue ATTRIBUTE_UNUSED,
+                      xmlEnumerationPtr tree ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * elementDeclCallback:
+ * @ctxt:  An XML parser context
+ * @name:  the element name
+ * @type:  the element type
+ * @content: the element value (without processing).
+ *
+ * An element definition has been parsed
+ */
+static void
+elementDeclCallback(void *ctx ATTRIBUTE_UNUSED,
+                    const xmlChar * name ATTRIBUTE_UNUSED,
+                    int type ATTRIBUTE_UNUSED,
+                    xmlElementContentPtr content ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * notationDeclCallback:
+ * @ctxt:  An XML parser context
+ * @name: The name of the notation
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ *
+ * What to do when a notation declaration has been parsed.
+ */
+static void
+notationDeclCallback(void *ctx ATTRIBUTE_UNUSED,
+                     const xmlChar * name ATTRIBUTE_UNUSED,
+                     const xmlChar * publicId ATTRIBUTE_UNUSED,
+                     const xmlChar * systemId ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * unparsedEntityDeclCallback:
+ * @ctxt:  An XML parser context
+ * @name: The name of the entity
+ * @publicId: The public ID of the entity
+ * @systemId: The system ID of the entity
+ * @notationName: the name of the notation
+ *
+ * What to do when an unparsed entity declaration is parsed
+ */
+static void
+unparsedEntityDeclCallback(void *ctx ATTRIBUTE_UNUSED,
+                           const xmlChar * name ATTRIBUTE_UNUSED,
+                           const xmlChar * publicId ATTRIBUTE_UNUSED,
+                           const xmlChar * systemId ATTRIBUTE_UNUSED,
+                           const xmlChar * notationName ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * setDocumentLocatorCallback:
+ * @ctxt:  An XML parser context
+ * @loc: A SAX Locator
+ *
+ * Receive the document locator at startup, actually xmlDefaultSAXLocator
+ * Everything is available on the context, so this is useless in our case.
+ */
+static void
+setDocumentLocatorCallback(void *ctx ATTRIBUTE_UNUSED,
+                           xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * startDocumentCallback:
+ * @ctxt:  An XML parser context
+ *
+ * called when the document start being processed.
+ */
+static void
+startDocumentCallback(void *ctx ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * endDocumentCallback:
+ * @ctxt:  An XML parser context
+ *
+ * called when the document end has been detected.
+ */
+static void
+endDocumentCallback(void *ctx ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+#if 0
+/**
+ * startElementCallback:
+ * @ctxt:  An XML parser context
+ * @name:  The element name
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+startElementCallback(void *ctx ATTRIBUTE_UNUSED,
+                     const xmlChar * name ATTRIBUTE_UNUSED,
+                     const xmlChar ** atts ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * endElementCallback:
+ * @ctxt:  An XML parser context
+ * @name:  The element name
+ *
+ * called when the end of an element has been detected.
+ */
+static void
+endElementCallback(void *ctx ATTRIBUTE_UNUSED,
+                   const xmlChar * name ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+#endif
+
+/**
+ * charactersCallback:
+ * @ctxt:  An XML parser context
+ * @ch:  a xmlChar string
+ * @len: the number of xmlChar
+ *
+ * receiving some chars from the parser.
+ * Question: how much at a time ???
+ */
+static void
+charactersCallback(void *ctx ATTRIBUTE_UNUSED,
+                   const xmlChar * ch ATTRIBUTE_UNUSED,
+                   int len ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * referenceCallback:
+ * @ctxt:  An XML parser context
+ * @name:  The entity name
+ *
+ * called when an entity reference is detected.
+ */
+static void
+referenceCallback(void *ctx ATTRIBUTE_UNUSED,
+                  const xmlChar * name ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * ignorableWhitespaceCallback:
+ * @ctxt:  An XML parser context
+ * @ch:  a xmlChar string
+ * @start: the first char in the string
+ * @len: the number of xmlChar
+ *
+ * receiving some ignorable whitespaces from the parser.
+ * Question: how much at a time ???
+ */
+static void
+ignorableWhitespaceCallback(void *ctx ATTRIBUTE_UNUSED,
+                            const xmlChar * ch ATTRIBUTE_UNUSED,
+                            int len ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * processingInstructionCallback:
+ * @ctxt:  An XML parser context
+ * @target:  the target name
+ * @data: the PI data's
+ * @len: the number of xmlChar
+ *
+ * A processing instruction has been parsed.
+ */
+static void
+processingInstructionCallback(void *ctx ATTRIBUTE_UNUSED,
+                              const xmlChar * target ATTRIBUTE_UNUSED,
+                              const xmlChar * data ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * cdataBlockCallback:
+ * @ctx: the user data (XML parser context)
+ * @value:  The pcdata content
+ * @len:  the block length
+ *
+ * called when a pcdata block has been parsed
+ */
+static void
+cdataBlockCallback(void *ctx ATTRIBUTE_UNUSED,
+                   const xmlChar * value ATTRIBUTE_UNUSED,
+                   int len ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * commentCallback:
+ * @ctxt:  An XML parser context
+ * @value:  the comment content
+ *
+ * A comment has been parsed.
+ */
+static void
+commentCallback(void *ctx ATTRIBUTE_UNUSED,
+                const xmlChar * value ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * warningCallback:
+ * @ctxt:  An XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ *
+ * Display and format a warning messages, gives file, line, position and
+ * extra parameters.
+ */
+static void XMLCDECL
+warningCallback(void *ctx ATTRIBUTE_UNUSED,
+                const char *msg ATTRIBUTE_UNUSED, ...)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * errorCallback:
+ * @ctxt:  An XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ *
+ * Display and format a error messages, gives file, line, position and
+ * extra parameters.
+ */
+static void XMLCDECL
+errorCallback(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED,
+              ...)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * fatalErrorCallback:
+ * @ctxt:  An XML parser context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ *
+ * Display and format a fatalError messages, gives file, line, position and
+ * extra parameters.
+ */
+static void XMLCDECL
+fatalErrorCallback(void *ctx ATTRIBUTE_UNUSED,
+                   const char *msg ATTRIBUTE_UNUSED, ...)
+{
+    return;
+}
+
+
+/*
+ * SAX2 specific callbacks
+ */
+
+/**
+ * startElementNsCallback:
+ * @ctxt:  An XML parser context
+ * @name:  The element name
+ *
+ * called when an opening tag has been processed.
+ */
+static void
+startElementNsCallback(void *ctx ATTRIBUTE_UNUSED,
+                       const xmlChar * localname ATTRIBUTE_UNUSED,
+                       const xmlChar * prefix ATTRIBUTE_UNUSED,
+                       const xmlChar * URI ATTRIBUTE_UNUSED,
+                       int nb_namespaces ATTRIBUTE_UNUSED,
+                       const xmlChar ** namespaces ATTRIBUTE_UNUSED,
+                       int nb_attributes ATTRIBUTE_UNUSED,
+                       int nb_defaulted ATTRIBUTE_UNUSED,
+                       const xmlChar ** attributes ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+/**
+ * endElementCallback:
+ * @ctxt:  An XML parser context
+ * @name:  The element name
+ *
+ * called when the end of an element has been detected.
+ */
+static void
+endElementNsCallback(void *ctx ATTRIBUTE_UNUSED,
+                     const xmlChar * localname ATTRIBUTE_UNUSED,
+                     const xmlChar * prefix ATTRIBUTE_UNUSED,
+                     const xmlChar * URI ATTRIBUTE_UNUSED)
+{
+    callbacks++;
+    return;
+}
+
+static xmlSAXHandler callbackSAX2HandlerStruct = {
+    internalSubsetCallback,
+    isStandaloneCallback,
+    hasInternalSubsetCallback,
+    hasExternalSubsetCallback,
+    resolveEntityCallback,
+    getEntityCallback,
+    entityDeclCallback,
+    notationDeclCallback,
+    attributeDeclCallback,
+    elementDeclCallback,
+    unparsedEntityDeclCallback,
+    setDocumentLocatorCallback,
+    startDocumentCallback,
+    endDocumentCallback,
+    NULL,
+    NULL,
+    referenceCallback,
+    charactersCallback,
+    ignorableWhitespaceCallback,
+    processingInstructionCallback,
+    commentCallback,
+    warningCallback,
+    errorCallback,
+    fatalErrorCallback,
+    getParameterEntityCallback,
+    cdataBlockCallback,
+    externalSubsetCallback,
+    XML_SAX2_MAGIC,
+    NULL,
+    startElementNsCallback,
+    endElementNsCallback,
+    NULL
+};
+
+static xmlSAXHandlerPtr callbackSAX2Handler = &callbackSAX2HandlerStruct;
+
+/************************************************************************
+ *                                                                     *
+ *             The tests front-ends                                     *
+ *                                                                     *
+ ************************************************************************/
+
+/**
+ * readerTest:
+ * @filename: the file to parse
+ * @max_size: size of the limit to test
+ * @options: parsing options
+ * @fail: should a failure be reported
+ *
+ * Parse a memory generated file using SAX
+ *
+ * Returns 0 in case of success, an error code otherwise
+ */
+static int
+saxTest(const char *filename, size_t limit, int options, int fail) {
+    int res = 0;
+    xmlParserCtxtPtr ctxt;
+    xmlDocPtr doc;
+    xmlSAXHandlerPtr old_sax;
+
+    nb_tests++;
+
+    maxlen = limit;
+    ctxt = xmlNewParserCtxt();
+    if (ctxt == NULL) {
+        fprintf(stderr, "Failed to create parser context\n");
+       return(1);
+    }
+    old_sax = ctxt->sax;
+    ctxt->sax = callbackSAX2Handler;
+    ctxt->userData = NULL;
+    doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
+
+    if (doc != NULL) {
+        fprintf(stderr, "SAX parsing generated a document !\n");
+        xmlFreeDoc(doc);
+        res = 0;
+    } else if (ctxt->wellFormed == 0) {
+        if (fail)
+            res = 0;
+        else {
+            fprintf(stderr, "Failed to parse '%s' %lu\n", filename, limit);
+            res = 1;
+        }
+    } else {
+        if (fail) {
+            fprintf(stderr, "Failed to get failure for '%s' %lu\n",
+                    filename, limit);
+            res = 1;
+        } else
+            res = 0;
+    }
+    ctxt->sax = old_sax;
+    xmlFreeParserCtxt(ctxt);
+
+    return(res);
+}
+#ifdef LIBXML_READER_ENABLED
+/**
+ * readerTest:
+ * @filename: the file to parse
+ * @max_size: size of the limit to test
+ * @options: parsing options
+ * @fail: should a failure be reported
+ *
+ * Parse a memory generated file using the xmlReader
+ *
+ * Returns 0 in case of success, an error code otherwise
+ */
+static int
+readerTest(const char *filename, size_t limit, int options, int fail) {
+    xmlTextReaderPtr reader;
+    int res = 0;
+    int ret;
+
+    nb_tests++;
+
+    maxlen = limit;
+    reader = xmlReaderForFile(filename , NULL, options);
+    if (reader == NULL) {
+        fprintf(stderr, "Failed to open '%s' test\n", filename);
+       return(1);
+    }
+    ret = xmlTextReaderRead(reader);
+    while (ret == 1) {
+        ret = xmlTextReaderRead(reader);
+    }
+    if (ret != 0) {
+        if (fail)
+            res = 0;
+        else {
+            if (strncmp(filename, "crazy:", 6) == 0)
+                fprintf(stderr, "Failed to parse '%s' %u\n",
+                        filename, crazy_indx);
+            else
+                fprintf(stderr, "Failed to parse '%s' %lu\n",
+                        filename, limit);
+            res = 1;
+        }
+    } else {
+        if (fail) {
+            if (strncmp(filename, "crazy:", 6) == 0)
+                fprintf(stderr, "Failed to get failure for '%s' %u\n",
+                        filename, crazy_indx);
+            else
+                fprintf(stderr, "Failed to get failure for '%s' %lu\n",
+                        filename, limit);
+            res = 1;
+        } else
+            res = 0;
+    }
+    if (timeout)
+        res = 1;
+    xmlFreeTextReader(reader);
+
+    return(res);
+}
+#endif
+
+/************************************************************************
+ *                                                                     *
+ *                     Tests descriptions                              *
+ *                                                                     *
+ ************************************************************************/
+
+typedef int (*functest) (const char *filename, size_t limit, int options,
+                         int fail);
+
+typedef struct limitDesc limitDesc;
+typedef limitDesc *limitDescPtr;
+struct limitDesc {
+    const char *name; /* the huge generator name */
+    size_t limit;     /* the limit to test */
+    int options;      /* extra parser options */
+    int fail;         /* whether the test should fail */
+};
+
+static limitDesc limitDescriptions[] = {
+    /* max length of a text node in content */
+    {"huge:textNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
+    {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
+    {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
+    /* max length of a text node in content */
+    {"huge:attrNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
+    {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
+    {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
+    /* max length of a comment node */
+    {"huge:commentNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
+    {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
+    {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
+    /* max length of a PI node */
+    {"huge:piNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
+    {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
+    {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
+};
+
+typedef struct testDesc testDesc;
+typedef testDesc *testDescPtr;
+struct testDesc {
+    const char *desc; /* descripton of the test */
+    functest    func; /* function implementing the test */
+};
+
+static
+testDesc testDescriptions[] = {
+    { "Parsing of huge files with the sax parser", saxTest},
+/*    { "Parsing of huge files with the tree parser", treeTest}, */
+#ifdef LIBXML_READER_ENABLED
+    { "Parsing of huge files with the reader", readerTest},
+#endif
+    {NULL, NULL}
+};
+
+typedef struct testException testException;
+typedef testException *testExceptionPtr;
+struct testException {
+    unsigned int test;  /* the parser test number */
+    unsigned int limit; /* the limit test number */
+    int fail;           /* new fail value or -1*/
+    size_t size;        /* new limit value or 0 */
+};
+
+static
+testException testExceptions[] = {
+    /* the SAX parser doesn't hit a limit of XML_MAX_TEXT_LENGTH text nodes */
+    { 0, 1, 0, 0},
+};
+
+static int
+launchTests(testDescPtr tst, unsigned int test) {
+    int res = 0, err = 0;
+    unsigned int i, j;
+    size_t limit;
+    int fail;
+
+    if (tst == NULL) return(-1);
+
+    for (i = 0;i < sizeof(limitDescriptions)/sizeof(limitDescriptions[0]);i++) {
+        limit = limitDescriptions[i].limit;
+        fail = limitDescriptions[i].fail;
+        /*
+         * Handle exceptions if any
+         */
+        for (j = 0;j < sizeof(testExceptions)/sizeof(testExceptions[0]);j++) {
+            if ((testExceptions[j].test == test) &&
+                (testExceptions[j].limit == i)) {
+                if (testExceptions[j].fail != -1)
+                    fail = testExceptions[j].fail;
+                if (testExceptions[j].size != 0)
+                    limit = testExceptions[j].size;
+                break;
+            }
+        }
+        res = tst->func(limitDescriptions[i].name, limit,
+                        limitDescriptions[i].options, fail);
+        if (res != 0) {
+            nb_errors++;
+            err++;
+        }
+    }
+    return(err);
+}
+
+
+static int
+runtest(unsigned int i) {
+    int ret = 0, res;
+    int old_errors, old_tests, old_leaks;
+
+    old_errors = nb_errors;
+    old_tests = nb_tests;
+    old_leaks = nb_leaks;
+    if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL))
+       printf("## %s\n", testDescriptions[i].desc);
+    res = launchTests(&testDescriptions[i], i);
+    if (res != 0)
+       ret++;
+    if (verbose) {
+       if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
+           printf("Ran %d tests, no errors\n", nb_tests - old_tests);
+       else
+           printf("Ran %d tests, %d errors, %d leaks\n",
+                  nb_tests - old_tests,
+                  nb_errors - old_errors,
+                  nb_leaks - old_leaks);
+    }
+    return(ret);
+}
+
+static int
+launchCrazySAX(unsigned int test, int fail) {
+    int res = 0, err = 0;
+
+    crazy_indx = test;
+
+    res = saxTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail);
+    if (res != 0) {
+        nb_errors++;
+        err++;
+    }
+    if (tests_quiet == 0)
+        fprintf(stderr, "%c", crazy[test]);
+
+    return(err);
+}
+
+#ifdef LIBXML_READER_ENABLED
+static int
+launchCrazy(unsigned int test, int fail) {
+    int res = 0, err = 0;
+
+    crazy_indx = test;
+
+    res = readerTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail);
+    if (res != 0) {
+        nb_errors++;
+        err++;
+    }
+    if (tests_quiet == 0)
+        fprintf(stderr, "%c", crazy[test]);
+
+    return(err);
+}
+#endif
+
+static int get_crazy_fail(int test) {
+    /*
+     * adding 1000000 of character 'a' leads to parser failure mostly
+     * everywhere except in those special spots. Need to be updated
+     * each time crazy is updated
+     */
+    int fail = 1;
+    if ((test == 44) || /* PI in Misc */
+        ((test >= 50) && (test <= 55)) || /* Comment in Misc */
+        (test == 79) || /* PI in DTD */
+        ((test >= 85) && (test <= 90)) || /* Comment in DTD */
+        (test == 154) || /* PI in Misc */
+        ((test >= 160) && (test <= 165)) || /* Comment in Misc */
+        ((test >= 178) && (test <= 181)) || /* attribute value */
+        (test == 183) || /* Text */
+        (test == 189) || /* PI in Content */
+        (test == 191) || /* Text */
+        ((test >= 195) && (test <= 200)) || /* Comment in Content */
+        ((test >= 203) && (test <= 206)) || /* Text */
+        (test == 215) || (test == 216) || /* in CDATA */
+        (test == 219) || /* Text */
+        (test == 231) || /* PI in Misc */
+        ((test >= 237) && (test <= 242))) /* Comment in Misc */
+        fail = 0;
+    return(fail);
+}
+
+static int
+runcrazy(void) {
+    int ret = 0, res = 0;
+    int old_errors, old_tests, old_leaks;
+    unsigned int i;
+
+    old_errors = nb_errors;
+    old_tests = nb_tests;
+    old_leaks = nb_leaks;
+
+#ifdef LIBXML_READER_ENABLED
+    if (tests_quiet == 0) {
+       printf("## Crazy tests on reader\n");
+    }
+    for (i = 0;i < strlen(crazy);i++) {
+        res += launchCrazy(i, get_crazy_fail(i));
+        if (res != 0)
+            ret++;
+    }
+#endif
+
+    if (tests_quiet == 0) {
+       printf("\n## Crazy tests on SAX\n");
+    }
+    for (i = 0;i < strlen(crazy);i++) {
+        res += launchCrazySAX(i, get_crazy_fail(i));
+        if (res != 0)
+            ret++;
+    }
+    if (tests_quiet == 0)
+        fprintf(stderr, "\n");
+    if (verbose) {
+       if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
+           printf("Ran %d tests, no errors\n", nb_tests - old_tests);
+       else
+           printf("Ran %d tests, %d errors, %d leaks\n",
+                  nb_tests - old_tests,
+                  nb_errors - old_errors,
+                  nb_leaks - old_leaks);
+    }
+    return(ret);
+}
+
+
+int
+main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
+    int i, a, ret = 0;
+    int subset = 0;
+
+    fillFilling();
+    initializeLibxml2();
+
+    for (a = 1; a < argc;a++) {
+        if (!strcmp(argv[a], "-v"))
+           verbose = 1;
+        else if (!strcmp(argv[a], "-quiet"))
+           tests_quiet = 1;
+        else if (!strcmp(argv[a], "-crazy"))
+           subset = 1;
+    }
+    if (subset == 0) {
+       for (i = 0; testDescriptions[i].func != NULL; i++) {
+           ret += runtest(i);
+       }
+    }
+    ret += runcrazy();
+    if ((nb_errors == 0) && (nb_leaks == 0)) {
+        ret = 0;
+       printf("Total %d tests, no errors\n",
+              nb_tests);
+    } else {
+        ret = 1;
+       printf("Total %d tests, %d errors, %d leaks\n",
+              nb_tests, nb_errors, nb_leaks);
+    }
+    xmlCleanupParser();
+    xmlMemoryDump();
+
+    return(ret);
+}
index bdc7c30..e5d5d1b 100644 (file)
  * daniel@veillard.com
  */
 
-#ifdef HAVE_CONFIG_H
 #include "libxml.h"
-#else
 #include <stdio.h>
-#endif
 
 #if !defined(_WIN32) || defined(__CYGWIN__)
 #include <unistd.h>
@@ -149,10 +146,6 @@ static void globfree(glob_t *pglob) {
     }
 }
 
-#if !defined(__MINGW32__)
-#define vsnprintf _vsnprintf
-#define snprintf _snprintf
-#endif
 #else
 #include <glob.h>
 #endif
@@ -687,12 +680,10 @@ recursiveDetectTest(const char *filename,
     xmlDocPtr doc;
     xmlParserCtxtPtr ctxt;
     int res = 0;
-    int mem;
 
     nb_tests++;
 
     ctxt = xmlNewParserCtxt();
-    mem = xmlMemUsed();
     /*
      * base of the test, parse with the old API
      */
@@ -728,12 +719,10 @@ notRecursiveDetectTest(const char *filename,
     xmlDocPtr doc;
     xmlParserCtxtPtr ctxt;
     int res = 0;
-    int mem;
 
     nb_tests++;
 
     ctxt = xmlNewParserCtxt();
-    mem = xmlMemUsed();
     /*
      * base of the test, parse with the old API
      */
index 1eeac0e..8921204 100644 (file)
--- a/threads.c
+++ b/threads.c
@@ -146,6 +146,7 @@ struct _xmlRMutex {
 static pthread_key_t globalkey;
 static pthread_t mainthread;
 static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+static pthread_once_t once_control_init = PTHREAD_ONCE_INIT;
 static pthread_mutex_t global_init_lock = PTHREAD_MUTEX_INITIALIZER;
 #elif defined HAVE_WIN32_THREADS
 #if defined(HAVE_COMPILER_TLS)
@@ -251,7 +252,6 @@ xmlMutexLock(xmlMutexPtr tok)
 #ifdef DEBUG_THREADS
         xmlGenericError(xmlGenericErrorContext,
                         "xmlMutexLock():BeOS:Couldn't aquire semaphore\n");
-        exit();
 #endif
     }
     tok->tid = find_thread(NULL);
@@ -378,7 +378,7 @@ xmlRMutexLock(xmlRMutexPtr tok)
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
     EnterCriticalSection(&tok->cs);
-    ++tok->count;
+    tok->count++;
 #elif defined HAVE_BEOS_THREADS
     if (tok->lock->tid == find_thread(NULL)) {
         tok->count++;
@@ -414,8 +414,10 @@ xmlRMutexUnlock(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
     }
     pthread_mutex_unlock(&tok->lock);
 #elif defined HAVE_WIN32_THREADS
-    if (!--tok->count)
+    if (tok->count > 0) {
         LeaveCriticalSection(&tok->cs);
+       tok->count--;
+    }
 #elif defined HAVE_BEOS_THREADS
     if (tok->lock->tid == find_thread(NULL)) {
         tok->count--;
@@ -439,7 +441,7 @@ __xmlGlobalInitMutexLock(void)
     /* Make sure the global init lock is initialized and then lock it. */
 #ifdef HAVE_PTHREAD_H
     /* The mutex is statically initialized, so we just lock it. */
-    if (pthread_mutex_lock)
+    if (pthread_mutex_lock != NULL)
         pthread_mutex_lock(&global_init_lock);
 #elif defined HAVE_WIN32_THREADS
     LPCRITICAL_SECTION cs;
@@ -499,7 +501,6 @@ __xmlGlobalInitMutexLock(void)
 #ifdef DEBUG_THREADS
         xmlGenericError(xmlGenericErrorContext,
                         "xmlGlobalInitMutexLock():BeOS:Couldn't acquire semaphore\n");
-        exit();
 #endif
     }
 #endif
@@ -509,7 +510,7 @@ void
 __xmlGlobalInitMutexUnlock(void)
 {
 #ifdef HAVE_PTHREAD_H
-    if (pthread_mutex_unlock)
+    if (pthread_mutex_unlock != NULL)
         pthread_mutex_unlock(&global_init_lock);
 #elif defined HAVE_WIN32_THREADS
     if (global_init_lock != NULL) {
@@ -915,6 +916,7 @@ xmlCleanupThreads(void)
 #ifdef HAVE_PTHREAD_H
     if ((libxml_is_threaded)  && (pthread_key_delete != NULL))
         pthread_key_delete(globalkey);
+    once_control = once_control_init;
 #elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
     if (globalkey != TLS_OUT_OF_INDEXES) {
         xmlGlobalStateCleanupHelperParams *p;
@@ -954,6 +956,7 @@ xmlOnceInit(void)
 #ifdef HAVE_PTHREAD_H
     (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
     mainthread = pthread_self();
+    __xmlInitializeDict();
 #elif defined(HAVE_WIN32_THREADS)
     if (!run_once.done) {
         if (InterlockedIncrement(&run_once.control) == 1) {
@@ -961,6 +964,7 @@ xmlOnceInit(void)
             globalkey = TlsAlloc();
 #endif
             mainthread = GetCurrentThreadId();
+           __xmlInitializeDict();
             run_once.done = 1;
         } else {
             /* Another thread is working; give up our slice and
@@ -974,6 +978,7 @@ xmlOnceInit(void)
         globalkey = tls_allocate();
         tls_set(globalkey, NULL);
         mainthread = find_thread(NULL);
+       __xmlInitializeDict();
     } else
         atomic_add(&run_once_init, -1);
 #endif
diff --git a/timsort.h b/timsort.h
new file mode 100644 (file)
index 0000000..efa3aab
--- /dev/null
+++ b/timsort.h
@@ -0,0 +1,514 @@
+/*
+ * taken from https://github.com/swenson/sort
+ * Kept as is for the moment to be able to apply upstream patches for that
+ * code, currently used only to speed up XPath node sorting, see xpath.c
+ */
+
+/*
+ * All code in this header, unless otherwise specified, is hereby licensed under the MIT Public License:
+
+Copyright (c) 2010 Christopher Swenson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#else
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#elif defined(WIN32)
+typedef __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#endif
+#endif
+
+#ifndef MK_UINT64
+#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1300
+#define MK_UINT64(x) ((uint64_t)(x))
+#else
+#define MK_UINT64(x) x##ULL
+#endif
+#endif
+
+#ifndef MAX
+#define MAX(x,y) (((x) > (y) ? (x) : (y)))
+#endif
+#ifndef MIN
+#define MIN(x,y) (((x) < (y) ? (x) : (y)))
+#endif
+
+int compute_minrun(uint64_t);
+
+#ifndef CLZ
+#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 3))
+#define CLZ __builtin_clzll
+#else
+
+int clzll(uint64_t);
+
+/* adapted from Hacker's Delight */
+int clzll(uint64_t x) /* {{{ */
+{
+  int n;
+
+  if (x == 0) return(64);
+  n = 0;
+  if (x <= MK_UINT64(0x00000000FFFFFFFF)) {n = n + 32; x = x << 32;}
+  if (x <= MK_UINT64(0x0000FFFFFFFFFFFF)) {n = n + 16; x = x << 16;}
+  if (x <= MK_UINT64(0x00FFFFFFFFFFFFFF)) {n = n + 8; x = x << 8;}
+  if (x <= MK_UINT64(0x0FFFFFFFFFFFFFFF)) {n = n + 4; x = x << 4;}
+  if (x <= MK_UINT64(0x3FFFFFFFFFFFFFFF)) {n = n + 2; x = x << 2;}
+  if (x <= MK_UINT64(0x7FFFFFFFFFFFFFFF)) {n = n + 1;}
+  return n;
+}
+/* }}} */
+
+#define CLZ clzll
+#endif
+#endif
+
+int compute_minrun(uint64_t size) /* {{{ */
+{
+  const int top_bit = 64 - CLZ(size);
+  const int shift = MAX(top_bit, 6) - 6;
+  const int minrun = size >> shift;
+  const uint64_t mask = (MK_UINT64(1) << shift) - 1;
+  if (mask & size) return minrun + 1;
+  return minrun;
+}
+/* }}} */
+
+#ifndef SORT_NAME
+#error "Must declare SORT_NAME"
+#endif
+
+#ifndef SORT_TYPE
+#error "Must declare SORT_TYPE"
+#endif
+
+#ifndef SORT_CMP
+#define SORT_CMP(x, y)  ((x) < (y) ? -1 : ((x) == (y) ? 0 : 1))
+#endif
+
+
+#define SORT_SWAP(x,y) {SORT_TYPE __SORT_SWAP_t = (x); (x) = (y); (y) = __SORT_SWAP_t;}
+
+#define SORT_CONCAT(x, y) x ## _ ## y
+#define SORT_MAKE_STR1(x, y) SORT_CONCAT(x,y)
+#define SORT_MAKE_STR(x) SORT_MAKE_STR1(SORT_NAME,x)
+
+#define BINARY_INSERTION_FIND  SORT_MAKE_STR(binary_insertion_find)
+#define BINARY_INSERTION_SORT_START SORT_MAKE_STR(binary_insertion_sort_start)
+#define BINARY_INSERTION_SORT  SORT_MAKE_STR(binary_insertion_sort)
+#define REVERSE_ELEMENTS       SORT_MAKE_STR(reverse_elements)
+#define COUNT_RUN              SORT_MAKE_STR(count_run)
+#define CHECK_INVARIANT        SORT_MAKE_STR(check_invariant)
+#define TIM_SORT               SORT_MAKE_STR(tim_sort)
+#define TIM_SORT_RESIZE        SORT_MAKE_STR(tim_sort_resize)
+#define TIM_SORT_MERGE         SORT_MAKE_STR(tim_sort_merge)
+#define TIM_SORT_COLLAPSE      SORT_MAKE_STR(tim_sort_collapse)
+
+#define TIM_SORT_RUN_T         SORT_MAKE_STR(tim_sort_run_t)
+#define TEMP_STORAGE_T         SORT_MAKE_STR(temp_storage_t)
+
+typedef struct {
+  int64_t start;
+  int64_t length;
+} TIM_SORT_RUN_T;
+
+void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size);
+void TIM_SORT(SORT_TYPE *dst, const size_t size);
+
+/* Function used to do a binary search for binary insertion sort */
+static int64_t BINARY_INSERTION_FIND(SORT_TYPE *dst, const SORT_TYPE x, const size_t size)
+{
+  int64_t l, c, r;
+  SORT_TYPE lx;
+  SORT_TYPE cx;
+  l = 0;
+  r = size - 1;
+  c = r >> 1;
+  lx = dst[l];
+
+  /* check for beginning conditions */
+  if (SORT_CMP(x, lx) < 0)
+    return 0;
+  else if (SORT_CMP(x, lx) == 0)
+  {
+    int64_t i = 1;
+    while (SORT_CMP(x, dst[i]) == 0) i++;
+    return i;
+  }
+
+  cx = dst[c];
+  while (1)
+  {
+    const int val = SORT_CMP(x, cx);
+    if (val < 0)
+    {
+      if (c - l <= 1) return c;
+      r = c;
+    }
+    else if (val > 0)
+    {
+      if (r - c <= 1) return c + 1;
+      l = c;
+      lx = cx;
+    }
+    else
+    {
+      do
+      {
+        cx = dst[++c];
+      } while (SORT_CMP(x, cx) == 0);
+      return c;
+    }
+    c = l + ((r - l) >> 1);
+    cx = dst[c];
+  }
+}
+
+/* Binary insertion sort, but knowing that the first "start" entries are sorted.  Used in timsort. */
+static void BINARY_INSERTION_SORT_START(SORT_TYPE *dst, const size_t start, const size_t size)
+{
+  int64_t i;
+  for (i = start; i < (int64_t) size; i++)
+  {
+    int64_t j;
+    SORT_TYPE x;
+    int64_t location;
+    /* If this entry is already correct, just move along */
+    if (SORT_CMP(dst[i - 1], dst[i]) <= 0) continue;
+
+    /* Else we need to find the right place, shift everything over, and squeeze in */
+    x = dst[i];
+    location = BINARY_INSERTION_FIND(dst, x, i);
+    for (j = i - 1; j >= location; j--)
+    {
+      dst[j + 1] = dst[j];
+    }
+    dst[location] = x;
+  }
+}
+
+/* Binary insertion sort */
+void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size)
+{
+  BINARY_INSERTION_SORT_START(dst, 1, size);
+}
+
+/* timsort implementation, based on timsort.txt */
+
+static void REVERSE_ELEMENTS(SORT_TYPE *dst, int64_t start, int64_t end)
+{
+  while (1)
+  {
+    if (start >= end) return;
+    SORT_SWAP(dst[start], dst[end]);
+    start++;
+    end--;
+  }
+}
+
+static int64_t COUNT_RUN(SORT_TYPE *dst, const int64_t start, const size_t size)
+{
+  int64_t curr;
+  if (size - start == 1) return 1;
+  if (start >= (int64_t) size - 2)
+  {
+    if (SORT_CMP(dst[size - 2], dst[size - 1]) > 0)
+      SORT_SWAP(dst[size - 2], dst[size - 1]);
+    return 2;
+  }
+
+  curr = start + 2;
+
+  if (SORT_CMP(dst[start], dst[start + 1]) <= 0)
+  {
+    /* increasing run */
+    while (1)
+    {
+      if (curr == (int64_t) size - 1) break;
+      if (SORT_CMP(dst[curr - 1], dst[curr]) > 0) break;
+      curr++;
+    }
+    return curr - start;
+  }
+  else
+  {
+    /* decreasing run */
+    while (1)
+    {
+      if (curr == (int64_t) size - 1) break;
+      if (SORT_CMP(dst[curr - 1], dst[curr]) <= 0) break;
+      curr++;
+    }
+    /* reverse in-place */
+    REVERSE_ELEMENTS(dst, start, curr - 1);
+    return curr - start;
+  }
+}
+
+#define PUSH_NEXT() do {\
+len = COUNT_RUN(dst, curr, size);\
+run = minrun;\
+if (run < minrun) run = minrun;\
+if (run > (int64_t) size - curr) run = size - curr;\
+if (run > len)\
+{\
+  BINARY_INSERTION_SORT_START(&dst[curr], len, run);\
+  len = run;\
+}\
+{\
+run_stack[stack_curr].start = curr;\
+run_stack[stack_curr].length = len;\
+stack_curr++;\
+}\
+curr += len;\
+if (curr == (int64_t) size)\
+{\
+  /* finish up */ \
+  while (stack_curr > 1) \
+  { \
+    TIM_SORT_MERGE(dst, run_stack, stack_curr, store); \
+    run_stack[stack_curr - 2].length += run_stack[stack_curr - 1].length; \
+    stack_curr--; \
+  } \
+  if (store->storage != NULL)\
+  {\
+    free(store->storage);\
+    store->storage = NULL;\
+  }\
+  return;\
+}\
+}\
+while (0)
+
+static int CHECK_INVARIANT(TIM_SORT_RUN_T *stack, const int stack_curr)
+{
+  int64_t A, B, C;
+  if (stack_curr < 2) return 1;
+  if (stack_curr == 2)
+  {
+    const int64_t A1 = stack[stack_curr - 2].length;
+    const int64_t B1 = stack[stack_curr - 1].length;
+    if (A1 <= B1) return 0;
+    return 1;
+  }
+  A = stack[stack_curr - 3].length;
+  B = stack[stack_curr - 2].length;
+  C = stack[stack_curr - 1].length;
+  if ((A <= B + C) || (B <= C)) return 0;
+  return 1;
+}
+
+typedef struct {
+  size_t alloc;
+  SORT_TYPE *storage;
+} TEMP_STORAGE_T;
+
+
+static void TIM_SORT_RESIZE(TEMP_STORAGE_T *store, const size_t new_size)
+{
+  if (store->alloc < new_size)
+  {
+    SORT_TYPE *tempstore = (SORT_TYPE *)realloc(store->storage, new_size * sizeof(SORT_TYPE));
+    if (tempstore == NULL)
+    {
+      fprintf(stderr, "Error allocating temporary storage for tim sort: need %lu bytes", sizeof(SORT_TYPE) * new_size);
+      exit(1);
+    }
+    store->storage = tempstore;
+    store->alloc = new_size;
+  }
+}
+
+static void TIM_SORT_MERGE(SORT_TYPE *dst, const TIM_SORT_RUN_T *stack, const int stack_curr, TEMP_STORAGE_T *store)
+{
+  const int64_t A = stack[stack_curr - 2].length;
+  const int64_t B = stack[stack_curr - 1].length;
+  const int64_t curr = stack[stack_curr - 2].start;
+  SORT_TYPE *storage;
+  int64_t i, j, k;
+
+  TIM_SORT_RESIZE(store, MIN(A, B));
+  storage = store->storage;
+
+  /* left merge */
+  if (A < B)
+  {
+    memcpy(storage, &dst[curr], A * sizeof(SORT_TYPE));
+    i = 0;
+    j = curr + A;
+
+    for (k = curr; k < curr + A + B; k++)
+    {
+      if ((i < A) && (j < curr + A + B))
+      {
+        if (SORT_CMP(storage[i], dst[j]) <= 0)
+          dst[k] = storage[i++];
+        else
+          dst[k] = dst[j++];
+      }
+      else if (i < A)
+      {
+        dst[k] = storage[i++];
+      }
+      else
+        dst[k] = dst[j++];
+    }
+  }
+  /* right merge */
+  else
+  {
+    memcpy(storage, &dst[curr + A], B * sizeof(SORT_TYPE));
+    i = B - 1;
+    j = curr + A - 1;
+
+    for (k = curr + A + B - 1; k >= curr; k--)
+    {
+      if ((i >= 0) && (j >= curr))
+      {
+          if (SORT_CMP(dst[j], storage[i]) > 0)
+            dst[k] = dst[j--];
+          else
+            dst[k] = storage[i--];
+      }
+      else if (i >= 0)
+        dst[k] = storage[i--];
+      else
+        dst[k] = dst[j--];
+    }
+  }
+}
+
+static int TIM_SORT_COLLAPSE(SORT_TYPE *dst, TIM_SORT_RUN_T *stack, int stack_curr, TEMP_STORAGE_T *store, const size_t size)
+{
+  while (1)
+  {
+    int64_t A, B, C;
+    /* if the stack only has one thing on it, we are done with the collapse */
+    if (stack_curr <= 1) break;
+    /* if this is the last merge, just do it */
+    if ((stack_curr == 2) &&
+        (stack[0].length + stack[1].length == (int64_t) size))
+    {
+      TIM_SORT_MERGE(dst, stack, stack_curr, store);
+      stack[0].length += stack[1].length;
+      stack_curr--;
+      break;
+    }
+    /* check if the invariant is off for a stack of 2 elements */
+    else if ((stack_curr == 2) && (stack[0].length <= stack[1].length))
+    {
+      TIM_SORT_MERGE(dst, stack, stack_curr, store);
+      stack[0].length += stack[1].length;
+      stack_curr--;
+      break;
+    }
+    else if (stack_curr == 2)
+      break;
+
+    A = stack[stack_curr - 3].length;
+    B = stack[stack_curr - 2].length;
+    C = stack[stack_curr - 1].length;
+
+    /* check first invariant */
+    if (A <= B + C)
+    {
+      if (A < C)
+      {
+        TIM_SORT_MERGE(dst, stack, stack_curr - 1, store);
+        stack[stack_curr - 3].length += stack[stack_curr - 2].length;
+        stack[stack_curr - 2] = stack[stack_curr - 1];
+        stack_curr--;
+      }
+      else
+      {
+        TIM_SORT_MERGE(dst, stack, stack_curr, store);
+        stack[stack_curr - 2].length += stack[stack_curr - 1].length;
+        stack_curr--;
+      }
+    }
+    /* check second invariant */
+    else if (B <= C)
+    {
+      TIM_SORT_MERGE(dst, stack, stack_curr, store);
+      stack[stack_curr - 2].length += stack[stack_curr - 1].length;
+      stack_curr--;
+    }
+    else
+      break;
+  }
+  return stack_curr;
+}
+
+void TIM_SORT(SORT_TYPE *dst, const size_t size)
+{
+  int minrun;
+  TEMP_STORAGE_T _store, *store;
+  TIM_SORT_RUN_T run_stack[128];
+  int stack_curr = 0;
+  int64_t len, run;
+  int64_t curr = 0;
+
+  if (size < 64)
+  {
+    BINARY_INSERTION_SORT(dst, size);
+    return;
+  }
+
+  /* compute the minimum run length */
+  minrun = compute_minrun(size);
+
+  /* temporary storage for merges */
+  store = &_store;
+  store->alloc = 0;
+  store->storage = NULL;
+
+  PUSH_NEXT();
+  PUSH_NEXT();
+  PUSH_NEXT();
+
+  while (1)
+  {
+    if (!CHECK_INVARIANT(run_stack, stack_curr))
+    {
+      stack_curr = TIM_SORT_COLLAPSE(dst, run_stack, stack_curr, store, size);
+      continue;
+    }
+    PUSH_NEXT();
+  }
+}
+
+#undef SORT_CONCAT
+#undef SORT_MAKE_STR1
+#undef SORT_MAKE_STR
+#undef SORT_NAME
+#undef SORT_TYPE
+#undef SORT_CMP
+#undef TEMP_STORAGE_T
+#undef TIM_SORT_RUN_T
+#undef PUSH_NEXT
+#undef SORT_SWAP
+#undef SORT_CONCAT
+#undef SORT_MAKE_STR1
+#undef SORT_MAKE_STR
+#undef BINARY_INSERTION_FIND
+#undef BINARY_INSERTION_SORT_START
+#undef BINARY_INSERTION_SORT
+#undef REVERSE_ELEMENTS
+#undef COUNT_RUN
+#undef TIM_SORT
+#undef TIM_SORT_RESIZE
+#undef TIM_SORT_COLLAPSE
+#undef TIM_SORT_RUN_T
+#undef TEMP_STORAGE_T
diff --git a/tree.c b/tree.c
index 8baae3d..307782c 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -41,6 +41,9 @@
 #include <libxml/debugXML.h>
 #endif
 
+#include "buf.h"
+#include "save.h"
+
 int __xmlRegisterCallbacks = 0;
 
 /************************************************************************
@@ -52,7 +55,7 @@ int __xmlRegisterCallbacks = 0;
 static xmlNsPtr
 xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns);
 
-static xmlChar* xmlGetPropNodeValueInternal(xmlAttrPtr prop);
+static xmlChar* xmlGetPropNodeValueInternal(const xmlAttr *prop);
 
 /************************************************************************
  *                                                                     *
@@ -157,7 +160,7 @@ static int xmlCheckDTD = 1;
  * Returns A pointer to the entity structure or NULL if not found.
  */
 static xmlEntityPtr
-xmlGetEntityFromDtd(xmlDtdPtr dtd, const xmlChar *name) {
+xmlGetEntityFromDtd(const xmlDtd *dtd, const xmlChar *name) {
     xmlEntitiesTablePtr table;
 
     if((dtd != NULL) && (dtd->entities != NULL)) {
@@ -178,7 +181,7 @@ xmlGetEntityFromDtd(xmlDtdPtr dtd, const xmlChar *name) {
  * Returns A pointer to the entity structure or NULL if not found.
  */
 static xmlEntityPtr
-xmlGetParameterEntityFromDtd(xmlDtdPtr dtd, const xmlChar *name) {
+xmlGetParameterEntityFromDtd(const xmlDtd *dtd, const xmlChar *name) {
     xmlEntitiesTablePtr table;
 
     if ((dtd != NULL) && (dtd->pentities != NULL)) {
@@ -311,7 +314,7 @@ xmlSplitQName2(const xmlChar *name, xmlChar **prefix) {
  * parse an XML qualified name string,i
  *
  * returns NULL if it is not a Qualified Name, otherwise, update len
- *         with the lenght in byte of the prefix and return a pointer
+ *         with the length in byte of the prefix and return a pointer
  *         to the start of the name without the prefix
  */
 
@@ -349,7 +352,7 @@ xmlSplitQName3(const xmlChar *name, int *len) {
 
 #define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
 
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED)
+#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
 /**
  * xmlValidateNCName:
  * @value: the value to check
@@ -714,8 +717,11 @@ xmlGetBufferAllocationScheme(void) {
  * Creation of a new Namespace. This function will refuse to create
  * a namespace with a similar prefix than an existing one present on this
  * node.
+ * Note that for a default namespace, @prefix should be NULL.
+ *
  * We use href==NULL in the case of an element creation where the namespace
  * was not defined.
+ *
  * Returns a new namespace pointer or NULL
  */
 xmlNsPtr
@@ -800,7 +806,9 @@ xmlSetNs(xmlNodePtr node, xmlNsPtr ns) {
 #endif
        return;
     }
-    node->ns = ns;
+    if ((node->type == XML_ELEMENT_NODE) ||
+        (node->type == XML_ATTRIBUTE_NODE))
+       node->ns = ns;
 }
 
 /**
@@ -908,7 +916,7 @@ xmlNewDtd(xmlDocPtr doc, const xmlChar *name,
  */
 
 xmlDtdPtr
-xmlGetIntSubset(xmlDocPtr doc) {
+xmlGetIntSubset(const xmlDoc *doc) {
     xmlNodePtr cur;
 
     if (doc == NULL)
@@ -1258,20 +1266,20 @@ xmlFreeDoc(xmlDocPtr cur) {
  * Returns a pointer to the first child
  */
 xmlNodePtr
-xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
+xmlStringLenGetNodeList(const xmlDoc *doc, const xmlChar *value, int len) {
     xmlNodePtr ret = NULL, last = NULL;
     xmlNodePtr node;
     xmlChar *val;
     const xmlChar *cur = value, *end = cur + len;
     const xmlChar *q;
     xmlEntityPtr ent;
-    xmlBufferPtr buffer;
+    xmlBufPtr buf;
 
     if (value == NULL) return(NULL);
 
-    buffer = xmlBufferCreateSize(0);
-    if (buffer == NULL) return(NULL);
-    xmlBufferSetAllocationScheme(buffer, XML_BUFFER_ALLOC_HYBRID);
+    buf = xmlBufCreateSize(0);
+    if (buf == NULL) return(NULL);
+    xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID);
 
     q = cur;
     while ((cur < end) && (*cur != 0)) {
@@ -1283,7 +1291,7 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
             * Save the current text.
             */
             if (cur != q) {
-               if (xmlBufferAdd(buffer, q, cur - q))
+               if (xmlBufAdd(buf, q, cur - q))
                    goto out;
            }
            q = cur;
@@ -1360,20 +1368,20 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
                    if ((ent != NULL) &&
                        (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
 
-                       if (xmlBufferCat(buffer, ent->content))
+                       if (xmlBufCat(buf, ent->content))
                            goto out;
 
                    } else {
                        /*
                         * Flush buffer so far
                         */
-                       if (buffer->use) {
+                       if (!xmlBufIsEmpty(buf)) {
                            node = xmlNewDocText(doc, NULL);
                            if (node == NULL) {
                                if (val != NULL) xmlFree(val);
                                goto out;
                            }
-                           node->content = xmlBufferDetach(buffer);
+                           node->content = xmlBufDetach(buf);
 
                            if (last == NULL) {
                                last = ret = node;
@@ -1415,13 +1423,13 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
                q = cur;
            }
            if (charval != 0) {
-               xmlChar buf[10];
+               xmlChar buffer[10];
                int l;
 
-               l = xmlCopyCharMultiByte(buf, charval);
-               buf[l] = 0;
+               l = xmlCopyCharMultiByte(buffer, charval);
+               buffer[l] = 0;
 
-               if (xmlBufferCat(buffer, buf))
+               if (xmlBufCat(buf, buffer))
                    goto out;
                charval = 0;
            }
@@ -1433,14 +1441,14 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
         /*
         * Handle the last piece of text.
         */
-       if (xmlBufferAdd(buffer, q, cur - q))
+       if (xmlBufAdd(buf, q, cur - q))
            goto out;
     }
 
-    if (buffer->use) {
+    if (!xmlBufIsEmpty(buf)) {
        node = xmlNewDocText(doc, NULL);
        if (node == NULL) goto out;
-       node->content = xmlBufferDetach(buffer);
+       node->content = xmlBufDetach(buf);
 
        if (last == NULL) {
            last = ret = node;
@@ -1452,7 +1460,7 @@ xmlStringLenGetNodeList(xmlDocPtr doc, const xmlChar *value, int len) {
     }
 
 out:
-    xmlBufferFree(buffer);
+    xmlBufFree(buf);
     return(ret);
 }
 
@@ -1466,20 +1474,20 @@ out:
  * Returns a pointer to the first child
  */
 xmlNodePtr
-xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
+xmlStringGetNodeList(const xmlDoc *doc, const xmlChar *value) {
     xmlNodePtr ret = NULL, last = NULL;
     xmlNodePtr node;
     xmlChar *val;
     const xmlChar *cur = value;
     const xmlChar *q;
     xmlEntityPtr ent;
-    xmlBufferPtr buffer;
+    xmlBufPtr buf;
 
     if (value == NULL) return(NULL);
 
-    buffer = xmlBufferCreateSize(0);
-    if (buffer == NULL) return(NULL);
-    xmlBufferSetAllocationScheme(buffer, XML_BUFFER_ALLOC_HYBRID);
+    buf = xmlBufCreateSize(0);
+    if (buf == NULL) return(NULL);
+    xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID);
 
     q = cur;
     while (*cur != 0) {
@@ -1491,7 +1499,7 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
             * Save the current text.
             */
             if (cur != q) {
-               if (xmlBufferAdd(buffer, q, cur - q))
+               if (xmlBufAdd(buf, q, cur - q))
                    goto out;
            }
            q = cur;
@@ -1556,16 +1564,16 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
                    if ((ent != NULL) &&
                        (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
 
-                       if (xmlBufferCat(buffer, ent->content))
+                       if (xmlBufCat(buf, ent->content))
                            goto out;
 
                    } else {
                        /*
                         * Flush buffer so far
                         */
-                       if (buffer->use) {
+                       if (!xmlBufIsEmpty(buf)) {
                            node = xmlNewDocText(doc, NULL);
-                           node->content = xmlBufferDetach(buffer);
+                           node->content = xmlBufDetach(buf);
 
                            if (last == NULL) {
                                last = ret = node;
@@ -1606,13 +1614,13 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
                q = cur;
            }
            if (charval != 0) {
-               xmlChar buf[10];
+               xmlChar buffer[10];
                int len;
 
-               len = xmlCopyCharMultiByte(buf, charval);
-               buf[len] = 0;
+               len = xmlCopyCharMultiByte(buffer, charval);
+               buffer[len] = 0;
 
-               if (xmlBufferCat(buffer, buf))
+               if (xmlBufCat(buf, buffer))
                    goto out;
                charval = 0;
            }
@@ -1623,12 +1631,12 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
         /*
         * Handle the last piece of text.
         */
-       xmlBufferAdd(buffer, q, cur - q);
+       xmlBufAdd(buf, q, cur - q);
     }
 
-    if (buffer->use) {
+    if (!xmlBufIsEmpty(buf)) {
        node = xmlNewDocText(doc, NULL);
-       node->content = xmlBufferDetach(buffer);
+       node->content = xmlBufDetach(buf);
 
        if (last == NULL) {
            last = ret = node;
@@ -1638,7 +1646,7 @@ xmlStringGetNodeList(xmlDocPtr doc, const xmlChar *value) {
     }
 
 out:
-    xmlBufferFree(buffer);
+    xmlBufFree(buf);
     return(ret);
 }
 
@@ -1654,14 +1662,19 @@ out:
  * Returns a pointer to the string copy, the caller must free it with xmlFree().
  */
 xmlChar *
-xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine)
+xmlNodeListGetString(xmlDocPtr doc, const xmlNode *list, int inLine)
 {
-    xmlNodePtr node = list;
+    const xmlNode *node = list;
     xmlChar *ret = NULL;
     xmlEntityPtr ent;
+    int attr;
 
     if (list == NULL)
         return (NULL);
+    if ((list->parent != NULL) && (list->parent->type == XML_ATTRIBUTE_NODE))
+        attr = 1;
+    else
+        attr = 0;
 
     while (node != NULL) {
         if ((node->type == XML_TEXT_NODE) ||
@@ -1671,7 +1684,10 @@ xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine)
             } else {
                 xmlChar *buffer;
 
-                buffer = xmlEncodeEntitiesReentrant(doc, node->content);
+               if (attr)
+                   buffer = xmlEncodeAttributeEntities(doc, node->content);
+               else
+                   buffer = xmlEncodeEntitiesReentrant(doc, node->content);
                 if (buffer != NULL) {
                     ret = xmlStrcat(ret, buffer);
                     xmlFree(buffer);
@@ -1736,9 +1752,9 @@ xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine)
  * Returns a pointer to the string copy, the caller must free it with xmlFree().
  */
 xmlChar *
-xmlNodeListGetRawString(xmlDocPtr doc, xmlNodePtr list, int inLine)
+xmlNodeListGetRawString(const xmlDoc *doc, const xmlNode *list, int inLine)
 {
-    xmlNodePtr node = list;
+    const xmlNode *node = list;
     xmlChar *ret = NULL;
     xmlEntityPtr ent;
 
@@ -2567,7 +2583,7 @@ xmlNewCharRef(xmlDocPtr doc, const xmlChar *name) {
  * Returns a pointer to the new node object.
  */
 xmlNodePtr
-xmlNewReference(xmlDocPtr doc, const xmlChar *name) {
+xmlNewReference(const xmlDoc *doc, const xmlChar *name) {
     xmlNodePtr cur;
     xmlEntityPtr ent;
 
@@ -2585,7 +2601,7 @@ xmlNewReference(xmlDocPtr doc, const xmlChar *name) {
     memset(cur, 0, sizeof(xmlNode));
     cur->type = XML_ENTITY_REF_NODE;
 
-    cur->doc = doc;
+    cur->doc = (xmlDoc *)doc;
     if (name[0] == '&') {
         int len;
         name++;
@@ -2623,11 +2639,11 @@ xmlNewReference(xmlDocPtr doc, const xmlChar *name) {
  * Returns a pointer to the new node object.
  */
 xmlNodePtr
-xmlNewDocText(xmlDocPtr doc, const xmlChar *content) {
+xmlNewDocText(const xmlDoc *doc, const xmlChar *content) {
     xmlNodePtr cur;
 
     cur = xmlNewText(content);
-    if (cur != NULL) cur->doc = doc;
+    if (cur != NULL) cur->doc = (xmlDoc *)doc;
     return(cur);
 }
 
@@ -2777,7 +2793,7 @@ void
 xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) {
     xmlAttrPtr prop;
 
-    if (tree == NULL)
+    if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL))
        return;
     if (tree->doc != doc) {
        if(tree->type == XML_ELEMENT_NODE) {
@@ -2805,7 +2821,7 @@ void
 xmlSetListDoc(xmlNodePtr list, xmlDocPtr doc) {
     xmlNodePtr cur;
 
-    if (list == NULL)
+    if ((list == NULL) || (list->type == XML_NAMESPACE_DECL))
        return;
     cur = list;
     while (cur != NULL) {
@@ -2912,7 +2928,9 @@ static xmlNodePtr
 xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) {
        xmlAttrPtr attr;
 
-       if (cur->type != XML_ATTRIBUTE_NODE)
+       if ((cur == NULL) || (cur->type != XML_ATTRIBUTE_NODE) ||
+           (prop == NULL) || (prop->type != XML_ATTRIBUTE_NODE) ||
+           ((prev != NULL) && (prev->type != XML_ATTRIBUTE_NODE)))
                return(NULL);
 
        /* check if an attribute with the same name exists */
@@ -2960,14 +2978,14 @@ xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) {
  */
 xmlNodePtr
 xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) {
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddNextSibling : cur == NULL\n");
 #endif
        return(NULL);
     }
-    if (elem == NULL) {
+    if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddNextSibling : elem == NULL\n");
@@ -3021,7 +3039,7 @@ xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) {
 }
 
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
-    defined(LIBXML_SCHEMAS_ENABLED)
+    defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
 /**
  * xmlAddPrevSibling:
  * @cur:  the child node
@@ -3038,14 +3056,14 @@ xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) {
  */
 xmlNodePtr
 xmlAddPrevSibling(xmlNodePtr cur, xmlNodePtr elem) {
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddPrevSibling : cur == NULL\n");
 #endif
        return(NULL);
     }
-    if (elem == NULL) {
+    if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddPrevSibling : elem == NULL\n");
@@ -3116,7 +3134,7 @@ xmlNodePtr
 xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) {
     xmlNodePtr parent;
 
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddSibling : cur == NULL\n");
@@ -3124,7 +3142,7 @@ xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) {
        return(NULL);
     }
 
-    if (elem == NULL) {
+    if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddSibling : elem == NULL\n");
@@ -3192,7 +3210,7 @@ xmlNodePtr
 xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) {
     xmlNodePtr prev;
 
-    if (parent == NULL) {
+    if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddChildList : parent == NULL\n");
@@ -3200,7 +3218,7 @@ xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) {
        return(NULL);
     }
 
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddChildList : child == NULL\n");
@@ -3278,7 +3296,7 @@ xmlNodePtr
 xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) {
     xmlNodePtr prev;
 
-    if (parent == NULL) {
+    if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddChild : parent == NULL\n");
@@ -3286,7 +3304,7 @@ xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) {
        return(NULL);
     }
 
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlAddChild : child == NULL\n");
@@ -3399,8 +3417,8 @@ xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) {
  * Returns the last child or NULL if none.
  */
 xmlNodePtr
-xmlGetLastChild(xmlNodePtr parent) {
-    if (parent == NULL) {
+xmlGetLastChild(const xmlNode *parent) {
+    if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlGetLastChild : parent == NULL\n");
@@ -3438,6 +3456,7 @@ xmlChildElementCount(xmlNodePtr parent) {
         case XML_ELEMENT_NODE:
         case XML_ENTITY_NODE:
         case XML_DOCUMENT_NODE:
+        case XML_DOCUMENT_FRAG_NODE:
         case XML_HTML_DOCUMENT_NODE:
             cur = parent->children;
             break;
@@ -3473,6 +3492,7 @@ xmlFirstElementChild(xmlNodePtr parent) {
         case XML_ELEMENT_NODE:
         case XML_ENTITY_NODE:
         case XML_DOCUMENT_NODE:
+        case XML_DOCUMENT_FRAG_NODE:
         case XML_HTML_DOCUMENT_NODE:
             cur = parent->children;
             break;
@@ -3508,6 +3528,7 @@ xmlLastElementChild(xmlNodePtr parent) {
         case XML_ELEMENT_NODE:
         case XML_ENTITY_NODE:
         case XML_DOCUMENT_NODE:
+        case XML_DOCUMENT_FRAG_NODE:
         case XML_HTML_DOCUMENT_NODE:
             cur = parent->last;
             break;
@@ -3752,6 +3773,8 @@ xmlFreeNode(xmlNodePtr cur) {
  * Unlink a node from it's current context, the node is not freed
  * If one need to free the node, use xmlFreeNode() routine after the
  * unlink to discard it.
+ * Note that namespace nodes can't be unlinked as they do not have
+ * pointer to their parent.
  */
 void
 xmlUnlinkNode(xmlNodePtr cur) {
@@ -3762,6 +3785,8 @@ xmlUnlinkNode(xmlNodePtr cur) {
 #endif
        return;
     }
+    if (cur->type == XML_NAMESPACE_DECL)
+        return;
     if (cur->type == XML_DTD_NODE) {
        xmlDocPtr doc;
        doc = cur->doc;
@@ -3830,14 +3855,15 @@ xmlUnlinkNode(xmlNodePtr cur) {
 xmlNodePtr
 xmlReplaceNode(xmlNodePtr old, xmlNodePtr cur) {
     if (old == cur) return(NULL);
-    if ((old == NULL) || (old->parent == NULL)) {
+    if ((old == NULL) || (old->type == XML_NAMESPACE_DECL) ||
+        (old->parent == NULL)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlReplaceNode : old == NULL or without parent\n");
 #endif
        return(NULL);
     }
-    if (cur == NULL) {
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
        xmlUnlinkNode(old);
        return(old);
     }
@@ -3951,6 +3977,8 @@ xmlCopyPropInternal(xmlDocPtr doc, xmlNodePtr target, xmlAttrPtr cur) {
     xmlAttrPtr ret;
 
     if (cur == NULL) return(NULL);
+    if ((target != NULL) && (target->type != XML_ELEMENT_NODE))
+        return(NULL);
     if (target != NULL)
        ret = xmlNewDocProp(target->doc, cur->name, NULL);
     else if (doc != NULL)
@@ -4070,6 +4098,8 @@ xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) {
     xmlAttrPtr ret = NULL;
     xmlAttrPtr p = NULL,q;
 
+    if ((target != NULL) && (target->type != XML_ELEMENT_NODE))
+        return(NULL);
     while (cur != NULL) {
         q = xmlCopyProp(target, cur);
        if (q == NULL)
@@ -4106,7 +4136,7 @@ xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) {
  */
 
 static xmlNodePtr
-xmlStaticCopyNode(const xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
+xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
                   int extended) {
     xmlNodePtr ret;
 
@@ -4272,6 +4302,7 @@ xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
            }
            if (doc->intSubset == NULL) {
                q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node );
+               if (q == NULL) return(NULL);
                q->doc = doc;
                q->parent = parent;
                doc->intSubset = (xmlDtdPtr) q;
@@ -4283,6 +4314,7 @@ xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
        } else
 #endif /* LIBXML_TREE_ENABLED */
            q = xmlStaticCopyNode(node, doc, parent, 1);
+       if (q == NULL) return(NULL);
        if (ret == NULL) {
            q->prev = NULL;
            ret = p = q;
@@ -4309,7 +4341,7 @@ xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
  * Returns: a new #xmlNodePtr, or NULL in case of error.
  */
 xmlNodePtr
-xmlCopyNode(const xmlNodePtr node, int extended) {
+xmlCopyNode(xmlNodePtr node, int extended) {
     xmlNodePtr ret;
 
     ret = xmlStaticCopyNode(node, NULL, NULL, extended);
@@ -4329,7 +4361,7 @@ xmlCopyNode(const xmlNodePtr node, int extended) {
  * Returns: a new #xmlNodePtr, or NULL in case of error.
  */
 xmlNodePtr
-xmlDocCopyNode(const xmlNodePtr node, xmlDocPtr doc, int extended) {
+xmlDocCopyNode(xmlNodePtr node, xmlDocPtr doc, int extended) {
     xmlNodePtr ret;
 
     ret = xmlStaticCopyNode(node, doc, NULL, extended);
@@ -4345,7 +4377,7 @@ xmlDocCopyNode(const xmlNodePtr node, xmlDocPtr doc, int extended) {
  *
  * Returns: a new #xmlNodePtr, or NULL in case of error.
  */
-xmlNodePtr xmlDocCopyNodeList(xmlDocPtr doc, const xmlNodePtr node) {
+xmlNodePtr xmlDocCopyNodeList(xmlDocPtr doc, xmlNodePtr node) {
     xmlNodePtr ret = xmlStaticCopyNodeList(node, doc, NULL);
     return(ret);
 }
@@ -4359,7 +4391,7 @@ xmlNodePtr xmlDocCopyNodeList(xmlDocPtr doc, const xmlNodePtr node) {
  *
  * Returns: a new #xmlNodePtr, or NULL in case of error.
  */
-xmlNodePtr xmlCopyNodeList(const xmlNodePtr node) {
+xmlNodePtr xmlCopyNodeList(xmlNodePtr node) {
     xmlNodePtr ret = xmlStaticCopyNodeList(node, NULL, NULL);
     return(ret);
 }
@@ -4485,6 +4517,10 @@ xmlCopyDoc(xmlDocPtr doc, int recursive) {
 #ifdef LIBXML_TREE_ENABLED
     if (doc->intSubset != NULL) {
         ret->intSubset = xmlCopyDtd(doc->intSubset);
+       if (ret->intSubset == NULL) {
+           xmlFreeDoc(ret);
+           return(NULL);
+       }
        xmlSetTreeDoc((xmlNodePtr)ret->intSubset, ret);
        ret->intSubset->parent = ret;
     }
@@ -4515,39 +4551,71 @@ xmlCopyDoc(xmlDocPtr doc, int recursive) {
  ************************************************************************/
 
 /**
- * xmlGetLineNo:
+ * xmlGetLineNoInternal:
  * @node: valid node
+ * @depth: used to limit any risk of recursion
  *
- * Get line number of @node. This requires activation of this option
- * before invoking the parser by calling xmlLineNumbersDefault(1)
+ * Get line number of @node.
+ * Try to override the limitation of lines being store in 16 bits ints
  *
  * Returns the line number if successful, -1 otherwise
  */
-long
-xmlGetLineNo(xmlNodePtr node)
+static long
+xmlGetLineNoInternal(const xmlNode *node, int depth)
 {
     long result = -1;
 
+    if (depth >= 5)
+        return(-1);
+
     if (!node)
         return result;
     if ((node->type == XML_ELEMENT_NODE) ||
         (node->type == XML_TEXT_NODE) ||
        (node->type == XML_COMMENT_NODE) ||
-       (node->type == XML_PI_NODE))
-        result = (long) node->line;
-    else if ((node->prev != NULL) &&
+       (node->type == XML_PI_NODE)) {
+       if (node->line == 65535) {
+           if ((node->type == XML_TEXT_NODE) && (node->psvi != NULL))
+               result = (long) node->psvi;
+           else if ((node->type == XML_ELEMENT_NODE) &&
+                    (node->children != NULL))
+               result = xmlGetLineNoInternal(node->children, depth + 1);
+           else if (node->next != NULL)
+               result = xmlGetLineNoInternal(node->next, depth + 1);
+           else if (node->prev != NULL)
+               result = xmlGetLineNoInternal(node->prev, depth + 1);
+       }
+       if ((result == -1) || (result == 65535))
+           result = (long) node->line;
+    } else if ((node->prev != NULL) &&
              ((node->prev->type == XML_ELEMENT_NODE) ||
              (node->prev->type == XML_TEXT_NODE) ||
              (node->prev->type == XML_COMMENT_NODE) ||
              (node->prev->type == XML_PI_NODE)))
-        result = xmlGetLineNo(node->prev);
+        result = xmlGetLineNoInternal(node->prev, depth + 1);
     else if ((node->parent != NULL) &&
              (node->parent->type == XML_ELEMENT_NODE))
-        result = xmlGetLineNo(node->parent);
+        result = xmlGetLineNoInternal(node->parent, depth + 1);
 
     return result;
 }
 
+/**
+ * xmlGetLineNo:
+ * @node: valid node
+ *
+ * Get line number of @node.
+ * Try to override the limitation of lines being store in 16 bits ints
+ * if XML_PARSE_BIG_LINES parser option was used
+ *
+ * Returns the line number if successful, -1 otherwise
+ */
+long
+xmlGetLineNo(const xmlNode *node)
+{
+    return(xmlGetLineNoInternal(node, 0));
+}
+
 #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
 /**
  * xmlGetNodePath:
@@ -4559,9 +4627,9 @@ xmlGetLineNo(xmlNodePtr node)
  *     the returned string
  */
 xmlChar *
-xmlGetNodePath(xmlNodePtr node)
+xmlGetNodePath(const xmlNode *node)
 {
-    xmlNodePtr cur, tmp, next;
+    const xmlNode *cur, *tmp, *next;
     xmlChar *buffer = NULL, *temp;
     size_t buf_len;
     xmlChar *buf;
@@ -4570,7 +4638,7 @@ xmlGetNodePath(xmlNodePtr node)
     char nametemp[100];
     int occur = 0, generic;
 
-    if (node == NULL)
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
         return (NULL);
 
     buf_len = 500;
@@ -4805,7 +4873,7 @@ xmlGetNodePath(xmlNodePtr node)
  * Returns the #xmlNodePtr for the root or NULL
  */
 xmlNodePtr
-xmlDocGetRootElement(xmlDocPtr doc) {
+xmlDocGetRootElement(const xmlDoc *doc) {
     xmlNodePtr ret;
 
     if (doc == NULL) return(NULL);
@@ -4835,7 +4903,7 @@ xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) {
     xmlNodePtr old = NULL;
 
     if (doc == NULL) return(NULL);
-    if (root == NULL)
+    if ((root == NULL) || (root->type == XML_NAMESPACE_DECL))
        return(NULL);
     xmlUnlinkNode(root);
     xmlSetTreeDoc(root, doc);
@@ -4919,9 +4987,11 @@ xmlNodeSetLang(xmlNodePtr cur, const xmlChar *lang) {
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlNodeGetLang(xmlNodePtr cur) {
+xmlNodeGetLang(const xmlNode *cur) {
     xmlChar *lang;
 
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
+        return(NULL);
     while (cur != NULL) {
         lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE);
        if (lang != NULL)
@@ -4998,9 +5068,11 @@ xmlNodeSetSpacePreserve(xmlNodePtr cur, int val) {
  * Returns -1 if xml:space is not inherited, 0 if "default", 1 if "preserve"
  */
 int
-xmlNodeGetSpacePreserve(xmlNodePtr cur) {
+xmlNodeGetSpacePreserve(const xmlNode *cur) {
     xmlChar *space;
 
+    if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE))
+        return(-1);
     while (cur != NULL) {
        space = xmlGetNsProp(cur, BAD_CAST "space", XML_XML_NAMESPACE);
        if (space != NULL) {
@@ -5031,6 +5103,7 @@ void
 xmlNodeSetName(xmlNodePtr cur, const xmlChar *name) {
     xmlDocPtr doc;
     xmlDictPtr dict;
+    const xmlChar *freeme = NULL;
 
     if (cur == NULL) return;
     if (name == NULL) return;
@@ -5068,12 +5141,16 @@ xmlNodeSetName(xmlNodePtr cur, const xmlChar *name) {
         dict = NULL;
     if (dict != NULL) {
         if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name)))
-           xmlFree((xmlChar *) cur->name);
+           freeme = cur->name;
        cur->name = xmlDictLookup(dict, name, -1);
     } else {
-       if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
+       if (cur->name != NULL)
+           freeme = cur->name;
        cur->name = xmlStrdup(name);
     }
+
+    if (freeme)
+        xmlFree((xmlChar *) freeme);
 }
 #endif
 
@@ -5161,12 +5238,14 @@ xmlNodeSetBase(xmlNodePtr cur, const xmlChar* uri) {
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) {
+xmlNodeGetBase(const xmlDoc *doc, const xmlNode *cur) {
     xmlChar *oldbase = NULL;
     xmlChar *base, *newbase;
 
     if ((cur == NULL) && (doc == NULL))
         return(NULL);
+    if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
+        return(NULL);
     if (doc == NULL) doc = cur->doc;
     if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
         cur = doc->children;
@@ -5244,27 +5323,55 @@ xmlNodeGetBase(xmlDocPtr doc, xmlNodePtr cur) {
  * Returns 0 in case of success and -1 in case of error.
  */
 int
-xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
+xmlNodeBufGetContent(xmlBufferPtr buffer, const xmlNode *cur)
 {
+    xmlBufPtr buf;
+    int ret;
+
     if ((cur == NULL) || (buffer == NULL)) return(-1);
+    buf = xmlBufFromBuffer(buffer);
+    ret = xmlBufGetNodeContent(buf, cur);
+    buffer = xmlBufBackToBuffer(buf);
+    if ((ret < 0) || (buffer == NULL))
+        return(-1);
+    return(0);
+}
+
+/**
+ * xmlBufGetNodeContent:
+ * @buf:  a buffer xmlBufPtr
+ * @cur:  the node being read
+ *
+ * Read the value of a node @cur, this can be either the text carried
+ * directly by this node if it's a TEXT node or the aggregate string
+ * of the values carried by this node child's (TEXT and ENTITY_REF).
+ * Entity references are substituted.
+ * Fills up the buffer @buf with this value
+ *
+ * Returns 0 in case of success and -1 in case of error.
+ */
+int
+xmlBufGetNodeContent(xmlBufPtr buf, const xmlNode *cur)
+{
+    if ((cur == NULL) || (buf == NULL)) return(-1);
     switch (cur->type) {
         case XML_CDATA_SECTION_NODE:
         case XML_TEXT_NODE:
-           xmlBufferCat(buffer, cur->content);
+           xmlBufCat(buf, cur->content);
             break;
         case XML_DOCUMENT_FRAG_NODE:
         case XML_ELEMENT_NODE:{
-                xmlNodePtr tmp = cur;
+                const xmlNode *tmp = cur;
 
                 while (tmp != NULL) {
                     switch (tmp->type) {
                         case XML_CDATA_SECTION_NODE:
                         case XML_TEXT_NODE:
                             if (tmp->content != NULL)
-                                xmlBufferCat(buffer, tmp->content);
+                                xmlBufCat(buf, tmp->content);
                             break;
                         case XML_ENTITY_REF_NODE:
-                            xmlNodeBufGetContent(buffer, tmp);
+                            xmlBufGetNodeContent(buf, tmp);
                             break;
                         default:
                             break;
@@ -5308,16 +5415,16 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
 
                while (tmp != NULL) {
                    if (tmp->type == XML_TEXT_NODE)
-                       xmlBufferCat(buffer, tmp->content);
+                       xmlBufCat(buf, tmp->content);
                    else
-                       xmlNodeBufGetContent(buffer, tmp);
+                       xmlBufGetNodeContent(buf, tmp);
                    tmp = tmp->next;
                }
                 break;
             }
         case XML_COMMENT_NODE:
         case XML_PI_NODE:
-           xmlBufferCat(buffer, cur->content);
+           xmlBufCat(buf, cur->content);
             break;
         case XML_ENTITY_REF_NODE:{
                 xmlEntityPtr ent;
@@ -5335,7 +5442,7 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
                  * xmlNodeGetContent() which handles all possible node types */
                 tmp = ent->children;
                 while (tmp) {
-                   xmlNodeBufGetContent(buffer, tmp);
+                   xmlBufGetNodeContent(buf, tmp);
                     tmp = tmp->next;
                 }
                break;
@@ -5357,13 +5464,13 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
                if ((cur->type == XML_ELEMENT_NODE) ||
                    (cur->type == XML_TEXT_NODE) ||
                    (cur->type == XML_CDATA_SECTION_NODE)) {
-                   xmlNodeBufGetContent(buffer, cur);
+                   xmlBufGetNodeContent(buf, cur);
                }
                cur = cur->next;
            }
            break;
         case XML_NAMESPACE_DECL:
-           xmlBufferCat(buffer, ((xmlNsPtr) cur)->href);
+           xmlBufCat(buf, ((xmlNsPtr) cur)->href);
            break;
         case XML_ELEMENT_DECL:
         case XML_ATTRIBUTE_DECL:
@@ -5372,6 +5479,7 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
     }
     return(0);
 }
+
 /**
  * xmlNodeGetContent:
  * @cur:  the node being read
@@ -5384,23 +5492,22 @@ xmlNodeBufGetContent(xmlBufferPtr buffer, xmlNodePtr cur)
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlNodeGetContent(xmlNodePtr cur)
+xmlNodeGetContent(const xmlNode *cur)
 {
     if (cur == NULL)
         return (NULL);
     switch (cur->type) {
         case XML_DOCUMENT_FRAG_NODE:
         case XML_ELEMENT_NODE:{
-                xmlBufferPtr buffer;
+                xmlBufPtr buf;
                 xmlChar *ret;
 
-                buffer = xmlBufferCreateSize(64);
-                if (buffer == NULL)
+                buf = xmlBufCreateSize(64);
+                if (buf == NULL)
                     return (NULL);
-               xmlNodeBufGetContent(buffer, cur);
-                ret = buffer->content;
-                buffer->content = NULL;
-                xmlBufferFree(buffer);
+               xmlBufGetNodeContent(buf, cur);
+                ret = xmlBufDetach(buf);
+                xmlBufFree(buf);
                 return (ret);
             }
         case XML_ATTRIBUTE_NODE:
@@ -5412,7 +5519,7 @@ xmlNodeGetContent(xmlNodePtr cur)
             return (NULL);
         case XML_ENTITY_REF_NODE:{
                 xmlEntityPtr ent;
-                xmlBufferPtr buffer;
+                xmlBufPtr buf;
                 xmlChar *ret;
 
                 /* lookup entity declaration */
@@ -5420,15 +5527,14 @@ xmlNodeGetContent(xmlNodePtr cur)
                 if (ent == NULL)
                     return (NULL);
 
-                buffer = xmlBufferCreate();
-                if (buffer == NULL)
+                buf = xmlBufCreate();
+                if (buf == NULL)
                     return (NULL);
 
-                xmlNodeBufGetContent(buffer, cur);
+                xmlBufGetNodeContent(buf, cur);
 
-                ret = buffer->content;
-                buffer->content = NULL;
-                xmlBufferFree(buffer);
+                ret = xmlBufDetach(buf);
+                xmlBufFree(buf);
                 return (ret);
             }
         case XML_ENTITY_NODE:
@@ -5443,18 +5549,17 @@ xmlNodeGetContent(xmlNodePtr cur)
         case XML_DOCB_DOCUMENT_NODE:
 #endif
         case XML_HTML_DOCUMENT_NODE: {
-           xmlBufferPtr buffer;
+           xmlBufPtr buf;
            xmlChar *ret;
 
-           buffer = xmlBufferCreate();
-           if (buffer == NULL)
+           buf = xmlBufCreate();
+           if (buf == NULL)
                return (NULL);
 
-           xmlNodeBufGetContent(buffer, (xmlNodePtr) cur);
+           xmlBufGetNodeContent(buf, (xmlNodePtr) cur);
 
-           ret = buffer->content;
-           buffer->content = NULL;
-           xmlBufferFree(buffer);
+           ret = xmlBufDetach(buf);
+           xmlBufFree(buf);
            return (ret);
        }
         case XML_NAMESPACE_DECL: {
@@ -5767,7 +5872,7 @@ xmlTextMerge(xmlNodePtr first, xmlNodePtr second) {
  *         namespace if defined
  */
 xmlNsPtr *
-xmlGetNsList(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node)
+xmlGetNsList(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlNode *node)
 {
     xmlNsPtr cur;
     xmlNsPtr *ret = NULL;
@@ -5775,6 +5880,9 @@ xmlGetNsList(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node)
     int maxns = 10;
     int i;
 
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
+        return(NULL);
+
     while (node != NULL) {
         if (node->type == XML_ELEMENT_NODE) {
             cur = node->nsDef;
@@ -5871,9 +5979,9 @@ xmlNsPtr
 xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, const xmlChar *nameSpace) {
 
     xmlNsPtr cur;
-    xmlNodePtr orig = node;
+    const xmlNode *orig = node;
 
-    if (node == NULL) return(NULL);
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) return(NULL);
     if ((nameSpace != NULL) &&
        (xmlStrEqual(nameSpace, (const xmlChar *)"xml"))) {
        if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) {
@@ -6003,7 +6111,7 @@ xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, const xmlChar * href)
     xmlNodePtr orig = node;
     int is_attr;
 
-    if ((node == NULL) || (href == NULL))
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || (href == NULL))
         return (NULL);
     if (xmlStrEqual(href, XML_XML_NAMESPACE)) {
         /*
@@ -6094,7 +6202,7 @@ xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) {
     xmlChar prefix[50];
     int counter = 1;
 
-    if (tree == NULL) {
+    if ((tree == NULL) || (tree->type != XML_ELEMENT_NODE)) {
 #ifdef DEBUG_TREE
         xmlGenericError(xmlGenericErrorContext,
                "xmlNewReconciliedNs : tree == NULL\n");
@@ -6340,7 +6448,7 @@ xmlReconciliateNs(xmlDocPtr doc, xmlNodePtr tree) {
 #endif /* LIBXML_TREE_ENABLED */
 
 static xmlAttrPtr
-xmlGetPropNodeInternal(xmlNodePtr node, const xmlChar *name,
+xmlGetPropNodeInternal(const xmlNode *node, const xmlChar *name,
                       const xmlChar *nsName, int useDTD)
 {
     xmlAttrPtr prop;
@@ -6454,7 +6562,7 @@ xmlGetPropNodeInternal(xmlNodePtr node, const xmlChar *name,
 }
 
 static xmlChar*
-xmlGetPropNodeValueInternal(xmlAttrPtr prop)
+xmlGetPropNodeValueInternal(const xmlAttr *prop)
 {
     if (prop == NULL)
        return(NULL);
@@ -6500,7 +6608,7 @@ xmlGetPropNodeValueInternal(xmlAttrPtr prop)
  *         neither was found.
  */
 xmlAttrPtr
-xmlHasProp(xmlNodePtr node, const xmlChar *name) {
+xmlHasProp(const xmlNode *node, const xmlChar *name) {
     xmlAttrPtr prop;
     xmlDocPtr doc;
 
@@ -6555,7 +6663,7 @@ xmlHasProp(xmlNodePtr node, const xmlChar *name) {
  *     if neither was found.
  */
 xmlAttrPtr
-xmlHasNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
+xmlHasNsProp(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) {
 
     return(xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD));
 }
@@ -6577,7 +6685,7 @@ xmlHasNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlGetProp(xmlNodePtr node, const xmlChar *name) {
+xmlGetProp(const xmlNode *node, const xmlChar *name) {
     xmlAttrPtr prop;
 
     prop = xmlHasProp(node, name);
@@ -6602,7 +6710,7 @@ xmlGetProp(xmlNodePtr node, const xmlChar *name) {
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlGetNoNsProp(xmlNodePtr node, const xmlChar *name) {
+xmlGetNoNsProp(const xmlNode *node, const xmlChar *name) {
     xmlAttrPtr prop;
 
     prop = xmlGetPropNodeInternal(node, name, NULL, xmlCheckDTD);
@@ -6627,7 +6735,7 @@ xmlGetNoNsProp(xmlNodePtr node, const xmlChar *name) {
  *     It's up to the caller to free the memory with xmlFree().
  */
 xmlChar *
-xmlGetNsProp(xmlNodePtr node, const xmlChar *name, const xmlChar *nameSpace) {
+xmlGetNsProp(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) {
     xmlAttrPtr prop;
 
     prop = xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD);
@@ -6792,7 +6900,7 @@ xmlSetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
  * Returns 1 yes, 0 no
  */
 int
-xmlNodeIsText(xmlNodePtr node) {
+xmlNodeIsText(const xmlNode *node) {
     if (node == NULL) return(0);
 
     if (node->type == XML_TEXT_NODE) return(1);
@@ -6809,7 +6917,7 @@ xmlNodeIsText(xmlNodePtr node) {
  * Returns 1 yes, 0 no
  */
 int
-xmlIsBlankNode(xmlNodePtr node) {
+xmlIsBlankNode(const xmlNode *node) {
     const xmlChar *cur;
     if (node == NULL) return(0);
 
@@ -7212,7 +7320,7 @@ xmlBufferDump(FILE *file, xmlBufferPtr buf) {
  */
 
 const xmlChar *
-xmlBufferContent(const xmlBufferPtr buf)
+xmlBufferContent(const xmlBuffer *buf)
 {
     if(!buf)
         return NULL;
@@ -7230,7 +7338,7 @@ xmlBufferContent(const xmlBufferPtr buf)
  */
 
 int
-xmlBufferLength(const xmlBufferPtr buf)
+xmlBufferLength(const xmlBuffer *buf)
 {
     if(!buf)
         return 0;
@@ -7614,7 +7722,7 @@ xmlBufferWriteQuotedString(xmlBufferPtr buf, const xmlChar *string) {
  * Returns 0 (uncompressed) to 9 (max compression)
  */
 int
-xmlGetDocCompressMode (xmlDocPtr doc) {
+xmlGetDocCompressMode (const xmlDoc *doc) {
     if (doc == NULL) return(-1);
     return(doc->compression);
 }
@@ -7805,8 +7913,7 @@ xmlDOMWrapNsMapAddItem(xmlNsMapPtr *nsmap, int position,
        map->first->prev = ret;
        ret->next = map->first;
        map->first = ret;
-    } else
-       return(NULL);
+    }
 
     ret->oldNs = oldNs;
     ret->newNs = newNs;
@@ -7866,7 +7973,7 @@ xmlDOMWrapStoreNs(xmlDocPtr doc,
 *
 * Allocates and initializes a new DOM-wrapper context.
 *
-* Returns the xmlDOMWrapCtxtPtr or NULL in case of an internal errror.
+* Returns the xmlDOMWrapCtxtPtr or NULL in case of an internal error.
 */
 xmlDOMWrapCtxtPtr
 xmlDOMWrapNewCtxt(void)
@@ -7951,6 +8058,8 @@ xmlDOMWrapNSNormGatherInScopeNs(xmlNsMapPtr *map,
 
     if ((map == NULL) || (*map != NULL))
        return (-1);
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
+        return (-1);
     /*
     * Get in-scope ns-decls of @parent.
     */
@@ -8218,6 +8327,8 @@ xmlSearchNsByNamespaceStrict(xmlDocPtr doc, xmlNodePtr node,
 
     if ((doc == NULL) || (nsName == NULL) || (retNs == NULL))
        return (-1);
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
+        return(-1);
 
     *retNs = NULL;
     if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) {
@@ -8316,8 +8427,8 @@ xmlSearchNsByPrefixStrict(xmlDocPtr doc, xmlNodePtr node,
     xmlNodePtr cur;
     xmlNsPtr ns;
 
-    if ((doc == NULL) || (node == NULL))
-       return (-1);
+    if ((doc == NULL) || (node == NULL) || (node->type == XML_NAMESPACE_DECL))
+        return(-1);
 
     if (retNs)
        *retNs = NULL;
@@ -8385,6 +8496,9 @@ xmlDOMWrapNSNormDeclareNsForced(xmlDocPtr doc,
     char buf[50];
     const xmlChar *pref;
     int counter = 0;
+
+    if ((doc == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE))
+        return(NULL);
     /*
     * Create a ns-decl on @anchor.
     */
@@ -8901,6 +9015,9 @@ xmlDOMWrapAdoptBranch(xmlDOMWrapCtxtPtr ctxt,
        parnsdone = 0;
 
     cur = node;
+    if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
+       goto internal_error;
+
     while (cur != NULL) {
        /*
        * Paranoid source-doc sanity check.
@@ -9280,6 +9397,9 @@ xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt,
     *resNode = NULL;
 
     cur = node;
+    if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
+        return(-1);
+
     while (cur != NULL) {
        if (cur->doc != sourceDoc) {
            /*
@@ -9678,7 +9798,8 @@ leave_node:
            if (clone->parent != NULL)
                clone->parent->last = clone;
            clone = clone->parent;
-           parentClone = clone->parent;
+           if (clone != NULL)
+               parentClone = clone->parent;
            /*
            * Process parent --> next;
            */
@@ -9797,6 +9918,8 @@ xmlDOMWrapAdoptAttr(xmlDOMWrapCtxtPtr ctxt,
     if (attr->children == NULL)
        return (0);
     cur = attr->children;
+    if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
+        goto internal_error;
     while (cur != NULL) {
        cur->doc = destDoc;
        switch (cur->type) {
@@ -9858,7 +9981,7 @@ internal_error:
 * References of out-of scope ns-decls are remapped to point to @destDoc:
 * 1) If @destParent is given, then nsDef entries on element-nodes are used
 * 2) If *no* @destParent is given, then @destDoc->oldNs entries are used
-*    This is the case when you have an unliked node and just want to move it
+*    This is the case when you have an unlinked node and just want to move it
 *    to the context of
 *
 * If @destParent is given, it ensures that the tree is namespace
@@ -9881,7 +10004,8 @@ xmlDOMWrapAdoptNode(xmlDOMWrapCtxtPtr ctxt,
                    xmlNodePtr destParent,
                    int options)
 {
-    if ((node == NULL) || (destDoc == NULL) ||
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) ||
+        (destDoc == NULL) ||
        ((destParent != NULL) && (destParent->doc != destDoc)))
        return(-1);
     /*
diff --git a/trio.c b/trio.c
index b116ccc..c8b9c84 100644 (file)
--- a/trio.c
+++ b/trio.c
@@ -99,7 +99,7 @@
 #endif
 #include <stddef.h>
 
-#ifdef HAVE_ERRNO_H
+#if defined( HAVE_ERRNO_H ) || defined( __VMS )
 #include <errno.h>
 #endif
 
 # define TRIO_ERROR_RETURN(x,y) (-1)
 #endif
 
+#ifndef VA_LIST_IS_ARRAY
+#define TRIO_VA_LIST_PTR       va_list *
+#define TRIO_VA_LIST_ADDR(l)   (&(l))
+#define TRIO_VA_LIST_DEREF(l)  (*(l))
+#else
+#define TRIO_VA_LIST_PTR       va_list
+#define TRIO_VA_LIST_ADDR(l)   (l)
+#define TRIO_VA_LIST_DEREF(l)  (l)
+#endif
+
 typedef unsigned long trio_flags_t;
 
 
 /*************************************************************************
  * Platform specific definitions
  */
-#if defined(TRIO_PLATFORM_UNIX)
+#if defined(TRIO_PLATFORM_UNIX) || defined(TRIO_PLATFORM_OS400)
 # include <unistd.h>
 # include <signal.h>
 # include <locale.h>
@@ -208,7 +218,7 @@ typedef unsigned long int trio_ulonglong_t;
 #endif
 
 /* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
+#if defined(TRIO_COMPILER_SUPPORTS_C99) && !defined( __VMS )
 # include <stdint.h>
 typedef intmax_t trio_intmax_t;
 typedef uintmax_t trio_uintmax_t;
@@ -216,8 +226,12 @@ typedef int8_t trio_int8_t;
 typedef int16_t trio_int16_t;
 typedef int32_t trio_int32_t;
 typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98)
+#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98) || defined( __VMS )
 # include <inttypes.h>
+#ifdef __VMS
+typedef long long int          intmax_t;
+typedef unsigned long long int uintmax_t;
+#endif
 typedef intmax_t trio_intmax_t;
 typedef uintmax_t trio_uintmax_t;
 typedef int8_t trio_int8_t;
@@ -307,6 +321,12 @@ typedef trio_longlong_t trio_int64_t;
 #define NAN_LOWER "nan"
 #define NAN_UPPER "NAN"
 
+#if !defined(HAVE_ISASCII) && !defined(isascii)
+#ifndef __VMS
+# define isascii(x) ((unsigned int)(x) < 128)
+#endif
+#endif
+
 /* Various constants */
 enum {
   TYPE_PRINT = 1,
@@ -376,7 +396,7 @@ enum {
   /* Maximal string lengths for user-defined specifiers */
   MAX_USER_NAME = 64,
   MAX_USER_DATA = 256,
-  
+
   /* Maximal length of locale separator strings */
   MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
   /* Maximal number of integers in grouping */
@@ -1020,23 +1040,23 @@ TRIO_ARGS2((name, prev),
           trio_userdef_t **prev)
 {
   trio_userdef_t *def;
-  
+
   if (internalEnterCriticalRegion)
     (void)internalEnterCriticalRegion(NULL);
-  
+
   for (def = internalUserDef; def; def = def->next)
     {
       /* Case-sensitive string comparison */
       if (trio_equal_case(def->name, name))
        break;
-      
+
       if (prev)
        *prev = def;
     }
-  
+
   if (internalLeaveCriticalRegion)
     (void)internalLeaveCriticalRegion(NULL);
-  
+
   return def;
 }
 #endif
@@ -1163,7 +1183,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
           int type,
           TRIO_CONST char *format,
           trio_parameter_t *parameters,
-          va_list *arglist,
+          TRIO_VA_LIST_PTR arglist,
           trio_pointer_t *argarray)
 {
   /* Count the number of times a parameter is referenced */
@@ -1200,7 +1220,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
 
   /* One and only one of arglist and argarray must be used */
   assert((arglist != NULL) ^ (argarray != NULL));
-  
+
   /*
    * The 'parameters' array is not initialized, but we need to
    * know which entries we have used.
@@ -1213,7 +1233,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
   (void)mblen(NULL, 0);
 #endif
-  
+
   while (format[index])
     {
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
@@ -1291,7 +1311,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                      /* Skip if no precision */
                      if (QUALIFIER_DOT == format[index])
                        break;
-                     
+
                      /* After the first dot we have the precision */
                      flags |= FLAGS_PRECISION;
                      if ((QUALIFIER_STAR == format[index])
@@ -1336,7 +1356,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                  else if (dots == 1) /* Base */
                    {
                      dots++;
-                     
+
                      /* After the second dot we have the base */
                      flags |= FLAGS_BASE;
                      if ((QUALIFIER_STAR == format[index])
@@ -1535,7 +1555,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                    }
                  else
                    return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-                 
+
                  flags |= FLAGS_FIXED_SIZE;
                  break;
 #endif
@@ -1563,7 +1583,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                  gotSticky = TRUE;
                  break;
 #endif
-                 
+
 #if defined(QUALIFIER_VARSIZE)
                case QUALIFIER_VARSIZE:
                  flags |= FLAGS_VARSIZE_PARAMETER;
@@ -1628,9 +1648,9 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
              indices[varsize] = pos;
              varsize = pos++;
            }
-         
+
          indices[currentParam] = pos;
-         
+
          switch (format[index++])
            {
 #if defined(SPECIFIER_CHAR_UPPER)
@@ -1689,11 +1709,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                    }
                }
              break;
-             
+
            case SPECIFIER_INTEGER:
              parameters[pos].type = FORMAT_INT;
              break;
-             
+
            case SPECIFIER_UNSIGNED:
              flags |= FLAGS_UNSIGNED;
              parameters[pos].type = FORMAT_INT;
@@ -1793,11 +1813,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
              {
                unsigned int max;
                int without_namespace = TRUE;
-               
+
                parameters[pos].type = FORMAT_USER_DEFINED;
                parameters[pos].user_name[0] = NIL;
                tmpformat = (char *)&format[index];
-             
+
                while ((ch = format[index]))
                  {
                    index++;
@@ -1845,7 +1865,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
              }
              break;
 #endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
-             
+
            default:
              /* Bail out completely to make the error more obvious */
               return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
@@ -1853,7 +1873,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
 
          /*  Count the number of times this entry has been used */
          usedEntries[currentParam] += 1;
-         
+
          /* Find last sticky parameters */
          if (gotSticky && !(flags & FLAGS_STICKY))
            {
@@ -1876,7 +1896,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                    }
                }
            }
-         
+
          parameters[pos].indexAfterSpecifier = index;
          parameters[pos].flags = flags;
          parameters[pos].width = width;
@@ -1884,12 +1904,12 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
          parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
          parameters[pos].varsize = varsize;
          pos++;
-         
+
          if (! positional)
            parameterPosition++;
-         
+
        } /* if identifier */
-      
+
     } /* while format characters left */
 
   for (num = 0; num <= maxParam; num++)
@@ -1901,7 +1921,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
          else /* double references detected */
            return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
        }
-      
+
       i = indices[num];
 
       /*
@@ -1941,14 +1961,14 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
          if (flags & FLAGS_WIDECHAR)
            {
              parameters[i].data.wstring = (argarray == NULL)
-               ? va_arg(*arglist, trio_wchar_t *)
+               ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_wchar_t *)
                : (trio_wchar_t *)(argarray[num]);
            }
          else
 #endif
            {
              parameters[i].data.string = (argarray == NULL)
-               ? va_arg(*arglist, char *)
+               ? va_arg(TRIO_VA_LIST_DEREF(arglist), char *)
                : (char *)(argarray[num]);
            }
          break;
@@ -1960,7 +1980,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
        case FORMAT_COUNT:
        case FORMAT_UNKNOWN:
          parameters[i].data.pointer = (argarray == NULL)
-           ? va_arg(*arglist, trio_pointer_t )
+           ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
            : argarray[num];
          break;
 
@@ -1969,8 +1989,8 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
          if (TYPE_SCAN == type)
            {
               if (argarray == NULL)
-                parameters[i].data.pointer = 
-                  (trio_pointer_t)va_arg(*arglist, trio_pointer_t);
+                parameters[i].data.pointer =
+                  (trio_pointer_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t);
               else
                 {
                   if (parameters[i].type == FORMAT_CHAR)
@@ -2009,7 +2029,7 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
                      varsize = parameters[i].varsize;
                    }
                  parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
-                 
+
                  if (varsize <= (int)sizeof(int))
                    ;
                  else if (varsize <= (int)sizeof(long))
@@ -2028,36 +2048,36 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
 #if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
              if (parameters[i].flags & FLAGS_SIZE_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(*arglist, size_t)
+                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), size_t)
                  : (trio_uintmax_t)(*((size_t *)argarray[num]));
              else
 #endif
 #if defined(QUALIFIER_PTRDIFF_T)
              if (parameters[i].flags & FLAGS_PTRDIFF_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(*arglist, ptrdiff_t)
+                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), ptrdiff_t)
                  : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
              else
 #endif
 #if defined(QUALIFIER_INTMAX_T)
              if (parameters[i].flags & FLAGS_INTMAX_T)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(*arglist, trio_intmax_t)
+                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_intmax_t)
                  : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
              else
 #endif
              if (parameters[i].flags & FLAGS_QUAD)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(*arglist, trio_ulonglong_t)
+                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_ulonglong_t)
                  : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
              else if (parameters[i].flags & FLAGS_LONG)
                parameters[i].data.number.as_unsigned = (argarray == NULL)
-                 ? (trio_uintmax_t)va_arg(*arglist, long)
+                 ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), long)
                  : (trio_uintmax_t)(*((long *)argarray[num]));
              else
                {
                  if (argarray == NULL)
-                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(*arglist, int);
+                   parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int);
                  else
                    {
                      if (parameters[i].type == FORMAT_CHAR)
@@ -2078,11 +2098,11 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
           */
          if (parameters[i].flags & FLAGS_USER_DEFINED)
            parameters[i].data.pointer = (argarray == NULL)
-             ? va_arg(*arglist, trio_pointer_t )
+             ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
              : argarray[num];
          else
            parameters[i].data.number.as_unsigned = (argarray == NULL)
-             ? (trio_uintmax_t)va_arg(*arglist, int)
+             ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int)
              : (trio_uintmax_t)(*((int *)argarray[num]));
          break;
 
@@ -2091,17 +2111,17 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
            {
              if (parameters[i].flags & FLAGS_LONGDOUBLE)
                parameters[i].data.longdoublePointer = (argarray == NULL)
-                 ? va_arg(*arglist, trio_long_double_t *)
+                 ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t *)
                  : (trio_long_double_t *)argarray[num];
              else
                 {
                  if (parameters[i].flags & FLAGS_LONG)
                    parameters[i].data.doublePointer = (argarray == NULL)
-                     ? va_arg(*arglist, double *)
+                     ? va_arg(TRIO_VA_LIST_DEREF(arglist), double *)
                      : (double *)argarray[num];
                  else
                    parameters[i].data.doublePointer = (argarray == NULL)
-                     ? (double *)va_arg(*arglist, float *)
+                     ? (double *)va_arg(TRIO_VA_LIST_DEREF(arglist), float *)
                      : (double *)((float *)argarray[num]);
                 }
            }
@@ -2109,13 +2129,13 @@ TRIO_ARGS5((type, format, parameters, arglist, argarray),
            {
              if (parameters[i].flags & FLAGS_LONGDOUBLE)
                parameters[i].data.longdoubleNumber = (argarray == NULL)
-                 ? va_arg(*arglist, trio_long_double_t)
+                 ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t)
                  : (trio_long_double_t)(*((trio_long_double_t *)argarray[num]));
              else
                {
                  if (argarray == NULL)
                    parameters[i].data.longdoubleNumber =
-                     (trio_long_double_t)va_arg(*arglist, double);
+                     (trio_long_double_t)va_arg(TRIO_VA_LIST_DEREF(arglist), double);
                  else
                    {
                      if (parameters[i].flags & FLAGS_SHORT)
@@ -2213,7 +2233,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
     number &= (unsigned long)-1;
   else
     number &= (unsigned int)-1;
-  
+
   /* Build number */
   pointer = bufferend = &buffer[sizeof(buffer) - 1];
   *pointer-- = NIL;
@@ -2260,7 +2280,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
   count = (! ((flags & FLAGS_LEFTADJUST) || (precision == NO_PRECISION)))
     ? precision
     : 0;
-  
+
   /* Adjust width further */
   if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
     width--;
@@ -2495,7 +2515,7 @@ TRIO_ARGS4((self, wch, flags, width),
 
   if (width == NO_WIDTH)
     width = sizeof(buffer);
-  
+
   size = wctomb(buffer, wch);
   if ((size <= 0) || (size > width) || (buffer[0] == NIL))
     return 0;
@@ -2537,13 +2557,13 @@ TRIO_ARGS5((self, wstring, flags, width, precision),
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
   (void)mblen(NULL, 0);
 #endif
-  
+
   if (wstring == NULL)
     {
       TrioWriteString(self, NULL, flags, width, precision);
       return;
     }
-  
+
   if (NO_PRECISION == precision)
     {
       length = INT_MAX;
@@ -2638,7 +2658,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
   BOOLEAN_T keepTrailingZeroes;
   BOOLEAN_T keepDecimalPoint;
   trio_long_double_t epsilon;
-  
+
   assert(VALID(self));
   assert(VALID(self->OutStream));
   assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
@@ -2653,7 +2673,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
                      : NAN_LOWER,
                      flags, width, precision);
       return;
-      
+
     case TRIO_FP_INFINITE:
       if (isNegative)
        {
@@ -2680,7 +2700,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
       /* Finitude */
       break;
     }
-  
+
   /* Normal numbers */
   if (flags & FLAGS_LONGDOUBLE)
     {
@@ -2728,13 +2748,13 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
          precision = FLT_DIG;
        }
     }
-  
+
   if (isNegative)
     number = -number;
 
   if (isHex)
     flags |= FLAGS_FLOAT_E;
-  
+
   if (flags & FLAGS_FLOAT_G)
     {
       if (precision == 0)
@@ -2787,7 +2807,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
 
   integerNumber = floorl(number);
   fractionNumber = number - integerNumber;
-  
+
   /*
    * Truncated number.
    *
@@ -2802,7 +2822,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
     : zeroes + precision;
 
   dblFractionBase = TrioPower(base, fractionDigits);
-  
+
   workNumber = number + 0.5 / dblFractionBase;
   if (floorl(number) != floorl(workNumber))
     {
@@ -2855,7 +2875,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
       integerThreshold = INT_MAX;
       fractionThreshold = INT_MAX;
     }
-  
+
   /*
    * Calculate expected width.
    *  sign + integer part + thousands separators + decimal point
@@ -2891,7 +2911,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
       ((requireTwoDigitExponent ? sizeof("E+0") : sizeof("E+")) - 1);
   if (isHex)
     expectedWidth += sizeof("0X") - 1;
-  
+
   /* Output prefixing */
   if (flags & FLAGS_NILPADDING)
     {
@@ -2937,7 +2957,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
          self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
        }
     }
-  
+
   /* Output the integer part and thousand separators */
   dblIntegerBase = 1.0 / TrioPower(base, integerDigits - 1);
   for (i = 0; i < integerDigits; i++)
@@ -2953,7 +2973,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
          self->OutStream(self, digits[(int)fmodl(workNumber, dblBase)]);
        }
       dblIntegerBase *= dblBase;
-      
+
       if (((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
          && TrioFollowedBySeparator(integerDigits - i))
        {
@@ -2965,7 +2985,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
            }
        }
     }
-  
+
   /* Insert decimal point and build the fraction part */
   trailingZeroes = 0;
 
@@ -3014,7 +3034,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
            }
        }
     }
-  
+
   if (keepTrailingZeroes)
     {
       while (trailingZeroes > 0)
@@ -3023,7 +3043,7 @@ TRIO_ARGS6((self, number, flags, width, precision, base),
          trailingZeroes--;
        }
     }
-  
+
   /* Output exponent */
   if (exponentDigits > 0)
     {
@@ -3080,13 +3100,13 @@ TRIO_ARGS3((data, format, parameters),
   int precision;
   int base;
   int index;
-  
+
   index = 0;
   i = 0;
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
   (void)mblen(NULL, 0);
 #endif
-  
+
   while (format[index])
     {
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
@@ -3120,7 +3140,7 @@ TRIO_ARGS3((data, format, parameters),
              /* Skip the parameter entries */
              while (parameters[i].type == FORMAT_PARAMETER)
                i++;
-             
+
              flags = parameters[i].flags;
 
              /* Find width */
@@ -3140,7 +3160,7 @@ TRIO_ARGS3((data, format, parameters),
                      width = -width;
                    }
                }
-             
+
              /* Find precision */
              if (flags & FLAGS_PRECISION)
                {
@@ -3171,7 +3191,7 @@ TRIO_ARGS3((data, format, parameters),
                  /* Get base from parameter list */
                  base = (int)parameters[base].data.number.as_signed;
                }
-             
+
              switch (parameters[i].type)
                {
                case FORMAT_CHAR:
@@ -3251,7 +3271,7 @@ TRIO_ARGS3((data, format, parameters),
                case FORMAT_POINTER:
                  {
                    trio_reference_t reference;
-                   
+
                    reference.data = data;
                    reference.parameter = &parameters[i];
                    trio_print_pointer(&reference, parameters[i].data.pointer);
@@ -3354,7 +3374,7 @@ TRIO_ARGS3((data, format, parameters),
                  }
                  break;
 #endif /* defined(FORMAT_USER_DEFINED) */
-                 
+
                default:
                  break;
                } /* switch parameter type */
@@ -3380,7 +3400,7 @@ TrioFormatRef
 TRIO_ARGS4((reference, format, arglist, argarray),
           trio_reference_t *reference,
           TRIO_CONST char *format,
-          va_list *arglist,
+          TRIO_VA_LIST_PTR arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -3408,7 +3428,7 @@ TRIO_ARGS6((destination, destinationSize, OutStream, format, arglist, argarray),
           size_t destinationSize,
           void (*OutStream) TRIO_PROTO((trio_class_t *, int)),
           TRIO_CONST char *format,
-          va_list *arglist,
+          TRIO_VA_LIST_PTR arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -3564,7 +3584,7 @@ TRIO_ARGS2((self, output),
 
   assert(VALID(self));
   assert(VALID(self->location));
-  
+
   buffer = (char **)self->location;
 
   if (self->processed < self->max)
@@ -3632,9 +3652,9 @@ TRIO_VARGS2((format, va_alist),
   va_list args;
 
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
-  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
+  status = TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3654,7 +3674,7 @@ TRIO_ARGS2((format, args),
 {
   assert(VALID(format));
 
-  return TrioFormat(stdout, 0, TrioOutStreamFile, format, &args, NULL);
+  return TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 /**
@@ -3699,9 +3719,9 @@ TRIO_VARGS3((file, format, va_alist),
 
   assert(VALID(file));
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
-  status = TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
+  status = TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3723,8 +3743,8 @@ TRIO_ARGS3((file, format, args),
 {
   assert(VALID(file));
   assert(VALID(format));
-  
-  return TrioFormat(file, 0, TrioOutStreamFile, format, &args, NULL);
+
+  return TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 /**
@@ -3744,7 +3764,7 @@ TRIO_ARGS3((file, format, args),
 {
   assert(VALID(file));
   assert(VALID(format));
-  
+
   return TrioFormat(file, 0, TrioOutStreamFile, format, NULL, args);
 }
 
@@ -3771,9 +3791,9 @@ TRIO_VARGS3((fd, format, va_alist),
   va_list args;
 
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
-  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
+  status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3794,8 +3814,8 @@ TRIO_ARGS3((fd, format, args),
           va_list args)
 {
   assert(VALID(format));
-  
-  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, &args, NULL);
+
+  return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 /**
@@ -3814,7 +3834,7 @@ TRIO_ARGS3((fd, format, args),
           trio_pointer_t *args)
 {
   assert(VALID(format));
-  
+
   return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, NULL, args);
 }
 
@@ -3839,7 +3859,7 @@ TRIO_VARGS4((stream, closure, format, va_alist),
   TRIO_VA_START(args, format);
   data.stream.out = stream;
   data.closure = closure;
-  status = TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
+  status = TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -3859,7 +3879,7 @@ TRIO_ARGS4((stream, closure, format, args),
 
   data.stream.out = stream;
   data.closure = closure;
-  return TrioFormat(&data, 0, TrioOutStreamCustom, format, &args, NULL);
+  return TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -3904,9 +3924,9 @@ TRIO_VARGS3((buffer, format, va_alist),
 
   assert(VALID(buffer));
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
+  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
   *buffer = NIL; /* Terminate with NIL character */
   TRIO_VA_END(args);
   return status;
@@ -3932,7 +3952,7 @@ TRIO_ARGS3((buffer, format, args),
   assert(VALID(buffer));
   assert(VALID(format));
 
-  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, &args, NULL);
+  status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
   *buffer = NIL;
   return status;
 }
@@ -3991,7 +4011,7 @@ TRIO_VARGS4((buffer, max, format, va_alist),
 
   TRIO_VA_START(args, format);
   status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-                     TrioOutStreamStringMax, format, &args, NULL);
+                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
   if (max > 0)
     *buffer = NIL;
   TRIO_VA_END(args);
@@ -4021,7 +4041,7 @@ TRIO_ARGS4((buffer, max, format, args),
   assert(VALID(format));
 
   status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
-                     TrioOutStreamStringMax, format, &args, NULL);
+                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
   if (max > 0)
     *buffer = NIL;
   return status;
@@ -4082,7 +4102,7 @@ TRIO_VARGS4((buffer, max, format, va_alist),
   buffer = &buffer[buf_len];
 
   status = TrioFormat(&buffer, max - 1 - buf_len,
-                     TrioOutStreamStringMax, format, &args, NULL);
+                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   *buffer = NIL;
   return status;
@@ -4098,14 +4118,14 @@ TRIO_ARGS4((buffer, max, format, args),
 {
   int status;
   size_t buf_len;
-  
+
   assert(VALID(buffer));
   assert(VALID(format));
 
   buf_len = trio_length(buffer);
   buffer = &buffer[buf_len];
   status = TrioFormat(&buffer, max - 1 - buf_len,
-                     TrioOutStreamStringMax, format, &args, NULL);
+                     TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
   *buffer = NIL;
   return status;
 }
@@ -4126,13 +4146,13 @@ TRIO_VARGS2((format, va_alist),
   char *result = NULL;
 
   assert(VALID(format));
-  
+
   info = trio_xstring_duplicate("");
   if (info)
     {
       TRIO_VA_START(args, format);
       (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                      format, &args, NULL);
+                      format, TRIO_VA_LIST_ADDR(args), NULL);
       TRIO_VA_END(args);
 
       trio_string_terminate(info);
@@ -4151,14 +4171,14 @@ TRIO_ARGS2((format, args),
 {
   trio_string_t *info;
   char *result = NULL;
-  
+
   assert(VALID(format));
-  
+
   info = trio_xstring_duplicate("");
   if (info)
     {
       (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                      format, &args, NULL);
+                      format, TRIO_VA_LIST_ADDR(args), NULL);
       trio_string_terminate(info);
       result = trio_string_extract(info);
       trio_string_destroy(info);
@@ -4180,7 +4200,7 @@ TRIO_VARGS3((result, format, va_alist),
   assert(VALID(format));
 
   *result = NULL;
-  
+
   info = trio_xstring_duplicate("");
   if (info == NULL)
     {
@@ -4190,7 +4210,7 @@ TRIO_VARGS3((result, format, va_alist),
     {
       TRIO_VA_START(args, format);
       status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                         format, &args, NULL);
+                         format, TRIO_VA_LIST_ADDR(args), NULL);
       TRIO_VA_END(args);
       if (status >= 0)
        {
@@ -4211,11 +4231,11 @@ TRIO_ARGS3((result, format, args),
 {
   int status;
   trio_string_t *info;
-  
+
   assert(VALID(format));
 
   *result = NULL;
-  
+
   info = trio_xstring_duplicate("");
   if (info == NULL)
     {
@@ -4224,7 +4244,7 @@ TRIO_ARGS3((result, format, args),
   else
     {
       status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
-                         format, &args, NULL);
+                         format, TRIO_VA_LIST_ADDR(args), NULL);
       if (status >= 0)
        {
          trio_string_terminate(info);
@@ -4264,7 +4284,7 @@ TRIO_ARGS3((result, format, args),
    @param name
    @return Handle.
  */
-TRIO_PUBLIC trio_pointer_t 
+TRIO_PUBLIC trio_pointer_t
 trio_register
 TRIO_ARGS2((callback, name),
           trio_callback_t callback,
@@ -4291,23 +4311,23 @@ TRIO_ARGS2((callback, name),
            }
          return NULL;
        }
-      
+
       /* Bail out if namespace is too long */
       if (trio_length(name) >= MAX_USER_NAME)
        return NULL;
-      
+
       /* Bail out if namespace already is registered */
       def = TrioFindNamespace(name, &prev);
       if (def)
        return NULL;
     }
-  
+
   def = (trio_userdef_t *)TRIO_MALLOC(sizeof(trio_userdef_t));
   if (def)
     {
       if (internalEnterCriticalRegion)
        (void)internalEnterCriticalRegion(NULL);
-      
+
       if (name)
        {
          /* Link into internal list */
@@ -4352,12 +4372,12 @@ TRIO_ARGS1((handle),
        {
          if (internalEnterCriticalRegion)
            (void)internalEnterCriticalRegion(NULL);
-         
+
          if (prev == NULL)
            internalUserDef = NULL;
          else
            prev->next = def->next;
-         
+
          if (internalLeaveCriticalRegion)
            (void)internalLeaveCriticalRegion(NULL);
        }
@@ -4377,14 +4397,14 @@ TRIO_ARGS1((ref),
 #if defined(FORMAT_USER_DEFINED)
   assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
 #endif
-  
+
   return (((trio_reference_t *)ref)->parameter->user_data);
 }
 
 /*************************************************************************
  * trio_get_argument [public]
  */
-trio_pointer_t 
+trio_pointer_t
 trio_get_argument
 TRIO_ARGS1((ref),
           trio_pointer_t ref)
@@ -4392,7 +4412,7 @@ TRIO_ARGS1((ref),
 #if defined(FORMAT_USER_DEFINED)
   assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
 #endif
-  
+
   return ((trio_reference_t *)ref)->parameter->data.pointer;
 }
 
@@ -4924,9 +4944,9 @@ TRIO_VARGS3((ref, format, va_alist),
   va_list arglist;
 
   assert(VALID(format));
-  
+
   TRIO_VA_START(arglist, format);
-  status = TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
+  status = TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
   TRIO_VA_END(arglist);
   return status;
 }
@@ -4942,8 +4962,8 @@ TRIO_ARGS3((ref, format, arglist),
           va_list arglist)
 {
   assert(VALID(format));
-  
-  return TrioFormatRef((trio_reference_t *)ref, format, &arglist, NULL);
+
+  return TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
 }
 
 /*************************************************************************
@@ -4957,7 +4977,7 @@ TRIO_ARGS3((ref, format, argarray),
           trio_pointer_t *argarray)
 {
   assert(VALID(format));
-  
+
   return TrioFormatRef((trio_reference_t *)ref, format, NULL, argarray);
 }
 
@@ -5206,7 +5226,7 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
       switch (ch)
        {
        case QUALIFIER_MINUS: /* Scanlist ranges */
-         
+
          /*
           * Both C99 and UNIX98 describes ranges as implementation-
           * defined.
@@ -5233,17 +5253,17 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
            return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
          if (range_begin > range_end)
            return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
-           
+
          for (i = (int)range_begin; i <= (int)range_end; i++)
            characterclass[i]++;
-           
+
          ch = range_end;
          break;
-         
+
 #if TRIO_EXTENSION
 
        case SPECIFIER_GROUP:
-         
+
          switch (format[index + 1])
            {
            case QUALIFIER_DOT: /* Collating symbol */
@@ -5262,15 +5282,15 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
                }
              if (format[++i] != SPECIFIER_UNGROUP)
                return -1;
-             
+
              index = i;
              break;
-         
+
            case QUALIFIER_EQUAL: /* Equivalence class expressions */
              {
                unsigned int j;
                unsigned int k;
-           
+
                if (internalCollationUnconverted)
                  {
                    /* Lazy evaluation of collation array */
@@ -5294,13 +5314,13 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
                  }
                if (format[++i] != SPECIFIER_UNGROUP)
                  return -1;
-               
+
                index = i;
              }
              break;
-         
+
            case QUALIFIER_COLON: /* Character class expressions */
-         
+
              if (trio_equal_max(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
                                 &format[index]))
                {
@@ -5400,9 +5420,9 @@ TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
              break;
            }
          break;
-         
+
 #endif /* TRIO_EXTENSION */
-         
+
        default:
          characterclass[(int)ch]++;
          break;
@@ -5448,9 +5468,9 @@ TRIO_ARGS5((self, target, flags, width, base),
        }
       internalDigitsUnconverted = FALSE;
     }
-  
+
   TrioSkipWhitespaces(self);
-  
+
   if (!(flags & FLAGS_UNSIGNED))
     {
       /* Leading sign */
@@ -5464,9 +5484,9 @@ TRIO_ARGS5((self, target, flags, width, base),
          isNegative = TRUE;
        }
     }
-  
+
   count = self->processed;
-  
+
   if (flags & FLAGS_ALTERNATIVE)
     {
       switch (base)
@@ -5527,7 +5547,7 @@ TRIO_ARGS5((self, target, flags, width, base),
        }
       else
        break;
-            
+
       number *= base;
       number += digit;
       gotNumber = TRUE; /* we need at least one digit */
@@ -5538,7 +5558,7 @@ TRIO_ARGS5((self, target, flags, width, base),
   /* Was anything read at all? */
   if (!gotNumber)
     return FALSE;
-  
+
   if (target)
     *target = (isNegative) ? -((trio_intmax_t)number) : number;
   return TRUE;
@@ -5558,7 +5578,7 @@ TRIO_ARGS4((self, target, flags, width),
   int i;
   char ch;
   trio_uintmax_t number;
-  
+
   assert(VALID(self));
   assert(VALID(self->InStream));
 
@@ -5603,7 +5623,7 @@ TRIO_ARGS4((self, target, flags, width),
              break;
            }
        }
-      
+
       if (target)
        target[i] = ch;
     }
@@ -5622,12 +5642,12 @@ TRIO_ARGS4((self, target, flags, width),
           int width)
 {
   int i;
-  
+
   assert(VALID(self));
   assert(VALID(self->InStream));
 
   TrioSkipWhitespaces(self);
-    
+
   /*
    * Continue until end of string is reached, a whitespace is encountered,
    * or width is exceeded
@@ -5663,7 +5683,7 @@ TRIO_ARGS4((self, target, flags, width),
   int amount = 0;
   trio_wchar_t wch;
   char buffer[MB_LEN_MAX + 1];
-  
+
   assert(VALID(self));
   assert(VALID(self->InStream));
 
@@ -5720,7 +5740,7 @@ TRIO_ARGS4((self, target, flags, width),
 {
   int i;
   int size;
-  
+
   assert(VALID(self));
   assert(VALID(self->InStream));
 
@@ -5729,7 +5749,7 @@ TRIO_ARGS4((self, target, flags, width),
 #if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
   (void)mblen(NULL, 0);
 #endif
-  
+
   /*
    * Continue until end of string is reached, a whitespace is encountered,
    * or width is exceeded
@@ -5767,7 +5787,7 @@ TRIO_ARGS5((self, target, characterclass, flags, width),
 {
   int ch;
   int i;
-  
+
   assert(VALID(self));
   assert(VALID(self->InStream));
 
@@ -5782,7 +5802,7 @@ TRIO_ARGS5((self, target, characterclass, flags, width),
        target[i] = (char)ch;
       self->InStream(self, &ch);
     }
-  
+
   if (target)
     target[i] = NIL;
   return TRUE;
@@ -5811,12 +5831,12 @@ TRIO_ARGS4((self, target, flags, width),
   BOOLEAN_T isHex = FALSE;
 
   doubleString[0] = 0;
-  
+
   if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
     width = sizeof(doubleString) - 1;
-  
+
   TrioSkipWhitespaces(self);
-  
+
   /*
    * Read entire double number from stream. trio_to_double requires
    * a string as input, but InStream can be anything, so we have to
@@ -5902,11 +5922,11 @@ TRIO_ARGS4((self, target, flags, width),
          self->InStream(self, &ch);
        }
       break;
-      
+
     default:
       break;
     }
-  
+
   while ((ch != EOF) && (index - start < width))
     {
       /* Integer part */
@@ -5966,7 +5986,7 @@ TRIO_ARGS4((self, target, flags, width),
     return FALSE;
 
   doubleString[index] = 0;
-  
+
   if (flags & FLAGS_LONGDOUBLE)
     {
       *((trio_long_double_t *)target) = trio_to_long_double(doubleString, NULL);
@@ -5992,7 +6012,7 @@ TRIO_ARGS3((self, target, flags),
   char buffer[sizeof(internalNullString)];
 
   flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
-  
+
   if (TrioReadNumber(self,
                     &number,
                     flags,
@@ -6013,7 +6033,7 @@ TRIO_ARGS3((self, target, flags),
                          : buffer,
                          0,
                          sizeof(internalNullString) - 1))
-    {  
+    {
       if (trio_equal_case(buffer, internalNullString))
        {
          if (target)
@@ -6077,12 +6097,12 @@ TRIO_ARGS3((data, format, parameters),
            }
        }
 #endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-      
+
       if ((EOF == ch) && (parameters[i].type != FORMAT_COUNT))
        {
          return (assignment > 0) ? assignment : EOF;
        }
-      
+
       if (CHAR_IDENTIFIER == format[index])
        {
          if (CHAR_IDENTIFIER == format[index + 1])
@@ -6101,7 +6121,7 @@ TRIO_ARGS3((data, format, parameters),
          /* Skip the parameter entries */
          while (parameters[i].type == FORMAT_PARAMETER)
            i++;
-         
+
          flags = parameters[i].flags;
          /* Find width */
          width = parameters[i].width;
@@ -6117,7 +6137,7 @@ TRIO_ARGS3((data, format, parameters),
              /* Get base from parameter list */
              base = (int)parameters[base].data.number.as_signed;
            }
-         
+
          switch (parameters[i].type)
            {
            case FORMAT_INT:
@@ -6165,7 +6185,7 @@ TRIO_ARGS3((data, format, parameters),
                  }
              }
              break; /* FORMAT_INT */
-             
+
            case FORMAT_STRING:
 #if TRIO_WIDECHAR
              if (flags & FLAGS_WIDECHAR)
@@ -6229,7 +6249,7 @@ TRIO_ARGS3((data, format, parameters),
                  }
                /* Skip over group specifier */
                index++;
-               
+
                memset(characterclass, 0, sizeof(characterclass));
                rc = TrioGetCharacterClass(format,
                                           &index,
@@ -6291,7 +6311,7 @@ TRIO_ARGS3((data, format, parameters),
                    }
                }
              break; /* FORMAT_COUNT */
-             
+
            case FORMAT_CHAR:
 #if TRIO_WIDECHAR
              if (flags & FLAGS_WIDECHAR)
@@ -6353,7 +6373,7 @@ TRIO_ARGS3((data, format, parameters),
            }
          else
            return assignment;
-         
+
          index++;
        }
     }
@@ -6370,7 +6390,7 @@ TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
           size_t sourceSize,
           void (*InStream) TRIO_PROTO((trio_class_t *, int *)),
           TRIO_CONST char *format,
-          va_list *arglist,
+          TRIO_VA_LIST_PTR arglist,
           trio_pointer_t *argarray)
 {
   int status;
@@ -6392,7 +6412,7 @@ TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
       TrioSetLocale();
     }
 #endif
-  
+
   status = TrioParse(TYPE_SCAN, format, parameters, arglist, argarray);
   if (status < 0)
     return status;
@@ -6414,11 +6434,14 @@ TRIO_ARGS2((self, intPointer),
           trio_class_t *self,
           int *intPointer)
 {
-  FILE *file = (FILE *)self->location;
+  FILE *file;
 
   assert(VALID(self));
+  assert(VALID(self->location));
   assert(VALID(file));
 
+  file = (FILE *)self->location;
+
   self->current = fgetc(file);
   if (self->current == EOF)
     {
@@ -6431,7 +6454,7 @@ TRIO_ARGS2((self, intPointer),
       self->processed++;
       self->committed++;
     }
-  
+
   if (VALID(intPointer))
     {
       *intPointer = self->current;
@@ -6447,11 +6470,14 @@ TRIO_ARGS2((self, intPointer),
           trio_class_t *self,
           int *intPointer)
 {
-  int fd = *((int *)self->location);
+  int fd;
   int size;
   unsigned char input;
 
   assert(VALID(self));
+  assert(VALID(self->location));
+
+  fd = *((int *)self->location);
 
   size = read(fd, &input, sizeof(char));
   if (size == -1)
@@ -6468,7 +6494,7 @@ TRIO_ARGS2((self, intPointer),
       self->committed++;
       self->processed++;
     }
-  
+
   if (VALID(intPointer))
     {
       *intPointer = self->current;
@@ -6485,7 +6511,7 @@ TRIO_ARGS2((self, intPointer),
           int *intPointer)
 {
   trio_custom_t *data;
-  
+
   assert(VALID(self));
   assert(VALID(self->location));
 
@@ -6494,7 +6520,7 @@ TRIO_ARGS2((self, intPointer),
   self->current = (data->stream.in == NULL)
     ? NIL
     : (data->stream.in)(data->closure);
-  
+
   if (self->current == NIL)
     {
       self->current = EOF;
@@ -6504,7 +6530,7 @@ TRIO_ARGS2((self, intPointer),
       self->processed++;
       self->committed++;
     }
-  
+
   if (VALID(intPointer))
     {
       *intPointer = self->current;
@@ -6537,7 +6563,7 @@ TRIO_ARGS2((self, intPointer),
       self->processed++;
       self->committed++;
     }
-  
+
   if (VALID(intPointer))
     {
       *intPointer = self->current;
@@ -6578,11 +6604,11 @@ TRIO_VARGS2((format, va_alist),
   va_list args;
 
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)stdin, 0,
                    TrioInStreamFile,
-                   format, &args, NULL);
+                   format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6594,10 +6620,10 @@ TRIO_ARGS2((format, args),
           va_list args)
 {
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)stdin, 0,
                  TrioInStreamFile,
-                 format, &args, NULL);
+                 format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -6607,7 +6633,7 @@ TRIO_ARGS2((format, args),
           trio_pointer_t *args)
 {
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)stdin, 0,
                  TrioInStreamFile,
                  format, NULL, args);
@@ -6628,11 +6654,11 @@ TRIO_VARGS3((file, format, va_alist),
 
   assert(VALID(file));
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)file, 0,
                    TrioInStreamFile,
-                   format, &args, NULL);
+                   format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6646,10 +6672,10 @@ TRIO_ARGS3((file, format, args),
 {
   assert(VALID(file));
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)file, 0,
                  TrioInStreamFile,
-                 format, &args, NULL);
+                 format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -6661,7 +6687,7 @@ TRIO_ARGS3((file, format, args),
 {
   assert(VALID(file));
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)file, 0,
                  TrioInStreamFile,
                  format, NULL, args);
@@ -6681,11 +6707,11 @@ TRIO_VARGS3((fd, format, va_alist),
   va_list args;
 
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)&fd, 0,
                    TrioInStreamFileDescriptor,
-                   format, &args, NULL);
+                   format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6698,10 +6724,10 @@ TRIO_ARGS3((fd, format, args),
           va_list args)
 {
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)&fd, 0,
                  TrioInStreamFileDescriptor,
-                 format, &args, NULL);
+                 format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -6712,7 +6738,7 @@ TRIO_ARGS3((fd, format, args),
           trio_pointer_t *args)
 {
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)&fd, 0,
                  TrioInStreamFileDescriptor,
                  format, NULL, args);
@@ -6735,11 +6761,11 @@ TRIO_VARGS4((stream, closure, format, va_alist),
 
   assert(VALID(stream));
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
   data.stream.in = stream;
   data.closure = closure;
-  status = TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
+  status = TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6753,13 +6779,13 @@ TRIO_ARGS4((stream, closure, format, args),
           va_list args)
 {
   trio_custom_t data;
-  
+
   assert(VALID(stream));
   assert(VALID(format));
 
   data.stream.in = stream;
   data.closure = closure;
-  return TrioScan(&data, 0, TrioInStreamCustom, format, &args, NULL);
+  return TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -6771,7 +6797,7 @@ TRIO_ARGS4((stream, closure, format, args),
           trio_pointer_t *args)
 {
   trio_custom_t data;
-  
+
   assert(VALID(stream));
   assert(VALID(format));
 
@@ -6795,11 +6821,11 @@ TRIO_VARGS3((buffer, format, va_alist),
 
   assert(VALID(buffer));
   assert(VALID(format));
-  
+
   TRIO_VA_START(args, format);
   status = TrioScan((trio_pointer_t)&buffer, 0,
                    TrioInStreamString,
-                   format, &args, NULL);
+                   format, TRIO_VA_LIST_ADDR(args), NULL);
   TRIO_VA_END(args);
   return status;
 }
@@ -6813,10 +6839,10 @@ TRIO_ARGS3((buffer, format, args),
 {
   assert(VALID(buffer));
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)&buffer, 0,
                  TrioInStreamString,
-                 format, &args, NULL);
+                 format, TRIO_VA_LIST_ADDR(args), NULL);
 }
 
 TRIO_PUBLIC int
@@ -6828,7 +6854,7 @@ TRIO_ARGS3((buffer, format, args),
 {
   assert(VALID(buffer));
   assert(VALID(format));
-  
+
   return TrioScan((trio_pointer_t)&buffer, 0,
                  TrioInStreamString,
                  format, NULL, args);
diff --git a/trio.h b/trio.h
index eab1b6d..99d2127 100644 (file)
--- a/trio.h
+++ b/trio.h
@@ -28,7 +28,7 @@
  * Use autoconf defines if present. Packages using trio must define
  * HAVE_CONFIG_H as a compiler option themselves.
  */
-#if defined(HAVE_CONFIG_H)
+#if defined(TRIO_HAVE_CONFIG_H)
 # include "config.h"
 #endif
 
@@ -155,45 +155,59 @@ void trio_locale_set_grouping TRIO_PROTO((char *grouping));
 #ifdef TRIO_REPLACE_STDIO
 /* Replace the <stdio.h> functions */
 #ifndef HAVE_PRINTF
+# undef printf
 # define printf trio_printf
 #endif
 #ifndef HAVE_VPRINTF
+# undef vprintf
 # define vprintf trio_vprintf
 #endif
 #ifndef HAVE_FPRINTF
+# undef fprintf
 # define fprintf trio_fprintf
 #endif
 #ifndef HAVE_VFPRINTF
+# undef vfprintf
 # define vfprintf trio_vfprintf
 #endif
 #ifndef HAVE_SPRINTF
+# undef sprintf
 # define sprintf trio_sprintf
 #endif
 #ifndef HAVE_VSPRINTF
+# undef vsprintf
 # define vsprintf trio_vsprintf
 #endif
 #ifndef HAVE_SNPRINTF
+# undef snprintf
 # define snprintf trio_snprintf
 #endif
 #ifndef HAVE_VSNPRINTF
+# undef vsnprintf
 # define vsnprintf trio_vsnprintf
 #endif
 #ifndef HAVE_SCANF
+# undef scanf
 # define scanf trio_scanf
 #endif
 #ifndef HAVE_VSCANF
+# undef vscanf
 # define vscanf trio_vscanf
 #endif
 #ifndef HAVE_FSCANF
+# undef fscanf
 # define fscanf trio_fscanf
 #endif
 #ifndef HAVE_VFSCANF
+# undef vfscanf
 # define vfscanf trio_vfscanf
 #endif
 #ifndef HAVE_SSCANF
+# undef sscanf
 # define sscanf trio_sscanf
 #endif
 #ifndef HAVE_VSSCANF
+# undef vsscanf
 # define vsscanf trio_vsscanf
 #endif
 /* These aren't stdio functions, but we make them look similar */
index fa89416..46772ee 100644 (file)
--- a/triodef.h
+++ b/triodef.h
@@ -48,6 +48,8 @@
  * based on the DECC compiler later on.
  */
 # define TRIO_PLATFORM_VMS
+#elif defined(__OS400__)
+# define TRIO_PLATFORM_OS400
 #elif defined(unix) || defined(__unix) || defined(__unix__)
 # define TRIO_PLATFORM_UNIX
 #elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
 #   define TRIO_COMPILER_SUPPORTS_C94
 #  endif
 # endif
+#elif defined(TRIO_COMPILER_XLC) && defined(__EXTENDED__)
+# define TRIO_COMPILER_SUPPORTS_C89
+# define TRIO_COMPILER_SUPPORTS_C90
+# define TRIO_COMPILER_SUPPORTS_C94
 #endif
 
 #if defined(_XOPEN_SOURCE)
index 95baae1..6fbabb5 100644 (file)
--- a/trionan.c
+++ b/trionan.c
@@ -261,7 +261,7 @@ trio_pinf(TRIO_NOARGS)
   static double result = 0.0;
 
   if (result == 0.0) {
-    
+
 #if defined(INFINITY) && defined(__STDC_IEC_559__)
     result = (double)INFINITY;
 
@@ -283,7 +283,7 @@ trio_pinf(TRIO_NOARGS)
       /* Force overflow */
       result += HUGE_VAL;
     }
-    
+
 # if defined(TRIO_PLATFORM_UNIX)
     signal(SIGFPE, signal_handler);
 # endif
@@ -326,13 +326,13 @@ trio_nan(TRIO_NOARGS)
   static double result = 0.0;
 
   if (result == 0.0) {
-    
+
 #if defined(TRIO_COMPILER_SUPPORTS_C99)
     result = nan("");
 
 #elif defined(NAN) && defined(__STDC_IEC_559__)
     result = (double)NAN;
-  
+
 #elif defined(USE_IEEE_754)
     result = trio_make_double(ieee_754_qnan_array);
 
@@ -349,13 +349,13 @@ trio_nan(TRIO_NOARGS)
 # if defined(TRIO_PLATFORM_UNIX)
     void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
 # endif
-    
+
     result = trio_pinf() / trio_pinf();
-    
+
 # if defined(TRIO_PLATFORM_UNIX)
     signal(SIGFPE, signal_handler);
 # endif
-    
+
 #endif
   }
   return result;
@@ -381,7 +381,7 @@ TRIO_ARGS1((number),
    * the conservative approach and only use it for UNIX95.
    */
   return isnan(number);
-  
+
 #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
   /*
    * Microsoft Visual C++ and Borland C++ Builder have an _isnan()
@@ -398,20 +398,20 @@ TRIO_ARGS1((number),
   int is_special_quantity;
 
   is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
-  
+
   return (is_special_quantity && has_mantissa);
-  
+
 #else
   /*
    * Fallback solution
    */
   int status;
   double integral, fraction;
-  
+
 # if defined(TRIO_PLATFORM_UNIX)
   void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
 # endif
-  
+
   status = (/*
             * NaN is the only number which does not compare to itself
             */
@@ -422,13 +422,13 @@ TRIO_ARGS1((number),
            ((number != 0.0) &&
             (fraction = modf(number, &integral),
              integral == fraction)));
-  
+
 # if defined(TRIO_PLATFORM_UNIX)
   signal(SIGFPE, signal_handler);
 # endif
-  
+
   return status;
-  
+
 #endif
 }
 
@@ -459,7 +459,7 @@ TRIO_ARGS1((number),
   return isinf(number)
     ? ((number > 0.0) ? 1 : -1)
     : 0;
-  
+
 #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
   /*
    * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
@@ -478,7 +478,7 @@ TRIO_ARGS1((number),
   int is_special_quantity;
 
   is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
-  
+
   return (is_special_quantity && !has_mantissa)
     ? ((number < 0.0) ? -1 : 1)
     : 0;
@@ -488,23 +488,23 @@ TRIO_ARGS1((number),
    * Fallback solution.
    */
   int status;
-  
+
 # if defined(TRIO_PLATFORM_UNIX)
   void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
 # endif
-  
+
   double infinity = trio_pinf();
-  
+
   status = ((number == infinity)
            ? 1
            : ((number == -infinity) ? -1 : 0));
-  
+
 # if defined(TRIO_PLATFORM_UNIX)
   signal(SIGFPE, signal_handler);
 # endif
-  
+
   return status;
-  
+
 #endif
 }
 
@@ -526,7 +526,7 @@ TRIO_ARGS1((number),
    * C99 defines isfinite() as a macro.
    */
   return isfinite(number);
-  
+
 #elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
   /*
    * Microsoft Visual C++ and Borland C++ Builder use _finite().
@@ -547,7 +547,7 @@ TRIO_ARGS1((number),
    * Fallback solution.
    */
   return ((trio_isinf(number) == 0) && (trio_isnan(number) == 0));
-  
+
 #endif
 }
 
@@ -596,7 +596,7 @@ TRIO_ARGS2((number, is_negative),
 #  define TRIO_NEGATIVE_ZERO FP_NEG_ZERO
 #  define TRIO_POSITIVE_NORMAL FP_POS_NORM
 #  define TRIO_NEGATIVE_NORMAL FP_NEG_NORM
-  
+
 # elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
   /*
    * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
@@ -613,7 +613,7 @@ TRIO_ARGS2((number, is_negative),
 #  define TRIO_NEGATIVE_ZERO _FPCLASS_NZ
 #  define TRIO_POSITIVE_NORMAL _FPCLASS_PN
 #  define TRIO_NEGATIVE_NORMAL _FPCLASS_NN
-  
+
 # elif defined(FP_PLUS_NORM)
   /*
    * HP-UX 9.x and 10.x have an fpclassify() function, that is different
@@ -678,13 +678,13 @@ TRIO_ARGS2((number, is_negative),
     *is_negative = (number < 0.0);
     return TRIO_FP_NORMAL;
   }
-  
+
 # else
   /*
    * Fallback solution.
    */
   int rc;
-  
+
   if (number == 0.0) {
     /*
      * In IEEE 754 the sign of zero is ignored in comparisons, so we
@@ -716,7 +716,7 @@ TRIO_ARGS2((number, is_negative),
   }
   *is_negative = (number < 0.0);
   return TRIO_FP_NORMAL;
-  
+
 # endif
 #endif
 }
@@ -734,7 +734,7 @@ TRIO_ARGS1((number),
           double number)
 {
   int is_negative;
-  
+
   (void)trio_fpclassify_and_signbit(number, &is_negative);
   return is_negative;
 }
@@ -753,7 +753,7 @@ TRIO_ARGS1((number),
           double number)
 {
   int dummy;
-  
+
   return trio_fpclassify_and_signbit(number, &dummy);
 }
 
@@ -828,7 +828,7 @@ int main(TRIO_NOARGS)
   print_class("NNorm", -1.0);
   print_class("PSub", 1.01e-307 - 1.00e-307);
   print_class("NSub", 1.00e-307 - 1.01e-307);
-  
+
   printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
         my_nan,
         ((unsigned char *)&my_nan)[0],
@@ -862,11 +862,11 @@ int main(TRIO_NOARGS)
         ((unsigned char *)&my_ninf)[6],
         ((unsigned char *)&my_ninf)[7],
         trio_isnan(my_ninf), trio_isinf(my_ninf));
-  
+
 # if defined(TRIO_PLATFORM_UNIX)
   signal_handler = signal(SIGFPE, SIG_IGN);
 # endif
-  
+
   my_pinf = DBL_MAX + DBL_MAX;
   my_ninf = -my_pinf;
   my_nan = my_pinf / my_pinf;
@@ -874,7 +874,7 @@ int main(TRIO_NOARGS)
 # if defined(TRIO_PLATFORM_UNIX)
   signal(SIGFPE, signal_handler);
 # endif
-  
+
   printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
         my_nan,
         ((unsigned char *)&my_nan)[0],
@@ -908,7 +908,7 @@ int main(TRIO_NOARGS)
         ((unsigned char *)&my_ninf)[6],
         ((unsigned char *)&my_ninf)[7],
         trio_isnan(my_ninf), trio_isinf(my_ninf));
-  
+
   return 0;
 }
 #endif
index c5de32b..be6e718 100644 (file)
--- a/trionan.h
+++ b/trionan.h
@@ -46,7 +46,7 @@ TRIO_PUBLIC double trio_pinf TRIO_PROTO((void));
  * Return negative infinity.
  */
 TRIO_PUBLIC double trio_ninf TRIO_PROTO((void));
-  
+
 /*
  * Return negative zero.
  */
index 30d13ac..123bbeb 100644 (file)
--- a/triostr.c
+++ b/triostr.c
@@ -52,7 +52,9 @@
 # define BOOLEAN_T int
 #endif
 
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
+#ifdef __VMS
+# define USE_STRTOD
+#elif defined(TRIO_COMPILER_SUPPORTS_C99)
 # define USE_STRTOD
 # define USE_STRTOF
 #elif defined(TRIO_COMPILER_MSVC)
 # else
 #  define strcasecmp(x,y) strcmpi(x,y)
 # endif
+#elif defined(TRIO_PLATFORM_OS400)
+# define USE_STRCASECMP
+# define USE_STRNCASECMP
+# include <strings.h>
 #endif
 
 #if !(defined(TRIO_PLATFORM_SUNOS))
@@ -165,11 +171,11 @@ TRIO_ARGS1((string),
 #if !defined(TRIO_MINIMAL)
 /**
    Append @p source at the end of @p target.
-   
+
    @param target Target string.
    @param source Source string.
    @return Boolean value indicating success or failure.
-   
+
    @pre @p target must point to a memory chunk with sufficient room to
    contain the @p target string and @p source string.
    @pre No boundary checking is performed, so insufficient memory will
@@ -184,7 +190,7 @@ TRIO_ARGS2((target, source),
 {
   assert(target);
   assert(source);
-  
+
   return (strcat(target, source) != NULL);
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -192,12 +198,12 @@ TRIO_ARGS2((target, source),
 #if !defined(TRIO_MINIMAL)
 /**
    Append at most @p max characters from @p source to @p target.
-   
+
    @param target Target string.
    @param max Maximum number of characters to append.
    @param source Source string.
    @return Boolean value indicating success or failure.
-   
+
    @pre @p target must point to a memory chuck with sufficient room to
    contain the @p target string and the @p source string (at most @p max
    characters).
@@ -213,12 +219,12 @@ TRIO_ARGS3((target, max, source),
           TRIO_CONST char *source)
 {
   size_t length;
-  
+
   assert(target);
   assert(source);
 
   length = trio_length(target);
-  
+
   if (max > length)
     {
       strncat(target, source, max - length - 1);
@@ -244,7 +250,7 @@ TRIO_ARGS2((string, substring),
 {
   assert(string);
   assert(substring);
-  
+
   return (0 != strstr(string, substring));
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -253,11 +259,11 @@ TRIO_ARGS2((string, substring),
 #if !defined(TRIO_MINIMAL)
 /**
    Copy @p source to @p target.
-   
+
    @param target Target string.
    @param source Source string.
    @return Boolean value indicating success or failure.
-   
+
    @pre @p target must point to a memory chunk with sufficient room to
    contain the @p source string.
    @pre No boundary checking is performed, so insufficient memory will
@@ -272,7 +278,7 @@ TRIO_ARGS2((target, source),
 {
   assert(target);
   assert(source);
-     
+
   (void)strcpy(target, source);
   return TRUE;
 }
@@ -281,12 +287,12 @@ TRIO_ARGS2((target, source),
 
 /**
    Copy at most @p max characters from @p source to @p target.
-   
+
    @param target Target string.
    @param max Maximum number of characters to append.
    @param source Source string.
    @return Boolean value indicating success or failure.
-   
+
    @pre @p target must point to a memory chunk with sufficient room to
    contain the @p source string (at most @p max characters).
    @pre No boundary checking is performed, so insufficient memory will
@@ -336,10 +342,10 @@ TRIO_ARGS2((source, size),
 
 /**
    Duplicate @p source.
-   
+
    @param source Source string.
    @return A copy of the @p source string.
-   
+
    @post @p target will be zero terminated.
 */
 TRIO_STRING_PUBLIC char *
@@ -354,11 +360,11 @@ TRIO_ARGS1((source),
 #if !defined(TRIO_MINIMAL)
 /**
    Duplicate at most @p max characters of @p source.
-   
+
    @param source Source string.
    @param max Maximum number of characters to duplicate.
    @return A copy of the @p source string.
-   
+
    @post @p target will be zero terminated.
 */
 TRIO_STRING_PUBLIC char *
@@ -383,11 +389,11 @@ trio_duplicate_max TRIO_ARGS2((source, max),
 
 /**
    Compare if two strings are equal.
-   
+
    @param first First string.
    @param second Second string.
    @return Boolean indicating whether the two strings are equal or not.
-   
+
    Case-insensitive comparison.
 */
 TRIO_STRING_PUBLIC int
@@ -422,11 +428,11 @@ TRIO_ARGS2((first, second),
 
 /**
    Compare if two strings are equal.
-   
+
    @param first First string.
    @param second Second string.
    @return Boolean indicating whether the two strings are equal or not.
-   
+
    Case-sensitive comparison.
 */
 TRIO_STRING_PUBLIC int
@@ -449,12 +455,12 @@ TRIO_ARGS2((first, second),
 #if !defined(TRIO_MINIMAL)
 /**
    Compare if two strings up until the first @p max characters are equal.
-   
+
    @param first First string.
    @param max Maximum number of characters to compare.
    @param second Second string.
    @return Boolean indicating whether the two strings are equal or not.
-   
+
    Case-sensitive comparison.
 */
 TRIO_STRING_PUBLIC int
@@ -478,7 +484,7 @@ TRIO_ARGS3((first, max, second),
 
 /**
    Compare if two strings are equal.
-   
+
    @param first First string.
    @param second Second string.
    @return Boolean indicating whether the two strings are equal or not.
@@ -504,12 +510,12 @@ TRIO_ARGS2((first, second),
 
 /**
    Compare if two strings up until the first @p max characters are equal.
-   
+
    @param first First string.
    @param max Maximum number of characters to compare.
    @param second Second string.
    @return Boolean indicating whether the two strings are equal or not.
-   
+
    Case-insensitive comparison.
 */
 TRIO_STRING_PUBLIC int
@@ -558,7 +564,7 @@ TRIO_ARGS1((error_number),
           int error_number)
 {
 #if defined(USE_STRERROR)
-  
+
   return strerror(error_number);
 
 #elif defined(USE_SYS_ERRLIST)
@@ -569,11 +575,11 @@ TRIO_ARGS1((error_number),
   return ((error_number < 0) || (error_number >= sys_nerr))
     ? "unknown"
     : sys_errlist[error_number];
+
 #else
-  
+
   return "unknown";
-  
+
 #endif
 }
 
@@ -603,7 +609,7 @@ TRIO_ARGS4((target, max, format, datetime),
   assert(format);
   assert(datetime);
   assert(max > 0);
-  
+
   return strftime(target, max, format, datetime);
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -630,7 +636,7 @@ TRIO_ARGS2((string, type),
   char ch;
 
   assert(string);
-  
+
   switch (type)
     {
     case TRIO_HASH_PLAIN:
@@ -719,7 +725,7 @@ TRIO_ARGS1((target),
    @return Boolean value indicating success or failure.
 
    Case-insensitive comparison.
-   
+
    The following wildcards can be used
    @li @c * Match any number of characters.
    @li @c ? Match a single character.
@@ -732,7 +738,7 @@ TRIO_ARGS2((string, pattern),
 {
   assert(string);
   assert(pattern);
-  
+
   for (; ('*' != *pattern); ++pattern, ++string)
     {
       if (NIL == *string)
@@ -757,7 +763,7 @@ TRIO_ARGS2((string, pattern),
        }
     }
   while (*string++);
-  
+
   return FALSE;
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -772,7 +778,7 @@ TRIO_ARGS2((string, pattern),
    @return Boolean value indicating success or failure.
 
    Case-sensitive comparison.
-   
+
    The following wildcards can be used
    @li @c * Match any number of characters.
    @li @c ? Match a single character.
@@ -785,7 +791,7 @@ TRIO_ARGS2((string, pattern),
 {
   assert(string);
   assert(pattern);
-  
+
   for (; ('*' != *pattern); ++pattern, ++string)
     {
       if (NIL == *string)
@@ -810,7 +816,7 @@ TRIO_ARGS2((string, pattern),
        }
     }
   while (*string++);
-  
+
   return FALSE;
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -837,7 +843,7 @@ TRIO_ARGS3((target, source, Function),
   assert(target);
   assert(source);
   assert(Function);
-  
+
   while (*source != NIL)
     {
       *target++ = Function(*source++);
@@ -894,7 +900,7 @@ TRIO_ARGS3((string, max, substring),
 
   assert(string);
   assert(substring);
-  
+
   size = trio_length(substring);
   if (size <= max)
     {
@@ -929,7 +935,7 @@ TRIO_ARGS2((string, delimiters),
           TRIO_CONST char *delimiters)
 {
   assert(delimiters);
-  
+
   return strtok(string, delimiters);
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -1064,7 +1070,7 @@ TRIO_ARGS2((source, endp),
            }
        }
     }
-  
+
   value = integer + fraction;
   if (exponent != 0)
     {
@@ -1146,7 +1152,7 @@ TRIO_ARGS3((string, endp, base),
 {
   assert(string);
   assert((base >= 2) && (base <= 36));
-  
+
   return strtol(string, endp, base);
 }
 
@@ -1164,16 +1170,16 @@ TRIO_ARGS1((source),
           int source)
 {
 #if defined(USE_TOLOWER)
-  
+
   return tolower(source);
-  
+
 #else
 
   /* Does not handle locales or non-contiguous alphabetic characters */
   return ((source >= (int)'A') && (source <= (int)'Z'))
     ? source - 'A' + 'a'
     : source;
-  
+
 #endif
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -1195,7 +1201,7 @@ TRIO_ARGS3((string, endp, base),
 {
   assert(string);
   assert((base >= 2) && (base <= 36));
-  
+
   return strtoul(string, endp, base);
 }
 #endif /* !defined(TRIO_MINIMAL) */
@@ -1213,16 +1219,16 @@ TRIO_ARGS1((source),
           int source)
 {
 #if defined(USE_TOUPPER)
-  
+
   return toupper(source);
-  
+
 #else
 
   /* Does not handle locales or non-contiguous alphabetic characters */
   return ((source >= (int)'a') && (source <= (int)'z'))
     ? source - 'a' + 'A'
     : source;
-  
+
 #endif
 }
 
@@ -1266,7 +1272,7 @@ TRIO_STRING_PRIVATE trio_string_t *
 TrioStringAlloc(TRIO_NOARGS)
 {
   trio_string_t *self;
-  
+
   self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t));
   if (self)
     {
@@ -1297,7 +1303,7 @@ TRIO_ARGS2((self, delta),
   new_size = (delta == 0)
     ? ( (self->allocated == 0) ? 1 : self->allocated * 2 )
     : self->allocated + delta;
-  
+
   new_content = (char *)TRIO_REALLOC(self->content, new_size);
   if (new_content)
     {
@@ -1334,7 +1340,7 @@ TRIO_ARGS2((self, length),
 #if !defined(TRIO_MINIMAL)
 /**
    Create a new dynamic string.
-   
+
    @param initial_size Initial size of the buffer.
    @return Newly allocated dynamic string, or NULL if memory allocation failed.
 */
@@ -1367,7 +1373,7 @@ TRIO_ARGS1((initial_size),
 
 /**
    Deallocate the dynamic string and its contents.
-   
+
    @param self Dynamic string
 */
 TRIO_STRING_PUBLIC void
@@ -1376,7 +1382,7 @@ TRIO_ARGS1((self),
           trio_string_t *self)
 {
   assert(self);
-  
+
   if (self)
     {
       trio_destroy(self->content);
@@ -1388,11 +1394,11 @@ TRIO_ARGS1((self),
 #if !defined(TRIO_MINIMAL)
 /**
    Get a pointer to the content.
-   
+
    @param self Dynamic string.
    @param offset Offset into content.
    @return Pointer to the content.
-   
+
    @p Offset can be zero, positive, or negative. If @p offset is zero,
    then the start of the content will be returned. If @p offset is positive,
    then a pointer to @p offset number of characters from the beginning of the
@@ -1407,7 +1413,7 @@ TRIO_ARGS2((self, offset),
           int offset)
 {
   char *result = NULL;
-  
+
   assert(self);
 
   if (self->content != NULL)
@@ -1440,10 +1446,10 @@ TRIO_ARGS2((self, offset),
 
 /**
    Extract the content.
-   
+
    @param self Dynamic String
    @return Content of dynamic string.
-   
+
    The content is removed from the dynamic string. This enables destruction
    of the dynamic string without deallocation of the content.
 */
@@ -1453,7 +1459,7 @@ TRIO_ARGS1((self),
           trio_string_t *self)
 {
   char *result;
-  
+
   assert(self);
 
   result = self->content;
@@ -1467,13 +1473,13 @@ TRIO_ARGS1((self),
 #if !defined(TRIO_MINIMAL)
 /**
    Set the content of the dynamic string.
-   
+
    @param self Dynamic String
    @param buffer The new content.
-   
+
    Sets the content of the dynamic string to a copy @p buffer.
    An existing content will be deallocated first, if necessary.
-   
+
    @remark
    This function will make a copy of @p buffer.
    You are responsible for deallocating @p buffer yourself.
@@ -1521,7 +1527,7 @@ TRIO_ARGS1((self),
 #if !defined(TRIO_MINIMAL)
 /**
    Append the second string to the first.
-   
+
    @param self Dynamic string to be modified.
    @param other Dynamic string to copy from.
    @return Boolean value indicating success or failure.
@@ -1533,7 +1539,7 @@ TRIO_ARGS2((self, other),
           trio_string_t *other)
 {
   size_t length;
-  
+
   assert(self);
   assert(other);
 
@@ -1543,7 +1549,7 @@ TRIO_ARGS2((self, other),
   trio_copy(&self->content[self->length], other->content);
   self->length = length;
   return TRUE;
-  
+
  error:
   return FALSE;
 }
@@ -1561,7 +1567,7 @@ TRIO_ARGS2((self, other),
           TRIO_CONST char *other)
 {
   size_t length;
-  
+
   assert(self);
   assert(other);
 
@@ -1571,7 +1577,7 @@ TRIO_ARGS2((self, other),
   trio_copy(&self->content[self->length], other);
   self->length = length;
   return TRUE;
-  
+
  error:
   return FALSE;
 }
@@ -1597,7 +1603,7 @@ TRIO_ARGS2((self, character),
   self->content[self->length] = character;
   self->length++;
   return TRUE;
-  
+
  error:
   return FALSE;
 }
@@ -1606,7 +1612,7 @@ TRIO_ARGS2((self, character),
 #if !defined(TRIO_MINIMAL)
 /**
    Search for the first occurrence of second parameter in the first.
-   
+
    @param self Dynamic string to be modified.
    @param other Dynamic string to copy from.
    @return Boolean value indicating success or failure.
@@ -1691,7 +1697,7 @@ TRIO_ARGS1((other),
           trio_string_t *other)
 {
   trio_string_t *self;
-  
+
   assert(other);
 
   self = TrioStringAlloc();
@@ -1722,7 +1728,7 @@ TRIO_ARGS1((other),
           TRIO_CONST char *other)
 {
   trio_string_t *self;
-  
+
   assert(other);
 
   self = TrioStringAlloc();
diff --git a/uri.c b/uri.c
index 7e2f525..ff47abb 100644 (file)
--- a/uri.c
+++ b/uri.c
@@ -1,12 +1,10 @@
 /**
- * uri.c: set of generic URI related routines 
+ * uri.c: set of generic URI related routines
  *
  * Reference: RFCs 3986, 2732 and 2373
  *
  * See Copyright for the status of this software.
  *
- * TODO: that module behaves really badly on OOM situation
- *
  * daniel@veillard.com
  */
 
 #include <libxml/globals.h>
 #include <libxml/xmlerror.h>
 
+/**
+ * MAX_URI_LENGTH:
+ *
+ * The definition of the URI regexp in the above RFC has no size limit
+ * In practice they are usually relativey short except for the
+ * data URI scheme as defined in RFC 2397. Even for data URI the usual
+ * maximum size before hitting random practical limits is around 64 KB
+ * and 4KB is usually a maximum admitted limit for proper operations.
+ * The value below is more a security limit than anything else and
+ * really should never be hit by 'normal' operations
+ * Set to 1 MByte in 2012, this is only enforced on output
+ */
+#define MAX_URI_LENGTH 1024 * 1024
+
+static void
+xmlURIErrMemory(const char *extra)
+{
+    if (extra)
+        __xmlRaiseError(NULL, NULL, NULL,
+                        NULL, NULL, XML_FROM_URI,
+                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+                        extra, NULL, NULL, 0, 0,
+                        "Memory allocation failed : %s\n", extra);
+    else
+        __xmlRaiseError(NULL, NULL, NULL,
+                        NULL, NULL, XML_FROM_URI,
+                        XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+                        NULL, NULL, NULL, 0, 0,
+                        "Memory allocation failed\n");
+}
+
 static void xmlCleanURI(xmlURIPtr uri);
 
 /*
@@ -730,6 +759,8 @@ xmlParse3986HierPart(xmlURIPtr uri, const char **str)
         cur += 2;
        ret = xmlParse3986Authority(uri, &cur);
        if (ret != 0) return(ret);
+       if (uri->server == NULL)
+           uri->port = -1;
        ret = xmlParse3986PathAbEmpty(uri, &cur);
        if (ret != 0) return(ret);
        *str = cur;
@@ -982,8 +1013,7 @@ xmlCreateURI(void) {
 
     ret = (xmlURIPtr) xmlMalloc(sizeof(xmlURI));
     if (ret == NULL) {
-       xmlGenericError(xmlGenericErrorContext,
-               "xmlCreateURI: out of memory\n");
+        xmlURIErrMemory("creating URI structure\n");
        return(NULL);
     }
     memset(ret, 0, sizeof(xmlURI));
@@ -991,6 +1021,31 @@ xmlCreateURI(void) {
 }
 
 /**
+ * xmlSaveUriRealloc:
+ *
+ * Function to handle properly a reallocation when saving an URI
+ * Also imposes some limit on the length of an URI string output
+ */
+static xmlChar *
+xmlSaveUriRealloc(xmlChar *ret, int *max) {
+    xmlChar *temp;
+    int tmp;
+
+    if (*max > MAX_URI_LENGTH) {
+        xmlURIErrMemory("reaching arbitrary MAX_URI_LENGTH limit\n");
+        return(NULL);
+    }
+    tmp = *max * 2;
+    temp = (xmlChar *) xmlRealloc(ret, (tmp + 1));
+    if (temp == NULL) {
+        xmlURIErrMemory("saving URI\n");
+        return(NULL);
+    }
+    *max = tmp;
+    return(temp);
+}
+
+/**
  * xmlSaveUri:
  * @uri:  pointer to an xmlURI
  *
@@ -1012,8 +1067,7 @@ xmlSaveUri(xmlURIPtr uri) {
     max = 80;
     ret = (xmlChar *) xmlMallocAtomic((max + 1) * sizeof(xmlChar));
     if (ret == NULL) {
-       xmlGenericError(xmlGenericErrorContext,
-               "xmlSaveUri: out of memory\n");
+        xmlURIErrMemory("saving URI\n");
        return(NULL);
     }
     len = 0;
@@ -1022,28 +1076,16 @@ xmlSaveUri(xmlURIPtr uri) {
        p = uri->scheme;
        while (*p != 0) {
            if (len >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                   xmlGenericError(xmlGenericErrorContext,
-                           "xmlSaveUri: out of memory\n");
-                   xmlFree(ret);
-                   return(NULL);
-               }
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
                ret = temp;
            }
            ret[len++] = *p++;
        }
        if (len >= max) {
-           max *= 2;
-           temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
-           if (temp == NULL) {
-               xmlGenericError(xmlGenericErrorContext,
-                       "xmlSaveUri: out of memory\n");
-               xmlFree(ret);
-               return(NULL);
-           }
-           ret = temp;
+            temp = xmlSaveUriRealloc(ret, &max);
+            if (temp == NULL) goto mem_error;
+            ret = temp;
        }
        ret[len++] = ':';
     }
@@ -1051,15 +1093,9 @@ xmlSaveUri(xmlURIPtr uri) {
        p = uri->opaque;
        while (*p != 0) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                   xmlGenericError(xmlGenericErrorContext,
-                           "xmlSaveUri: out of memory\n");
-                   xmlFree(ret);
-                   return(NULL);
-               }
-               ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
            if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p)))
                ret[len++] = *p++;
@@ -1072,17 +1108,11 @@ xmlSaveUri(xmlURIPtr uri) {
            }
        }
     } else {
-       if (uri->server != NULL) {
+       if ((uri->server != NULL) || (uri->port == -1)) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                   xmlGenericError(xmlGenericErrorContext,
-                           "xmlSaveUri: out of memory\n");
-                  xmlFree(ret);  
-                   return(NULL);
-               }
-               ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
            ret[len++] = '/';
            ret[len++] = '/';
@@ -1090,16 +1120,9 @@ xmlSaveUri(xmlURIPtr uri) {
                p = uri->user;
                while (*p != 0) {
                    if (len + 3 >= max) {
-                       max *= 2;
-                       temp = (xmlChar *) xmlRealloc(ret,
-                               (max + 1) * sizeof(xmlChar));
-                       if (temp == NULL) {
-                           xmlGenericError(xmlGenericErrorContext,
-                                   "xmlSaveUri: out of memory\n");
-                           xmlFree(ret);
-                           return(NULL);
-                       }
-                       ret = temp;
+                        temp = xmlSaveUriRealloc(ret, &max);
+                        if (temp == NULL) goto mem_error;
+                        ret = temp;
                    }
                    if ((IS_UNRESERVED(*(p))) ||
                        ((*(p) == ';')) || ((*(p) == ':')) ||
@@ -1116,78 +1139,45 @@ xmlSaveUri(xmlURIPtr uri) {
                    }
                }
                if (len + 3 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                       xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
                ret[len++] = '@';
            }
-           p = uri->server;
-           while (*p != 0) {
-               if (len >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                       xmlFree(ret);
-                       return(NULL);
+           if (uri->server != NULL) {
+               p = uri->server;
+               while (*p != 0) {
+                   if (len >= max) {
+                       temp = xmlSaveUriRealloc(ret, &max);
+                       if (temp == NULL) goto mem_error;
+                       ret = temp;
                    }
-                   ret = temp;
+                   ret[len++] = *p++;
                }
-               ret[len++] = *p++;
-           }
-           if (uri->port > 0) {
-               if (len + 10 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
+               if (uri->port > 0) {
+                   if (len + 10 >= max) {
+                       temp = xmlSaveUriRealloc(ret, &max);
+                       if (temp == NULL) goto mem_error;
+                       ret = temp;
                    }
-                   ret = temp;
+                   len += snprintf((char *) &ret[len], max - len, ":%d", uri->port);
                }
-               len += snprintf((char *) &ret[len], max - len, ":%d", uri->port);
            }
        } else if (uri->authority != NULL) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret,
-                       (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
            ret[len++] = '/';
            ret[len++] = '/';
            p = uri->authority;
            while (*p != 0) {
                if (len + 3 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
                if ((IS_UNRESERVED(*(p))) ||
                     ((*(p) == '$')) || ((*(p) == ',')) || ((*(p) == ';')) ||
@@ -1204,19 +1194,10 @@ xmlSaveUri(xmlURIPtr uri) {
            }
        } else if (uri->scheme != NULL) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret,
-                       (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
-           ret[len++] = '/';
-           ret[len++] = '/';
        }
        if (uri->path != NULL) {
            p = uri->path;
@@ -1231,14 +1212,9 @@ xmlSaveUri(xmlURIPtr uri) {
                (p[2] == ':') &&
                (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) {
                if (len + 3 >= max) {
-                   max *= 2;
-                   ret = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (ret == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                       return(NULL);
-                   }
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
                ret[len++] = *p++;
                ret[len++] = *p++;
@@ -1246,16 +1222,9 @@ xmlSaveUri(xmlURIPtr uri) {
            }
            while (*p != 0) {
                if (len + 3 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
                if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) ||
                     ((*(p) == ';')) || ((*(p) == '@')) || ((*(p) == '&')) ||
@@ -1273,63 +1242,35 @@ xmlSaveUri(xmlURIPtr uri) {
        }
        if (uri->query_raw != NULL) {
            if (len + 1 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret,
-                       (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
            ret[len++] = '?';
            p = uri->query_raw;
            while (*p != 0) {
                if (len + 1 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
                ret[len++] = *p++;
            }
        } else if (uri->query != NULL) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret,
-                       (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
            ret[len++] = '?';
            p = uri->query;
            while (*p != 0) {
                if (len + 3 >= max) {
-                   max *= 2;
-                   temp = (xmlChar *) xmlRealloc(ret,
-                           (max + 1) * sizeof(xmlChar));
-                   if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                    temp = xmlSaveUriRealloc(ret, &max);
+                    if (temp == NULL) goto mem_error;
+                    ret = temp;
                }
-               if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) 
+               if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
                    ret[len++] = *p++;
                else {
                    int val = *(unsigned char *)p++;
@@ -1343,33 +1284,19 @@ xmlSaveUri(xmlURIPtr uri) {
     }
     if (uri->fragment != NULL) {
        if (len + 3 >= max) {
-           max *= 2;
-           temp = (xmlChar *) xmlRealloc(ret,
-                   (max + 1) * sizeof(xmlChar));
-           if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+            temp = xmlSaveUriRealloc(ret, &max);
+            if (temp == NULL) goto mem_error;
+            ret = temp;
        }
        ret[len++] = '#';
        p = uri->fragment;
        while (*p != 0) {
            if (len + 3 >= max) {
-               max *= 2;
-               temp = (xmlChar *) xmlRealloc(ret,
-                       (max + 1) * sizeof(xmlChar));
-               if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+                temp = xmlSaveUriRealloc(ret, &max);
+                if (temp == NULL) goto mem_error;
+                ret = temp;
            }
-           if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p)))) 
+           if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
                ret[len++] = *p++;
            else {
                int val = *(unsigned char *)p++;
@@ -1381,18 +1308,16 @@ xmlSaveUri(xmlURIPtr uri) {
        }
     }
     if (len >= max) {
-       max *= 2;
-       temp = (xmlChar *) xmlRealloc(ret, (max + 1) * sizeof(xmlChar));
-       if (temp == NULL) {
-                       xmlGenericError(xmlGenericErrorContext,
-                               "xmlSaveUri: out of memory\n");
-                     xmlFree(ret);
-                       return(NULL);
-                   }
-                   ret = temp;
+        temp = xmlSaveUriRealloc(ret, &max);
+        if (temp == NULL) goto mem_error;
+        ret = temp;
     }
     ret[len] = 0;
     return(ret);
+
+mem_error:
+    xmlFree(ret);
+    return(NULL);
 }
 
 /**
@@ -1695,8 +1620,7 @@ xmlURIUnescapeString(const char *str, int len, char *target) {
     if (target == NULL) {
        ret = (char *) xmlMallocAtomic(len + 1);
        if (ret == NULL) {
-           xmlGenericError(xmlGenericErrorContext,
-                   "xmlURIUnescapeString: out of memory\n");
+            xmlURIErrMemory("unescaping URI value\n");
            return(NULL);
        }
     } else
@@ -1706,14 +1630,14 @@ xmlURIUnescapeString(const char *str, int len, char *target) {
     while(len > 0) {
        if ((len > 2) && (*in == '%') && (is_hex(in[1])) && (is_hex(in[2]))) {
            in++;
-           if ((*in >= '0') && (*in <= '9')) 
+           if ((*in >= '0') && (*in <= '9'))
                *out = (*in - '0');
            else if ((*in >= 'a') && (*in <= 'f'))
                *out = (*in - 'a') + 10;
            else if ((*in >= 'A') && (*in <= 'F'))
                *out = (*in - 'A') + 10;
            in++;
-           if ((*in >= '0') && (*in <= '9')) 
+           if ((*in >= '0') && (*in <= '9'))
                *out = *out * 16 + (*in - '0');
            else if ((*in >= 'a') && (*in <= 'f'))
                *out = *out * 16 + (*in - 'a') + 10;
@@ -1746,8 +1670,7 @@ xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) {
     xmlChar *ret, ch;
     xmlChar *temp;
     const xmlChar *in;
-
-    unsigned int len, out;
+    int len, out;
 
     if (str == NULL)
        return(NULL);
@@ -1759,19 +1682,16 @@ xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) {
     len += 20;
     ret = (xmlChar *) xmlMallocAtomic(len);
     if (ret == NULL) {
-       xmlGenericError(xmlGenericErrorContext,
-               "xmlURIEscapeStr: out of memory\n");
+        xmlURIErrMemory("escaping URI value\n");
        return(NULL);
     }
     in = (const xmlChar *) str;
     out = 0;
     while(*in != 0) {
        if (len - out <= 3) {
-           len += 20;
-           temp = (xmlChar *) xmlRealloc(ret, len);
+            temp = xmlSaveUriRealloc(ret, &len);
            if (temp == NULL) {
-               xmlGenericError(xmlGenericErrorContext,
-                       "xmlURIEscapeStr: out of memory\n");
+                xmlURIErrMemory("escaping URI value\n");
                xmlFree(ret);
                return(NULL);
            }
@@ -1826,10 +1746,9 @@ xmlURIEscape(const xmlChar * str)
     int ret2;
 
 #define NULLCHK(p) if(!p) { \
-                   xmlGenericError(xmlGenericErrorContext, \
-                        "xmlURIEscape: out of memory\n"); \
-                        xmlFreeURI(uri); \
-                        return NULL; } \
+         xmlURIErrMemory("escaping URI value\n"); \
+         xmlFreeURI(uri); \
+         return NULL; } \
 
     if (str == NULL)
         return (NULL);
@@ -1872,7 +1791,7 @@ xmlURIEscape(const xmlChar * str)
     if (uri->user) {
         segment = xmlURIEscapeStr(BAD_CAST uri->user, BAD_CAST ";:&=+$,");
         NULLCHK(segment)
-               ret = xmlStrcat(ret,BAD_CAST "//");     
+               ret = xmlStrcat(ret,BAD_CAST "//");
         ret = xmlStrcat(ret, segment);
         ret = xmlStrcat(ret, BAD_CAST "@");
         xmlFree(segment);
@@ -1950,7 +1869,7 @@ xmlURIEscape(const xmlChar * str)
  *
  * Computes he final URI of the reference done by checking that
  * the given URI is valid, and building the final URI using the
- * base URI. This is processed according to section 5.2 of the 
+ * base URI. This is processed according to section 5.2 of the
  * RFC 2396
  *
  * 5.2. Resolving Relative References to Absolute Form
@@ -1974,7 +1893,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
      *    as a reference to "." rather than as a synonym for the current
      *    URI.  Should we do that here?
      */
-    if (URI == NULL) 
+    if (URI == NULL)
        ret = -1;
     else {
        if (*URI) {
@@ -2045,7 +1964,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
            res->server = xmlMemStrdup(bas->server);
            if (bas->user != NULL)
                res->user = xmlMemStrdup(bas->user);
-           res->port = bas->port;              
+           res->port = bas->port;
        }
        if (bas->path != NULL)
            res->path = xmlMemStrdup(bas->path);
@@ -2074,7 +1993,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
     }
     if (bas->scheme != NULL)
        res->scheme = xmlMemStrdup(bas->scheme);
+
     if (ref->query_raw != NULL)
        res->query_raw = xmlMemStrdup(ref->query_raw);
     else if (ref->query != NULL)
@@ -2096,7 +2015,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
            res->server = xmlMemStrdup(ref->server);
            if (ref->user != NULL)
                res->user = xmlMemStrdup(ref->user);
-            res->port = ref->port;             
+            res->port = ref->port;
        }
        if (ref->path != NULL)
            res->path = xmlMemStrdup(ref->path);
@@ -2108,7 +2027,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
        res->server = xmlMemStrdup(bas->server);
        if (bas->user != NULL)
            res->user = xmlMemStrdup(bas->user);
-       res->port = bas->port;          
+       res->port = bas->port;
     }
 
     /*
@@ -2136,8 +2055,7 @@ xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
        len += strlen(bas->path);
     res->path = (char *) xmlMallocAtomic(len);
     if (res->path == NULL) {
-       xmlGenericError(xmlGenericErrorContext,
-               "xmlBuildURI: out of memory\n");
+        xmlURIErrMemory("resolving URI against base\n");
        goto done;
     }
     res->path[0] = 0;
@@ -2383,7 +2301,7 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
        }
        len = xmlStrlen (uptr) + 1;
     }
-    
+
     if (nbslash == 0) {
        if (uptr != NULL)
            /* exception characters from xmlSaveUri */
@@ -2398,8 +2316,7 @@ xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
      */
     val = (xmlChar *) xmlMalloc (len + 3 * nbslash);
     if (val == NULL) {
-       xmlGenericError(xmlGenericErrorContext,
-               "xmlBuildRelativeURI: out of memory\n");
+        xmlURIErrMemory("building relative URI\n");
        goto done;
     }
     vptr = val;
@@ -2451,14 +2368,14 @@ done:
  * xmlCanonicPath:
  * @path:  the resource locator in a filesystem notation
  *
- * Constructs a canonic path from the specified path. 
+ * Constructs a canonic path from the specified path.
  *
- * Returns a new canonic path, or a duplicate of the path parameter if the 
+ * Returns a new canonic path, or a duplicate of the path parameter if the
  * construction fails. The caller is responsible for freeing the memory occupied
- * by the returned string. If there is insufficient memory available, or the 
+ * by the returned string. If there is insufficient memory available, or the
  * argument is NULL, the function returns NULL.
  */
-#define IS_WINDOWS_PATH(p)                                     \
+#define IS_WINDOWS_PATH(p)                                     \
        ((p != NULL) &&                                         \
         (((p[0] >= 'a') && (p[0] <= 'z')) ||                   \
          ((p[0] >= 'A') && (p[0] <= 'Z'))) &&                  \
@@ -2470,7 +2387,7 @@ xmlCanonicPath(const xmlChar *path)
  * For Windows implementations, additional work needs to be done to
  * replace backslashes in pathnames with "forward slashes"
  */
-#if defined(_WIN32) && !defined(__CYGWIN__)    
+#if defined(_WIN32) && !defined(__CYGWIN__)
     int len = 0;
     int i = 0;
     xmlChar *p = NULL;
@@ -2482,7 +2399,20 @@ xmlCanonicPath(const xmlChar *path)
     if (path == NULL)
        return(NULL);
 
-    /* sanitize filename starting with // so it can be used as URI */
+#if defined(_WIN32)
+    /*
+     * We must not change the backslashes to slashes if the the path
+     * starts with \\?\
+     * Those paths can be up to 32k characters long.
+     * Was added specifically for OpenOffice, those paths can't be converted
+     * to URIs anyway.
+     */
+    if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') &&
+        (path[3] == '\\') )
+       return xmlStrdup((const xmlChar *) path);
+#endif
+
+       /* sanitize filename starting with // so it can be used as URI */
     if ((path[0] == '/') && (path[1] == '/') && (path[2] != '/'))
         path++;
 
@@ -2529,7 +2459,7 @@ xmlCanonicPath(const xmlChar *path)
 
 path_processing:
 /* For Windows implementations, replace backslashes with 'forward slashes' */
-#if defined(_WIN32) && !defined(__CYGWIN__)    
+#if defined(_WIN32) && !defined(__CYGWIN__)
     /*
      * Create a URI structure
      */
@@ -2586,7 +2516,7 @@ path_processing:
  *
  * Constructs an URI expressing the existing path
  *
- * Returns a new URI, or a duplicate of the path parameter if the 
+ * Returns a new URI, or a duplicate of the path parameter if the
  * construction fails. The caller is responsible for freeing the memory
  * occupied by the returned string. If there is insufficient memory available,
  * or the argument is NULL, the function returns NULL.
@@ -2609,7 +2539,7 @@ xmlPathToURI(const xmlChar *path)
     if (cal == NULL)
         return(NULL);
 #if defined(_WIN32) && !defined(__CYGWIN__)
-    /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?) 
+    /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?)
        If 'cal' is a valid URI allready then we are done here, as continuing would make
        it invalid. */
     if ((uri = xmlParseURI((const char *) cal)) != NULL) {
diff --git a/valid.c b/valid.c
index 5de491d..409aa81 100644 (file)
--- a/valid.c
+++ b/valid.c
@@ -31,7 +31,7 @@ static xmlElementPtr xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name,
 /* #define DEBUG_VALID_ALGO */
 /* #define DEBUG_REGEXP_ALGO */
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -301,7 +301,7 @@ vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) {
        if (elemDecl->contModel == NULL)
            xmlValidBuildContentModel(ctxt, elemDecl);
        if (elemDecl->contModel != NULL) {
-           ctxt->vstateTab[ctxt->vstateNr].exec = 
+           ctxt->vstateTab[ctxt->vstateNr].exec =
                xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
        } else {
            ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
@@ -623,7 +623,7 @@ xmlValidStateDebug(xmlValidCtxtPtr ctxt) {
 #define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt);
 #define DEBUG_VALID_MSG(m)                                     \
     xmlGenericError(xmlGenericErrorContext, "%s\n", m);
-        
+
 #else
 #define DEBUG_VALID_STATE(n,c)
 #define DEBUG_VALID_MSG(m)
@@ -676,7 +676,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
            xmlAutomataStatePtr oldstate = ctxt->state;
            xmlChar fn[50];
            xmlChar *fullname;
-           
+
            fullname = xmlBuildQName(content->name, content->prefix, fn, 50);
            if (fullname == NULL) {
                xmlVErrMemory(ctxt, "Building content model");
@@ -701,9 +701,9 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
                    break;
                case XML_ELEMENT_CONTENT_MULT:
                    ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
-                                           ctxt->state, NULL);
+                                           ctxt->state, NULL);
                    xmlAutomataNewTransition(ctxt->am,
-                           ctxt->state, ctxt->state, fullname, NULL);
+                           ctxt->state, ctxt->state, fullname, NULL);
                    break;
            }
            if ((fullname != fn) && (fullname != content->name))
@@ -752,7 +752,7 @@ xmlValidBuildAContentModel(xmlElementContentPtr content,
            xmlElementContentOccur ocur;
 
            ocur = content->ocur;
-           if ((ocur == XML_ELEMENT_CONTENT_PLUS) || 
+           if ((ocur == XML_ELEMENT_CONTENT_PLUS) ||
                (ocur == XML_ELEMENT_CONTENT_MULT)) {
                ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
                        ctxt->state, NULL);
@@ -944,7 +944,7 @@ xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name,
            }
            break;
        default:
-           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                    "Internal: ELEMENT content corrupted invalid type\n",
                    NULL);
            return(NULL);
@@ -1001,7 +1001,7 @@ xmlNewElementContent(const xmlChar *name, xmlElementContentType type) {
  * @cur:  An element content pointer.
  *
  * Build a copy of an element content description.
- * 
+ *
  * Returns the new xmlElementContentPtr or NULL in case of error.
  */
 xmlElementContentPtr
@@ -1028,7 +1028,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
        else
            ret->name = xmlStrdup(cur->name);
     }
-    
+
     if (cur->prefix != NULL) {
        if (dict)
            ret->prefix = xmlDictLookup(dict, cur->prefix, -1);
@@ -1058,7 +1058,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
                else
                    tmp->name = xmlStrdup(cur->name);
            }
-           
+
            if (cur->prefix != NULL) {
                if (dict)
                    tmp->prefix = xmlDictLookup(dict, cur->prefix, -1);
@@ -1082,7 +1082,7 @@ xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
  *
  * Build a copy of an element content description.
  * Deprecated, use xmlCopyDocElementContent instead
- * 
+ *
  * Returns the new xmlElementContentPtr or NULL in case of error.
  */
 xmlElementContentPtr
@@ -1114,7 +1114,7 @@ xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
            case XML_ELEMENT_CONTENT_OR:
                break;
            default:
-               xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+               xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                        "Internal: ELEMENT content corrupted invalid type\n",
                        NULL);
                return;
@@ -1200,7 +1200,7 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob)
                xmlDumpElementContent(buf, content->c2, 0);
            break;
        default:
-           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                    "Internal: ELEMENT content corrupted invalid type\n",
                    NULL);
     }
@@ -1397,7 +1397,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
     switch (type) {
         case XML_ELEMENT_TYPE_EMPTY:
            if (content != NULL) {
-               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                        "xmlAddElementDecl: content != NULL for EMPTY\n",
                        NULL);
                return(NULL);
@@ -1405,7 +1405,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
            break;
        case XML_ELEMENT_TYPE_ANY:
            if (content != NULL) {
-               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                        "xmlAddElementDecl: content != NULL for ANY\n",
                        NULL);
                return(NULL);
@@ -1413,7 +1413,7 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
            break;
        case XML_ELEMENT_TYPE_MIXED:
            if (content == NULL) {
-               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                        "xmlAddElementDecl: content == NULL for MIXED\n",
                        NULL);
                return(NULL);
@@ -1421,14 +1421,14 @@ xmlAddElementDecl(xmlValidCtxtPtr ctxt,
            break;
        case XML_ELEMENT_TYPE_ELEMENT:
            if (content == NULL) {
-               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+               xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                        "xmlAddElementDecl: content == NULL for ELEMENT\n",
                        NULL);
                return(NULL);
            }
            break;
        default:
-           xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                    "Internal: ELEMENT decl corrupted invalid type\n",
                    NULL);
            return(NULL);
@@ -1608,7 +1608,7 @@ xmlFreeElementTable(xmlElementTablePtr table) {
  * @elem:  An element
  *
  * Build a copy of an element.
- * 
+ *
  * Returns the new xmlElementPtr or NULL in case of error.
  */
 static xmlElementPtr
@@ -1642,7 +1642,7 @@ xmlCopyElement(xmlElementPtr elem) {
  * @table:  An element table
  *
  * Build a copy of an element table.
- * 
+ *
  * Returns the new xmlElementTablePtr or NULL in case of error.
  */
 xmlElementTablePtr
@@ -1707,7 +1707,7 @@ xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
            xmlBufferWriteChar(buf, ">\n");
            break;
        default:
-           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                    "Internal: ELEMENT struct corrupted invalid type\n",
                    NULL);
     }
@@ -1798,6 +1798,7 @@ xmlCopyEnumeration(xmlEnumerationPtr cur) {
 
     if (cur == NULL) return(NULL);
     ret = xmlCreateEnumeration((xmlChar *) cur->name);
+    if (ret == NULL) return(NULL);
 
     if (cur->next != NULL) ret->next = xmlCopyEnumeration(cur->next);
     else ret->next = NULL;
@@ -1818,7 +1819,7 @@ static void
 xmlDumpEnumeration(xmlBufferPtr buf, xmlEnumerationPtr cur) {
     if ((buf == NULL) || (cur == NULL))
         return;
-    
+
     xmlBufferWriteCHAR(buf, cur->name);
     if (cur->next == NULL)
        xmlBufferWriteChar(buf, ")");
@@ -1973,13 +1974,13 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
         case XML_ATTRIBUTE_NOTATION:
            break;
        default:
-           xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
                    "Internal: ATTRIBUTE struct corrupted invalid type\n",
                    NULL);
            xmlFreeEnumeration(tree);
            return(NULL);
     }
-    if ((defaultValue != NULL) && 
+    if ((defaultValue != NULL) &&
         (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) {
        xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT,
                        "Attribute %s of %s: invalid default value\n",
@@ -2153,7 +2154,7 @@ xmlFreeAttributeTable(xmlAttributeTablePtr table) {
  * @attr:  An attribute
  *
  * Build a copy of an attribute.
- * 
+ *
  * Returns the new xmlAttributePtr or NULL in case of error.
  */
 static xmlAttributePtr
@@ -2186,7 +2187,7 @@ xmlCopyAttribute(xmlAttributePtr attr) {
  * @table:  An attribute table
  *
  * Build a copy of an attribute table.
- * 
+ *
  * Returns the new xmlAttributeTablePtr or NULL in case of error.
  */
 xmlAttributeTablePtr
@@ -2251,7 +2252,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
            xmlDumpEnumeration(buf, attr->tree);
            break;
        default:
-           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                    "Internal: ATTRIBUTE struct corrupted invalid type\n",
                    NULL);
     }
@@ -2268,7 +2269,7 @@ xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
            xmlBufferWriteChar(buf, " #FIXED");
            break;
        default:
-           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR, 
+           xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
                    "Internal: ATTRIBUTE struct corrupted invalid def\n",
                    NULL);
     }
@@ -2398,7 +2399,7 @@ xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
      */
     if (xmlHashAddEntry(table, name, ret)) {
 #ifdef LIBXML_VALID_ENABLED
-       xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED, 
+       xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED,
                    "xmlAddNotationDecl: %s already defined\n",
                    (const char *) name);
 #endif /* LIBXML_VALID_ENABLED */
@@ -2425,7 +2426,7 @@ xmlFreeNotationTable(xmlNotationTablePtr table) {
  * @nota:  A notation
  *
  * Build a copy of a notation.
- * 
+ *
  * Returns the new xmlNotationPtr or NULL in case of error.
  */
 static xmlNotationPtr
@@ -2457,7 +2458,7 @@ xmlCopyNotation(xmlNotationPtr nota) {
  * @table:  A notation table
  *
  * Build a copy of a notation table.
- * 
+ *
  * Returns the new xmlNotationTablePtr or NULL in case of error.
  */
 xmlNotationTablePtr
@@ -2535,7 +2536,7 @@ xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table) {
  * current scope
  */
 #define DICT_FREE(str)                                         \
-       if ((str) && ((!dict) ||                                \
+       if ((str) && ((!dict) ||                                \
            (xmlDictOwns(dict, (const xmlChar *)(str)) == 0)))  \
            xmlFree((char *)(str));
 
@@ -2573,7 +2574,7 @@ xmlFreeID(xmlIDPtr id) {
  *
  * Returns NULL if not, otherwise the new xmlIDPtr
  */
-xmlIDPtr 
+xmlIDPtr
 xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
          xmlAttrPtr attr) {
     xmlIDPtr ret;
@@ -2633,11 +2634,8 @@ xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
        /*
         * The id is already defined in this DTD.
         */
-       if ((ctxt != NULL) && (ctxt->error != NULL)) {
-           xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
-                           "ID %s already defined\n",
-                           value, NULL, NULL);
-       }
+       xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
+                       "ID %s already defined\n", value, NULL, NULL);
 #endif /* LIBXML_VALID_ENABLED */
        xmlFreeID(ret);
        return(NULL);
@@ -2687,7 +2685,7 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
            ((xmlStrEqual(BAD_CAST "name", attr->name)) &&
            ((elem == NULL) || (xmlStrEqual(elem->name, BAD_CAST "a")))))
            return(1);
-       return(0);    
+       return(0);
     } else if (elem == NULL) {
        return(0);
     } else {
@@ -2740,23 +2738,24 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
 
     if (doc == NULL) return(-1);
     if (attr == NULL) return(-1);
+
     table = (xmlIDTablePtr) doc->ids;
-    if (table == NULL) 
+    if (table == NULL)
         return(-1);
 
-    if (attr == NULL)
-       return(-1);
     ID = xmlNodeListGetString(doc, attr->children, 1);
     if (ID == NULL)
-       return(-1);
+        return(-1);
+
     id = xmlHashLookup(table, ID);
     if (id == NULL || id->attr != attr) {
-       xmlFree(ID);
-       return(-1);
+        xmlFree(ID);
+        return(-1);
     }
+
     xmlHashRemoveEntry(table, ID, (xmlHashDeallocator) xmlFreeID);
     xmlFree(ID);
-       attr->atype = 0;
+    attr->atype = 0;
     return(0);
 }
 
@@ -2769,7 +2768,7 @@ xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
  *
  * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID
  */
-xmlAttrPtr 
+xmlAttrPtr
 xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
     xmlIDTablePtr table;
     xmlIDPtr id;
@@ -2783,7 +2782,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
     }
 
     table = (xmlIDTablePtr) doc->ids;
-    if (table == NULL) 
+    if (table == NULL)
         return(NULL);
 
     id = xmlHashLookup(table, ID);
@@ -2804,7 +2803,7 @@ xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
  *                             Refs                                    *
  *                                                                     *
  ************************************************************************/
-typedef struct xmlRemoveMemo_t 
+typedef struct xmlRemoveMemo_t
 {
        xmlListPtr l;
        xmlAttrPtr ap;
@@ -2812,7 +2811,7 @@ typedef struct xmlRemoveMemo_t
 
 typedef xmlRemoveMemo *xmlRemoveMemoPtr;
 
-typedef struct xmlValidateMemo_t 
+typedef struct xmlValidateMemo_t
 {
     xmlValidCtxtPtr ctxt;
     const xmlChar *name;
@@ -2895,7 +2894,7 @@ xmlDummyCompare(const void *data0 ATTRIBUTE_UNUSED,
  *
  * Returns NULL if not, otherwise the new xmlRefPtr
  */
-xmlRefPtr 
+xmlRefPtr
 xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
     xmlAttrPtr attr) {
     xmlRefPtr ret;
@@ -3023,7 +3022,7 @@ xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
         return(0);
     } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
         /* TODO @@@ */
-        return(0);    
+        return(0);
     } else {
         xmlAttributePtr attrDecl;
 
@@ -3059,21 +3058,21 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
 
     if (doc == NULL) return(-1);
     if (attr == NULL) return(-1);
+
     table = (xmlRefTablePtr) doc->refs;
-    if (table == NULL) 
+    if (table == NULL)
         return(-1);
 
-    if (attr == NULL)
-        return(-1);
     ID = xmlNodeListGetString(doc, attr->children, 1);
     if (ID == NULL)
         return(-1);
-    ref_list = xmlHashLookup(table, ID);
 
+    ref_list = xmlHashLookup(table, ID);
     if(ref_list == NULL) {
         xmlFree(ID);
         return (-1);
     }
+
     /* At this point, ref_list refers to a list of references which
      * have the same key as the supplied attr. Our list of references
      * is ordered by reference address and we don't have that information
@@ -3086,7 +3085,7 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
      */
     target.l = ref_list;
     target.ap = attr;
-    
+
     /* Remove the supplied attr from our list */
     xmlListWalk(ref_list, xmlWalkRemoveRef, &target);
 
@@ -3103,11 +3102,11 @@ xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
  * @doc:  pointer to the document
  * @ID:  the ID value
  *
- * Find the set of references for the supplied ID. 
+ * Find the set of references for the supplied ID.
  *
  * Returns NULL if not found, otherwise node set for the ID.
  */
-xmlListPtr 
+xmlListPtr
 xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
     xmlRefTablePtr table;
 
@@ -3120,7 +3119,7 @@ xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
     }
 
     table = (xmlRefTablePtr) doc->refs;
-    if (table == NULL) 
+    if (table == NULL)
         return(NULL);
 
     return (xmlHashLookup(table, ID));
@@ -3185,7 +3184,7 @@ xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, int create) {
        if (dtd->doc != NULL)
            dict = dtd->doc->dict;
 
-       if (!create) 
+       if (!create)
            return(NULL);
        /*
         * Create the Element table if needed.
@@ -3798,7 +3797,7 @@ xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type,
  *
  * [ VC: Name Token ]
  * Values of type NMTOKEN must match the Nmtoken production; values
- * of type NMTOKENS must match Nmtokens. 
+ * of type NMTOKENS must match Nmtokens.
  *
  * returns 1 if valid or 0 otherwise
  */
@@ -3857,7 +3856,7 @@ xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
            if ((ent == NULL) && (doc->standalone == 1)) {
                doc->standalone = 0;
                ent = xmlGetDocEntity(doc, value);
-           } 
+           }
            if (ent == NULL) {
                xmlErrValidNode(ctxt, (xmlNodePtr) doc,
                                XML_DTD_UNKNOWN_ENTITY,
@@ -3968,7 +3967,7 @@ xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
     if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
        xmlChar fn[50];
        xmlChar *fullname;
-       
+
        fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
        if (fullname == NULL)
            return(NULL);
@@ -4167,7 +4166,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
            }
        }
        if (nbId > 1) {
-           
+
            xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
        "Element %s has %d ID attribute defined in the internal subset : %s\n",
                   attr->elem, nbId, attr->name);
@@ -4230,7 +4229,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
     xmlElementPtr tst;
 
     CHECK_DTD;
-    
+
     if (elem == NULL) return(1);
 
 #if 0
@@ -4347,7 +4346,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
 
 int
 xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
-                        xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value) 
+                        xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value)
 {
     xmlAttributePtr attrDecl =  NULL;
     int val;
@@ -4360,7 +4359,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
     if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
        xmlChar fn[50];
        xmlChar *fullname;
-       
+
        fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
        if (fullname == NULL)
            return(0);
@@ -4444,7 +4443,7 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
        nota = xmlGetDtdNotationDesc(doc->intSubset, value);
        if (nota == NULL)
            nota = xmlGetDtdNotationDesc(doc->extSubset, value);
-       
+
        if (nota == NULL) {
            xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
        "Value \"%s\" for attribute %s of %s is not a declared Notation\n",
@@ -4537,7 +4536,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
     if (prefix != NULL) {
        xmlChar fn[50];
        xmlChar *fullname;
-       
+
        fullname = xmlBuildQName(elem->name, prefix, fn, 50);
        if (fullname == NULL) {
            xmlVErrMemory(ctxt, "Validating namespace");
@@ -4641,7 +4640,7 @@ xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
        nota = xmlGetDtdNotationDesc(doc->intSubset, value);
        if (nota == NULL)
            nota = xmlGetDtdNotationDesc(doc->extSubset, value);
-       
+
        if (nota == NULL) {
            if (ns->prefix != NULL) {
                xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
@@ -4777,7 +4776,7 @@ xmlValidateElementType(xmlValidCtxtPtr ctxt) {
     NODE = xmlValidateSkipIgnorable(NODE);
     if ((NODE == NULL) && (CONT == NULL))
        return(1);
-    if ((NODE == NULL) && 
+    if ((NODE == NULL) &&
        ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
         (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) {
        return(1);
@@ -5236,7 +5235,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
     xmlElementContentPtr cont;
     const xmlChar *name;
 
-    if (elemDecl == NULL)
+    if ((elemDecl == NULL) || (parent == NULL) || (ctxt == NULL))
        return(-1);
     cont = elemDecl->content;
     name = elemDecl->name;
@@ -5286,7 +5285,7 @@ xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
                        if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
                            xmlChar fn[50];
                            xmlChar *fullname;
-                           
+
                            fullname = xmlBuildQName(cur->name,
                                                     cur->ns->prefix, fn, 50);
                            if (fullname == NULL) {
@@ -5400,7 +5399,7 @@ fail:
                        last = tmp;
                    }
                    if (cur->type == XML_CDATA_SECTION_NODE) {
-                       /* 
+                       /*
                         * E59 spaces in CDATA does not match the
                         * nonterminal S
                         */
@@ -5517,7 +5516,8 @@ xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
     int ret = 1;
     xmlNodePtr cur, child;
 
-    if ((ctxt == NULL) || (doc == NULL) || (elem == NULL))
+    if ((ctxt == NULL) || (doc == NULL) || (elem == NULL) ||
+        (elem->type != XML_ELEMENT_NODE))
        return(0);
 
     child = elem->children;
@@ -5598,7 +5598,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
            } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
                (cont->c1 == NULL) ||
                (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
-               xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, 
+               xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
                        "Internal: MIXED struct corrupted\n",
                        NULL);
                break;
@@ -5622,7 +5622,7 @@ xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
            } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
                (cont->c1 == NULL) ||
                (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
-               xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, 
+               xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
                        "Internal: MIXED struct corrupted\n",
                        NULL);
                break;
@@ -5651,7 +5651,7 @@ xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
     xmlElementPtr elemDecl = NULL;
     const xmlChar *prefix = NULL;
 
-    if ((ctxt == NULL) || (doc == NULL) || 
+    if ((ctxt == NULL) || (doc == NULL) ||
         (elem == NULL) || (elem->name == NULL))
         return(NULL);
     if (extsubset != NULL)
@@ -5795,7 +5795,7 @@ xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
  * xmlValidatePushCData:
  * @ctxt:  the validation context
  * @data:  some character data read
- * @len:  the lenght of the data
+ * @len:  the length of the data
  *
  * check the CData parsed for validation in the current stack
  *
@@ -6017,7 +6017,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
        return(0);
 
     /*
-     * If vstateNr is not zero that means continuous validation is 
+     * If vstateNr is not zero that means continuous validation is
      * activated, do not try to check the content model at that level.
      */
     if (ctxt->vstateNr == 0) {
@@ -6060,7 +6060,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
                    if ((child->ns != NULL) && (child->ns->prefix != NULL)) {
                        xmlChar fn[50];
                        xmlChar *fullname;
-                       
+
                        fullname = xmlBuildQName(child->name, child->ns->prefix,
                                                 fn, 50);
                        if (fullname == NULL)
@@ -6078,7 +6078,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
                            } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
                                (cont->c1 == NULL) ||
                                (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
-                               xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT, 
+                               xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
                                        "Internal: MIXED struct corrupted\n",
                                        NULL);
                                break;
@@ -6101,7 +6101,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
                        } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
                            (cont->c1 == NULL) ||
                            (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)) {
-                           xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT, 
+                           xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
                                    "Internal: MIXED struct corrupted\n",
                                    NULL);
                            break;
@@ -6181,7 +6181,7 @@ child_ok:
                }
            } else {
                xmlAttrPtr attrib;
-               
+
                attrib = elem->properties;
                while (attrib != NULL) {
                    if (xmlStrEqual(attrib->name, attr->name)) {
@@ -6196,18 +6196,18 @@ child_ok:
                             * allow to define the URI instead of the prefix :-(
                             */
                            if (nameSpace == NULL) {
-                               if (qualified < 0) 
+                               if (qualified < 0)
                                    qualified = 0;
                            } else if (!xmlStrEqual(nameSpace->prefix,
                                                    attr->prefix)) {
-                               if (qualified < 1) 
+                               if (qualified < 1)
                                    qualified = 1;
                            } else
                                goto found;
                        } else {
                            /*
                             * We should allow applications to define namespaces
-                            * for their application even if the DTD doesn't 
+                            * for their application even if the DTD doesn't
                             * carry one, otherwise, basically we would always
                             * break.
                             */
@@ -6280,7 +6280,7 @@ child_ok:
                }
            }
        }
-found:     
+found:
         attr = attr->nexth;
     }
     return(ret);
@@ -6327,7 +6327,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
            if ((root->ns != NULL) && (root->ns->prefix != NULL)) {
                xmlChar fn[50];
                xmlChar *fullname;
-               
+
                fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50);
                if (fullname == NULL) {
                    xmlVErrMemory(ctxt, NULL);
@@ -6338,7 +6338,7 @@ xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
                    xmlFree(fullname);
                if (ret == 1)
                    goto name_ok;
-           } 
+           }
            if ((xmlStrEqual(doc->intSubset->name, BAD_CAST "HTML")) &&
                (xmlStrEqual(root->name, BAD_CAST "html")))
                goto name_ok;
@@ -6359,7 +6359,7 @@ name_ok:
  * @doc:  a document instance
  * @elem:  an element instance
  *
- * Try to validate the subtree under an element 
+ * Try to validate the subtree under an element
  *
  * returns 1 if valid or 0 otherwise
  */
@@ -6379,7 +6379,8 @@ xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
      * they don't really mean anything validation wise.
      */
     if ((elem->type == XML_XINCLUDE_START) ||
-       (elem->type == XML_XINCLUDE_END))
+       (elem->type == XML_XINCLUDE_END) ||
+       (elem->type == XML_NAMESPACE_DECL))
        return(1);
 
     CHECK_DTD;
@@ -6538,7 +6539,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
     memo.name = name;
 
     xmlListWalk(ref_list, xmlWalkValidateList, &memo);
-    
+
 }
 
 /**
@@ -6550,7 +6551,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
  * incremental validation steps have been completed
  *
  * basically it does the following checks described by the XML Rec
- * 
+ *
  * Check all the IDREF/IDREFS attributes definition for validity
  *
  * returns 1 if valid or 0 otherwise
@@ -6564,7 +6565,7 @@ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
     if (ctxt == NULL)
         return(0);
     if (doc == NULL) {
-        xmlErrValid(ctxt, XML_DTD_NO_DOC, 
+        xmlErrValid(ctxt, XML_DTD_NO_DOC,
                "xmlValidateDocumentFinal: doc == NULL\n", NULL);
        return(0);
     }
@@ -6682,7 +6683,7 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
        case XML_ATTRIBUTE_ENTITIES:
        case XML_ATTRIBUTE_NOTATION:
            if (cur->defaultValue != NULL) {
-               
+
                ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name,
                                                 cur->atype, cur->defaultValue);
                if ((ret == 0) && (ctxt->valid == 1))
@@ -6739,9 +6740,9 @@ xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
  * subsets have been parsed
  *
  * basically it does the following checks described by the XML Rec
- * - check that ENTITY and ENTITIES type attributes default or 
+ * - check that ENTITY and ENTITIES type attributes default or
  *   possible values matches one of the defined entities.
- * - check that NOTATION type attributes default or 
+ * - check that NOTATION type attributes default or
  *   possible values matches one of the defined notations.
  *
  * returns 1 if valid or 0 if invalid and -1 if not well-formed
@@ -6812,7 +6813,7 @@ xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
        xmlChar *sysID;
        if (doc->intSubset->SystemID != NULL) {
            sysID = xmlBuildURI(doc->intSubset->SystemID,
-                       doc->URL);
+                       doc->URL);
            if (sysID == NULL) {
                xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
                        "Could not build URI for external subset \"%s\"\n",
@@ -6885,17 +6886,17 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree,
     if (*len >= max) return(*len);
 
     switch (ctree->type) {
-       case XML_ELEMENT_CONTENT_PCDATA: 
+       case XML_ELEMENT_CONTENT_PCDATA:
            for (i = 0; i < *len;i++)
                if (xmlStrEqual(BAD_CAST "#PCDATA", names[i])) return(*len);
            names[(*len)++] = BAD_CAST "#PCDATA";
            break;
-       case XML_ELEMENT_CONTENT_ELEMENT: 
+       case XML_ELEMENT_CONTENT_ELEMENT:
            for (i = 0; i < *len;i++)
                if (xmlStrEqual(ctree->name, names[i])) return(*len);
            names[(*len)++] = ctree->name;
            break;
-       case XML_ELEMENT_CONTENT_SEQ: 
+       case XML_ELEMENT_CONTENT_SEQ:
            xmlValidGetPotentialChildren(ctree->c1, names, len, max);
            xmlValidGetPotentialChildren(ctree->c2, names, len, max);
            break;
@@ -6904,7 +6905,7 @@ xmlValidGetPotentialChildren(xmlElementContent *ctree,
            xmlValidGetPotentialChildren(ctree->c2, names, len, max);
            break;
    }
-   
+
    return(*len);
 }
 
@@ -6946,19 +6947,19 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
                          int max) {
     xmlValidCtxt vctxt;
     int nb_valid_elements = 0;
-    const xmlChar *elements[256];
+    const xmlChar *elements[256]={0};
     int nb_elements = 0, i;
     const xmlChar *name;
-    
+
     xmlNode *ref_node;
     xmlNode *parent;
     xmlNode *test_node;
-    
+
     xmlNode *prev_next;
     xmlNode *next_prev;
     xmlNode *parent_childs;
     xmlNode *parent_last;
-    
+
     xmlElement *element_desc;
 
     if (prev == NULL && next == NULL)
@@ -6983,7 +6984,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
         element_desc = xmlGetDtdElementDesc(parent->doc->extSubset,
                                              parent->name);
     if (element_desc == NULL) return(-1);
-       
+
     /*
      * Do a backup of the current tree structure
      */
@@ -6994,16 +6995,19 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
 
     /*
      * Creates a dummy node and insert it into the tree
-     */    
+     */
     test_node = xmlNewDocNode (ref_node->doc, NULL, BAD_CAST "<!dummy?>", NULL);
+    if (test_node == NULL)
+        return(-1);
+
     test_node->parent = parent;
     test_node->prev = prev;
     test_node->next = next;
     name = test_node->name;
-    
+
     if (prev) prev->next = test_node;
     else parent->children = test_node;
-               
+
     if (next) next->prev = test_node;
     else parent->last = test_node;
 
@@ -7013,7 +7017,7 @@ xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
      */
     nb_elements = xmlValidGetPotentialChildren(element_desc->content,
                       elements, &nb_elements, 256);
-    
+
     for (i = 0;i < nb_elements;i++) {
        test_node->name = elements[i];
        if (xmlValidateOneElement(&vctxt, parent->doc, parent)) {
index 816e64d..3a6fcc0 100755 (executable)
@@ -31,7 +31,7 @@ $!- configuration -------------------------------------------------------------
 $!
 $!- compile command.  If p1="nowarn" suppress the expected warning types
 $!
-$   cc_opts = "/DEF=HAVE_CONFIG_H/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS/INCLUDE=xml_srcdir"
+$   cc_opts = "/nowarn/DEF=HAVE_CONFIG_H/NAMES=(as_is,SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS/INCLUDE=xml_srcdir"
 $!
 $   if p1.eqs."DEBUG" .or. p2.eqs."DEBUG"
 $   then
@@ -46,15 +46,15 @@ $!- list of sources to be built into the LIBXML library.  Compare this list
 $!  to the definition of "libxml2_la_SOURCES" in the file MAKEFILE.IN.
 $!  Currently this definition includes the list WITH_TRIO_SOURCES_TRUE
 $!
-$   sources = "SAX.c entities.c encoding.c error.c parserInternals.c"
-$   sources = sources + " parser.c tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c"
+$   sources = "parser.c SAX.c entities.c encoding.c error.c parserInternals.c"
+$   sources = sources + " tree.c hash.c list.c xmlIO.c xmlmemory.c uri.c"
 $   sources = sources + " valid.c xlink.c HTMLparser.c HTMLtree.c debugXML.c xpath.c"
 $   sources = sources + " xpointer.c xinclude.c nanohttp.c nanoftp.c DOCBparser.c"
 $   sources = sources + " catalog.c globals.c threads.c c14n.c xmlstring.c"
 $   sources = sources + " xmlregexp.c xmlschemas.c xmlschemastypes.c xmlunicode.c"
 $   sources = sources + " triostr.c trio.c xmlreader.c relaxng.c dict.c SAX2.c"
 $   sources = sources + " xmlwriter.c legacy.c chvalid.c pattern.c xmlsave.c"
-$   sources = sources + " schematron.c"
+$   sources = sources + " schematron.c xmlmodule.c buf.c"
 $!
 $!- list of main modules to compile and link.  Compare this list to the
 $!  definition of bin_PROGRAMS in MAKEFILE.IN
@@ -102,6 +102,7 @@ $     endif
 $   endif
 $!
 $   copy/log config.vms xml_srcdir:config.h
+$!   copy/log xmlversion.h [-.include.libxml]
 $!
 $   if f$trnlnm("libxml").eqs.""
 $   then
@@ -256,8 +257,14 @@ $   then
 $      opts = ""
 $      if debug then opts = "/DEBUG"
 $      write sys$output "''link_command'''opts' ''object_file',XML_LIBDIR:libxml.olb/library"
-$      link_command'opts' 'object_file',-
+$      if f$search( "sys$library:iconv.olb" ) .eqs. ""
+$      then
+$        link_command'opts' 'object_file',-
                XML_LIBDIR:libxml.olb/library
+$      else
+$        link_command'opts' 'object_file',-
+               XML_LIBDIR:libxml.olb/library,sys$library:iconv/lib
+$      endif
 $   endif
 $!
 $EXIT_BUILD:
index 6ecfa47..d1cd7f3 100755 (executable)
@@ -19,6 +19,8 @@
 #undef HAVE_LIBHISTORY
 #undef HAVE_LIBREADLINE
 
+#define ICONV_CONST
+
 /* Define if you have the class function.  */
 #undef HAVE_CLASS
 
 #endif
 
 #define xmlBufferWriteChar xmlBufferWriteChar2
+
+#include <inttypes.h>
+
+#define HAVE_DLOPEN 1
+#define HAVE_DLFCN_H 1
diff --git a/win32/.cvsignore b/win32/.cvsignore
deleted file mode 100644 (file)
index 1f8e034..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-Makefile
-config.*
-depends.*
-int.*
-bin.*
-*.win32
-*.win32.zip
index d612e2d..7129c61 100644 (file)
@@ -68,6 +68,9 @@ CFLAGS = $(CFLAGS) -DHAVE_PTHREAD_H
 !if "$(WITH_ZLIB)" == "1"
 CFLAGS = $(CFLAGS) -DHAVE_ZLIB_H
 !endif
+!if "$(WITH_LZMA)" == "1"
+CFLAGS = $(CFLAGS) -DHAVE_LZMA_H
+!endif
 
 # The linker and its options.
 LD = ilink32.exe
@@ -92,6 +95,9 @@ LIBS = $(LIBS) iconvomf.lib
 !if "$(WITH_ZLIB)" == "1"
 LIBS = $(LIBS) zlibomf.lib
 !endif
+!if "$(WITH_LZMA)" == "1"
+LIBS = $(LIBS) liblzma.lib
+!endif
 !if "$(WITH_THREADS)" == "posix"
 LIBS = $(LIBS) pthreadVC.lib
 !endif
@@ -113,7 +119,8 @@ LDFLAGS = $(LDFLAGS)
 !endif
 
 # Libxml object files.
-XML_OBJS = $(XML_INTDIR)\c14n.obj\
+XML_OBJS = $(XML_INTDIR)\buf.obj\
+       $(XML_INTDIR)\c14n.obj\
        $(XML_INTDIR)\catalog.obj\
        $(XML_INTDIR)\chvalid.obj\
        $(XML_INTDIR)\debugXML.obj\
@@ -158,7 +165,8 @@ XML_OBJS = $(XML_INTDIR)\c14n.obj\
        $(XML_INTDIR)\xmlstring.obj
 
 # Static libxml object files.
-XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
+XML_OBJS_A = $(XML_INTDIR_A)\buf.obj\
+       $(XML_INTDIR_A)\c14n.obj\
        $(XML_INTDIR_A)\catalog.obj\
        $(XML_INTDIR_A)\chvalid.obj\
        $(XML_INTDIR_A)\debugXML.obj\
@@ -219,7 +227,8 @@ UTILS = $(BINDIR)\xmllint.exe\
        $(BINDIR)\testXPath.exe\
        $(BINDIR)\runtest.exe\
        $(BINDIR)\runsuite.exe\
-       $(BINDIR)\testapi.exe
+       $(BINDIR)\testapi.exe\
+       $(BINDIR)\testlimits.exe
 
 
 !if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
@@ -250,10 +259,11 @@ distclean : clean
 rebuild : clean all
 
 install-libs : all
-       if not exist "$(INCPREFIX)\libxml" mkdir "$(INCPREFIX)\libxml"
+       if not exist "$(INCPREFIX)\libxml2" mkdir "$(INCPREFIX)\libxml2"
+       if not exist "$(INCPREFIX)\libxml2\libxml" mkdir "$(INCPREFIX)\libxml2\libxml"
        if not exist "$(BINPREFIX)" mkdir "$(BINPREFIX)"
        if not exist "$(LIBPREFIX)" mkdir "$(LIBPREFIX)"
-       copy $(XML_SRCDIR)\include\libxml\*.h "$(INCPREFIX)\libxml"
+       copy $(XML_SRCDIR)\include\libxml\*.h "$(INCPREFIX)\libxml2\libxml"
        copy $(BINDIR)\$(XML_SO) "$(SOPREFIX)"
        copy $(BINDIR)\$(XML_A) "$(LIBPREFIX)"
        copy $(BINDIR)\$(XML_IMP) "$(LIBPREFIX)"
index 0f8198b..1889376 100644 (file)
@@ -60,6 +60,9 @@ endif
 ifeq ($(WITH_ZLIB),1)
 CFLAGS += -DHAVE_ZLIB_H
 endif
+ifeq ($(WITH_LZMA),1)
+CFLAGS += -DHAVE_LZMA_H
+endif
 
 # The linker and its options.
 LD = gcc.exe
@@ -83,6 +86,9 @@ ifeq ($(WITH_ZLIB),1)
 # LIBS += -lzdll
 LIBS += -lz
 endif
+ifeq ($(WITH_LZMA),1)
+LIBS += -llzma
+endif
 ifeq ($(WITH_THREADS),posix)
 LIBS += -lpthreadGC
 endif
@@ -107,7 +113,8 @@ endif
 
 
 # Libxml object files.
-XML_OBJS = $(XML_INTDIR)/c14n.o\
+XML_OBJS = $(XML_INTDIR)/buf.o\
+       $(XML_INTDIR)/c14n.o\
        $(XML_INTDIR)/catalog.o\
        $(XML_INTDIR)/chvalid.o\
        $(XML_INTDIR)/debugXML.o\
@@ -154,7 +161,8 @@ XML_OBJS = $(XML_INTDIR)/c14n.o\
 XML_SRCS = $(subst .o,.c,$(subst $(XML_INTDIR)/,$(XML_SRCDIR)/,$(XML_OBJS)))
 
 # Static libxml object files.
-XML_OBJS_A = $(XML_INTDIR_A)/c14n.o\
+XML_OBJS_A = $(XML_INTDIR_A)/buf.o\
+       $(XML_INTDIR_A)/c14n.o\
        $(XML_INTDIR_A)/catalog.o\
        $(XML_INTDIR_A)/chvalid.o\
        $(XML_INTDIR_A)/debugXML.o\
@@ -217,7 +225,8 @@ UTILS = $(BINDIR)/xmllint.exe\
        $(BINDIR)/testXPath.exe\
        $(BINDIR)/runtest.exe\
        $(BINDIR)/runsuite.exe\
-       $(BINDIR)/testapi.exe
+       $(BINDIR)/testapi.exe\
+       $(BINDIR)/testlimits.exe
 
 ifeq ($(WITH_THREADS),yes)
 UTILS += $(BINDIR)/testThreadsWin32.exe
@@ -254,10 +263,11 @@ distclean : clean
 rebuild : clean all
 
 install-libs : all
-       cmd.exe /C "if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml"
+       cmd.exe /C "if not exist $(INCPREFIX)\libxml2 mkdir $(INCPREFIX)\libxml2"
+       cmd.exe /C "if not exist $(INCPREFIX)\libxml2\libxml mkdir $(INCPREFIX)\libxml2\libxml"
        cmd.exe /C "if not exist $(BINPREFIX) mkdir $(BINPREFIX)"
        cmd.exe /C "if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)"
-       cmd.exe /C "copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml"
+       cmd.exe /C "copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml2\libxml"
        cmd.exe /C "copy $(BINDIR)\$(XML_SO) $(SOPREFIX)"
        cmd.exe /C "copy $(BINDIR)\$(XML_A) $(LIBPREFIX)"
        cmd.exe /C "copy $(BINDIR)\$(XML_IMP) $(LIBPREFIX)"
index cc93372..d16c1a2 100644 (file)
@@ -43,7 +43,7 @@ CPPFLAGS = $(CPPFLAGS) /D "_REENTRANT"
 
 # The compiler and its options.
 CC = cl.exe
-CFLAGS = /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS"  /D "NOLIBTOOL" /W1 $(CRUNTIME)
+CFLAGS = /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "NOLIBTOOL" /W1 $(CRUNTIME)
 CFLAGS = $(CFLAGS) /I$(XML_SRCDIR) /I$(XML_SRCDIR)\include /I$(INCPREFIX)
 !if "$(WITH_THREADS)" != "no"
 CFLAGS = $(CFLAGS) /D "_REENTRANT"
@@ -108,7 +108,8 @@ LDFLAGS = $(LDFLAGS)
 !endif
 
 # Libxml object files.
-XML_OBJS = $(XML_INTDIR)\c14n.obj\
+XML_OBJS = $(XML_INTDIR)\buf.obj\
+       $(XML_INTDIR)\c14n.obj\
        $(XML_INTDIR)\catalog.obj\
        $(XML_INTDIR)\chvalid.obj\
        $(XML_INTDIR)\debugXML.obj\
@@ -153,7 +154,8 @@ XML_OBJS = $(XML_INTDIR)\c14n.obj\
        $(XML_INTDIR)\xmlstring.obj
 
 # Static libxml object files.
-XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
+XML_OBJS_A = $(XML_INTDIR_A)\buf.obj\
+       $(XML_INTDIR_A)\c14n.obj\
        $(XML_INTDIR_A)\catalog.obj\
        $(XML_INTDIR_A)\chvalid.obj\
        $(XML_INTDIR_A)\debugXML.obj\
@@ -198,7 +200,8 @@ XML_OBJS_A = $(XML_INTDIR_A)\c14n.obj\
        $(XML_INTDIR_A)\xmlstring.obj
 
 # Static libxml object files.
-XML_OBJS_A_DLL = $(XML_INTDIR_A_DLL)\c14n.obj\
+XML_OBJS_A_DLL = $(XML_INTDIR_A_DLL)\buf.obj\
+       $(XML_INTDIR_A_DLL)\c14n.obj\
        $(XML_INTDIR_A_DLL)\catalog.obj\
        $(XML_INTDIR_A_DLL)\chvalid.obj\
        $(XML_INTDIR_A_DLL)\debugXML.obj\
@@ -259,7 +262,9 @@ UTILS = $(BINDIR)\xmllint.exe\
        $(BINDIR)\testXPath.exe\
        $(BINDIR)\runtest.exe\
        $(BINDIR)\runsuite.exe\
-       $(BINDIR)\testapi.exe
+       $(BINDIR)\testapi.exe\
+       $(BINDIR)\testlimits.exe\
+       $(BINDIR)\testrecurse.exe
        
 !if "$(WITH_THREADS)" == "yes" || "$(WITH_THREADS)" == "ctls" || "$(WITH_THREADS)" == "native"
 UTILS = $(UTILS) $(BINDIR)\testThreadsWin32.exe
@@ -299,11 +304,12 @@ distclean : clean
 rebuild : clean all
 
 install-libs : all
-       if not exist $(INCPREFIX)\libxml mkdir $(INCPREFIX)\libxml
+       if not exist $(INCPREFIX)\libxml2 mkdir $(INCPREFIX)\libxml2
+       if not exist $(INCPREFIX)\libxml2\libxml mkdir $(INCPREFIX)\libxml2\libxml
        if not exist $(BINPREFIX) mkdir $(BINPREFIX)
        if not exist $(LIBPREFIX) mkdir $(LIBPREFIX)
        if not exist $(SOPREFIX) mkdir $(SOPREFIX)
-       copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml
+       copy $(XML_SRCDIR)\include\libxml\*.h $(INCPREFIX)\libxml2\libxml
        copy $(BINDIR)\$(XML_SO) $(SOPREFIX)
        copy $(BINDIR)\$(XML_A) $(LIBPREFIX)
        copy $(BINDIR)\$(XML_A_DLL) $(LIBPREFIX)
@@ -411,7 +417,15 @@ $(UTILS) : $(UTILS_INTDIR) $(BINDIR) libxml libxmla libxmladll
 
 # TESTS
 
-tests :  XPathtests
+tests : checktests XPathtests
+
+checktests : $(UTILS)
+       cd .. && win32\$(BINDIR)\runtest.exe
+       cd .. && win32\$(BINDIR)\testrecurse.exe
+       cd .. && win32\$(BINDIR)\testapi.exe
+       cd .. && win32\$(BINDIR)\testchar.exe
+       cd .. && win32\$(BINDIR)\testdict.exe
+       cd .. && win32\$(BINDIR)\runxmlconf.exe
 
 XPathtests : $(BINDIR)\testXPath.exe
        @echo. 2> .memdump
index 0d5a1bc..0588fa6 100644 (file)
@@ -69,6 +69,7 @@
     </Link>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
+    <ClCompile Include="..\..\buf.c" />\r
     <ClCompile Include="..\..\c14n.c" />\r
     <ClCompile Include="..\..\catalog.c" />\r
     <ClCompile Include="..\..\chvalid.c" />\r
index b4ccc37..83cc991 100644 (file)
@@ -46,7 +46,7 @@
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>$(ProjectDir);$(ProjectDir)..\..\include;$(ProjectDir)..\..\..\libiconv-1.14.vc10\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <DisableSpecificWarnings>4996</DisableSpecificWarnings>\r
-      <PreprocessorDefinitions>HAVE_CONFIG_H;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>\r
       <MinimalRebuild>false</MinimalRebuild>\r
     </ClCompile>\r
index 11d2898..edd943a 100644 (file)
@@ -305,6 +305,8 @@ function configureLibxml()
                        of.WriteLine(s.replace(/\@WITH_TRIO\@/, withTrio? "1" : "0"));
                } else if (s.search(/\@WITH_THREADS\@/) != -1) {
                        of.WriteLine(s.replace(/\@WITH_THREADS\@/, withThreads == "no"? "0" : "1"));
+               } else if (s.search(/\@WITH_THREAD_ALLOC\@/) != -1) {
+                       of.WriteLine(s.replace(/\@WITH_THREAD_ALLOC\@/, "0"));
                } else if (s.search(/\@WITH_FTP\@/) != -1) {
                        of.WriteLine(s.replace(/\@WITH_FTP\@/, withFtp? "1" : "0"));
                } else if (s.search(/\@WITH_HTTP\@/) != -1) {
index ce3f24a..1bdbed9 100644 (file)
@@ -553,6 +553,12 @@ xmlAutomataSetFinalState
 #ifdef LIBXML_DEBUG_ENABLED
 xmlBoolToText
 #endif
+xmlBufContent
+xmlBufEnd
+xmlBufGetNodeContent
+xmlBufNodeDump
+xmlBufShrink
+xmlBufUse
 xmlBufferAdd
 xmlBufferAddHead
 xmlBufferCCat
@@ -561,6 +567,7 @@ xmlBufferContent
 xmlBufferCreate
 xmlBufferCreateSize
 xmlBufferCreateStatic
+xmlBufferDetach
 xmlBufferDump
 xmlBufferEmpty
 xmlBufferFree
@@ -765,10 +772,12 @@ xmlDictCreate
 xmlDictCreateSub
 xmlDictExists
 xmlDictFree
+xmlDictGetUsage
 xmlDictLookup
 xmlDictOwns
 xmlDictQLookup
 xmlDictReference
+xmlDictSetLimit
 xmlDictSize
 xmlDllMain
 xmlDocCopyNode
@@ -992,6 +1001,7 @@ xmlInitThreads
 #ifdef LIBXML_CATALOG_ENABLED
 xmlInitializeCatalog
 #endif
+xmlInitializeDict
 xmlInitializeGlobalState
 xmlInitializePredefinedEntities
 xmlIsBaseChar
@@ -1292,6 +1302,8 @@ xmlOutputBufferCreateFilename
 xmlOutputBufferCreateFilenameDefault
 xmlOutputBufferCreateIO
 xmlOutputBufferFlush
+xmlOutputBufferGetContent
+xmlOutputBufferGetSize
 xmlOutputBufferWrite
 xmlOutputBufferWriteEscape
 xmlOutputBufferWriteString
@@ -1770,6 +1782,12 @@ xmlSchemaValidateOneElement
 xmlSchemaValidatePredefinedType
 #endif
 #ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidateSetFilename
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
+xmlSchemaValidateSetLocator
+#endif
+#ifdef LIBXML_SCHEMAS_ENABLED
 xmlSchemaValidateStream
 #endif
 #ifdef LIBXML_SCHEMAS_ENABLED
@@ -1960,6 +1978,7 @@ xmlTextReaderRelaxNGSetSchema
 #ifdef LIBXML_SCHEMAS_ENABLED
 xmlTextReaderRelaxNGValidate
 #endif
+xmlTextReaderRelaxNGValidateCtxt
 xmlTextReaderSchemaValidate
 xmlTextReaderSchemaValidateCtxt
 xmlTextReaderSetErrorHandler
@@ -1984,6 +2003,7 @@ xmlTextWriterFlush
 xmlTextWriterFullEndElement
 xmlTextWriterSetIndent
 xmlTextWriterSetIndentString
+xmlTextWriterSetQuoteChar
 xmlTextWriterStartAttribute
 xmlTextWriterStartAttributeNS
 xmlTextWriterStartCDATA
@@ -2911,6 +2931,9 @@ xmlXPathNextPrecedingSibling
 xmlXPathNextSelf
 #endif
 #ifdef LIBXML_XPATH_ENABLED
+xmlXPathNodeEval
+#endif
+#ifdef LIBXML_XPATH_ENABLED
 xmlXPathNodeLeading
 #endif
 #ifdef LIBXML_XPATH_ENABLED
@@ -3037,6 +3060,9 @@ xmlXPathRoot
 xmlXPathRoundFunction
 #endif
 #ifdef LIBXML_XPATH_ENABLED
+xmlXPathSetContextNode
+#endif
+#ifdef LIBXML_XPATH_ENABLED
 xmlXPathStartsWithFunction
 #endif
 #ifdef LIBXML_XPATH_ENABLED
index 1d8df87..bd49c57 100644 (file)
@@ -34,11 +34,10 @@ int open(const char *filename,int oflag, ...)
        char mode[3]; /* mode[0] ="w/r/a"  mode[1]="+" */
        mode[2]=0;
        if ( oflag==(O_WRONLY|O_CREAT) )
-               mode[0]="w";
+               mode[0]='w';
        else if (oflag==O_RDONLY)
-               mode[0]="r";
-       return fopen(filename, mode);
-
+               mode[0]='r';
+       return (int) fopen(filename, mode);
 }
 
 int close(int handle)
index d01f978..ff3dafb 100644 (file)
@@ -17,6 +17,7 @@
 #include <libxml/tree.h>
 #include <libxml/parser.h>
 #include <libxml/uri.h>
+#include <libxml/xpath.h>
 #include <libxml/xpointer.h>
 #include <libxml/parserInternals.h>
 #include <libxml/xmlerror.h>
@@ -26,6 +27,7 @@
 #ifdef LIBXML_XINCLUDE_ENABLED
 #include <libxml/xinclude.h>
 
+#include "buf.h"
 
 #define XINCLUDE_MAX_DEPTH 40
 
@@ -92,7 +94,7 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree);
 
 /************************************************************************
  *                                                                     *
- *                     XInclude error handler                          *
+ *                     XInclude error handler                          *
  *                                                                     *
  ************************************************************************/
 
@@ -412,7 +414,7 @@ xmlXIncludeFreeContext(xmlXIncludeCtxtPtr ctxt) {
  * xmlXIncludeParseFile:
  * @ctxt:  the XInclude context
  * @URL:  the URL or file path
- * 
+ *
  * parse a document for XInclude
  */
 static xmlDocPtr
@@ -433,7 +435,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
      * pass in the application data to the parser context.
      */
     pctxt->_private = ctxt->_private;
-    
+
     /*
      * try to ensure that new documents included are actually
      * built with the same dictionary as the including document.
@@ -446,7 +448,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
     }
 
     xmlCtxtUseOptions(pctxt, ctxt->parseFlags | XML_PARSE_DTDLOAD);
-    
+
     inputStream = xmlLoadExternalEntity(URL, NULL, pctxt);
     if (inputStream == NULL) {
        xmlFreeParserCtxt(pctxt);
@@ -472,7 +474,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
         pctxt->myDoc = NULL;
     }
     xmlFreeParserCtxt(pctxt);
-    
+
     return(ret);
 }
 
@@ -480,7 +482,7 @@ xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
  * xmlXIncludeAddNode:
  * @ctxt:  the XInclude context
  * @cur:  the new node
- * 
+ *
  * Add a new node to process to an XInclude context
  */
 static int
@@ -511,7 +513,7 @@ xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) {
     href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
     if (href == NULL) {
        href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
-       if (href == NULL) 
+       if (href == NULL)
            return(-1);
     }
     if ((href[0] == '#') || (href[0] == 0))
@@ -655,7 +657,7 @@ xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) {
  * @ctxt:  the XInclude context
  * @doc:  the new document
  * @url:  the associated URL
- * 
+ *
  * The XInclude recursive nature is handled at this point.
  */
 static void
@@ -684,7 +686,7 @@ xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
        /*
         * Copy the private user data
         */
-       newctxt->_private = ctxt->_private;     
+       newctxt->_private = ctxt->_private;
        /*
         * Copy the existing document set
         */
@@ -749,7 +751,7 @@ xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
  * @ctxt:  the XInclude context
  * @txt:  the new text node
  * @url:  the associated URL
- * 
+ *
  * Add a new txtument to the list
  */
 static void
@@ -808,7 +810,7 @@ xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
  * @target:  the document target
  * @source:  the document source
  * @elem:  the element
- * 
+ *
  * Make a copy of the node while preserving the XInclude semantic
  * of the Infoset copy
  */
@@ -835,7 +837,7 @@ xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
  * @target:  the document target
  * @source:  the document source
  * @elem:  the element list
- * 
+ *
  * Make a copy of the node list while preserving the XInclude semantic
  * of the Infoset copy
  */
@@ -874,11 +876,11 @@ xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
 static xmlNodePtr
 xmlXIncludeGetNthChild(xmlNodePtr cur, int no) {
     int i;
-    if (cur == NULL) 
-       return(cur);
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
+        return(NULL);
     cur = cur->children;
     for (i = 0;i <= no;cur = cur->next) {
-       if (cur == NULL) 
+       if (cur == NULL)
            return(cur);
        if ((cur->type == XML_ELEMENT_NODE) ||
            (cur->type == XML_DOCUMENT_NODE) ||
@@ -922,11 +924,13 @@ xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
        return(NULL);
     start = (xmlNodePtr) range->user;
 
-    if (start == NULL)
+    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
        return(NULL);
     end = range->user2;
     if (end == NULL)
        return(xmlDocCopyNode(start, target, 1));
+    if (end->type == XML_NAMESPACE_DECL)
+        return(NULL);
 
     cur = start;
     index1 = range->index;
@@ -985,7 +989,7 @@ xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
                /* prune and return full set */
                if (level == lastLevel)
                    xmlAddNextSibling(last, tmp);
-               else 
+               else
                    xmlAddChild(last, tmp);
                return(list);
            } else {    /* ending node not a text node */
@@ -1204,6 +1208,7 @@ xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
            }
            break;
        }
+#ifdef LIBXML_XPTR_ENABLED
        case XPATH_LOCATIONSET: {
            xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
            if (set == NULL)
@@ -1223,7 +1228,6 @@ xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
            }
            break;
        }
-#ifdef LIBXML_XPTR_ENABLED
        case XPATH_RANGE:
            return(xmlXIncludeCopyRange(ctxt, target, source, obj));
 #endif
@@ -1289,7 +1293,7 @@ xmlXIncludeMergeEntity(xmlEntityPtr ent, xmlXIncludeMergeDataPtr data,
        if (prev != NULL) {
            if (ent->etype != prev->etype)
                goto error;
-       
+
            if ((ent->SystemID != NULL) && (prev->SystemID != NULL)) {
                if (!xmlStrEqual(ent->SystemID, prev->SystemID))
                    goto error;
@@ -1389,7 +1393,7 @@ xmlXIncludeMergeEntities(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
  * @ctxt:  the XInclude context
  * @url:  the associated URL
  * @nr:  the xinclude node number
- * 
+ *
  * Load the document, and store the result in the XInclude context
  *
  * Returns 0 in case of success, -1 in case of failure
@@ -1413,7 +1417,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
      */
     uri = xmlParseURI((const char *)url);
     if (uri == NULL) {
-       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                       XML_XINCLUDE_HREF_URI,
                       "invalid value URI %s\n", url);
        return(-1);
@@ -1431,7 +1435,7 @@ xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
     xmlFreeURI(uri);
     if (URL == NULL) {
         if (ctxt->incTab != NULL)
-           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                           XML_XINCLUDE_HREF_URI,
                           "invalid value URI %s\n", url);
        else
@@ -1550,7 +1554,7 @@ loaded:
            ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc,
                                                       doc, doc->children);
        }
-    } 
+    }
 #ifdef LIBXML_XPTR_ENABLED
     else {
        /*
@@ -1568,7 +1572,7 @@ loaded:
            xptrctxt = xmlXPtrNewContext(doc, NULL, NULL);
        }
        if (xptrctxt == NULL) {
-           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                           XML_XINCLUDE_XPTR_FAILED,
                           "could not create XPointer context\n", NULL);
            xmlFree(URL);
@@ -1594,7 +1598,7 @@ loaded:
            case XPATH_POINT:
            case XPATH_USERS:
            case XPATH_XSLT_TREE:
-               xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+               xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                               XML_XINCLUDE_XPTR_RESULT,
                               "XPointer is not a range: #%s\n",
                               fragment);
@@ -1636,14 +1640,14 @@ loaded:
                        continue;
 
                    case XML_ATTRIBUTE_NODE:
-                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                                       XML_XINCLUDE_XPTR_RESULT,
                                       "XPointer selects an attribute: #%s\n",
                                       fragment);
                        set->nodeTab[i] = NULL;
                        continue;
                    case XML_NAMESPACE_DECL:
-                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                                       XML_XINCLUDE_XPTR_RESULT,
                                       "XPointer selects a namespace: #%s\n",
                                       fragment);
@@ -1658,7 +1662,7 @@ loaded:
                    case XML_ENTITY_DECL:
                    case XML_XINCLUDE_START:
                    case XML_XINCLUDE_END:
-                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+                       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                                       XML_XINCLUDE_XPTR_RESULT,
                                   "XPointer selects unexpected nodes: #%s\n",
                                       fragment);
@@ -1684,7 +1688,7 @@ loaded:
     /*
      * Do the xml:base fixup if needed
      */
-    if ((doc != NULL) && (URL != NULL) && (xmlStrchr(URL, (xmlChar) '/')) &&
+    if ((doc != NULL) && (URL != NULL) &&
         (!(ctxt->parseFlags & XML_PARSE_NOBASEFIX)) &&
        (!(doc->parseFlags & XML_PARSE_NOBASEFIX))) {
        xmlNodePtr node;
@@ -1704,7 +1708,7 @@ loaded:
             */
            curBase = xmlBuildRelativeURI(URL, ctxt->base);
            if (curBase == NULL) {      /* Error return */
-               xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+               xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                       XML_XINCLUDE_HREF_URI,
                       "trying to build relative URI from %s\n", URL);
            } else {
@@ -1745,7 +1749,7 @@ loaded:
                                xmlChar *relBase;
                                relBase = xmlBuildURI(xmlBase, base);
                                if (relBase == NULL) { /* error */
-                                   xmlXIncludeErr(ctxt, 
+                                   xmlXIncludeErr(ctxt,
                                                ctxt->incTab[nr]->ref,
                                                XML_XINCLUDE_HREF_URI,
                                        "trying to rebuild base from %s\n",
@@ -1782,7 +1786,7 @@ loaded:
  * @ctxt:  the XInclude context
  * @url:  the associated URL
  * @nr:  the xinclude node number
- * 
+ *
  * Load the content, and store the result in the XInclude context
  *
  * Returns 0 in case of success, -1 in case of failure
@@ -1798,6 +1802,7 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
     xmlCharEncoding enc = (xmlCharEncoding) 0;
     xmlParserCtxtPtr pctxt;
     xmlParserInputPtr inputStream;
+    int xinclude_multibyte_fallback_used = 0;
 
     /*
      * Check the URL and remove any fragment identifier
@@ -1828,7 +1833,7 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
      * directly through ctxt->doc.
      */
     if (URL[0] == 0) {
-       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                       XML_XINCLUDE_TEXT_DOCUMENT,
                       "text serialization of document not available\n", NULL);
        xmlFree(URL);
@@ -1894,30 +1899,39 @@ xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
     /*
      * Scan all chars from the resource and add the to the node
      */
+xinclude_multibyte_fallback:
     while (xmlParserInputBufferRead(buf, 128) > 0) {
        int len;
        const xmlChar *content;
 
-       content = xmlBufferContent(buf->buffer);
-       len = xmlBufferLength(buf->buffer);
+       content = xmlBufContent(buf->buffer);
+       len = xmlBufLength(buf->buffer);
        for (i = 0;i < len;) {
            int cur;
            int l;
 
            cur = xmlStringCurrentChar(NULL, &content[i], &l);
            if (!IS_CHAR(cur)) {
-               xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
-                              XML_XINCLUDE_INVALID_CHAR,
-                              "%s contains invalid char\n", URL);
-               xmlFreeParserInputBuffer(buf);
-               xmlFree(URL);
-               return(-1);
+               /* Handle splitted multibyte char at buffer boundary */
+               if (((len - i) < 4) && (!xinclude_multibyte_fallback_used)) {
+                   xinclude_multibyte_fallback_used = 1;
+                   xmlBufShrink(buf->buffer, i);
+                   goto xinclude_multibyte_fallback;
+               } else {
+                   xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
+                                  XML_XINCLUDE_INVALID_CHAR,
+                                  "%s contains invalid char\n", URL);
+                   xmlFreeParserInputBuffer(buf);
+                   xmlFree(URL);
+                   return(-1);
+               }
            } else {
+               xinclude_multibyte_fallback_used = 0;
                xmlNodeAddContentLen(node, &content[i], l);
            }
            i += l;
        }
-       xmlBufferShrink(buf->buffer, len);
+       xmlBufShrink(buf->buffer, len);
     }
     xmlFreeParserCtxt(pctxt);
     xmlXIncludeAddTxt(ctxt, node, URL);
@@ -1937,7 +1951,7 @@ loaded:
  * @ctxt:  the XInclude context
  * @fallback:  the fallback node
  * @nr:  the xinclude node number
- * 
+ *
  * Load the content of the fallback node, and store the result
  * in the XInclude context
  *
@@ -1947,8 +1961,9 @@ static int
 xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
     xmlXIncludeCtxtPtr newctxt;
     int ret = 0;
-    
-    if ((fallback == NULL) || (ctxt == NULL))
+
+    if ((fallback == NULL) || (fallback->type == XML_NAMESPACE_DECL) ||
+        (ctxt == NULL))
        return(-1);
     if (fallback->children != NULL) {
        /*
@@ -2033,7 +2048,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
     href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
     if (href == NULL) {
        href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
-       if (href == NULL) 
+       if (href == NULL)
            return(-1);
     }
     parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
@@ -2078,7 +2093,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
            xmlFree(eschref);
     }
     if (URI == NULL) {
-       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                       XML_XINCLUDE_HREF_URI, "failed build URL\n", NULL);
        if (parse != NULL)
            xmlFree(parse);
@@ -2111,7 +2126,7 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
      * Restore the original base before checking for fallback
      */
     ctxt->base = oldBase;
-    
+
     if (ret < 0) {
        xmlNodePtr children;
 
@@ -2129,14 +2144,14 @@ xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
                ((xmlStrEqual(children->ns->href, XINCLUDE_NS)) ||
                 (xmlStrEqual(children->ns->href, XINCLUDE_OLD_NS)))) {
                ret = xmlXIncludeLoadFallback(ctxt, children, nr);
-               if (ret == 0) 
+               if (ret == 0)
                    break;
            }
            children = children->next;
        }
     }
     if (ret < 0) {
-       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+       xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                       XML_XINCLUDE_NO_FALLBACK,
                       "could not load %s, and no fallback was found\n",
                       URI);
@@ -2174,7 +2189,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
     if ((nr < 0) || (nr >= ctxt->incNr))
        return(-1);
     cur = ctxt->incTab[nr]->ref;
-    if (cur == NULL)
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(-1);
 
     /*
@@ -2205,7 +2220,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
            tmp = tmp->next;
        }
        if (nb_elem > 1) {
-           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, 
+           xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
                           XML_XINCLUDE_MULTIPLE_ROOT,
                       "XInclude error: would result in multiple root nodes\n",
                           NULL);
@@ -2252,7 +2267,7 @@ xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
        }
     }
 
-    
+
     return(0);
 }
 
@@ -2349,7 +2364,7 @@ xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
     int ret = 0;
     int i, start;
 
-    if ((doc == NULL) || (tree == NULL))
+    if ((doc == NULL) || (tree == NULL) || (tree->type == XML_NAMESPACE_DECL))
        return(-1);
     if (ctxt == NULL)
        return(-1);
@@ -2463,7 +2478,8 @@ xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, int flags, void *data) {
     xmlXIncludeCtxtPtr ctxt;
     int ret = 0;
 
-    if ((tree == NULL) || (tree->doc == NULL))
+    if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
+        (tree->doc == NULL))
         return(-1);
 
     ctxt = xmlXIncludeNewContext(tree->doc);
@@ -2548,7 +2564,8 @@ xmlXIncludeProcessTreeFlags(xmlNodePtr tree, int flags) {
     xmlXIncludeCtxtPtr ctxt;
     int ret = 0;
 
-    if ((tree == NULL) || (tree->doc == NULL))
+    if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
+        (tree->doc == NULL))
        return(-1);
     ctxt = xmlXIncludeNewContext(tree->doc);
     if (ctxt == NULL)
@@ -2592,7 +2609,8 @@ int
 xmlXIncludeProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
     int ret = 0;
 
-    if ((node == NULL) || (node->doc == NULL) || (ctxt == NULL))
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) ||
+        (node->doc == NULL) || (ctxt == NULL))
        return(-1);
     ret = xmlXIncludeDoProcess(ctxt, node->doc, node);
     if ((ret >= 0) && (ctxt->nbErrors > 0))
diff --git a/xlink.c b/xlink.c
index 0d9be73..c0e4ff3 100644 (file)
--- a/xlink.c
+++ b/xlink.c
@@ -47,7 +47,7 @@
  *           Default setting and related functions             *
  *                                                             *
  ****************************************************************/
+
 static xlinkHandlerPtr xlinkDefaultHandler = NULL;
 static xlinkNodeDetectFunc     xlinkDefaultDetect = NULL;
 
@@ -93,7 +93,7 @@ xlinkGetDefaultDetect (void) {
  *
  * Set the default xlink detection routine
  */
-void 
+void
 xlinkSetDefaultDetect  (xlinkNodeDetectFunc func) {
     xlinkDefaultDetect = func;
 }
@@ -104,7 +104,7 @@ xlinkSetDefaultDetect       (xlinkNodeDetectFunc func) {
  *                                                             *
  ****************************************************************/
 
+
 /**
  * xlinkIsLink:
  * @doc:  the document containing the node
@@ -119,7 +119,7 @@ xlinkSetDefaultDetect       (xlinkNodeDetectFunc func) {
  * Returns the xlinkType of the node (XLINK_TYPE_NONE if there is no
  *         link detected.
  */
-xlinkType 
+xlinkType
 xlinkIsLink    (xmlDocPtr doc, xmlNodePtr node) {
     xmlChar *type = NULL, *role = NULL;
     xlinkType ret = XLINK_TYPE_NONE;
@@ -150,14 +150,14 @@ xlinkIsLink       (xmlDocPtr doc, xmlNodePtr node) {
     if (type != NULL) {
        if (xmlStrEqual(type, BAD_CAST "simple")) {
             ret = XLINK_TYPE_SIMPLE;
-       } if (xmlStrEqual(type, BAD_CAST "extended")) {
+       } else if (xmlStrEqual(type, BAD_CAST "extended")) {
            role = xmlGetNsProp(node, BAD_CAST "role", XLINK_NAMESPACE);
            if (role != NULL) {
                xmlNsPtr xlink;
                xlink = xmlSearchNs(doc, node, XLINK_NAMESPACE);
                if (xlink == NULL) {
                    /* Humm, fallback method */
-                   if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset")) 
+                   if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset"))
                        ret = XLINK_TYPE_EXTENDED_SET;
                } else {
                    xmlChar buf[200];
index 8a25962..8cf9858 100644 (file)
@@ -9,7 +9,6 @@ xml-config - script to get information about the installed version of GNOME-XML
 linker flags that should be used to compile and link programs that use
 \fIGNOME-XML\fP.
 .SH OPTIONS
-.l
 \fIxml-config\fP accepts the following options:
 .TP 8
 .B  \-\-version
index 2989325..1957486 100644 (file)
@@ -86,12 +86,12 @@ while test $# -gt 0; do
        then
            if [ "@XML_LIBDIR@" = "-L/usr/lib" -o "@XML_LIBDIR@" = "-L/usr/lib64" ]
            then
-               echo @XML_LIBS@ 
+               echo @XML_LIBS@ @MODULE_PLATFORM_LIBS@
            else
-               echo @XML_LIBDIR@ @XML_LIBS@ 
+               echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@
            fi
        else
-           echo @XML_LIBDIR@ @XML_LIBS@ @WIN32_EXTRA_LIBADD@
+           echo @XML_LIBDIR@ @XML_LIBS@ @MODULE_PLATFORM_LIBS@ @WIN32_EXTRA_LIBADD@
        fi
                ;;
 
diff --git a/xmlIO.c b/xmlIO.c
index 73a995d..e628ab0 100644 (file)
--- a/xmlIO.c
+++ b/xmlIO.c
@@ -96,6 +96,9 @@
 #endif
 #include <libxml/globals.h>
 
+#include "buf.h"
+#include "enc.h"
+
 /* #define VERBOSE_FAILURE */
 /* #define DEBUG_EXTERNAL_ENTITIES */
 /* #define DEBUG_INPUT */
@@ -768,13 +771,21 @@ int
 xmlCheckFilename (const char *path)
 {
 #ifdef HAVE_STAT
-       struct stat stat_buffer;
+    struct stat stat_buffer;
 #endif
-       if (path == NULL)
-               return(0);
+    if (path == NULL)
+       return(0);
 
 #ifdef HAVE_STAT
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
+    /*
+     * On Windows stat and wstat do not work with long pathname,
+     * which start with '\\?\'
+     */
+    if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') &&
+       (path[3] == '\\') )
+           return 1;
+
     if (xmlWrapStat(path, &stat_buffer) == -1)
         return 0;
 #else
@@ -789,7 +800,14 @@ xmlCheckFilename (const char *path)
     return 1;
 }
 
-static int
+/**
+ * xmlNop:
+ *
+ * No Operation function, does nothing, no input
+ *
+ * Returns zero
+ */
+int
 xmlNop(void) {
     return(0);
 }
@@ -876,7 +894,7 @@ xmlFileMatch (const char *filename ATTRIBUTE_UNUSED) {
  */
 static void *
 xmlFileOpen_real (const char *filename) {
-    const char *path = NULL;
+    const char *path = filename;
     FILE *fd;
 
     if (filename == NULL)
@@ -906,11 +924,8 @@ xmlFileOpen_real (const char *filename) {
 #else
        path = &filename[5];
 #endif
-    } else
-       path = filename;
+    }
 
-    if (path == NULL)
-       return(NULL);
     if (!xmlCheckFilename(path))
         return(NULL);
 
@@ -990,7 +1005,7 @@ xmlFileOpenW (const char *filename) {
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
     fd = xmlWrapOpen(path, 1);
 #else
-          fd = fopen(path, "wb");
+          fd = fopen(path, "wb");
 #endif /* WIN32 */
 
         if (fd == NULL) xmlIOErr(0, path);
@@ -1148,7 +1163,12 @@ xmlGzfileOpen_real (const char *filename) {
     gzFile fd;
 
     if (!strcmp(filename, "-")) {
-        fd = gzdopen(dup(0), "rb");
+        int duped_fd = dup(fileno(stdin));
+        fd = gzdopen(duped_fd, "rb");
+        if (fd == Z_NULL && duped_fd >= 0) {
+            close(duped_fd);  /* gzdOpen() does not close on failure */
+        }
+
        return((void *) fd);
     }
 
@@ -1222,7 +1242,12 @@ xmlGzfileOpenW (const char *filename, int compression) {
 
     snprintf(mode, sizeof(mode), "wb%d", compression);
     if (!strcmp(filename, "-")) {
-        fd = gzdopen(dup(1), mode);
+        int duped_fd = dup(fileno(stdout));
+        fd = gzdopen(duped_fd, "rb");
+        if (fd == Z_NULL && duped_fd >= 0) {
+            close(duped_fd);  /* gzdOpen() does not close on failure */
+        }
+
        return((void *) fd);
     }
 
@@ -1344,7 +1369,7 @@ xmlXzfileOpen_real (const char *filename) {
     xzFile fd;
 
     if (!strcmp(filename, "-")) {
-        fd = __libxml2_xzdopen(dup(0), "rb");
+        fd = __libxml2_xzdopen(dup(fileno(stdin)), "rb");
        return((void *) fd);
     }
 
@@ -2036,8 +2061,8 @@ xmlIOHTTPCloseWrite( void * context, const char * http_mthd ) {
        /*  Pull the data out of the memory output buffer  */
 
        xmlOutputBufferPtr      dctxt = ctxt->doc_buff;
-       http_content = (char *)dctxt->buffer->content;
-       content_lgth = dctxt->buffer->use;
+       http_content = (char *) xmlBufContent(dctxt->buffer);
+       content_lgth = xmlBufUse(dctxt->buffer);
     }
 
     if ( http_content == NULL ) {
@@ -2404,15 +2429,15 @@ xmlAllocParserInputBuffer(xmlCharEncoding enc) {
        return(NULL);
     }
     memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
-    ret->buffer = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+    ret->buffer = xmlBufCreateSize(2 * xmlDefaultBufferSize);
     if (ret->buffer == NULL) {
         xmlFree(ret);
        return(NULL);
     }
-    ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT;
+    xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT);
     ret->encoder = xmlGetCharEncodingHandler(enc);
     if (ret->encoder != NULL)
-        ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+        ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize);
     else
         ret->raw = NULL;
     ret->readcallback = NULL;
@@ -2443,19 +2468,19 @@ xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) {
        return(NULL);
     }
     memset(ret, 0, (size_t) sizeof(xmlOutputBuffer));
-    ret->buffer = xmlBufferCreate();
+    ret->buffer = xmlBufCreate();
     if (ret->buffer == NULL) {
         xmlFree(ret);
        return(NULL);
     }
 
     /* try to avoid a performance problem with Windows realloc() */
-    if (ret->buffer->alloc == XML_BUFFER_ALLOC_EXACT)
-        ret->buffer->alloc = XML_BUFFER_ALLOC_DOUBLEIT;
+    if (xmlBufGetAllocationScheme(ret->buffer) == XML_BUFFER_ALLOC_EXACT)
+        xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT);
 
     ret->encoder = encoder;
     if (encoder != NULL) {
-        ret->conv = xmlBufferCreateSize(4000);
+        ret->conv = xmlBufCreateSize(4000);
        if (ret->conv == NULL) {
            xmlFree(ret);
            return(NULL);
@@ -2464,7 +2489,7 @@ xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) {
        /*
         * This call is designed to initiate the encoder state
         */
-       xmlCharEncOutFunc(encoder, ret->conv, NULL);
+       xmlCharEncOutput(ret, 1);
     } else
         ret->conv = NULL;
     ret->writecallback = NULL;
@@ -2493,7 +2518,7 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) {
        return(NULL);
     }
     memset(ret, 0, (size_t) sizeof(xmlOutputBuffer));
-    ret->buffer = xmlBufferCreate();
+    ret->buffer = xmlBufCreate();
     if (ret->buffer == NULL) {
         xmlFree(ret);
        return(NULL);
@@ -2502,15 +2527,12 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) {
 
     /*
      * For conversion buffers we use the special IO handling
-     * We don't do that from the exported API to avoid confusing
-     * user's code.
      */
-    ret->buffer->alloc = XML_BUFFER_ALLOC_IO;
-    ret->buffer->contentIO = ret->buffer->content;
+    xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_IO);
 
     ret->encoder = encoder;
     if (encoder != NULL) {
-        ret->conv = xmlBufferCreateSize(4000);
+        ret->conv = xmlBufCreateSize(4000);
        if (ret->conv == NULL) {
            xmlFree(ret);
            return(NULL);
@@ -2519,7 +2541,7 @@ xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) {
        /*
         * This call is designed to initiate the encoder state
         */
-       xmlCharEncOutFunc(encoder, ret->conv, NULL);
+        xmlCharEncOutput(ret, 1);
     } else
         ret->conv = NULL;
     ret->writecallback = NULL;
@@ -2543,7 +2565,7 @@ xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) {
     if (in == NULL) return;
 
     if (in->raw) {
-        xmlBufferFree(in->raw);
+        xmlBufFree(in->raw);
        in->raw = NULL;
     }
     if (in->encoder != NULL) {
@@ -2553,7 +2575,7 @@ xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) {
        in->closecallback(in->context);
     }
     if (in->buffer != NULL) {
-        xmlBufferFree(in->buffer);
+        xmlBufFree(in->buffer);
        in->buffer = NULL;
     }
 
@@ -2585,14 +2607,14 @@ xmlOutputBufferClose(xmlOutputBufferPtr out)
     }
     written = out->written;
     if (out->conv) {
-        xmlBufferFree(out->conv);
+        xmlBufFree(out->conv);
         out->conv = NULL;
     }
     if (out->encoder != NULL) {
         xmlCharEncCloseFunc(out->encoder);
     }
     if (out->buffer != NULL) {
-        xmlBufferFree(out->buffer);
+        xmlBufFree(out->buffer);
         out->buffer = NULL;
     }
 
@@ -2661,6 +2683,12 @@ __xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) {
 #endif
        }
 #endif
+#ifdef HAVE_LZMA_H
+       if ((xmlInputCallbackTable[i].opencallback == xmlXzfileOpen) &&
+               (strcmp(URI, "-") != 0)) {
+            ret->compressed = __libxml2_xzcompressed(context);
+       }
+#endif
     }
     else
       xmlInputCallbackTable[i].closecallback (context);
@@ -2922,6 +2950,39 @@ xmlOutputBufferCreateBuffer(xmlBufferPtr buffer,
     return(ret);
 }
 
+/**
+ * xmlOutputBufferGetContent:
+ * @out:  an xmlOutputBufferPtr
+ *
+ * Gives a pointer to the data currently held in the output buffer
+ *
+ * Returns a pointer to the data or NULL in case of error
+ */
+const xmlChar *
+xmlOutputBufferGetContent(xmlOutputBufferPtr out) {
+    if ((out == NULL) || (out->buffer == NULL))
+        return(NULL);
+
+    return(xmlBufContent(out->buffer));
+}
+
+/**
+ * xmlOutputBufferGetSize:
+ * @out:  an xmlOutputBufferPtr
+ *
+ * Gives the length of the data currently held in the output buffer
+ *
+ * Returns 0 in case or error or no data is held, the size otherwise
+ */
+size_t
+xmlOutputBufferGetSize(xmlOutputBufferPtr out) {
+    if ((out == NULL) || (out->buffer == NULL))
+        return(0);
+
+    return(xmlBufUse(out->buffer));
+}
+
+
 #endif /* LIBXML_OUTPUT_ENABLED */
 
 /**
@@ -2974,7 +3035,7 @@ xmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) {
         ret->context = (void *) mem;
        ret->readcallback = (xmlInputReadCallback) xmlNop;
        ret->closecallback = NULL;
-       errcode = xmlBufferAdd(ret->buffer, (const xmlChar *) mem, size);
+       errcode = xmlBufAdd(ret->buffer, (const xmlChar *) mem, size);
        if (errcode != 0) {
            xmlFree(ret);
            return(NULL);
@@ -3011,14 +3072,14 @@ xmlParserInputBufferCreateStatic(const char *mem, int size,
        return(NULL);
     }
     memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
-    ret->buffer = xmlBufferCreateStatic((void *)mem, (size_t) size);
+    ret->buffer = xmlBufCreateStatic((void *)mem, (size_t) size);
     if (ret->buffer == NULL) {
         xmlFree(ret);
        return(NULL);
     }
     ret->encoder = xmlGetCharEncodingHandler(enc);
     if (ret->encoder != NULL)
-        ret->raw = xmlBufferCreateSize(2 * xmlDefaultBufferSize);
+        ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize);
     else
         ret->raw = NULL;
     ret->compressed = -1;
@@ -3187,33 +3248,33 @@ xmlParserInputBufferPush(xmlParserInputBufferPtr in,
         * Store the data in the incoming raw buffer
         */
         if (in->raw == NULL) {
-           in->raw = xmlBufferCreate();
+           in->raw = xmlBufCreate();
        }
-       ret = xmlBufferAdd(in->raw, (const xmlChar *) buf, len);
+       ret = xmlBufAdd(in->raw, (const xmlChar *) buf, len);
        if (ret != 0)
            return(-1);
 
        /*
         * convert as much as possible to the parser reading buffer.
         */
-       use = in->raw->use;
-       nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+       use = xmlBufUse(in->raw);
+       nbchars = xmlCharEncInput(in, 1);
        if (nbchars < 0) {
            xmlIOErr(XML_IO_ENCODER, NULL);
            in->error = XML_IO_ENCODER;
            return(-1);
        }
-       in->rawconsumed += (use - in->raw->use);
+       in->rawconsumed += (use - xmlBufUse(in->raw));
     } else {
        nbchars = len;
-        ret = xmlBufferAdd(in->buffer, (xmlChar *) buf, nbchars);
+        ret = xmlBufAdd(in->buffer, (xmlChar *) buf, nbchars);
        if (ret != 0)
            return(-1);
     }
 #ifdef DEBUG_INPUT
     xmlGenericError(xmlGenericErrorContext,
            "I/O: pushed %d chars, buffer %d/%d\n",
-            nbchars, in->buffer->use, in->buffer->size);
+            nbchars, xmlBufUse(in->buffer), xmlBufLength(in->buffer));
 #endif
     return(nbchars);
 }
@@ -3251,29 +3312,23 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
     char *buffer = NULL;
     int res = 0;
     int nbchars = 0;
-    int buffree;
-    unsigned int needSize;
 
     if ((in == NULL) || (in->error)) return(-1);
     if ((len <= MINLEN) && (len != 4))
         len = MINLEN;
 
-    buffree = in->buffer->size - in->buffer->use;
-    if (buffree <= 0) {
+    if (xmlBufAvail(in->buffer) <= 0) {
        xmlIOErr(XML_IO_BUFFER_FULL, NULL);
        in->error = XML_IO_BUFFER_FULL;
        return(-1);
     }
 
-    needSize = in->buffer->use + len + 1;
-    if (needSize > in->buffer->size){
-        if (!xmlBufferResize(in->buffer, needSize)){
-           xmlIOErrMemory("growing input buffer");
-           in->error = XML_ERR_NO_MEMORY;
-            return(-1);
-        }
+    if (xmlBufGrow(in->buffer, len + 1) < 0) {
+        xmlIOErrMemory("growing input buffer");
+        in->error = XML_ERR_NO_MEMORY;
+        return(-1);
     }
-    buffer = (char *)&in->buffer->content[in->buffer->use];
+    buffer = (char *)xmlBufEnd(in->buffer);
 
     /*
      * Call the read method for this I/O type.
@@ -3290,6 +3345,17 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
     if (res < 0) {
        return(-1);
     }
+
+    /*
+     * try to establish compressed status of input if not done already
+     */
+    if (in->compressed == -1) {
+#ifdef HAVE_LZMA_H
+       if (in->readcallback == xmlXzfileRead)
+            in->compressed = __libxml2_xzcompressed(in->context);
+#endif
+    }
+
     len = res;
     if (in->encoder != NULL) {
         unsigned int use;
@@ -3298,32 +3364,31 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
         * Store the data in the incoming raw buffer
         */
         if (in->raw == NULL) {
-           in->raw = xmlBufferCreate();
+           in->raw = xmlBufCreate();
        }
-       res = xmlBufferAdd(in->raw, (const xmlChar *) buffer, len);
+       res = xmlBufAdd(in->raw, (const xmlChar *) buffer, len);
        if (res != 0)
            return(-1);
 
        /*
         * convert as much as possible to the parser reading buffer.
         */
-       use = in->raw->use;
-       nbchars = xmlCharEncInFunc(in->encoder, in->buffer, in->raw);
+       use = xmlBufUse(in->raw);
+       nbchars = xmlCharEncInput(in, 1);
        if (nbchars < 0) {
            xmlIOErr(XML_IO_ENCODER, NULL);
            in->error = XML_IO_ENCODER;
            return(-1);
        }
-       in->rawconsumed += (use - in->raw->use);
+       in->rawconsumed += (use - xmlBufUse(in->raw));
     } else {
        nbchars = len;
-       in->buffer->use += nbchars;
-       buffer[nbchars] = 0;
+        xmlBufAddLen(in->buffer, nbchars);
     }
 #ifdef DEBUG_INPUT
     xmlGenericError(xmlGenericErrorContext,
-           "I/O: read %d chars, buffer %d/%d\n",
-            nbchars, in->buffer->use, in->buffer->size);
+           "I/O: read %d chars, buffer %d\n",
+            nbchars, xmlBufUse(in->buffer));
 #endif
     return(nbchars);
 }
@@ -3345,8 +3410,7 @@ xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len) {
     if ((in == NULL) || (in->error)) return(-1);
     if (in->readcallback != NULL)
        return(xmlParserInputBufferGrow(in, len));
-    else if ((in->buffer != NULL) &&
-             (in->buffer->alloc == XML_BUFFER_ALLOC_IMMUTABLE))
+    else if (xmlBufGetAllocationScheme(in->buffer) == XML_BUFFER_ALLOC_IMMUTABLE)
        return(0);
     else
         return(-1);
@@ -3391,30 +3455,30 @@ xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) {
             * Store the data in the incoming raw buffer
             */
            if (out->conv == NULL) {
-               out->conv = xmlBufferCreate();
+               out->conv = xmlBufCreate();
            }
-           ret = xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk);
+           ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk);
            if (ret != 0)
                return(-1);
 
-           if ((out->buffer->use < MINLEN) && (chunk == len))
+           if ((xmlBufUse(out->buffer) < MINLEN) && (chunk == len))
                goto done;
 
            /*
             * convert as much as possible to the parser reading buffer.
             */
-           ret = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer);
+           ret = xmlCharEncOutput(out, 0);
            if ((ret < 0) && (ret != -3)) {
                xmlIOErr(XML_IO_ENCODER, NULL);
                out->error = XML_IO_ENCODER;
                return(-1);
            }
-           nbchars = out->conv->use;
+           nbchars = xmlBufUse(out->conv);
        } else {
-           ret = xmlBufferAdd(out->buffer, (const xmlChar *) buf, chunk);
+           ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk);
            if (ret != 0)
                return(-1);
-           nbchars = out->buffer->use;
+           nbchars = xmlBufUse(out->buffer);
        }
        buf += chunk;
        len -= chunk;
@@ -3428,14 +3492,14 @@ xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) {
             */
            if (out->encoder != NULL) {
                ret = out->writecallback(out->context,
-                                (const char *)out->conv->content, nbchars);
+                           (const char *)xmlBufContent(out->conv), nbchars);
                if (ret >= 0)
-                   xmlBufferShrink(out->conv, ret);
+                   xmlBufShrink(out->conv, ret);
            } else {
                ret = out->writecallback(out->context,
-                                (const char *)out->buffer->content, nbchars);
+                           (const char *)xmlBufContent(out->buffer), nbchars);
                if (ret >= 0)
-                   xmlBufferShrink(out->buffer, ret);
+                   xmlBufShrink(out->buffer, ret);
            }
            if (ret < 0) {
                xmlIOErr(XML_IO_WRITE, NULL);
@@ -3479,7 +3543,7 @@ xmlEscapeContent(unsigned char* out, int *outlen,
     inend = in + (*inlen);
 
     while ((in < inend) && (out < outend)) {
-       if (*in == '<') {
+       if (*in == '<') {
            if (outend - out < 4) break;
            *out++ = '&';
            *out++ = 'l';
@@ -3543,7 +3607,8 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
 
     if ((out == NULL) || (out->error) || (str == NULL) ||
         (out->buffer == NULL) ||
-       (out->buffer->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) return(-1);
+       (xmlBufGetAllocationScheme(out->buffer) == XML_BUFFER_ALLOC_IMMUTABLE))
+        return(-1);
     len = strlen((const char *)str);
     if (len < 0) return(0);
     if (out->error) return(-1);
@@ -3556,14 +3621,14 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
         * how many bytes to consume and how many bytes to store.
         */
        cons = len;
-       chunk = (out->buffer->size - out->buffer->use) - 1;
+       chunk = xmlBufAvail(out->buffer) - 1;
 
         /*
         * make sure we have enough room to save first, if this is
         * not the case force a flush, but make sure we stay in the loop
         */
        if (chunk < 40) {
-           if (xmlBufferGrow(out->buffer, out->buffer->size + 100) < 0)
+           if (xmlBufGrow(out->buffer, 100) < 0)
                return(-1);
             oldwritten = -1;
            continue;
@@ -3577,36 +3642,33 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
             * Store the data in the incoming raw buffer
             */
            if (out->conv == NULL) {
-               out->conv = xmlBufferCreate();
+               out->conv = xmlBufCreate();
            }
-           ret = escaping(out->buffer->content + out->buffer->use ,
+           ret = escaping(xmlBufEnd(out->buffer) ,
                           &chunk, str, &cons);
            if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */
                return(-1);
-           out->buffer->use += chunk;
-           out->buffer->content[out->buffer->use] = 0;
+            xmlBufAddLen(out->buffer, chunk);
 
-           if ((out->buffer->use < MINLEN) && (cons == len))
+           if ((xmlBufUse(out->buffer) < MINLEN) && (cons == len))
                goto done;
 
            /*
             * convert as much as possible to the output buffer.
             */
-           ret = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer);
+           ret = xmlCharEncOutput(out, 0);
            if ((ret < 0) && (ret != -3)) {
                xmlIOErr(XML_IO_ENCODER, NULL);
                out->error = XML_IO_ENCODER;
                return(-1);
            }
-           nbchars = out->conv->use;
+           nbchars = xmlBufUse(out->conv);
        } else {
-           ret = escaping(out->buffer->content + out->buffer->use ,
-                          &chunk, str, &cons);
+           ret = escaping(xmlBufEnd(out->buffer), &chunk, str, &cons);
            if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */
                return(-1);
-           out->buffer->use += chunk;
-           out->buffer->content[out->buffer->use] = 0;
-           nbchars = out->buffer->use;
+            xmlBufAddLen(out->buffer, chunk);
+           nbchars = xmlBufUse(out->buffer);
        }
        str += cons;
        len -= cons;
@@ -3620,14 +3682,14 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
             */
            if (out->encoder != NULL) {
                ret = out->writecallback(out->context,
-                                (const char *)out->conv->content, nbchars);
+                           (const char *)xmlBufContent(out->conv), nbchars);
                if (ret >= 0)
-                   xmlBufferShrink(out->conv, ret);
+                   xmlBufShrink(out->conv, ret);
            } else {
                ret = out->writecallback(out->context,
-                                (const char *)out->buffer->content, nbchars);
+                           (const char *)xmlBufContent(out->buffer), nbchars);
                if (ret >= 0)
-                   xmlBufferShrink(out->buffer, ret);
+                   xmlBufShrink(out->buffer, ret);
            }
            if (ret < 0) {
                xmlIOErr(XML_IO_WRITE, NULL);
@@ -3635,8 +3697,8 @@ xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
                return(ret);
            }
            out->written += ret;
-       } else if (out->buffer->size - out->buffer->use < MINLEN) {
-           xmlBufferResize(out->buffer, out->buffer->size + MINLEN);
+       } else if (xmlBufAvail(out->buffer) < MINLEN) {
+           xmlBufGrow(out->buffer, MINLEN);
        }
        written += nbchars;
     } while ((len > 0) && (oldwritten != written));
@@ -3694,14 +3756,16 @@ xmlOutputBufferFlush(xmlOutputBufferPtr out) {
      */
     if ((out->conv != NULL) && (out->encoder != NULL)) {
        /*
-        * convert as much as possible to the parser reading buffer.
+        * convert as much as possible to the parser output buffer.
         */
-       nbchars = xmlCharEncOutFunc(out->encoder, out->conv, out->buffer);
-       if (nbchars < 0) {
-           xmlIOErr(XML_IO_ENCODER, NULL);
-           out->error = XML_IO_ENCODER;
-           return(-1);
-       }
+       do {
+           nbchars = xmlCharEncOutput(out, 0);
+           if (nbchars < 0) {
+               xmlIOErr(XML_IO_ENCODER, NULL);
+               out->error = XML_IO_ENCODER;
+               return(-1);
+           }
+       } while (nbchars);
     }
 
     /*
@@ -3710,14 +3774,16 @@ xmlOutputBufferFlush(xmlOutputBufferPtr out) {
     if ((out->conv != NULL) && (out->encoder != NULL) &&
        (out->writecallback != NULL)) {
        ret = out->writecallback(out->context,
-                  (const char *)out->conv->content, out->conv->use);
+                                 (const char *)xmlBufContent(out->conv),
+                                 xmlBufUse(out->conv));
        if (ret >= 0)
-           xmlBufferShrink(out->conv, ret);
+           xmlBufShrink(out->conv, ret);
     } else if (out->writecallback != NULL) {
        ret = out->writecallback(out->context,
-                  (const char *)out->buffer->content, out->buffer->use);
+                                 (const char *)xmlBufContent(out->buffer),
+                                 xmlBufUse(out->buffer));
        if (ret >= 0)
-           xmlBufferShrink(out->buffer, ret);
+           xmlBufShrink(out->buffer, ret);
     }
     if (ret < 0) {
        xmlIOErr(XML_IO_FLUSH, NULL);
index 489509f..b9ed6a4 100644 (file)
@@ -47,16 +47,16 @@ static char *filename = NULL;
 #endif
 
 /************************************************************************
- *                                                                     *
- *                     Shell Interface                                 *
- *                                                                     *
+ *                                                                     *
+ *                     Shell Interface                                 *
+ *                                                                     *
  ************************************************************************/
 /**
  * xmlShellReadline:
  * @prompt:  the prompt value
  *
  * Read a string
- * 
+ *
  * Returns a pointer to it or NULL on EOF the caller is expected to
  *     free the returned string.
  */
@@ -157,7 +157,7 @@ static void usershell(void) {
                    i++;
                    cur++;
                }
-           } else if (*cur == '"') { 
+           } else if (*cur == '"') {
                cur++;
                argv[i] = cur;
                while ((*cur != 0) && (*cur != '"')) cur++;
@@ -181,12 +181,13 @@ static void usershell(void) {
        /*
         * start interpreting the command
         */
-        if (!strcmp(command, "exit"))
-           break;
-        if (!strcmp(command, "quit"))
-           break;
-        if (!strcmp(command, "bye"))
+       if (!strcmp(command, "exit") ||
+           !strcmp(command, "quit") ||
+           !strcmp(command, "bye")) {
+           free(cmdline);
            break;
+       }
+
        if (!strcmp(command, "public")) {
            if (nbargs != 1) {
                printf("public requires 1 arguments\n");
@@ -296,15 +297,15 @@ static void usershell(void) {
            printf("\tdebug: increase the verbosity level\n");
            printf("\tquiet: decrease the verbosity level\n");
            printf("\texit:  quit the shell\n");
-       } 
+       }
        free(cmdline); /* not xmlFree here ! */
     }
 }
 
 /************************************************************************
- *                                                                     *
- *                     Main                                            *
- *                                                                     *
+ *                                                                     *
+ *                     Main                                            *
+ *                                                                     *
  ************************************************************************/
 static void usage(const char *name) {
     /* split into 2 printf's to avoid overly long string (gcc warning) */
@@ -507,7 +508,7 @@ int main(int argc, char **argv) {
                                exit_value = 2;
                                noout = 0;
                            } else {
-                               
+
                                xmlACatalogDump(super, out);
                                fclose(out);
                            }
@@ -544,14 +545,14 @@ int main(int argc, char **argv) {
                }
            }
        }
-       
+
     } else if (shell) {
        usershell();
     } else {
        for (i++; i < argc; i++) {
            xmlURIPtr uri;
            xmlChar *ans;
-           
+
            uri = xmlParseURI(argv[i]);
            if (uri == NULL) {
                ans = xmlCatalogResolvePublic((const xmlChar *) argv[i]);
index 40a2194..b297ded 100644 (file)
--- a/xmllint.c
+++ b/xmllint.c
@@ -168,8 +168,9 @@ static int nodefdtd = 0;
 #endif
 #ifdef LIBXML_PUSH_ENABLED
 static int push = 0;
+static int pushsize = 4096;
 #endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
 static int memory = 0;
 #endif
 static int testIO = 0;
@@ -209,7 +210,7 @@ static xmlStreamCtxtPtr patstream = NULL;
 #ifdef LIBXML_XPATH_ENABLED
 static const char *xpathquery = NULL;
 #endif
-static int options = XML_PARSE_COMPACT;
+static int options = XML_PARSE_COMPACT | XML_PARSE_BIG_LINES;
 static int sax = 0;
 static int oldxml10 = 0;
 
@@ -1669,6 +1670,7 @@ testSAX(const char *filename) {
                (xmlSchemaValidityErrorFunc) fprintf,
                (xmlSchemaValidityWarningFunc) fprintf,
                stderr);
+       xmlSchemaValidateSetFilename(vctxt, filename);
 
        ret = xmlSchemaValidateStream(vctxt, buf, 0, handler,
                                      (void *)user_data);
@@ -1823,7 +1825,7 @@ static void processNode(xmlTextReaderPtr reader) {
 static void streamFile(char *filename) {
     xmlTextReaderPtr reader;
     int ret;
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
     int fd = -1;
     struct stat info;
     const char *base = NULL;
@@ -1835,8 +1837,12 @@ static void streamFile(char *filename) {
        if ((fd = open(filename, O_RDONLY)) < 0)
            return;
        base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
-       if (base == (void *) MAP_FAILED)
+       if (base == (void *) MAP_FAILED) {
+           close(fd);
+           fprintf(stderr, "mmap failure for file %s\n", filename);
+           progresult = XMLLINT_ERR_RDFILE;
            return;
+       }
 
        reader = xmlReaderForMemory(base, info.st_size, filename,
                                    NULL, options);
@@ -1873,7 +1879,8 @@ static void streamFile(char *filename) {
            xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
        else
 #endif /* LIBXML_VALID_ENABLED */
-           xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);
+           if (loaddtd)
+               xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);
 #ifdef LIBXML_SCHEMAS_ENABLED
        if (relaxng != NULL) {
            if ((timing) && (!repeat)) {
@@ -1974,7 +1981,7 @@ static void streamFile(char *filename) {
        patstream = NULL;
     }
 #endif
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
     if (memory) {
         xmlFreeParserInputBuffer(input);
        munmap((char *) base, info.st_size);
@@ -2139,7 +2146,7 @@ static void doXPathQuery(xmlDocPtr doc, const char *query) {
         progresult = XMLLINT_ERR_MEM;
         return;
     }
-    ctxt->node = xmlDocGetRootElement(doc);
+    ctxt->node = (xmlNodePtr) doc;
     res = xmlXPathEval(BAD_CAST query, ctxt);
     xmlXPathFreeContext(ctxt);
 
@@ -2187,21 +2194,22 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
 
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
        f = fopen(filename, "rb");
+#elif defined(__OS400__)
+       f = fopen(filename, "rb");
 #else
        f = fopen(filename, "r");
 #endif
         if (f != NULL) {
-            int res, size = 3;
+            int res;
             char chars[4096];
             htmlParserCtxtPtr ctxt;
 
-            /* if (repeat) */
-                size = 4096;
             res = fread(chars, 1, 4, f);
             if (res > 0) {
                 ctxt = htmlCreatePushParserCtxt(NULL, NULL,
                             chars, res, filename, XML_CHAR_ENCODING_NONE);
-                while ((res = fread(chars, 1, size, f)) > 0) {
+                xmlCtxtUseOptions(ctxt, options);
+                while ((res = fread(chars, 1, pushsize, f)) > 0) {
                     htmlParseChunk(ctxt, chars, res, 0);
                 }
                 htmlParseChunk(ctxt, chars, 0, 1);
@@ -2212,7 +2220,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
         }
     }
 #endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
     else if ((html) && (memory)) {
        int fd;
        struct stat info;
@@ -2222,8 +2230,12 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
        if ((fd = open(filename, O_RDONLY)) < 0)
            return;
        base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
-       if (base == (void *) MAP_FAILED)
+       if (base == (void *) MAP_FAILED) {
+           close(fd);
+           fprintf(stderr, "mmap failure for file %s\n", filename);
+           progresult = XMLLINT_ERR_RDFILE;
            return;
+       }
 
        doc = htmlReadMemory((char *) base, info.st_size, filename,
                             NULL, options);
@@ -2250,6 +2262,8 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
            } else {
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
                f = fopen(filename, "rb");
+#elif defined(__OS400__)
+               f = fopen(filename, "rb");
 #else
                f = fopen(filename, "r");
 #endif
@@ -2291,6 +2305,8 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
 
 #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
                f = fopen(filename, "rb");
+#elif defined(__OS400__)
+               f = fopen(filename, "rb");
 #else
                f = fopen(filename, "r");
 #endif
@@ -2327,7 +2343,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
                if (rectxt == NULL)
                    xmlFreeParserCtxt(ctxt);
            }
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        } else if (memory) {
            int fd;
            struct stat info;
@@ -2337,8 +2353,12 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
            if ((fd = open(filename, O_RDONLY)) < 0)
                return;
            base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
-           if (base == (void *) MAP_FAILED)
+           if (base == (void *) MAP_FAILED) {
+               close(fd);
+               fprintf(stderr, "mmap failure for file %s\n", filename);
+               progresult = XMLLINT_ERR_RDFILE;
                return;
+           }
 
            if (rectxt == NULL)
                doc = xmlReadMemory((char *) base, info.st_size,
@@ -2560,7 +2580,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
                    fprintf(stderr, "Failed to canonicalize\n");
                    progresult = XMLLINT_ERR_OUT;
                }
-           } else if (canonical) {
+           } else if (canonical_11) {
                xmlChar *result = NULL;
                int size;
 
@@ -2591,7 +2611,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
                }
            } else
 #endif
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
            if (memory) {
                xmlChar *result;
                int len;
@@ -2619,7 +2639,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
                }
 
            } else
-#endif /* HAVE_SYS_MMAN_H */
+#endif /* HAVE_MMAP */
            if (compress) {
                xmlSaveFile(output ? output : "-", doc);
            } else if (oldout) {
@@ -2989,7 +3009,7 @@ static void usage(const char *name) {
     printf("\t--noenc : ignore any encoding specified inside the document\n");
     printf("\t--noout : don't output the result tree\n");
     printf("\t--path 'paths': provide a set of paths for resources\n");
-    printf("\t--load-trace : print trace of all external entites loaded\n");
+    printf("\t--load-trace : print trace of all external entities loaded\n");
     printf("\t--nonet : refuse to fetch DTDs or entities over network\n");
     printf("\t--nocompact : do not generate compact text nodes\n");
     printf("\t--htmlout : output results as HTML\n");
@@ -3016,8 +3036,9 @@ static void usage(const char *name) {
 #endif
 #ifdef LIBXML_PUSH_ENABLED
     printf("\t--push : use the push mode of the parser\n");
+    printf("\t--pushsmall : use the push mode of the parser using tiny increments\n");
 #endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
     printf("\t--memory : parse from memory\n");
 #endif
     printf("\t--maxmem nbbytes : limits memory allocation to nbbytes bytes\n");
@@ -3075,7 +3096,7 @@ static void usage(const char *name) {
     printf("\t--sax: do not build a tree but work just at the SAX level\n");
     printf("\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n");
 #ifdef LIBXML_XPATH_ENABLED
-    printf("\t--xpath expr: evaluate the XPath expression, inply --noout\n");
+    printf("\t--xpath expr: evaluate the XPath expression, imply --noout\n");
 #endif
 
     printf("\nLibxml project home page: http://xmlsoft.org/\n");
@@ -3085,6 +3106,10 @@ static void usage(const char *name) {
 static void registerNode(xmlNodePtr node)
 {
     node->_private = malloc(sizeof(long));
+    if (node->_private == NULL) {
+        fprintf(stderr, "Out of memory in xmllint:registerNode()\n");
+       exit(XMLLINT_ERR_MEM);
+    }
     *(long*)node->_private = (long) 0x81726354;
     nbregister++;
 }
@@ -3246,8 +3271,13 @@ main(int argc, char **argv) {
        else if ((!strcmp(argv[i], "-push")) ||
                 (!strcmp(argv[i], "--push")))
            push++;
+       else if ((!strcmp(argv[i], "-pushsmall")) ||
+                (!strcmp(argv[i], "--pushsmall"))) {
+           push++;
+            pushsize = 10;
+        }
 #endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_SYS_MMAN_H
+#ifdef HAVE_MMAP
        else if ((!strcmp(argv[i], "-memory")) ||
                 (!strcmp(argv[i], "--memory")))
            memory++;
@@ -3339,8 +3369,9 @@ main(int argc, char **argv) {
         }
        else if ((!strcmp(argv[i], "-noblanks")) ||
                 (!strcmp(argv[i], "--noblanks"))) {
-            noblanks++;
-            xmlKeepBlanksDefault(0);
+           noblanks++;
+           xmlKeepBlanksDefault(0);
+           options |= XML_PARSE_NOBLANKS;
         }
        else if ((!strcmp(argv[i], "-maxmem")) ||
                 (!strcmp(argv[i], "--maxmem"))) {
@@ -3364,11 +3395,13 @@ main(int argc, char **argv) {
                 (!strcmp(argv[i], "--pretty"))) {
             i++;
 #ifdef LIBXML_OUTPUT_ENABLED
-            format = atoi(argv[i]);
-            if (format == 1) {
-                noblanks++;
-                xmlKeepBlanksDefault(0);
-            }
+       if (argv[i] != NULL) {
+                format = atoi(argv[i]);
+                if (format == 1) {
+                    noblanks++;
+                    xmlKeepBlanksDefault(0);
+                }
+       }
 #endif /* LIBXML_OUTPUT_ENABLED */
        }
 #ifdef LIBXML_READER_ENABLED
index a0ab953..a3dc737 100644 (file)
@@ -58,7 +58,7 @@ void xmlMallocBreakpoint(void);
 
 /************************************************************************
  *                                                                     *
- *             Macros, variables and associated types                  *
+ *             Macros, variables and associated types                  *
  *                                                                     *
  ************************************************************************/
 
@@ -313,7 +313,7 @@ xmlMemMalloc(size_t size)
 void *
 xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
 {
-    MEMHDR *p;
+    MEMHDR *p, *tmp;
     unsigned long number;
 #ifdef DEBUG_MEMORY
     size_t oldsize;
@@ -344,10 +344,12 @@ xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
 #endif
     xmlMutexUnlock(xmlMemMutex);
 
-    p = (MEMHDR *) realloc(p,RESERVE_SIZE+size);
-    if (!p) {
+    tmp = (MEMHDR *) realloc(p,RESERVE_SIZE+size);
+    if (!tmp) {
+        free(p);
         goto error;
     }
+    p = tmp;
     if (xmlMemTraceBlockAt == ptr) {
        xmlGenericError(xmlGenericErrorContext,
                        "%p : Realloced(%lu -> %lu) Ok\n",
@@ -512,10 +514,7 @@ xmlMemStrdupLoc(const char *str, const char *file, int line)
 
     if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
 
-    if (s != NULL)
-      strcpy(s,str);
-    else
-      goto error;
+    strcpy(s,str);
 
     TEST_POINT
 
@@ -583,13 +582,15 @@ xmlMemBlocks(void) {
 static void
 xmlMemContentShow(FILE *fp, MEMHDR *p)
 {
-    int i,j,k,len = p->mh_size;
-    const char *buf = (const char *) HDR_2_CLIENT(p);
+    int i,j,k,len;
+    const char *buf;
 
     if (p == NULL) {
        fprintf(fp, " NULL");
        return;
     }
+    len = p->mh_size;
+    buf = (const char *) HDR_2_CLIENT(p);
 
     for (i = 0;i < len;i++) {
         if (buf[i] == 0) break;
index 9ffd610..50ed666 100644 (file)
@@ -30,7 +30,7 @@ static int xmlModulePlatformSymbol(void *handle, const char *name, void **result
 
 /************************************************************************
  *                                                                     *
- *             module memory error handler                             *
+ *             module memory error handler                             *
  *                                                                     *
  ************************************************************************/
 
@@ -61,6 +61,10 @@ xmlModuleErrMemory(xmlModulePtr module, const char *extra)
  * @options: a set of xmlModuleOption
  *
  * Opens a module/shared library given its name or path
+ * NOTE: that due to portability issues, behaviour can only be
+ * guaranteed with @name using ASCII. We canot guarantee that
+ * an UTF-8 string would work, which is why name is a const char *
+ * and not a const xmlChar * .
  * TODO: options are not yet implemented.
  *
  * Returns a handle for the module or NULL in case of error
@@ -99,6 +103,10 @@ xmlModuleOpen(const char *name, int options ATTRIBUTE_UNUSED)
  * @symbol: the resulting symbol address
  *
  * Lookup for a symbol address in the given module
+ * NOTE: that due to portability issues, behaviour can only be
+ * guaranteed with @name using ASCII. We canot guarantee that
+ * an UTF-8 string would work, which is why name is a const char *
+ * and not a const xmlChar * .
  *
  * Returns 0 if the symbol was found, or -1 in case of error
  */
@@ -106,8 +114,8 @@ int
 xmlModuleSymbol(xmlModulePtr module, const char *name, void **symbol)
 {
     int rc = -1;
-       
-    if ((NULL == module) || (symbol == NULL)) {
+
+    if ((NULL == module) || (symbol == NULL) || (name == NULL)) {
         __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
                         XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
                         NULL, NULL, 0, 0, "null parameter\n");
@@ -300,7 +308,7 @@ xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
 static void *
 xmlModulePlatformOpen(const char *name)
 {
-    return LoadLibrary(name);
+    return LoadLibraryA(name);
 }
 
 /*
@@ -326,7 +334,14 @@ xmlModulePlatformClose(void *handle)
 static int
 xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
 {
+#ifdef _WIN32_WCE
+    /*
+     * GetProcAddressA seems only available on WinCE
+     */
+    *symbol = GetProcAddressA(handle, name);
+#else
     *symbol = GetProcAddress(handle, name);
+#endif
     return (NULL == *symbol) ? -1 : 0;
 }
 
index 77ac71b..f19e123 100644 (file)
 #include <libxml/pattern.h>
 #endif
 
+#include "buf.h"
+
 #define MAX_ERR_MSG_SIZE 64000
 
 /*
  * The following VA_COPY was coded following an example in
  * the Samba project.  It may not be sufficient for some
- * esoteric implementations of va_list (i.e. it may need
- * something involving a memcpy) but (hopefully) will be
- * sufficient for libxml2.
+ * esoteric implementations of va_list but (hopefully) will
+ * be sufficient for libxml2.
  */
 #ifndef VA_COPY
   #ifdef HAVE_VA_COPY
     #ifdef HAVE___VA_COPY
       #define VA_COPY(dest,src) __va_copy(dest, src)
     #else
-      #define VA_COPY(dest,src) (dest) = (src)
+      #ifndef VA_LIST_IS_ARRAY
+        #define VA_COPY(dest,src) (dest) = (src)
+      #else
+        #include <string.h>
+        #define VA_COPY(dest,src) memcpy((char *)(dest),(char *)(src),sizeof(va_list))
+      #endif
     #endif
   #endif
 #endif
@@ -135,7 +141,7 @@ struct _xmlTextReader {
     int                                depth;  /* depth of the current node */
     xmlNodePtr                 faketext;/* fake xmlNs chld */
     int                                preserve;/* preserve the resulting document */
-    xmlBufferPtr               buffer; /* used to return const xmlChar * */
+    xmlBufPtr                  buffer; /* used to return const xmlChar * */
     xmlDictPtr                 dict;   /* the context dictionnary */
 
     /* entity stack when traversing entities content */
@@ -280,7 +286,10 @@ static void
 xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) {
     xmlDictPtr dict;
 
-    dict = reader->ctxt->dict;
+    if ((reader != NULL) && (reader->ctxt != NULL))
+       dict = reader->ctxt->dict;
+    else
+        dict = NULL;
     if (cur == NULL) return;
 
     if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
@@ -317,7 +326,7 @@ xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) {
 static void
 xmlTextReaderFreePropList(xmlTextReaderPtr reader, xmlAttrPtr cur) {
     xmlAttrPtr next;
-    if (cur == NULL) return;
+
     while (cur != NULL) {
         next = cur->next;
         xmlTextReaderFreeProp(reader, cur);
@@ -338,7 +347,10 @@ xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
     xmlNodePtr next;
     xmlDictPtr dict;
 
-    dict = reader->ctxt->dict;
+    if ((reader != NULL) && (reader->ctxt != NULL))
+       dict = reader->ctxt->dict;
+    else
+        dict = NULL;
     if (cur == NULL) return;
     if (cur->type == XML_NAMESPACE_DECL) {
        xmlFreeNsList((xmlNsPtr) cur);
@@ -415,7 +427,10 @@ static void
 xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
     xmlDictPtr dict;
 
-    dict = reader->ctxt->dict;
+    if ((reader != NULL) && (reader->ctxt != NULL))
+       dict = reader->ctxt->dict;
+    else
+        dict = NULL;
     if (cur->type == XML_DTD_NODE) {
        xmlFreeDtd((xmlDtdPtr) cur);
        return;
@@ -807,9 +822,10 @@ xmlTextReaderCDataBlock(void *ctx, const xmlChar *ch, int len)
  */
 static int
 xmlTextReaderPushData(xmlTextReaderPtr reader) {
-    xmlBufferPtr inbuf;
+    xmlBufPtr inbuf;
     int val, s;
     xmlTextReaderState oldstate;
+    int alloc;
 
     if ((reader->input == NULL) || (reader->input->buffer == NULL))
        return(-1);
@@ -817,17 +833,18 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
     oldstate = reader->state;
     reader->state = XML_TEXTREADER_NONE;
     inbuf = reader->input->buffer;
+    alloc = xmlBufGetAllocationScheme(inbuf);
 
     while (reader->state == XML_TEXTREADER_NONE) {
-       if (inbuf->use < reader->cur + CHUNK_SIZE) {
+       if (xmlBufUse(inbuf) < reader->cur + CHUNK_SIZE) {
            /*
             * Refill the buffer unless we are at the end of the stream
             */
            if (reader->mode != XML_TEXTREADER_MODE_EOF) {
                val = xmlParserInputBufferRead(reader->input, 4096);
                if ((val == 0) &&
-                   (inbuf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)) {
-                   if (inbuf->use == reader->cur) {
+                   (alloc == XML_BUFFER_ALLOC_IMMUTABLE)) {
+                   if (xmlBufUse(inbuf) == reader->cur) {
                        reader->mode = XML_TEXTREADER_MODE_EOF;
                        reader->state = oldstate;
                    }
@@ -850,20 +867,20 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
         * parse by block of CHUNK_SIZE bytes, various tests show that
         * it's the best tradeoff at least on a 1.2GH Duron
         */
-       if (inbuf->use >= reader->cur + CHUNK_SIZE) {
+       if (xmlBufUse(inbuf) >= reader->cur + CHUNK_SIZE) {
            val = xmlParseChunk(reader->ctxt,
-                         (const char *) &inbuf->content[reader->cur],
-                         CHUNK_SIZE, 0);
+                 (const char *) xmlBufContent(inbuf) + reader->cur,
+                                CHUNK_SIZE, 0);
            reader->cur += CHUNK_SIZE;
            if (val != 0)
                reader->ctxt->wellFormed = 0;
            if (reader->ctxt->wellFormed == 0)
                break;
        } else {
-           s = inbuf->use - reader->cur;
+           s = xmlBufUse(inbuf) - reader->cur;
            val = xmlParseChunk(reader->ctxt,
-                         (const char *) &inbuf->content[reader->cur],
-                         s, 0);
+                (const char *) xmlBufContent(inbuf) + reader->cur,
+                               s, 0);
            reader->cur += s;
            if (val != 0)
                reader->ctxt->wellFormed = 0;
@@ -875,10 +892,10 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
      * Discard the consumed input when needed and possible
      */
     if (reader->mode == XML_TEXTREADER_MODE_INTERACTIVE) {
-        if (inbuf->alloc != XML_BUFFER_ALLOC_IMMUTABLE) {
+        if (alloc != XML_BUFFER_ALLOC_IMMUTABLE) {
            if ((reader->cur >= 4096) &&
-               (inbuf->use - reader->cur <= CHUNK_SIZE)) {
-               val = xmlBufferShrink(inbuf, reader->cur);
+               (xmlBufUse(inbuf) - reader->cur <= CHUNK_SIZE)) {
+               val = xmlBufShrink(inbuf, reader->cur);
                if (val >= 0) {
                    reader->cur -= val;
                }
@@ -892,11 +909,11 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
      */
     else if (reader->mode == XML_TEXTREADER_MODE_EOF) {
        if (reader->state != XML_TEXTREADER_DONE) {
-           s = inbuf->use - reader->cur;
+           s = xmlBufUse(inbuf) - reader->cur;
            val = xmlParseChunk(reader->ctxt,
-                   (const char *) &inbuf->content[reader->cur],
-                   s, 1);
-           reader->cur = inbuf->use;
+                (const char *) xmlBufContent(inbuf) + reader->cur,
+                               s, 1);
+           reader->cur = xmlBufUse(inbuf);
            reader->state  = XML_TEXTREADER_DONE;
            if (val != 0) {
                if (reader->ctxt->wellFormed)
@@ -907,8 +924,11 @@ xmlTextReaderPushData(xmlTextReaderPtr reader) {
        }
     }
     reader->state = oldstate;
-    if (reader->ctxt->wellFormed == 0)
+    if (reader->ctxt->wellFormed == 0) {
        reader->mode = XML_TEXTREADER_MODE_EOF;
+        return(-1);
+    }
+
     return(0);
 }
 
@@ -977,7 +997,7 @@ printf("Expand failed !\n");
  * xmlTextReaderValidateCData:
  * @reader:  the xmlTextReaderPtr used
  * @data:  pointer to the CData
- * @len:  lenght of the CData block in bytes.
+ * @len:  length of the CData block in bytes.
  *
  * Push some CData for validation
  */
@@ -1221,6 +1241,9 @@ xmlTextReaderCollectSiblings(xmlNodePtr node)
     xmlBufferPtr buffer;
     xmlChar *ret;
 
+    if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
+        return(NULL);
+
     buffer = xmlBufferCreate();
     if (buffer == NULL)
        return NULL;
@@ -1399,8 +1422,7 @@ get_next_node:
 #endif
            (reader->entNr == 0) &&
            (reader->node->prev != NULL) &&
-            (reader->node->prev->type != XML_DTD_NODE) &&
-           (reader->entNr == 0)) {
+            (reader->node->prev->type != XML_DTD_NODE)) {
            xmlNodePtr tmp = reader->node->prev;
            if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
                xmlUnlinkNode(tmp);
@@ -1418,7 +1440,7 @@ get_next_node:
        goto node_found;
     }
 #ifdef LIBXML_REGEXP_ENABLED
-    if ((reader->validate) && (reader->node->type == XML_ELEMENT_NODE))
+    if ((reader->validate != XML_TEXTREADER_NOT_VALIDATE) && (reader->node->type == XML_ELEMENT_NODE))
        xmlTextReaderValidatePop(reader);
 #endif /* LIBXML_REGEXP_ENABLED */
     if ((reader->preserves > 0) &&
@@ -1449,8 +1471,7 @@ get_next_node:
 #endif
            (reader->entNr == 0) &&
            (oldnode->type != XML_DTD_NODE) &&
-           ((oldnode->extra & NODE_IS_PRESERVED) == 0) &&
-           (reader->entNr == 0)) {
+           ((oldnode->extra & NODE_IS_PRESERVED) == 0)) {
            xmlUnlinkNode(oldnode);
            xmlTextReaderFreeNode(reader, oldnode);
        }
@@ -1552,7 +1573,7 @@ node_found:
         goto get_next_node;
     }
 #ifdef LIBXML_REGEXP_ENABLED
-    if ((reader->validate) && (reader->node != NULL)) {
+    if ((reader->validate != XML_TEXTREADER_NOT_VALIDATE) && (reader->node != NULL)) {
        xmlNodePtr node = reader->node;
 
        if ((node->type == XML_ELEMENT_NODE) &&
@@ -1716,8 +1737,8 @@ xmlTextReaderReadInnerXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED)
  *
  * Reads the contents of the current node, including child nodes and markup.
  *
- * Returns a string containing the node and any XML content, or NULL if the 
- *         current node cannot be serialized. The string must be deallocated 
+ * Returns a string containing the node and any XML content, or NULL if the
+ *         current node cannot be serialized. The string must be deallocated
  *         by the caller.
  */
 xmlChar *
@@ -1782,6 +1803,7 @@ xmlTextReaderReadString(xmlTextReaderPtr reader)
        if (xmlTextReaderDoExpand(reader) != -1) {
            return xmlTextReaderCollectSiblings(node->children);
        }
+       break;
     case XML_ATTRIBUTE_NODE:
        TODO
        break;
@@ -2062,7 +2084,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
     ret->entMax = 0;
     ret->entNr = 0;
     ret->input = input;
-    ret->buffer = xmlBufferCreateSize(100);
+    ret->buffer = xmlBufCreateSize(100);
     if (ret->buffer == NULL) {
         xmlFree(ret);
         xmlGenericError(xmlGenericErrorContext,
@@ -2071,7 +2093,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
     }
     ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
     if (ret->sax == NULL) {
-       xmlBufferFree(ret->buffer);
+       xmlBufFree(ret->buffer);
        xmlFree(ret);
         xmlGenericError(xmlGenericErrorContext,
                "xmlNewTextReader : malloc failed\n");
@@ -2104,12 +2126,13 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
     ret->mode = XML_TEXTREADER_MODE_INITIAL;
     ret->node = NULL;
     ret->curnode = NULL;
-    if (ret->input->buffer->use < 4) {
+    if (xmlBufUse(ret->input->buffer) < 4) {
        xmlParserInputBufferRead(input, 4);
     }
-    if (ret->input->buffer->use >= 4) {
+    if (xmlBufUse(ret->input->buffer) >= 4) {
        ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL,
-                       (const char *) ret->input->buffer->content, 4, URI);
+                            (const char *) xmlBufContent(ret->input->buffer),
+                                            4, URI);
        ret->base = 0;
        ret->cur = 4;
     } else {
@@ -2121,7 +2144,7 @@ xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
     if (ret->ctxt == NULL) {
         xmlGenericError(xmlGenericErrorContext,
                "xmlNewTextReader : malloc failed\n");
-       xmlBufferFree(ret->buffer);
+       xmlBufFree(ret->buffer);
        xmlFree(ret->sax);
        xmlFree(ret);
        return(NULL);
@@ -2251,7 +2274,7 @@ xmlFreeTextReader(xmlTextReaderPtr reader) {
     if ((reader->input != NULL)  && (reader->allocs & XML_TEXTREADER_INPUT))
        xmlFreeParserInputBuffer(reader->input);
     if (reader->buffer != NULL)
-        xmlBufferFree(reader->buffer);
+        xmlBufFree(reader->buffer);
     if (reader->entTab != NULL)
        xmlFree(reader->entTab);
     if (reader->dict != NULL)
@@ -3599,16 +3622,17 @@ xmlTextReaderConstValue(xmlTextReaderPtr reader) {
                (attr->children->next == NULL))
                return(attr->children->content);
            else {
-               if (reader->buffer == NULL)
-                   reader->buffer = xmlBufferCreateSize(100);
                if (reader->buffer == NULL) {
-                   xmlGenericError(xmlGenericErrorContext,
-                                   "xmlTextReaderSetup : malloc failed\n");
-                   return (NULL);
-               }
-               reader->buffer->use = 0;
-               xmlNodeBufGetContent(reader->buffer, node);
-               return(reader->buffer->content);
+                   reader->buffer = xmlBufCreateSize(100);
+                    if (reader->buffer == NULL) {
+                        xmlGenericError(xmlGenericErrorContext,
+                                        "xmlTextReaderSetup : malloc failed\n");
+                        return (NULL);
+                    }
+                } else
+                    xmlBufEmpty(reader->buffer);
+               xmlBufGetNodeContent(reader->buffer, node);
+               return(xmlBufContent(reader->buffer));
            }
            break;
        }
@@ -4143,6 +4167,60 @@ xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) {
 }
 
 /**
+ * xmlTextReaderLocator:
+ * @ctx: the xmlTextReaderPtr used
+ * @file: returned file information
+ * @line: returned line information
+ *
+ * Internal locator function for the readers
+ *
+ * Returns 0 in case the Schema validation could be (des)activated and
+ *         -1 in case of error.
+ */
+static int
+xmlTextReaderLocator(void *ctx, const char **file, unsigned long *line) {
+    xmlTextReaderPtr reader;
+
+    if ((ctx == NULL) || ((file == NULL) && (line == NULL)))
+        return(-1);
+
+    if (file != NULL)
+        *file = NULL;
+    if (line != NULL)
+        *line = 0;
+
+    reader = (xmlTextReaderPtr) ctx;
+    if ((reader->ctxt != NULL) && (reader->ctxt->input != NULL)) {
+       if (file != NULL)
+           *file = reader->ctxt->input->filename;
+       if (line != NULL)
+           *line = reader->ctxt->input->line;
+       return(0);
+    }
+    if (reader->node != NULL) {
+        long res;
+       int ret = 0;
+
+       if (line != NULL) {
+           res = xmlGetLineNo(reader->node);
+           if (res > 0)
+               *line = (unsigned long) res;
+           else
+                ret = -1;
+       }
+        if (file != NULL) {
+           xmlDocPtr doc = reader->node->doc;
+           if ((doc != NULL) && (doc->URL != NULL))
+               *file = (const char *) doc->URL;
+           else
+                ret = -1;
+       }
+       return(ret);
+    }
+    return(-1);
+}
+
+/**
  * xmlTextReaderSetSchema:
  * @reader:  the xmlTextReaderPtr used
  * @schema:  a precompiled Schema schema
@@ -4209,6 +4287,10 @@ xmlTextReaderSetSchema(xmlTextReaderPtr reader, xmlSchemaPtr schema) {
        reader->xsdValidCtxt = NULL;
        return(-1);
     }
+    xmlSchemaValidateSetLocator(reader->xsdValidCtxt,
+                                xmlTextReaderLocator,
+                               (void *) reader);
+
     if (reader->errorFunc != NULL) {
        xmlSchemaSetValidErrors(reader->xsdValidCtxt,
                        xmlTextReaderValidityErrorRelay,
@@ -4423,6 +4505,9 @@ xmlTextReaderSchemaValidateInternal(xmlTextReaderPtr reader,
            return(-1);
        }
     }
+    xmlSchemaValidateSetLocator(reader->xsdValidCtxt,
+                                xmlTextReaderLocator,
+                               (void *) reader);
     /*
     * Redirect the validation context's error channels to use
     * the reader channels.
@@ -5040,7 +5125,7 @@ xmlTextReaderSetup(xmlTextReaderPtr reader,
        reader->allocs |= XML_TEXTREADER_INPUT;
     }
     if (reader->buffer == NULL)
-        reader->buffer = xmlBufferCreateSize(100);
+        reader->buffer = xmlBufCreateSize(100);
     if (reader->buffer == NULL) {
         xmlGenericError(xmlGenericErrorContext,
                         "xmlTextReaderSetup : malloc failed\n");
@@ -5081,13 +5166,14 @@ xmlTextReaderSetup(xmlTextReaderPtr reader,
     reader->node = NULL;
     reader->curnode = NULL;
     if (input != NULL) {
-        if (reader->input->buffer->use < 4) {
+        if (xmlBufUse(reader->input->buffer) < 4) {
             xmlParserInputBufferRead(input, 4);
         }
         if (reader->ctxt == NULL) {
-            if (reader->input->buffer->use >= 4) {
+            if (xmlBufUse(reader->input->buffer) >= 4) {
                 reader->ctxt = xmlCreatePushParserCtxt(reader->sax, NULL,
-                      (const char *) reader->input->buffer->content, 4, URL);
+                      (const char *) xmlBufContent(reader->input->buffer),
+                                      4, URL);
                 reader->base = 0;
                 reader->cur = 4;
             } else {
@@ -5116,10 +5202,7 @@ xmlTextReaderSetup(xmlTextReaderPtr reader,
                inputStream->filename = (char *)
                    xmlCanonicPath((const xmlChar *) URL);
            inputStream->buf = buf;
-           inputStream->base = inputStream->buf->buffer->content;
-           inputStream->cur = inputStream->buf->buffer->content;
-           inputStream->end =
-            &inputStream->buf->buffer->content[inputStream->buf->buffer->use];
+            xmlBufResetInput(buf->buffer, inputStream);
 
            inputPush(reader->ctxt, inputStream);
            reader->cur = 0;
index 8a8be98..3e912ab 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * regexp.c: generic and extensible Regular Expression engine
  *
- * Basically designed with the purpose of compiling regexps for 
+ * Basically designed with the purpose of compiling regexps for
  * the variety of validation/shemas mechanisms now available in
  * XML related specifications these include:
  *    - XML-1.0 DTD validation
  *
  * macro to flag unimplemented blocks
  */
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
 
 /************************************************************************
- *                                                                     *
- *                     Datatypes and structures                        *
- *                                                                     *
+ *                                                                     *
+ *                     Datatypes and structures                        *
+ *                                                                     *
  ************************************************************************/
 
 /*
@@ -222,6 +222,7 @@ struct _xmlRegTrans {
 struct _xmlAutomataState {
     xmlRegStateType type;
     xmlRegMarkedType mark;
+    xmlRegMarkedType markd;
     xmlRegMarkedType reached;
     int no;
     int maxTrans;
@@ -364,7 +365,7 @@ void xmlAutomataSetFlags(xmlAutomataPtr am, int flags);
 
 /************************************************************************
  *                                                                     *
- *             Regexp memory error handler                             *
+ *             Regexp memory error handler                             *
  *                                                                     *
  ************************************************************************/
 /**
@@ -411,9 +412,9 @@ xmlRegexpErrCompile(xmlRegParserCtxtPtr ctxt, const char *extra)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Allocation/Deallocation                         *
- *                                                                     *
+ *                                                                     *
+ *                     Allocation/Deallocation                         *
+ *                                                                     *
  ************************************************************************/
 
 static int xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt);
@@ -934,9 +935,9 @@ xmlRegFreeParserCtxt(xmlRegParserCtxtPtr ctxt) {
 }
 
 /************************************************************************
- *                                                                     *
- *                     Display of Data structures                      *
- *                                                                     *
+ *                                                                     *
+ *                     Display of Data structures                      *
+ *                                                                     *
  ************************************************************************/
 
 static void
@@ -1143,7 +1144,7 @@ xmlRegPrintTrans(FILE *output, xmlRegTransPtr trans) {
        fprintf(output, "char %c ", trans->atom->codepoint);
     fprintf(output, "atom %d, to %d\n", trans->atom->no, trans->to);
 }
-    
+
 static void
 xmlRegPrintState(FILE *output, xmlRegStatePtr state) {
     int i;
@@ -1157,7 +1158,7 @@ xmlRegPrintState(FILE *output, xmlRegStatePtr state) {
        fprintf(output, "START ");
     if (state->type == XML_REGEXP_FINAL_STATE)
        fprintf(output, "FINAL ");
-    
+
     fprintf(output, "%d, %d transitions:\n", state->no, state->nbTrans);
     for (i = 0;i < state->nbTrans; i++) {
        xmlRegPrintTrans(output, &(state->trans[i]));
@@ -1207,12 +1208,12 @@ xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) {
 #endif
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *              Finite Automata structures manipulations               *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
-static void 
+static void
 xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom,
                   int neg, xmlRegAtomType type, int start, int end,
                   xmlChar *blockName) {
@@ -1252,7 +1253,7 @@ xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom,
        return;
     range->blockName = blockName;
     atom->ranges[atom->nbRanges++] = range;
-    
+
 }
 
 static int
@@ -1283,7 +1284,7 @@ xmlRegGetCounter(xmlRegParserCtxtPtr ctxt) {
     return(ctxt->nbCounters++);
 }
 
-static int 
+static int
 xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
     if (atom == NULL) {
        ERROR("atom push: atom is NULL");
@@ -1315,7 +1316,7 @@ xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
     return(0);
 }
 
-static void 
+static void
 xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target,
                       int from) {
     if (target->maxTransTo == 0) {
@@ -1343,7 +1344,7 @@ xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target,
     target->nbTransTo++;
 }
 
-static void 
+static void
 xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
                    xmlRegAtomPtr atom, xmlRegStatePtr target,
                    int counter, int count) {
@@ -1409,7 +1410,7 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
        printf("counted %d\n", counter);
     else if (atom == NULL)
        printf("epsilon transition\n");
-    else if (atom != NULL) 
+    else if (atom != NULL)
         xmlRegPrintAtom(stdout, atom);
 #endif
 
@@ -1563,7 +1564,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
             */
            xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
 #ifdef DV
-       } else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) && 
+       } else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) &&
                   (atom->quant != XML_REGEXP_QUANT_ONCE)) {
            to = xmlRegNewState(ctxt);
            xmlRegStatePush(ctxt, to);
@@ -1577,7 +1578,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
                /*
                 * transition done to the state after end of atom.
                 *      1. set transition from atom start to new state
-                *      2. set transition from atom end to this state. 
+                *      2. set transition from atom end to this state.
                 */
                 if (to == NULL) {
                     xmlFAGenerateEpsilonTransition(ctxt, atom->start, 0);
@@ -1621,7 +1622,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
                    /*
                     * duplicate a transition based on atom to count next
                     * occurences after 1. We cannot loop to atom->start
-                    * directly because we need an epsilon transition to 
+                    * directly because we need an epsilon transition to
                     * newstate.
                     */
                     /* ???? For some reason it seems we never reach that
@@ -1680,7 +1681,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
                break;
        }
        return(0);
-    } 
+    }
     if ((atom->min == 0) && (atom->max == 0) &&
                (atom->quant == XML_REGEXP_QUANT_RANGE)) {
         /*
@@ -1706,9 +1707,9 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
        else {
            return(-1);
        }
-    } 
+    }
     end = to;
-    if ((atom->quant == XML_REGEXP_QUANT_MULT) || 
+    if ((atom->quant == XML_REGEXP_QUANT_MULT) ||
         (atom->quant == XML_REGEXP_QUANT_PLUS)) {
        /*
         * Do not pollute the target state by adding transitions from
@@ -1716,7 +1717,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
         * So isolate with an epsilon transition.
         */
         xmlRegStatePtr tmp;
-       
+
        tmp = xmlRegNewState(ctxt);
        if (tmp != NULL)
            xmlRegStatePush(ctxt, tmp);
@@ -1745,7 +1746,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
            atom->quant = XML_REGEXP_QUANT_ONCE;
            xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
            break;
-       case XML_REGEXP_QUANT_RANGE: 
+       case XML_REGEXP_QUANT_RANGE:
 #if DV_test
            if (atom->min == 0) {
                xmlFAGenerateEpsilonTransition(ctxt, from, to);
@@ -1762,7 +1763,7 @@ xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
  * xmlFAReduceEpsilonTransitions:
  * @ctxt:  a regexp parser context
  * @fromnr:  the from state
- * @tonr:  the to state 
+ * @tonr:  the to state
  * @counter:  should that transition be associated to a counted
  *
  */
@@ -1806,7 +1807,7 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
                    int newto = to->trans[transnr].to;
 
                    xmlRegStateAddTrans(ctxt, from, NULL,
-                                       ctxt->states[newto], 
+                                       ctxt->states[newto],
                                        -1, to->trans[transnr].count);
                } else {
 #ifdef DEBUG_REGEXP_GRAPH
@@ -1828,11 +1829,11 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
            int newto = to->trans[transnr].to;
 
            if (to->trans[transnr].counter >= 0) {
-               xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, 
-                                   ctxt->states[newto], 
+               xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
+                                   ctxt->states[newto],
                                    to->trans[transnr].counter, -1);
            } else {
-               xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom, 
+               xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
                                    ctxt->states[newto], counter, -1);
            }
        }
@@ -1844,7 +1845,7 @@ xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
  * xmlFAEliminateSimpleEpsilonTransitions:
  * @ctxt:  a regexp parser context
  *
- * Eliminating general epsilon transitions can get costly in the general 
+ * Eliminating general epsilon transitions can get costly in the general
  * algorithm due to the large amount of generated new transitions and
  * associated comparisons. However for simple epsilon transition used just
  * to separate building blocks when generating the automata this can be
@@ -1880,12 +1881,12 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
 #ifdef DEBUG_REGEXP_GRAPH
                printf("Found simple epsilon trans from start %d to %d\n",
                       statenr, newto);
-#endif     
+#endif
             } else {
 #ifdef DEBUG_REGEXP_GRAPH
                printf("Found simple epsilon trans from %d to %d\n",
                       statenr, newto);
-#endif     
+#endif
                for (i = 0;i < state->nbTransTo;i++) {
                    tmp = ctxt->states[state->transTo[i]];
                    for (j = 0;j < tmp->nbTrans;j++) {
@@ -1893,10 +1894,10 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
 #ifdef DEBUG_REGEXP_GRAPH
                            printf("Changed transition %d on %d to go to %d\n",
                                   j, tmp->no, newto);
-#endif     
+#endif
                            tmp->trans[j].to = -1;
                            xmlRegStateAddTrans(ctxt, tmp, tmp->trans[j].atom,
-                                               ctxt->states[newto],
+                                               ctxt->states[newto],
                                                tmp->trans[j].counter,
                                                tmp->trans[j].count);
                        }
@@ -1910,7 +1911,7 @@ xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
                 state->type = XML_REGEXP_UNREACH_STATE;
 
            }
-            
+
        }
     }
 }
@@ -2112,7 +2113,7 @@ xmlFACompareRanges(xmlRegRangePtr range1, xmlRegRangePtr range2) {
        /*
         * just check all codepoints in the range for acceptance,
         * this is usually way cheaper since done only once at
-        * compilation than testing over and over at runtime or 
+        * compilation than testing over and over at runtime or
         * pushing too many states when evaluating.
         */
        if (((range1->neg == 0) && (range2->neg != 0)) ||
@@ -2589,6 +2590,8 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
 
     if (state == NULL)
        return(ret);
+    if (state->markd == XML_REGEXP_MARK_VISITED)
+       return(ret);
 
     if (ctxt->flags & AM_AUTOMATA_RNG)
         deep = 0;
@@ -2606,8 +2609,10 @@ xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
        if (t1->atom == NULL) {
            if (t1->to < 0)
                continue;
+           state->markd = XML_REGEXP_MARK_VISITED;
            res = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
                                           to, atom);
+           state->markd = 0;
            if (res == 0) {
                ret = 0;
                /* t1->nd = 1; */
@@ -2776,9 +2781,9 @@ xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     Routines to check input against transition atoms                *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 static int
@@ -2807,7 +2812,7 @@ xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint, int neg,
         case XML_REGEXP_NOTINITNAME:
            neg = !neg;
         case XML_REGEXP_INITNAME:
-           ret = (IS_LETTER(codepoint) || 
+           ret = (IS_LETTER(codepoint) ||
                   (codepoint == '_') || (codepoint == ':'));
            break;
         case XML_REGEXP_NOTNAMECHAR:
@@ -3055,9 +3060,9 @@ xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint) {
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     Saving and restoring state of an execution context              *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 #ifdef DEBUG_REGEXP_EXEC
@@ -3157,8 +3162,10 @@ xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) {
            exec->status = -6;
            return;
        }
-       memcpy(exec->counts, exec->rollbacks[exec->nbRollbacks].counts,
+       if (exec->counts) {
+           memcpy(exec->counts, exec->rollbacks[exec->nbRollbacks].counts,
               exec->comp->nbCounters * sizeof(int));
+       }
     }
 
 #ifdef DEBUG_REGEXP_EXEC
@@ -3168,9 +3175,9 @@ xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) {
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     Verifier, running an input against a compiled regexp            *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 static int
@@ -3202,7 +3209,7 @@ xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) {
         memset(exec->counts, 0, comp->nbCounters * sizeof(int));
     } else
        exec->counts = NULL;
-    while ((exec->status == 0) &&
+    while ((exec->status == 0) && (exec->state != NULL) &&
           ((exec->inputString[exec->index] != 0) ||
            ((exec->state != NULL) &&
             (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
@@ -3456,6 +3463,8 @@ error:
        }
        xmlFree(exec->rollbacks);
     }
+    if (exec->state == NULL)
+        return(-1);
     if (exec->counts != NULL)
        xmlFree(exec->counts);
     if (exec->status == 0)
@@ -3469,9 +3478,9 @@ error:
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     Progressive interface to the verifier one atom at a time        *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 #ifdef DEBUG_ERR
 static void testerr(xmlRegExecCtxtPtr exec);
@@ -3588,7 +3597,7 @@ xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value,
 #endif
     if (exec->inputStackMax == 0) {
        exec->inputStackMax = 4;
-       exec->inputStack = (xmlRegInputTokenPtr) 
+       exec->inputStack = (xmlRegInputTokenPtr)
            xmlMalloc(exec->inputStackMax * sizeof(xmlRegInputToken));
        if (exec->inputStack == NULL) {
            xmlRegexpErrMemory(NULL, "pushing input string");
@@ -3617,11 +3626,11 @@ xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value,
 
 /**
  * xmlRegStrEqualWildcard:
- * @expStr:  the string to be evaluated 
+ * @expStr:  the string to be evaluated
  * @valStr:  the validation string
  *
  * Checks if both strings are equal or have the same content. "*"
- * can be used as a wildcard in @valStr; "|" is used as a seperator of 
+ * can be used as a wildcard in @valStr; "|" is used as a seperator of
  * substrings in both @expStr and @valStr.
  *
  * Returns 1 if the comparison is satisfied and the number of substrings
@@ -3687,7 +3696,7 @@ xmlRegCompactPushString(xmlRegExecCtxtPtr exec,
 
     if ((comp == NULL) || (comp->compact == NULL) || (comp->stringMap == NULL))
        return(-1);
-    
+
     if (value == NULL) {
        /*
         * are we at a final state ?
@@ -3708,9 +3717,9 @@ xmlRegCompactPushString(xmlRegExecCtxtPtr exec,
     for (i = 0;i < comp->nbstrings;i++) {
        target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
        if ((target > 0) && (target <= comp->nbstates)) {
-           target--; /* to avoid 0 */    
+           target--; /* to avoid 0 */
            if (xmlRegStrEqualWildcard(comp->stringMap[i], value)) {
-               exec->index = target;           
+               exec->index = target;
                if ((exec->callback != NULL) && (comp->transdata != NULL)) {
                    exec->callback(exec->data, value,
                          comp->transdata[state * comp->nbstrings + i], data);
@@ -3844,7 +3853,7 @@ xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value,
                            continue;
                        counter = &exec->comp->counters[t->counter];
                        count = exec->counts[t->counter];
-                       if ((count < counter->max) && 
+                       if ((count < counter->max) &&
                            (t->atom != NULL) &&
                            (xmlStrEqual(value, t->atom->valuep))) {
                            ret = 0;
@@ -4084,7 +4093,7 @@ rollback:
             */
            exec->determinist = 0;
            xmlFARegExecRollBack(exec);
-           if (exec->status == 0) {
+           if ((exec->inputStack != NULL ) && (exec->status == 0)) {
                value = exec->inputStack[exec->index].value;
                data = exec->inputStack[exec->index].data;
 #ifdef DEBUG_PUSH
@@ -4202,7 +4211,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
     int maxval;
     int nb = 0;
 
-    if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) || 
+    if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) ||
         (values == NULL) || (*nbval <= 0))
         return(-1);
 
@@ -4299,7 +4308,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
                    (*nbval)++;
                }
            } else {
-                if ((exec->comp->states[trans->to] != NULL) &&
+                if ((exec->comp != NULL) && (exec->comp->states[trans->to] != NULL) &&
                    (exec->comp->states[trans->to]->type !=
                     XML_REGEXP_SINK_STATE)) {
                    if (atom->neg)
@@ -4308,7 +4317,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
                        values[nb++] = (xmlChar *) atom->valuep;
                    (*nbval)++;
                }
-           } 
+           }
        }
        for (transno = 0;
             (transno < state->nbTrans) && (nb < maxval);
@@ -4335,7 +4344,7 @@ xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
                        values[nb++] = (xmlChar *) atom->valuep;
                    (*nbneg)++;
                }
-           } 
+           }
        }
     }
     return(0);
@@ -4566,10 +4575,10 @@ progress:
 }
 #endif
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *     Parser for the Schemas Datatype Regular Expressions             *
  *     http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#regexs      *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -4598,7 +4607,7 @@ xmlFAIsChar(xmlRegParserCtxtPtr ctxt) {
  *
  * [27]   charProp   ::=   IsCategory | IsBlock
  * [28]   IsCategory ::= Letters | Marks | Numbers | Punctuation |
- *                       Separators | Symbols | Others 
+ *                       Separators | Symbols | Others
  * [29]   Letters   ::=   'L' [ultmo]?
  * [30]   Marks   ::=   'M' [nce]?
  * [31]   Numbers   ::=   'N' [dlo]?
@@ -4613,7 +4622,7 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
     int cur;
     xmlRegAtomType type = (xmlRegAtomType) 0;
     xmlChar *blockName = NULL;
-    
+
     cur = CUR;
     if (cur == 'L') {
        NEXT;
@@ -4785,15 +4794,15 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
        NEXT;
        start = ctxt->cur;
        cur = CUR;
-       if (((cur >= 'a') && (cur <= 'z')) || 
-           ((cur >= 'A') && (cur <= 'Z')) || 
-           ((cur >= '0') && (cur <= '9')) || 
+       if (((cur >= 'a') && (cur <= 'z')) ||
+           ((cur >= 'A') && (cur <= 'Z')) ||
+           ((cur >= '0') && (cur <= '9')) ||
            (cur == 0x2D)) {
            NEXT;
            cur = CUR;
-           while (((cur >= 'a') && (cur <= 'z')) || 
-               ((cur >= 'A') && (cur <= 'Z')) || 
-               ((cur >= '0') && (cur <= '9')) || 
+           while (((cur >= 'a') && (cur <= 'z')) ||
+               ((cur >= 'A') && (cur <= 'Z')) ||
+               ((cur >= '0') && (cur <= '9')) ||
                (cur == 0x2D)) {
                NEXT;
                cur = CUR;
@@ -4819,7 +4828,7 @@ xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
  * xmlFAParseCharClassEsc:
  * @ctxt:  a regexp parser context
  *
- * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc ) 
+ * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc )
  * [24] SingleCharEsc ::= '\' [nrt\|.?*+(){}#x2D#x5B#x5D#x5E]
  * [25] catEsc   ::=   '\p{' charProp '}'
  * [26] complEsc ::=   '\P{' charProp '}'
@@ -4916,34 +4925,34 @@ xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
        xmlRegAtomType type = XML_REGEXP_ANYSPACE;
 
        switch (cur) {
-           case 's': 
+           case 's':
                type = XML_REGEXP_ANYSPACE;
                break;
-           case 'S': 
+           case 'S':
                type = XML_REGEXP_NOTSPACE;
                break;
-           case 'i': 
+           case 'i':
                type = XML_REGEXP_INITNAME;
                break;
-           case 'I': 
+           case 'I':
                type = XML_REGEXP_NOTINITNAME;
                break;
-           case 'c': 
+           case 'c':
                type = XML_REGEXP_NAMECHAR;
                break;
-           case 'C': 
+           case 'C':
                type = XML_REGEXP_NOTNAMECHAR;
                break;
-           case 'd': 
+           case 'd':
                type = XML_REGEXP_DECIMAL;
                break;
-           case 'D': 
+           case 'D':
                type = XML_REGEXP_NOTDECIMAL;
                break;
-           case 'w': 
+           case 'w':
                type = XML_REGEXP_REALCHAR;
                break;
-           case 'W': 
+           case 'W':
                type = XML_REGEXP_NOTREALCHAR;
                break;
        }
@@ -4963,7 +4972,7 @@ xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
  * xmlFAParseCharRange:
  * @ctxt:  a regexp parser context
  *
- * [17]   charRange   ::=     seRange | XmlCharRef | XmlCharIncDash 
+ * [17]   charRange   ::=     seRange | XmlCharRef | XmlCharIncDash
  * [18]   seRange   ::=   charOrEsc '-' charOrEsc
  * [20]   charOrEsc   ::=   XmlChar | SingleCharEsc
  * [21]   XmlChar   ::=   [^\#x2D#x5B#x5D]
@@ -5078,7 +5087,7 @@ xmlFAParsePosCharGroup(xmlRegParserCtxtPtr ctxt) {
  *
  * [13]   charGroup    ::= posCharGroup | negCharGroup | charClassSub
  * [15]   negCharGroup ::= '^' posCharGroup
- * [16]   charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr  
+ * [16]   charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr
  * [12]   charClassExpr ::= '[' charGroup ']'
  */
 static void
@@ -5326,7 +5335,7 @@ xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) {
     previous = ctxt->state;
     ret = xmlFAParsePiece(ctxt);
     if (ret != 0) {
-       if (xmlFAGenerateTransitions(ctxt, previous, 
+       if (xmlFAGenerateTransitions(ctxt, previous,
                (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
            return(-1);
        previous = ctxt->state;
@@ -5335,7 +5344,7 @@ xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) {
     while ((ret != 0) && (ctxt->error == 0)) {
        ret = xmlFAParsePiece(ctxt);
        if (ret != 0) {
-           if (xmlFAGenerateTransitions(ctxt, previous, 
+           if (xmlFAGenerateTransitions(ctxt, previous,
                    (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
                    return(-1);
            previous = ctxt->state;
@@ -5373,6 +5382,10 @@ xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) {
     end = ctxt->state;
     while ((CUR == '|') && (ctxt->error == 0)) {
        NEXT;
+       if (CUR == 0) {
+           ERROR("expecting a branch after |")
+           return;
+       }
        ctxt->state = start;
        ctxt->end = NULL;
        xmlFAParseBranch(ctxt, end);
@@ -5384,9 +5397,9 @@ xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) {
 }
 
 /************************************************************************
- *                                                                     *
- *                     The basic API                                   *
- *                                                                     *
+ *                                                                     *
+ *                     The basic API                                   *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -5573,9 +5586,9 @@ xmlRegFreeRegexp(xmlRegexpPtr regexp) {
 
 #ifdef LIBXML_AUTOMATA_ENABLED
 /************************************************************************
- *                                                                     *
- *                     The Automata interface                          *
- *                                                                     *
+ *                                                                     *
+ *                     The Automata interface                          *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -5696,8 +5709,6 @@ xmlAutomataNewTransition(xmlAutomataPtr am, xmlAutomataStatePtr from,
     if (atom == NULL)
         return(NULL);
     atom->data = data;
-    if (atom == NULL)
-       return(NULL);
     atom->valuep = xmlStrdup(token);
 
     if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
@@ -5846,7 +5857,7 @@ xmlAutomataNewNegTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
  *
  * If @to is NULL, this creates first a new target state in the automata
  * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and 
+ * activated by a succession of input of value @token and @token2 and
  * whose number is between @min and @max
  *
  * Returns the target state or NULL in case of error
@@ -6000,8 +6011,8 @@ xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
  *
  * If @to is NULL, this creates first a new target state in the automata
  * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and whose 
- * number is between @min and @max, moreover that transition can only be 
+ * activated by a succession of input of value @token and @token2 and whose
+ * number is between @min and @max, moreover that transition can only be
  * crossed once.
  *
  * Returns the target state or NULL in case of error
@@ -6043,7 +6054,7 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
        str[lenn + lenp + 1] = 0;
 
        atom->valuep = str;
-    }    
+    }
     atom->data = data;
     atom->quant = XML_REGEXP_QUANT_ONCEONLY;
     atom->min = min;
@@ -6066,7 +6077,7 @@ xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
     return(to);
 }
 
-    
+
 
 /**
  * xmlAutomataNewOnceTrans:
@@ -6135,7 +6146,7 @@ xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
  */
 xmlAutomataStatePtr
 xmlAutomataNewState(xmlAutomataPtr am) {
-    xmlAutomataStatePtr to; 
+    xmlAutomataStatePtr to;
 
     if (am == NULL)
        return(NULL);
@@ -6202,7 +6213,7 @@ xmlAutomataNewAllTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
  *
  * Returns the counter number or -1 in case of error
  */
-int            
+int
 xmlAutomataNewCounter(xmlAutomataPtr am, int min, int max) {
     int ret;
 
@@ -6274,7 +6285,7 @@ xmlAutomataNewCounterTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
  *
  * Returns the compiled regexp or NULL in case of error
  */
-xmlRegexpPtr          
+xmlRegexpPtr
 xmlAutomataCompile(xmlAutomataPtr am) {
     xmlRegexpPtr ret;
 
@@ -6294,7 +6305,7 @@ xmlAutomataCompile(xmlAutomataPtr am) {
  *
  * Returns 1 if true, 0 if not, and -1 in case of error
  */
-int          
+int
 xmlAutomataIsDeterminist(xmlAutomataPtr am) {
     int ret;
 
@@ -6347,7 +6358,7 @@ xmlExpNewCtxt(int maxNodes, xmlDictPtr dict) {
 
     if (maxNodes <= 4096)
         maxNodes = 4096;
-    
+
     ret = (xmlExpCtxtPtr) xmlMalloc(sizeof(xmlExpCtxt));
     if (ret == NULL)
         return(NULL);
@@ -6401,7 +6412,7 @@ xmlExpFreeCtxt(xmlExpCtxtPtr ctxt) {
 /* #define DEBUG_DERIV */
 
 /*
- * TODO: 
+ * TODO:
  * - Wildcards
  * - public API for creation
  *
@@ -6469,7 +6480,7 @@ static unsigned short
 xmlExpHashNameComputeKey(const xmlChar *name) {
     unsigned short value = 0L;
     char ch;
-    
+
     if (name != NULL) {
        value += 30 * (*name);
        while ((ch = *name++) != 0) {
@@ -6488,7 +6499,7 @@ xmlExpHashComputeKey(xmlExpNodeType type, xmlExpNodePtr left,
                      xmlExpNodePtr right) {
     unsigned long value;
     unsigned short ret;
-    
+
     switch (type) {
         case XML_EXP_SEQ:
            value = left->key;
@@ -6629,7 +6640,7 @@ xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type,
            left->exp_left->ref++;
            tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_left, tmp,
                                     NULL, 0, 0);
-       
+
            xmlExpFree(ctxt, left);
            return(tmp);
        }
@@ -6686,7 +6697,7 @@ xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type,
            return(right);
        }
        kbase = xmlExpHashComputeKey(type, left, right);
-    } else 
+    } else
         return(NULL);
 
     key = kbase % ctxt->size;
@@ -6827,7 +6838,7 @@ xmlExpRef(xmlExpNodePtr exp) {
  * xmlExpNewAtom:
  * @ctxt: the expression context
  * @name: the atom name
- * @len: the atom name lenght in byte (or -1);
+ * @len: the atom name length in byte (or -1);
  *
  * Get the atom associated to this name from that context
  *
@@ -6927,7 +6938,7 @@ xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) {
  ************************************************************************/
 
 static int
-xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, 
+xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
                      const xmlChar**list, int len, int nb) {
     int tmp, tmp2;
 tail:
@@ -6964,7 +6975,7 @@ tail:
  * @ctxt: the expression context
  * @exp: the expression
  * @langList: where to store the tokens
- * @len: the allocated lenght of @list
+ * @len: the allocated length of @list
  *
  * Find all the strings used in @exp and store them in @list
  *
@@ -6972,7 +6983,7 @@ tail:
  *         -2 if there is more than @len strings
  */
 int
-xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, 
+xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
                   const xmlChar**langList, int len) {
     if ((ctxt == NULL) || (exp == NULL) || (langList == NULL) || (len <= 0))
         return(-1);
@@ -6980,7 +6991,7 @@ xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
 }
 
 static int
-xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, 
+xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
                   const xmlChar**list, int len, int nb) {
     int tmp, tmp2;
 tail:
@@ -7030,7 +7041,7 @@ tail:
  * @ctxt: the expression context
  * @exp: the expression
  * @tokList: where to store the tokens
- * @len: the allocated lenght of @list
+ * @len: the allocated length of @list
  *
  * Find all the strings that appears at the start of the languages
  * accepted by @exp and store them in @list. E.g. for (a, b) | c
@@ -7040,7 +7051,7 @@ tail:
  *         -2 if there is more than @len strings
  */
 int
-xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, 
+xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
                const xmlChar**tokList, int len) {
     if ((ctxt == NULL) || (exp == NULL) || (tokList == NULL) || (len <= 0))
         return(-1);
@@ -7737,7 +7748,7 @@ xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
     xmlFree((xmlChar **) tab);
     return(ret);
 }
-    
+
 /**
  * xmlExpExpDerive:
  * @ctxt: the expressions context
@@ -7789,7 +7800,7 @@ xmlExpExpDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
 int
 xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
     xmlExpNodePtr tmp;
-    
+
     if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
         return(-1);
 
@@ -7833,7 +7844,7 @@ xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
 
 /************************************************************************
  *                                                                     *
- *                     Parsing expression                              *
+ *                     Parsing expression                              *
  *                                                                     *
  ************************************************************************/
 
@@ -7937,7 +7948,7 @@ parse_quantifier:
        ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
                                 0, -1);
        SKIP_BLANKS
-    } 
+    }
     return(ret);
 }
 
@@ -8059,7 +8070,7 @@ xmlExpDumpInt(xmlBufferPtr buf, xmlExpNodePtr expr, int glob) {
             break;
         case XML_EXP_COUNT: {
            char rep[40];
-           
+
            c = expr->exp_left;
            if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
                xmlExpDumpInt(buf, c, 1);
index 23c3bcc..774404b 100644 (file)
--- a/xmlsave.c
+++ b/xmlsave.c
 
 #include <libxml/HTMLtree.h>
 
+#include "buf.h"
+#include "enc.h"
+#include "save.h"
+
 /************************************************************************
  *                                                                     *
  *                     XHTML detection                                 *
@@ -66,7 +70,7 @@ xmlIsXHTML(const xmlChar *systemID, const xmlChar *publicID) {
 
 #ifdef LIBXML_OUTPUT_ENABLED
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -92,7 +96,7 @@ struct _xmlSaveCtxt {
 
 /************************************************************************
  *                                                                     *
- *                     Output error handlers                           *
+ *                     Output error handlers                           *
  *                                                                     *
  ************************************************************************/
 /**
@@ -210,9 +214,9 @@ xmlEscapeEntities(unsigned char* out, int *outlen,
     int val;
 
     inend = in + (*inlen);
-    
+
     while ((in < inend) && (out < outend)) {
-       if (*in == '<') {
+       if (*in == '<') {
            if (outend - out < 4) break;
            *out++ = '&';
            *out++ = 'l';
@@ -416,7 +420,7 @@ xmlNewSaveCtxt(const char *encoding, int options)
 
 /************************************************************************
  *                                                                     *
- *             Dumping XML tree content to a simple buffer             *
+ *             Dumping XML tree content to a simple buffer             *
  *                                                                     *
  ************************************************************************/
 /**
@@ -436,14 +440,14 @@ xmlAttrSerializeContent(xmlOutputBufferPtr buf, xmlAttrPtr attr)
     while (children != NULL) {
         switch (children->type) {
             case XML_TEXT_NODE:
-               xmlAttrSerializeTxtContent(buf->buffer, attr->doc,
-                                          attr, children->content);
+               xmlBufAttrSerializeTxtContent(buf->buffer, attr->doc,
+                                             attr, children->content);
                break;
             case XML_ENTITY_REF_NODE:
-                xmlBufferAdd(buf->buffer, BAD_CAST "&", 1);
-                xmlBufferAdd(buf->buffer, children->name,
+                xmlBufAdd(buf->buffer, BAD_CAST "&", 1);
+                xmlBufAdd(buf->buffer, children->name,
                              xmlStrlen(children->name));
-                xmlBufferAdd(buf->buffer, BAD_CAST ";", 1);
+                xmlBufAdd(buf->buffer, BAD_CAST ";", 1);
                 break;
             default:
                 /* should not happen unless we have a badly built tree */
@@ -453,9 +457,99 @@ xmlAttrSerializeContent(xmlOutputBufferPtr buf, xmlAttrPtr attr)
     }
 }
 
+/**
+ * xmlBufDumpNotationTable:
+ * @buf:  an xmlBufPtr output
+ * @table:  A notation table
+ *
+ * This will dump the content of the notation table as an XML DTD definition
+ */
+void
+xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table) {
+    xmlBufferPtr buffer;
+
+    buffer = xmlBufferCreate();
+    if (buffer == NULL) {
+        /*
+         * TODO set the error in buf
+         */
+        return;
+    }
+    xmlDumpNotationTable(buffer, table);
+    xmlBufMergeBuffer(buf, buffer);
+}
+
+/**
+ * xmlBufDumpElementDecl:
+ * @buf:  an xmlBufPtr output
+ * @elem:  An element table
+ *
+ * This will dump the content of the element declaration as an XML
+ * DTD definition
+ */
+void
+xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem) {
+    xmlBufferPtr buffer;
+
+    buffer = xmlBufferCreate();
+    if (buffer == NULL) {
+        /*
+         * TODO set the error in buf
+         */
+        return;
+    }
+    xmlDumpElementDecl(buffer, elem);
+    xmlBufMergeBuffer(buf, buffer);
+}
+
+/**
+ * xmlBufDumpAttributeDecl:
+ * @buf:  an xmlBufPtr output
+ * @attr:  An attribute declaration
+ *
+ * This will dump the content of the attribute declaration as an XML
+ * DTD definition
+ */
+void
+xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr) {
+    xmlBufferPtr buffer;
+
+    buffer = xmlBufferCreate();
+    if (buffer == NULL) {
+        /*
+         * TODO set the error in buf
+         */
+        return;
+    }
+    xmlDumpAttributeDecl(buffer, attr);
+    xmlBufMergeBuffer(buf, buffer);
+}
+
+/**
+ * xmlBufDumpEntityDecl:
+ * @buf:  an xmlBufPtr output
+ * @ent:  An entity table
+ *
+ * This will dump the content of the entity table as an XML DTD definition
+ */
+void
+xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent) {
+    xmlBufferPtr buffer;
+
+    buffer = xmlBufferCreate();
+    if (buffer == NULL) {
+        /*
+         * TODO set the error in buf
+         */
+        return;
+    }
+    xmlDumpEntityDecl(buffer, ent);
+    xmlBufMergeBuffer(buf, buffer);
+}
+
 /************************************************************************
  *                                                                     *
- *             Dumping XML tree content to an I/O output buffer        *
+ *             Dumping XML tree content to an I/O output buffer        *
  *                                                                     *
  ************************************************************************/
 
@@ -469,7 +563,7 @@ static int xmlSaveSwitchEncoding(xmlSaveCtxtPtr ctxt, const char *encoding) {
                       (const char *)encoding);
            return(-1);
        }
-       buf->conv = xmlBufferCreate();
+       buf->conv = xmlBufCreate();
        if (buf->conv == NULL) {
            xmlCharEncCloseFunc(buf->encoder);
            xmlSaveErrMemory("creating encoding buffer");
@@ -478,7 +572,7 @@ static int xmlSaveSwitchEncoding(xmlSaveCtxtPtr ctxt, const char *encoding) {
        /*
         * initialize the state, e.g. if outputting a BOM
         */
-       xmlCharEncOutFunc(buf->encoder, buf->conv, NULL);
+        xmlCharEncOutput(buf, 1);
     }
     return(0);
 }
@@ -487,7 +581,7 @@ static int xmlSaveClearEncoding(xmlSaveCtxtPtr ctxt) {
     xmlOutputBufferPtr buf = ctxt->buf;
     xmlOutputBufferFlush(buf);
     xmlCharEncCloseFunc(buf->encoder);
-    xmlBufferFree(buf->conv);
+    xmlBufFree(buf->conv);
     buf->encoder = NULL;
     buf->conv = NULL;
     return(0);
@@ -553,7 +647,7 @@ xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur, xmlSaveCtxtPtr ctxt) {
        } else
            xmlOutputBufferWrite(buf, 5, "xmlns");
        xmlOutputBufferWrite(buf, 1, "=");
-       xmlBufferWriteQuotedString(buf->buffer, cur->href);
+       xmlBufWriteQuotedString(buf->buffer, cur->href);
     }
 }
 
@@ -606,7 +700,7 @@ xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) {
  * xmlDtdDumpOutput:
  * @buf:  the XML buffer output
  * @dtd:  the pointer to the DTD
- * 
+ *
  * Dump the XML document DTD, if any.
  */
 static void
@@ -623,12 +717,12 @@ xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) {
     xmlOutputBufferWriteString(buf, (const char *)dtd->name);
     if (dtd->ExternalID != NULL) {
        xmlOutputBufferWrite(buf, 8, " PUBLIC ");
-       xmlBufferWriteQuotedString(buf->buffer, dtd->ExternalID);
+       xmlBufWriteQuotedString(buf->buffer, dtd->ExternalID);
        xmlOutputBufferWrite(buf, 1, " ");
-       xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID);
+       xmlBufWriteQuotedString(buf->buffer, dtd->SystemID);
     }  else if (dtd->SystemID != NULL) {
        xmlOutputBufferWrite(buf, 8, " SYSTEM ");
-       xmlBufferWriteQuotedString(buf->buffer, dtd->SystemID);
+       xmlBufWriteQuotedString(buf->buffer, dtd->SystemID);
     }
     if ((dtd->entities == NULL) && (dtd->elements == NULL) &&
         (dtd->attributes == NULL) && (dtd->notations == NULL) &&
@@ -643,7 +737,8 @@ xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) {
      */
     if ((dtd->notations != NULL) && ((dtd->doc == NULL) ||
         (dtd->doc->intSubset == dtd))) {
-        xmlDumpNotationTable(buf->buffer, (xmlNotationTablePtr) dtd->notations);
+        xmlBufDumpNotationTable(buf->buffer,
+                                (xmlNotationTablePtr) dtd->notations);
     }
     format = ctxt->format;
     level = ctxt->level;
@@ -724,7 +819,7 @@ xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
             (cur->type == XML_COMMENT_NODE) ||
             (cur->type == XML_PI_NODE)))
            xmlOutputBufferWrite(buf, ctxt->indent_size *
-                                (ctxt->level > ctxt->indent_nr ? 
+                                (ctxt->level > ctxt->indent_nr ?
                                  ctxt->indent_nr : ctxt->level),
                                 ctxt->indent);
         xmlNodeDumpOutputInternal(ctxt, cur);
@@ -841,15 +936,15 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
        return;
     }
     if (cur->type == XML_ELEMENT_DECL) {
-        xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
+        xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
        return;
     }
     if (cur->type == XML_ATTRIBUTE_DECL) {
-        xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
+        xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
        return;
     }
     if (cur->type == XML_ENTITY_DECL) {
-        xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
+        xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
        return;
     }
     if (cur->type == XML_TEXT_NODE) {
@@ -980,7 +1075,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
        if (ctxt->level > 0) ctxt->level--;
        if ((xmlIndentTreeOutput) && (ctxt->format == 1))
            xmlOutputBufferWrite(buf, ctxt->indent_size *
-                                (ctxt->level > ctxt->indent_nr ? 
+                                (ctxt->level > ctxt->indent_nr ?
                                  ctxt->indent_nr : ctxt->level),
                                 ctxt->indent);
     }
@@ -1096,13 +1191,13 @@ xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) {
         */
        if ((ctxt->options & XML_SAVE_NO_DECL) == 0) {
            xmlOutputBufferWrite(buf, 14, "<?xml version=");
-           if (cur->version != NULL) 
-               xmlBufferWriteQuotedString(buf->buffer, cur->version);
+           if (cur->version != NULL)
+               xmlBufWriteQuotedString(buf->buffer, cur->version);
            else
                xmlOutputBufferWrite(buf, 5, "\"1.0\"");
            if (encoding != NULL) {
                xmlOutputBufferWrite(buf, 10, " encoding=");
-               xmlBufferWriteQuotedString(buf->buffer, (xmlChar *) encoding);
+               xmlBufWriteQuotedString(buf->buffer, (xmlChar *) encoding);
            }
            switch (cur->standalone) {
                case 0:
@@ -1260,7 +1355,7 @@ xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
        if ((cur->ns != NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")) &&
            (xmlStrEqual(cur->ns->prefix, BAD_CAST "xml")))
            xml_lang = cur;
-       else if ((cur->ns == NULL) && 
+       else if ((cur->ns == NULL) &&
                 ((cur->children == NULL) ||
                  (cur->children->content == NULL) ||
                  (cur->children->content[0] == 0)) &&
@@ -1300,7 +1395,7 @@ xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
        xmlOutputBufferWrite(buf, 11, " xml:lang=\"");
        xmlAttrSerializeContent(buf, lang);
        xmlOutputBufferWrite(buf, 1, "\"");
-    } else 
+    } else
     if ((xml_lang != NULL) && (lang == NULL)) {
        xmlOutputBufferWrite(buf, 7, " lang=\"");
        xmlAttrSerializeContent(buf, xml_lang);
@@ -1331,7 +1426,7 @@ xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
        if ((ctxt->format == 1) && (xmlIndentTreeOutput) &&
            (cur->type == XML_ELEMENT_NODE))
            xmlOutputBufferWrite(buf, ctxt->indent_size *
-                                (ctxt->level > ctxt->indent_nr ? 
+                                (ctxt->level > ctxt->indent_nr ?
                                  ctxt->indent_nr : ctxt->level),
                                 ctxt->indent);
         xhtmlNodeDumpOutput(ctxt, cur);
@@ -1370,6 +1465,10 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
        return;
     if (cur->type == XML_XINCLUDE_END)
        return;
+    if (cur->type == XML_NAMESPACE_DECL) {
+       xmlNsDumpOutputCtxt(ctxt, (xmlNsPtr) cur);
+       return;
+    }
     if (cur->type == XML_DTD_NODE) {
         xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur);
        return;
@@ -1380,15 +1479,15 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
     }
     buf = ctxt->buf;
     if (cur->type == XML_ELEMENT_DECL) {
-        xmlDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
+        xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
        return;
     }
     if (cur->type == XML_ATTRIBUTE_DECL) {
-        xmlDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
+        xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
        return;
     }
     if (cur->type == XML_ENTITY_DECL) {
-        xmlDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
+        xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
        return;
     }
     if (cur->type == XML_TEXT_NODE) {
@@ -1468,7 +1567,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
     if (format == 1) {
        tmp = cur->children;
        while (tmp != NULL) {
-           if ((tmp->type == XML_TEXT_NODE) || 
+           if ((tmp->type == XML_TEXT_NODE) ||
                (tmp->type == XML_ENTITY_REF_NODE)) {
                format = 0;
                break;
@@ -1496,10 +1595,10 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
     if (cur->properties != NULL)
         xhtmlAttrListDumpOutput(ctxt, cur->properties);
 
-       if ((cur->type == XML_ELEMENT_NODE) && 
-               (cur->parent != NULL) && 
-               (cur->parent->parent == (xmlNodePtr) cur->doc) && 
-               xmlStrEqual(cur->name, BAD_CAST"head") && 
+       if ((cur->type == XML_ELEMENT_NODE) &&
+               (cur->parent != NULL) &&
+               (cur->parent->parent == (xmlNodePtr) cur->doc) &&
+               xmlStrEqual(cur->name, BAD_CAST"head") &&
                xmlStrEqual(cur->parent->name, BAD_CAST"html")) {
 
                tmp = cur->children;
@@ -1536,7 +1635,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
                                xmlOutputBufferWrite(buf, 1, "\n");
                                if (xmlIndentTreeOutput)
                                        xmlOutputBufferWrite(buf, ctxt->indent_size *
-                                       (ctxt->level + 1 > ctxt->indent_nr ? 
+                                       (ctxt->level + 1 > ctxt->indent_nr ?
                                        ctxt->indent_nr : ctxt->level + 1), ctxt->indent);
                        }
                        xmlOutputBufferWriteString(buf,
@@ -1571,7 +1670,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
                        xmlOutputBufferWrite(buf, 1, "\n");
                        if (xmlIndentTreeOutput)
                                xmlOutputBufferWrite(buf, ctxt->indent_size *
-                               (ctxt->level + 1 > ctxt->indent_nr ? 
+                               (ctxt->level + 1 > ctxt->indent_nr ?
                                ctxt->indent_nr : ctxt->level + 1), ctxt->indent);
                }
                xmlOutputBufferWriteString(buf,
@@ -1661,7 +1760,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
 
     if (cur->children != NULL) {
        int indent = ctxt->format;
-       
+
        if (format == 1) xmlOutputBufferWrite(buf, 1, "\n");
        if (ctxt->level >= 0) ctxt->level++;
        ctxt->format = format;
@@ -1670,7 +1769,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
        ctxt->format = indent;
        if ((xmlIndentTreeOutput) && (format == 1))
            xmlOutputBufferWrite(buf, ctxt->indent_size *
-                                (ctxt->level > ctxt->indent_nr ? 
+                                (ctxt->level > ctxt->indent_nr ?
                                  ctxt->indent_nr : ctxt->level),
                                 ctxt->indent);
     }
@@ -1936,18 +2035,19 @@ xmlSaveSetAttrEscape(xmlSaveCtxtPtr ctxt, xmlCharEncodingOutputFunc escape)
  *             Public entry points based on buffers                    *
  *                                                                     *
  ************************************************************************/
+
 /**
- * xmlAttrSerializeTxtContent:
- * @buf:  the XML buffer output
+ * xmlBufAttrSerializeTxtContent:
+ * @buf:  and xmlBufPtr output
  * @doc:  the document
  * @attr: the attribute node
  * @string: the text content
  *
- * Serialize text attribute values to an xml simple buffer
+ * Serialize text attribute values to an xmlBufPtr
  */
 void
-xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
-                           xmlAttrPtr attr, const xmlChar * string)
+xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
+                              xmlAttrPtr attr, const xmlChar * string)
 {
     xmlChar *base, *cur;
 
@@ -1957,44 +2057,44 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
     while (*cur != 0) {
         if (*cur == '\n') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&#10;", 5);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&#10;", 5);
             cur++;
             base = cur;
         } else if (*cur == '\r') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&#13;", 5);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&#13;", 5);
             cur++;
             base = cur;
         } else if (*cur == '\t') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&#9;", 4);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&#9;", 4);
             cur++;
             base = cur;
         } else if (*cur == '"') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&quot;", 6);
             cur++;
             base = cur;
         } else if (*cur == '<') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&lt;", 4);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&lt;", 4);
             cur++;
             base = cur;
         } else if (*cur == '>') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&gt;", 4);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&gt;", 4);
             cur++;
             base = cur;
         } else if (*cur == '&') {
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
-            xmlBufferAdd(buf, BAD_CAST "&amp;", 5);
+                xmlBufAdd(buf, base, cur - base);
+            xmlBufAdd(buf, BAD_CAST "&amp;", 5);
             cur++;
             base = cur;
         } else if ((*cur >= 0x80) && ((doc == NULL) ||
@@ -2006,13 +2106,13 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
             int val = 0, l = 1;
 
             if (base != cur)
-                xmlBufferAdd(buf, base, cur - base);
+                xmlBufAdd(buf, base, cur - base);
             if (*cur < 0xC0) {
                 xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL);
                 if (doc != NULL)
                     doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
                xmlSerializeHexCharRef(tmp, *cur);
-                xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+                xmlBufAdd(buf, (xmlChar *) tmp, -1);
                 cur++;
                 base = cur;
                 continue;
@@ -2042,9 +2142,9 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
                 xmlSaveErr(XML_SAVE_CHAR_INVALID, (xmlNodePtr) attr, NULL);
                 if (doc != NULL)
                     doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
-               
+
                xmlSerializeHexCharRef(tmp, *cur);
-                xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+                xmlBufAdd(buf, (xmlChar *) tmp, -1);
                 cur++;
                 base = cur;
                 continue;
@@ -2054,7 +2154,7 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
              * as a char ref
              */
            xmlSerializeHexCharRef(tmp, val);
-            xmlBufferAdd(buf, (xmlChar *) tmp, -1);
+            xmlBufAdd(buf, (xmlChar *) tmp, -1);
             cur += l;
             base = cur;
         } else {
@@ -2062,7 +2162,31 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
         }
     }
     if (base != cur)
-        xmlBufferAdd(buf, base, cur - base);
+        xmlBufAdd(buf, base, cur - base);
+}
+
+/**
+ * xmlAttrSerializeTxtContent:
+ * @buf:  the XML buffer output
+ * @doc:  the document
+ * @attr: the attribute node
+ * @string: the text content
+ *
+ * Serialize text attribute values to an xml simple buffer
+ */
+void
+xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
+                           xmlAttrPtr attr, const xmlChar * string)
+{
+    xmlBufPtr buffer;
+
+    if ((buf == NULL) || (string == NULL))
+        return;
+    buffer = xmlBufFromBuffer(buf);
+    if (buffer == NULL)
+        return;
+    xmlBufAttrSerializeTxtContent(buffer, doc, attr, string);
+    xmlBufBackToBuffer(buffer);
 }
 
 /**
@@ -2076,6 +2200,8 @@ xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
  * Dump an XML node, recursive behaviour,children are printed too.
  * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
  * or xmlKeepBlanksDefault(0) was called
+ * Since this is using xmlBuffer structures it is limited to 2GB and somehow
+ * deprecated, use xmlBufNodeDump() instead.
  *
  * Returns the number of bytes written to the buffer or -1 in case of error
  */
@@ -2083,9 +2209,45 @@ int
 xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
             int format)
 {
-    unsigned int use;
+    xmlBufPtr buffer;
+    int ret;
+
+    if ((buf == NULL) || (cur == NULL))
+        return(-1);
+    buffer = xmlBufFromBuffer(buf);
+    if (buffer == NULL)
+        return(-1);
+    ret = xmlBufNodeDump(buffer, doc, cur, level, format);
+    xmlBufBackToBuffer(buffer);
+    if (ret > INT_MAX)
+        return(-1);
+    return((int) ret);
+}
+
+/**
+ * xmlBufNodeDump:
+ * @buf:  the XML buffer output
+ * @doc:  the document
+ * @cur:  the current node
+ * @level: the imbrication level for indenting
+ * @format: is formatting allowed
+ *
+ * Dump an XML node, recursive behaviour,children are printed too.
+ * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
+ * or xmlKeepBlanksDefault(0) was called
+ *
+ * Returns the number of bytes written to the buffer, in case of error 0
+ *     is returned or @buf stores the error
+ */
+
+size_t
+xmlBufNodeDump(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
+            int format)
+{
+    size_t use;
     int ret;
     xmlOutputBufferPtr outbuf;
+    int oldalloc;
 
     xmlInitParser();
 
@@ -2116,10 +2278,13 @@ xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
     outbuf->context = NULL;
     outbuf->written = 0;
 
-    use = buf->use;
+    use = xmlBufUse(buf);
+    oldalloc = xmlBufGetAllocationScheme(buf);
+    xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_DOUBLEIT);
     xmlNodeDumpOutput(outbuf, doc, cur, level, format, NULL);
+    xmlBufSetAllocationScheme(buf, oldalloc);
     xmlFree(outbuf);
-    ret = buf->use - use;
+    ret = xmlBufUse(buf) - use;
     return (ret);
 }
 
@@ -2299,11 +2464,11 @@ xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr,
     xmlDocContentDumpOutput(&ctxt, out_doc);
     xmlOutputBufferFlush(out_buff);
     if (out_buff->conv != NULL) {
-       *doc_txt_len = out_buff->conv->use;
-       *doc_txt_ptr = xmlStrndup(out_buff->conv->content, *doc_txt_len);
+       *doc_txt_len = xmlBufUse(out_buff->conv);
+       *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->conv), *doc_txt_len);
     } else {
-       *doc_txt_len = out_buff->buffer->use;
-       *doc_txt_ptr = xmlStrndup(out_buff->buffer->content, *doc_txt_len);
+       *doc_txt_len = xmlBufUse(out_buff->buffer);
+       *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->buffer),*doc_txt_len);
     }
     (void)xmlOutputBufferClose(out_buff);
 
@@ -2547,7 +2712,7 @@ xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur,
 #ifdef HAVE_ZLIB_H
     if (cur->compression < 0) cur->compression = xmlGetCompressMode();
 #endif
-    /* 
+    /*
      * save the content to a temp buffer.
      */
     buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
index 2fb2151..0657b66 100644 (file)
 #endif
 
 #define UNBOUNDED (1 << 30)
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -975,6 +975,7 @@ struct _xmlSchemaValidCtxt {
     xmlSAXHandlerPtr sax;
     xmlParserCtxtPtr parserCtxt;
     void *user_data; /* TODO: What is this for? */
+    char *filename;
 
     int err;
     int nberrors;
@@ -1028,6 +1029,10 @@ struct _xmlSchemaValidCtxt {
     int hasKeyrefs;
     int createIDCNodeTables;
     int psviExposeIDCNodeTables;
+
+    /* Locator for error reporting in streaming mode */
+    xmlSchemaValidityLocatorFunc locFunc;
+    void *locCtxt;
 };
 
 /**
@@ -1043,9 +1048,9 @@ struct _xmlSchemaSubstGroup {
 };
 
 /************************************************************************
- *                                                                     *
- *                     Some predeclarations                            *
- *                                                                     *
+ *                                                                     *
+ *                     Some predeclarations                            *
+ *                                                                     *
  ************************************************************************/
 
 static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,
@@ -1098,7 +1103,7 @@ xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
 
 /************************************************************************
  *                                                                     *
- *                     Helper functions                                *
+ *                     Helper functions                                *
  *                                                                     *
  ************************************************************************/
 
@@ -1466,7 +1471,7 @@ xmlSchemaWildcardPCToString(int pc)
  * @retValue: the returned value
  * @ws: the whitespace type of the value
  *
- * Get a the cononical representation of the value.
+ * Get a the canonical representation of the value.
  * The caller has to free the returned retValue.
  *
  * Returns 0 if the value could be built and -1 in case of
@@ -1836,7 +1841,7 @@ xmlSchemaFormatFacetEnumSet(xmlSchemaAbstractCtxtPtr actxt,
 
 /************************************************************************
  *                                                                     *
- *                     Error functions                                 *
+ *                     Error functions                                 *
  *                                                                     *
  ************************************************************************/
 
@@ -1974,7 +1979,7 @@ xmlSchemaPErrExt(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error,
 
 /************************************************************************
  *                                                                     *
- *                     Allround error functions                        *
+ *                     Allround error functions                        *
  *                                                                     *
  ************************************************************************/
 
@@ -2034,6 +2039,7 @@ xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt,
        if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
            xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt;
            const char *file = NULL;
+           int col = 0;
            if (errorLevel != XML_ERR_WARNING) {
                vctxt->nberrors++;
                vctxt->err = error;
@@ -2062,6 +2068,7 @@ xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt,
                    (vctxt->parserCtxt->input != NULL)) {
                    file = vctxt->parserCtxt->input->filename;
                    line = vctxt->parserCtxt->input->line;
+                   col = vctxt->parserCtxt->input->col;
                }
            } else {
                /*
@@ -2078,11 +2085,25 @@ xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt,
                    (vctxt->parserCtxt->input != NULL))
                    file = vctxt->parserCtxt->input->filename;
            }
+           if (vctxt->locFunc != NULL) {
+               if ((file == NULL) || (line == 0)) {
+                   unsigned long l;
+                   const char *f;
+                   vctxt->locFunc(vctxt->locCtxt, &f, &l);
+                   if (file == NULL)
+                       file = f;
+                   if (line == 0)
+                       line = (int) l;
+               }
+           }
+           if ((file == NULL) && (vctxt->filename != NULL))
+               file = vctxt->filename;
+
            __xmlRaiseError(schannel, channel, data, ctxt,
                node, XML_FROM_SCHEMASV,
                error, errorLevel, file, line,
                (const char *) str1, (const char *) str2,
-               (const char *) str3, 0, 0, msg, str1, str2, str3, str4);
+               (const char *) str3, 0, col, msg, str1, str2, str3, str4);
 
        } else if (ctxt->type == XML_SCHEMA_CTXT_PARSER) {
            xmlSchemaParserCtxtPtr pctxt = (xmlSchemaParserCtxtPtr) ctxt;
@@ -3199,25 +3220,25 @@ xmlSchemaPContentErr(xmlSchemaParserCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Streamable error functions                      *
- *                                                                     *
+ *                                                                     *
+ *                     Streamable error functions                      *
+ *                                                                     *
  ************************************************************************/
 
 
 
 
 /************************************************************************
- *                                                                     *
- *                     Validation helper functions                     *
- *                                                                     *
+ *                                                                     *
+ *                     Validation helper functions                     *
+ *                                                                     *
  ************************************************************************/
 
 
 /************************************************************************
- *                                                                     *
- *                     Allocation functions                            *
- *                                                                     *
+ *                                                                     *
+ *                     Allocation functions                            *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -4135,9 +4156,9 @@ xmlSchemaFree(xmlSchemaPtr schema)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Debug functions                                 *
- *                                                                     *
+ *                                                                     *
+ *                     Debug functions                                 *
+ *                                                                     *
  ************************************************************************/
 
 #ifdef LIBXML_OUTPUT_ENABLED
@@ -4587,7 +4608,7 @@ xmlSchemaDebugDumpIDCTable(FILE * output,
 
 /************************************************************************
  *                                                                     *
- *                     Utilities                                       *
+ *                     Utilities                                       *
  *                                                                     *
  ************************************************************************/
 
@@ -4692,9 +4713,9 @@ xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Parsing functions                               *
- *                                                                     *
+ *                                                                     *
+ *                     Parsing functions                               *
+ *                                                                     *
  ************************************************************************/
 
 #define WXS_FIND_GLOBAL_ITEM(slot)                     \
@@ -4966,9 +4987,9 @@ xmlSchemaGetNamedComponent(xmlSchemaPtr schema,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Parsing functions                               *
- *                                                                     *
+ *                                                                     *
+ *                     Parsing functions                               *
+ *                                                                     *
  ************************************************************************/
 
 #define IS_BLANK_NODE(n)                                               \
@@ -5743,9 +5764,9 @@ xmlSchemaAddElementSubstitutionMember(xmlSchemaParserCtxtPtr pctxt,
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *             Utilities for parsing                                   *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -5939,7 +5960,7 @@ xmlSchemaPValAttrNodeID(xmlSchemaParserCtxtPtr ctxt, xmlAttrPtr attr)
                xmlFree((xmlChar *) value);
                value = strip;
            }
-           res = xmlAddID(NULL, attr->doc, value, attr);
+           res = xmlAddID(NULL, attr->doc, value, attr);
            if (res == NULL) {
                ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
                xmlSchemaPSimpleTypeErr(ctxt,
@@ -6120,7 +6141,7 @@ xmlSchemaPGetBoolNodeValue(xmlSchemaParserCtxtPtr ctxt,
     value = xmlNodeGetContent(node);
     /*
     * 3.2.2.1 Lexical representation
-    * An instance of a datatype that is defined as �boolean�
+    * An instance of a datatype that is defined as `boolean`
     * can have the following legal literals {true, false, 1, 0}.
     */
     if (xmlStrEqual(BAD_CAST value, BAD_CAST "true"))
@@ -6168,7 +6189,7 @@ xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt,
         return (def);
     /*
     * 3.2.2.1 Lexical representation
-    * An instance of a datatype that is defined as �boolean�
+    * An instance of a datatype that is defined as `boolean`
     * can have the following legal literals {true, false, 1, 0}.
     */
     if (xmlStrEqual(val, BAD_CAST "true"))
@@ -6191,9 +6212,9 @@ xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt,
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *             Shema extraction from an Infoset                        *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr
                                                  ctxt, xmlSchemaPtr schema,
@@ -7698,8 +7719,8 @@ xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
        /*
        * SPEC src-redefine:
        * (7.1) "If it has an <attributeGroup> among its contents
-       * the �actual value� of whose ref [attribute] is the same
-       * as the �actual value� of its own name attribute plus
+       * the `actual value` of whose ref [attribute] is the same
+       * as the `actual value` of its own name attribute plus
        * target namespace, then it must have exactly one such group."
        */
        if (pctxt->redefCounter != 0) {
@@ -8227,7 +8248,7 @@ xmlSchemaParseIDCSelectorAndField(xmlSchemaParserCtxtPtr ctxt,
     */
     attr = xmlSchemaGetPropNode(node, "xpath");
     if (attr == NULL) {
-       xmlSchemaPMissingAttrErr(ctxt,
+       xmlSchemaPMissingAttrErr(ctxt,
            XML_SCHEMAP_S4S_ATTR_MISSING,
            NULL, node,
            "name", NULL);
@@ -8848,7 +8869,7 @@ xmlSchemaParseUnion(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
     type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION;
     /*
     * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
-    * then the �simple ur-type definition�."
+    * then the `simple ur-type definition`."
     */
     type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
     /*
@@ -9016,7 +9037,7 @@ xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
     type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
     /*
     * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
-    * then the �simple ur-type definition�."
+    * then the `simple ur-type definition`."
     */
     type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
     /*
@@ -9161,9 +9182,9 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
     }
     /*
     * TargetNamespace:
-    * SPEC "The �actual value� of the targetNamespace [attribute]
+    * SPEC "The `actual value` of the targetNamespace [attribute]
     * of the <schema> ancestor element information item if present,
-    * otherwise �absent�.
+    * otherwise `absent`.
     */
     if (topLevel == 0) {
 #ifdef ENABLE_NAMED_LOCALS
@@ -9298,8 +9319,8 @@ xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
     /*
     * REDEFINE: SPEC src-redefine (5)
     * "Within the [children], each <simpleType> must have a
-    * <restriction> among its [children] ... the �actual value� of whose
-    * base [attribute] must be the same as the �actual value� of its own
+    * <restriction> among its [children] ... the `actual value` of whose
+    * base [attribute] must be the same as the `actual value` of its own
     * name attribute plus target namespace;"
     */
     if (topLevel && ctxt->isRedefine && (! hasRestriction)) {
@@ -10383,7 +10404,7 @@ xmlSchemaAddSchemaDoc(xmlSchemaParserCtxtPtr pctxt,
        /*
        * Given that the schemaLocation [attribute] is only a hint, it is open
        * to applications to ignore all but the first <import> for a given
-       * namespace, regardless of the �actual value� of schemaLocation, but
+       * namespace, regardless of the `actual value` of schemaLocation, but
        * such a strategy risks missing useful information when new
        * schemaLocations are offered.
        *
@@ -10736,7 +10757,7 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
            XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
            NULL, node,
            xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
-           NULL, namespaceName, NULL, NULL, NULL);
+           NULL, schemaLocation, NULL, NULL, NULL);
        return (pctxt->err);
     }
     /*
@@ -10767,8 +10788,8 @@ xmlSchemaParseImport(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
     thisTargetNamespace = WXS_BUCKET(pctxt)->origTargetNamespace;
     if (namespaceName != NULL) {
        /*
-       * 1.1 If the namespace [attribute] is present, then its �actual value�
-       * must not match the �actual value� of the enclosing <schema>'s
+       * 1.1 If the namespace [attribute] is present, then its `actual value`
+       * must not match the `actual value` of the enclosing <schema>'s
        * targetNamespace [attribute].
        */
        if (xmlStrEqual(thisTargetNamespace, namespaceName)) {
@@ -10969,7 +10990,7 @@ xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
            * for inclusions, since the that was the feedback from the
            * schema people. I.e. the following spec piece will *not* be
            * satisfied:
-           * SPEC src-include: "It is not an error for the �actual value� of the
+           * SPEC src-include: "It is not an error for the `actual value` of the
            * schemaLocation [attribute] to fail to resolve it all, in which
            * case no corresponding inclusion is performed.
            * So do we need a warning report here?"
@@ -10986,7 +11007,7 @@ xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
            *
            * SPEC src-redefine (1)
            * "If there are any element information items among the [children]
-           * other than <annotation> then the �actual value� of the
+           * other than <annotation> then the `actual value` of the
            * schemaLocation [attribute] must successfully resolve."
            * TODO: Ask the WG if a the location has always to resolve
            * here as well!
@@ -11006,9 +11027,9 @@ xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
        if (bucket->origTargetNamespace != NULL) {
            /*
            * SPEC src-include (2.1)
-           * "SII has a targetNamespace [attribute], and its actual
-           * value� is identical to the �actual value� of the targetNamespace
-           * [attribute] of SII (which must have such an [attribute])."
+           * "SII has a targetNamespace [attribute], and its `actual
+           * value` is identical to the `actual value` of the targetNamespace
+           * [attribute] of SII' (which must have such an [attribute])."
            */
            if (pctxt->targetNamespace == NULL) {
                xmlSchemaCustomErr(ACTXT_CAST pctxt,
@@ -11356,8 +11377,8 @@ xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
                        /*
                        * SPEC src-redefine:
                        * (6.1) "If it has a <group> among its contents at
-                       * some level the �actual value� of whose ref
-                       * [attribute] is the same as the �actual value� of
+                       * some level the `actual value` of whose ref
+                       * [attribute] is the same as the `actual value` of
                        * its own name attribute plus target namespace, then
                        * all of the following must be true:"
                        * (6.1.1) "It must have exactly one such group."
@@ -11382,9 +11403,9 @@ xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
                            xmlChar *str = NULL;
                            /*
                            * SPEC src-redefine:
-                           * (6.1.2) "The �actual value� of both that
+                           * (6.1.2) "The `actual value` of both that
                            * group's minOccurs and maxOccurs [attribute]
-                           * must be 1 (or �absent�).
+                           * must be 1 (or `absent`).
                            */
                            xmlSchemaCustomErr(ACTXT_CAST ctxt,
                                XML_SCHEMAP_SRC_REDEFINE, child, NULL,
@@ -11498,8 +11519,8 @@ xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
     *
     * SPEC (1.2) "...otherwise (<restriction> has no <simpleType> "
     * among its [children]), the simple type definition which is
-    * the {content type} of the type definition �resolved� to by
-    * the �actual value� of the base [attribute]"
+    * the {content type} of the type definition `resolved` to by
+    * the `actual value` of the base [attribute]"
     */
     if (xmlSchemaPValAttrQName(ctxt, schema, NULL, node, "base",
        &(type->baseNs), &(type->base)) == 0)
@@ -11522,8 +11543,8 @@ xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
                /*
                * REDEFINE: SPEC src-redefine (5)
                * "Within the [children], each <simpleType> must have a
-               * <restriction> among its [children] ... the �actual value� of
-               * whose base [attribute] must be the same as the �actual value�
+               * <restriction> among its [children] ... the `actual value` of
+               * whose base [attribute] must be the same as the `actual value`
                * of its own name attribute plus target namespace;"
                */
                xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE,
@@ -12284,7 +12305,7 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
        * SPEC
        * "...the third alternative (neither <simpleContent> nor
        * <complexContent>) is chosen. This case is understood as shorthand
-       * for complex content restricting the �ur-type definition�, and the
+       * for complex content restricting the `ur-type definition`, and the
        * details of the mappings should be modified as necessary.
        */
        type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
@@ -12353,15 +12374,15 @@ xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
 }
 
 /************************************************************************
- *                                                                     *
- *                     Validating using Schemas                        *
- *                                                                     *
+ *                                                                     *
+ *                     Validating using Schemas                        *
+ *                                                                     *
  ************************************************************************/
 
 /************************************************************************
- *                                                                     *
- *                     Reading/Writing Schemas                         *
- *                                                                     *
+ *                                                                     *
+ *                     Reading/Writing Schemas                         *
+ *                                                                     *
  ************************************************************************/
 
 #if 0 /* Will be enabled if it is clear what options are needed. */
@@ -12938,6 +12959,15 @@ xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr pctxt,
                         if (tmp2 != 1) ret = 0;
                         sub = sub->next;
                     }
+
+                   /*
+                    * epsilon needed to block previous trans from
+                    * being allowed to enter back from another
+                    * construct
+                    */
+                   pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
+                                       pctxt->state, NULL);
+
                     if (particle->minOccurs == 0) {
                         xmlAutomataNewEpsilon(pctxt->am, oldstate,
                                               pctxt->state);
@@ -13183,8 +13213,8 @@ xmlSchemaResolveElementReferences(xmlSchemaElementPtr elemDecl,
     if ((elemDecl->subtypes == NULL) && (elemDecl->namedType != NULL)) {
        xmlSchemaTypePtr type;
 
-       /* (type definition) ... otherwise the type definition �resolved�
-       * to by the �actual value� of the type [attribute] ...
+       /* (type definition) ... otherwise the type definition `resolved`
+       * to by the `actual value` of the type [attribute] ...
        */
        type = xmlSchemaGetType(ctxt->schema, elemDecl->namedType,
            elemDecl->namedTypeNs);
@@ -13222,7 +13252,7 @@ xmlSchemaResolveElementReferences(xmlSchemaElementPtr elemDecl,
            /*
            * The type definitions is set to:
            * SPEC "...the {type definition} of the element
-           * declaration �resolved� to by the �actual value�
+           * declaration `resolved` to by the `actual value`
            * of the substitutionGroup [attribute], if present"
            */
            if (elemDecl->subtypes == NULL)
@@ -13260,8 +13290,8 @@ xmlSchemaResolveUnionMemberTypes(xmlSchemaParserCtxtPtr ctxt,
 
     /*
     * SPEC (1) "If the <union> alternative is chosen, then [Definition:]
-    * define the explicit members as the type definitions �resolved�
-    * to by the items in the �actual value� of the memberTypes [attribute],
+    * define the explicit members as the type definitions `resolved`
+    * to by the items in the `actual value` of the memberTypes [attribute],
     * if any, followed by the type definitions corresponding to the
     * <simpleType>s among the [children] of <union>, if any."
     */
@@ -13556,7 +13586,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        return (0);
     }
     /*
-    * 3 If both O1 and O2 are sets of (namespace names or �absent�),
+    * 3 If both O1 and O2 are sets of (namespace names or `absent`),
     * then the union of those sets must be the value.
     */
     if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
@@ -13590,7 +13620,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
     }
     /*
     * 4 If the two are negations of different values (namespace names
-    * or �absent�), then a pair of not and �absent� must be the value.
+    * or `absent`), then a pair of not and `absent` must be the value.
     */
     if ((completeWild->negNsSet != NULL) &&
        (curWild->negNsSet != NULL) &&
@@ -13632,7 +13662,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        if (nsFound && absentFound) {
            /*
            * 5.1 If the set S includes both the negated namespace
-           * name and �absent�, then any must be the value.
+           * name and `absent`, then any must be the value.
            */
            completeWild->any = 1;
            if (completeWild->nsSet != NULL) {
@@ -13646,7 +13676,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        } else if (nsFound && (!absentFound)) {
            /*
            * 5.2 If the set S includes the negated namespace name
-           * but not �absent�, then a pair of not and �absent� must
+           * but not `absent`, then a pair of not and `absent` must
            * be the value.
            */
            if (completeWild->nsSet != NULL) {
@@ -13661,7 +13691,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
            completeWild->negNsSet->value = NULL;
        } else if ((!nsFound) && absentFound) {
            /*
-           * 5.3 If the set S includes �absent� but not the negated
+           * 5.3 If the set S includes `absent` but not the negated
            * namespace name, then the union is not expressible.
            */
            xmlSchemaPErr(ctxt, completeWild->node,
@@ -13672,7 +13702,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        } else if ((!nsFound) && (!absentFound)) {
            /*
            * 5.4 If the set S does not include either the negated namespace
-           * name or �absent�, then whichever of O1 or O2 is a pair of not
+           * name or `absent`, then whichever of O1 or O2 is a pair of not
            * and a namespace name must be the value.
            */
            if (completeWild->negNsSet == NULL) {
@@ -13706,7 +13736,7 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        while (cur != NULL) {
            if (cur->value == NULL) {
                /*
-               * 6.1 If the set S includes �absent�, then any must be the
+               * 6.1 If the set S includes `absent`, then any must be the
                * value.
                */
                completeWild->any = 1;
@@ -13724,8 +13754,8 @@ xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
        }
        if (completeWild->negNsSet == NULL) {
            /*
-           * 6.2 If the set S does not include �absent�, then a pair of not
-           * and �absent� must be the value.
+           * 6.2 If the set S does not include `absent`, then a pair of not
+           * and `absent` must be the value.
            */
            if (completeWild->nsSet != NULL) {
                xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
@@ -13808,9 +13838,9 @@ xmlSchemaIntersectWildcards(xmlSchemaParserCtxtPtr ctxt,
     }
     /*
     * 3 If either O1 or O2 is a pair of not and a value (a namespace
-    * name or �absent�) and the other is a set of (namespace names or
-    * �absent�), then that set, minus the negated value if it was in
-    * the set, minus �absent� if it was in the set, must be the value.
+    * name or `absent`) and the other is a set of (namespace names or
+    * `absent`), then that set, minus the negated value if it was in
+    * the set, minus `absent` if it was in the set, must be the value.
     */
     if (((completeWild->negNsSet != NULL) && (curWild->nsSet != NULL)) ||
        ((curWild->negNsSet != NULL) && (completeWild->nsSet != NULL))) {
@@ -13859,7 +13889,7 @@ xmlSchemaIntersectWildcards(xmlSchemaParserCtxtPtr ctxt,
        return(0);
     }
     /*
-    * 4 If both O1 and O2 are sets of (namespace names or �absent�),
+    * 4 If both O1 and O2 are sets of (namespace names or `absent`),
     * then the intersection of those sets must be the value.
     */
     if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
@@ -13909,7 +13939,7 @@ xmlSchemaIntersectWildcards(xmlSchemaParserCtxtPtr ctxt,
     }
     /*
     * 6 If the one is a negation of a namespace name and the other
-    * is a negation of �absent�, then the one which is the negation
+    * is a negation of `absent`, then the one which is the negation
     * of a namespace name must be the value.
     */
     if ((completeWild->negNsSet != NULL) && (curWild->negNsSet != NULL) &&
@@ -13941,7 +13971,7 @@ xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub,
     if (super->any)
        return (0);
     /*
-    * 2.1 sub must be a pair of not and a namespace name or �absent�.
+    * 2.1 sub must be a pair of not and a namespace name or `absent`.
     * 2.2 super must be a pair of not and the same value.
     */
     if ((sub->negNsSet != NULL) &&
@@ -13949,7 +13979,7 @@ xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub,
        (sub->negNsSet->value == super->negNsSet->value))
        return (0);
     /*
-    * 3.1 sub must be a set whose members are either namespace names or �absent�.
+    * 3.1 sub must be a set whose members are either namespace names or `absent`.
     */
     if (sub->nsSet != NULL) {
        /*
@@ -13980,7 +14010,7 @@ xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub,
            xmlSchemaWildcardNsPtr cur;
            /*
            * 3.2.2 super must be a pair of not and a namespace name or
-           * �absent� and that value must not be in sub's set.
+           * `absent` and that value must not be in sub's set.
            */
            cur = sub->nsSet;
            while (cur != NULL) {
@@ -14142,7 +14172,7 @@ xmlSchemaCheckDerivationOKRestriction2to4(xmlSchemaParserCtxtPtr pctxt,
                        * SPEC (2.1.2) "R's {attribute declaration}'s
                        * {type definition} must be validly derived from
                        * B's {type definition} given the empty set as
-                       * defined in Type Derivation OK (Simple) (3.14.6)."
+                       * defined in Type Derivation OK (Simple) ($3.14.6)."
                        */
                        xmlSchemaPAttrUseErr4(pctxt,
                            XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2,
@@ -14174,8 +14204,8 @@ xmlSchemaCheckDerivationOKRestriction2to4(xmlSchemaParserCtxtPtr pctxt,
                        /*
                        * 2.1.3 ... one of the following must be true
                        *
-                       * 2.1.3.1 B's �effective value constraint� is
-                       * �absent� or default.
+                       * 2.1.3.1 B's `effective value constraint` is
+                       * `absent` or default.
                        */
                        if ((bEffValue != NULL) &&
                            (effFixed == 1)) {
@@ -14184,7 +14214,7 @@ xmlSchemaCheckDerivationOKRestriction2to4(xmlSchemaParserCtxtPtr pctxt,
                            xmlSchemaGetEffectiveValueConstraint(bcur,
                                &effFixed, &rEffValue, NULL);
                            /*
-                           * 2.1.3.2 R's �effective value constraint� is
+                           * 2.1.3.2 R's `effective value constraint` is
                            * fixed with the same string as B's.
                            * MAYBE TODO: Compare the computed values.
                            *       Hmm, it says "same string" so
@@ -14218,9 +14248,9 @@ not_found:
                /*
                * (2.2) "otherwise the {base type definition} must have an
                * {attribute wildcard} and the {target namespace} of the
-               * R's {attribute declaration} must be �valid� with respect
+               * R's {attribute declaration} must be `valid` with respect
                * to that wildcard, as defined in Wildcard allows Namespace
-               * Name (3.10.4)."
+               * Name ($3.10.4)."
                */
                if ((baseWild == NULL) ||
                    (xmlSchemaCheckCVCWildcardNamespace(baseWild,
@@ -14318,7 +14348,7 @@ not_found:
            * (4.2) "The complex type definition's {attribute wildcard}'s
            * {namespace constraint} must be a subset of the {base type
            * definition}'s {attribute wildcard}'s {namespace constraint},
-           * as defined by Wildcard Subset (3.10.6)."
+           * as defined by Wildcard Subset ($3.10.6)."
            */
            xmlSchemaCustomErr4(ACTXT_CAST pctxt,
                XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2,
@@ -14332,8 +14362,8 @@ not_found:
            FREE_AND_NULL(str);
            return(pctxt->err);
        }
-       /* 4.3 Unless the {base type definition} is the ur-type
-       * definition, the complex type definition's {attribute
+       /* 4.3 Unless the {base type definition} is the `ur-type
+       * definition`, the complex type definition's {attribute
        * wildcard}'s {process contents} must be identical to or
        * stronger than the {base type definition}'s {attribute
        * wildcard}'s {process contents}, where strict is stronger
@@ -14519,7 +14549,7 @@ inherit_next: {}
     if (WXS_IS_EXTENSION(type)) {
        if (baseType->attributeWildcard != NULL) {
            /*
-           * (3.2.2.1) "If the �base wildcard� is non-�absent�, then
+           * (3.2.2.1) "If the `base wildcard` is non-`absent`, then
            * the appropriate case among the following:"
            */
            if (type->attributeWildcard != NULL) {
@@ -14527,26 +14557,26 @@ inherit_next: {}
                * Union the complete wildcard with the base wildcard.
                * SPEC {attribute wildcard}
                * (3.2.2.1.2) "otherwise a wildcard whose {process contents}
-               * and {annotation} are those of the �complete wildcard�,
+               * and {annotation} are those of the `complete wildcard`,
                * and whose {namespace constraint} is the intensional union
-               * of the {namespace constraint} of the �complete wildcard�
-               * and of the �base wildcard�, as defined in Attribute
-               * Wildcard Union (3.10.6)."
+               * of the {namespace constraint} of the `complete wildcard`
+               * and of the `base wildcard`, as defined in Attribute
+               * Wildcard Union ($3.10.6)."
                */
                if (xmlSchemaUnionWildcards(pctxt, type->attributeWildcard,
                    baseType->attributeWildcard) == -1)
                    goto exit_failure;
            } else {
                /*
-               * (3.2.2.1.1) "If the �complete wildcard� is �absent�,
-               * then the �base wildcard�."
+               * (3.2.2.1.1) "If the `complete wildcard` is `absent`,
+               * then the `base wildcard`."
                */
                type->attributeWildcard = baseType->attributeWildcard;
            }
        } else {
            /*
-           * (3.2.2.2) "otherwise (the �base wildcard� is �absent�) the
-           * �complete wildcard"
+           * (3.2.2.2) "otherwise (the `base wildcard` is `absent`) the
+           * `complete wildcard`"
            * NOOP
            */
        }
@@ -14554,7 +14584,7 @@ inherit_next: {}
        /*
        * SPEC {attribute wildcard}
        * (3.1) "If the <restriction> alternative is chosen, then the
-       * �complete wildcard�;"
+       * `complete wildcard`;"
        * NOOP
        */
     }
@@ -14803,12 +14833,12 @@ xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
     /* 2.2 */
     if (type->baseType == baseType) {
        /*
-       * 2.2.1 D's �base type definition� is B.
+       * 2.2.1 D's `base type definition` is B.
        */
        return (0);
     }
     /*
-    * 2.2.2 D's �base type definition� is not the �ur-type definition�
+    * 2.2.2 D's `base type definition` is not the `ur-type definition`
     * and is validly derived from B given the subset, as defined by this
     * constraint.
     */
@@ -14818,8 +14848,8 @@ xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
        return (0);
     }
     /*
-    * 2.2.3 D's {variety} is list or union and B is the simple ur-type
-    * definition.
+    * 2.2.3 D's {variety} is list or union and B is the `simple ur-type
+    * definition`.
     */
     if (WXS_IS_ANY_SIMPLE_TYPE(baseType) &&
        (WXS_IS_LIST(type) || WXS_IS_UNION(type))) {
@@ -15131,14 +15161,14 @@ xmlSchemaCheckSTPropsCorrect(xmlSchemaParserCtxtPtr ctxt,
     * NOTE: This is somehow redundant, since we actually built a simple type
     * to have all the needed information; this acts as an self test.
     */
-    /* Base type: If the datatype has been �derived� by �restriction�
-    * then the Simple Type Definition component from which it is �derived�,
-    * otherwise the Simple Type Definition for anySimpleType (4.1.6).
+    /* Base type: If the datatype has been `derived` by `restriction`
+    * then the Simple Type Definition component from which it is `derived`,
+    * otherwise the Simple Type Definition for anySimpleType ($4.1.6).
     */
     if (baseType == NULL) {
        /*
        * TODO: Think about: "modulo the impact of Missing
-       * Sub-components (5.3)."
+       * Sub-components ($5.3)."
        */
        xmlSchemaPCustomErr(ctxt,
            XML_SCHEMAP_ST_PROPS_CORRECT_1,
@@ -15198,10 +15228,10 @@ xmlSchemaCheckSTPropsCorrect(xmlSchemaParserCtxtPtr ctxt,
     }
 
     /*
-    * 2 All simple type definitions must be derived ultimately from the simple
-    * ur-type definition (so� circular definitions are disallowed). That is, it
-    * must be possible to reach a built-in primitive datatype or the simple
-    * ur-type definition by repeatedly following the {base type definition}.
+    * 2 All simple type definitions must be derived ultimately from the `simple
+    * ur-type definition` (so circular definitions are disallowed). That is, it
+    * must be possible to reach a built-in primitive datatype or the `simple
+    * ur-type definition` by repeatedly following the {base type definition}.
     *
     * NOTE: this is done in xmlSchemaCheckTypeDefCircular().
     */
@@ -15385,10 +15415,10 @@ xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
            }
            /*
            * MAYBE TODO: (Hmm, not really) Datatypes states:
-           * A �list� datatype can be �derived� from an �atomic� datatype
-           * whose �lexical space� allows space (such as string or anyURI)or
-           * a �union� datatype any of whose {member type definitions}'s
-           * �lexical space� allows space.
+           * A `list` datatype can be `derived` from an `atomic` datatype
+           * whose `lexical space` allows space (such as string or anyURI)or
+           * a `union` datatype any of whose {member type definitions}'s
+           * `lexical space` allows space.
            */
        } else {
            /*
@@ -15425,7 +15455,7 @@ xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
            /*
            * 2.3.2.3 The {item type definition} must be validly derived
            * from the {base type definition}'s {item type definition} given
-           * the empty set, as defined in Type Derivation OK (Simple) (3.14.6).
+           * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6).
            */
            {
                xmlSchemaTypePtr baseItemType;
@@ -15472,7 +15502,7 @@ xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
                        case XML_SCHEMA_FACET_WHITESPACE:
                            /*
                            * TODO: 2.5.1.2 List datatypes
-                           * The value of �whiteSpace� is fixed to the value collapse.
+                           * The value of `whiteSpace` is fixed to the value collapse.
                            */
                        case XML_SCHEMA_FACET_PATTERN:
                        case XML_SCHEMA_FACET_ENUMERATION:
@@ -15525,8 +15555,8 @@ xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
            member = member->next;
        }
        /*
-       * 3.3.1 If the {base type definition} is the simple ur-type
-       * definition
+       * 3.3.1 If the {base type definition} is the `simple ur-type
+       * definition`
        */
        if (type->baseType->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) {
            /*
@@ -15588,7 +15618,7 @@ xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
            * 3.3.2.3 The {member type definitions}, in order, must be validly
            * derived from the corresponding type definitions in the {base
            * type definition}'s {member type definitions} given the empty set,
-           * as defined in Type Derivation OK (Simple) (3.14.6).
+           * as defined in Type Derivation OK (Simple) ($3.14.6).
            */
            {
                xmlSchemaTypeLinkPtr baseMember;
@@ -15695,7 +15725,7 @@ xmlSchemaCheckSRCSimpleType(xmlSchemaParserCtxtPtr ctxt,
     /*
     * src-simple-type.1 The corresponding simple type definition, if any,
     * must satisfy the conditions set out in Constraints on Simple Type
-    * Definition Schema Components (3.14.6).
+    * Definition Schema Components ($3.14.6).
     */
     if (WXS_IS_RESTRICTION(type)) {
        /*
@@ -15793,8 +15823,8 @@ xmlSchemaParseCheckCOSValidDefault(xmlSchemaParserCtxtPtr pctxt,
        * SPEC (2.1) "its {content type} must be a simple type definition
        * or mixed."
        * SPEC (2.2.2) "If the {content type} is mixed, then the {content
-       * type}'s particle must be �emptiable� as defined by
-       * Particle Emptiable (3.9.6)."
+       * type}'s particle must be `emptiable` as defined by
+       * Particle Emptiable ($3.9.6)."
        */
        if ((! WXS_HAS_SIMPLE_CONTENT(type)) &&
            ((! WXS_HAS_MIXED_CONTENT(type)) || (! WXS_EMPTIABLE(type)))) {
@@ -15810,14 +15840,14 @@ xmlSchemaParseCheckCOSValidDefault(xmlSchemaParserCtxtPtr pctxt,
     }
     /*
     * 1 If the type definition is a simple type definition, then the string
-    * must be �valid� with respect to that definition as defined by String
-    * Valid (3.14.4).
+    * must be `valid` with respect to that definition as defined by String
+    * Valid ($3.14.4).
     *
     * AND
     *
     * 2.2.1 If the {content type} is a simple type definition, then the
-    * string must be �valid� with respect to that simple type definition
-    * as defined by String Valid (3.14.4).
+    * string must be `valid` with respect to that simple type definition
+    * as defined by String Valid ($3.14.4).
     */
     if (WXS_IS_SIMPLE(type))
        ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node,
@@ -15858,8 +15888,8 @@ xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
     *
     * SPEC (1) "The values of the properties of a complex type definition must
     * be as described in the property tableau in The Complex Type Definition
-    * Schema Component (3.4.1), modulo the impact of Missing
-    * Sub-components (5.3)."
+    * Schema Component ($3.4.1), modulo the impact of Missing
+    * Sub-components ($5.3)."
     */
     if ((type->baseType != NULL) &&
        (WXS_IS_SIMPLE(type->baseType)) &&
@@ -15876,9 +15906,9 @@ xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
        return (XML_SCHEMAP_SRC_CT_1);
     }
     /*
-    * SPEC (3) "Circular definitions are disallowed, except for the ur-type
-    * definition�. That is, it must be possible to reach the �ur-type
-    * definition by repeatedly following the {base type definition}."
+    * SPEC (3) "Circular definitions are disallowed, except for the `ur-type
+    * definition`. That is, it must be possible to reach the `ur-type
+    * definition` by repeatedly following the {base type definition}."
     *
     * NOTE (3) is done in xmlSchemaCheckTypeDefCircular().
     */
@@ -16030,8 +16060,8 @@ xmlSchemaCheckCOSCTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
     if (type->baseType == baseType)
        return (0);
     /*
-    * SPEC (2.3.1) "D's {base type definition} must not be the ur-type
-    * definition."
+    * SPEC (2.3.1) "D's {base type definition} must not be the `ur-type
+    * definition`."
     */
     if (WXS_IS_ANYTYPE(type->baseType))
        return (1);
@@ -16048,7 +16078,7 @@ xmlSchemaCheckCOSCTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
        /*
        * SPEC (2.3.2.2) "If D's {base type definition} is simple, then it
        * must be validly derived from B given the subset as defined in Type
-       * Derivation OK (Simple) (3.14.6).
+       * Derivation OK (Simple) ($3.14.6).
        */
        return (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType,
            baseType, set));
@@ -16188,7 +16218,7 @@ xmlSchemaCheckCOSCTExtends(xmlSchemaParserCtxtPtr ctxt,
        * definition must also have one, and the base type definition's
        * {attribute  wildcard}'s {namespace constraint} must be a subset
        * of the complex  type definition's {attribute wildcard}'s {namespace
-       * constraint}, as defined by Wildcard Subset (3.10.6)."
+       * constraint}, as defined by Wildcard Subset ($3.10.6)."
        */
 
        /*
@@ -16285,9 +16315,9 @@ xmlSchemaCheckCOSCTExtends(xmlSchemaParserCtxtPtr ctxt,
                }
                /*
                * URGENT TODO SPEC (1.4.3.2.2.2) "The particle of the
-               * complex type definition must be a �valid extension�
+               * complex type definition must be a `valid extension`
                * of the {base type definition}'s particle, as defined
-               * in Particle Valid (Extension) (3.9.6)."
+               * in Particle Valid (Extension) ($3.9.6)."
                *
                * NOTE that we won't check "Particle Valid (Extension)",
                * since it is ensured by the derivation process in
@@ -16404,7 +16434,7 @@ xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
     if (base->builtInType == XML_SCHEMAS_ANYTYPE) {
        /*
        * SPEC (5.1) "The {base type definition} must be the
-       * �ur-type definition�."
+       * `ur-type definition`."
        * PASS
        */
     } else if ((type->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
@@ -16423,7 +16453,7 @@ xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
            * SPEC (5.2.2.1) "The {content type} of the {base type
            * definition} must be a simple type definition from which
            * the {content type} is validly derived given the empty
-           * set as defined in Type Derivation OK (Simple) (3.14.6)."
+           * set as defined in Type Derivation OK (Simple) ($3.14.6)."
            *
            * ATTENTION TODO: This seems not needed if the type implicitely
            * derived from the base type.
@@ -16454,8 +16484,8 @@ xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
                (xmlSchemaParticlePtr) base->subtypes))) {
            /*
            * SPEC (5.2.2.2) "The {base type definition} must be mixed
-           * and have a particle which is �emptiable� as defined in
-           * Particle Emptiable (3.9.6)."
+           * and have a particle which is `emptiable` as defined in
+           * Particle Emptiable ($3.9.6)."
            * PASS
            */
        } else {
@@ -16484,7 +16514,7 @@ xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
            /*
            * SPEC (5.3.2.2) "The {content type} of the {base type
            * definition} must be elementOnly or mixed and have a particle
-           * which is �emptiable� as defined in Particle Emptiable (�3.9.6)."
+           * which is `emptiable` as defined in Particle Emptiable ($3.9.6)."
            * PASS
            */
        } else {
@@ -16517,9 +16547,9 @@ xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
        }
        /*
        * SPEC (5.4.2) "The particle of the complex type definition itself
-       * must be a �valid restriction� of the particle of the {content
+       * must be a `valid restriction` of the particle of the {content
        * type} of the {base type definition} as defined in Particle Valid
-       * (Restriction) (3.9.6).
+       * (Restriction) ($3.9.6).
        *
        * URGENT TODO: (5.4.2)
        */
@@ -16588,7 +16618,7 @@ xmlSchemaCheckSRCCT(xmlSchemaParserCtxtPtr ctxt,
     if (! WXS_HAS_SIMPLE_CONTENT(type)) {
        /*
        * 1 If the <complexContent> alternative is chosen, the type definition
-       * �resolved� to by the �actual value� of the base [attribute]
+       * `resolved` to by the `actual value` of the base [attribute]
        * must be a complex type definition;
        */
        if (! WXS_IS_COMPLEX(base)) {
@@ -16608,7 +16638,7 @@ xmlSchemaCheckSRCCT(xmlSchemaParserCtxtPtr ctxt,
        * SPEC
        * 2 If the <simpleContent> alternative is chosen, all of the
        * following must be true:
-       * 2.1 The type definition �resolved� to by the �actual value� of the
+       * 2.1 The type definition `resolved` to by the `actual value` of the
        * base [attribute] must be one of the following:
        */
        if (WXS_IS_SIMPLE(base)) {
@@ -16714,14 +16744,14 @@ xmlSchemaCheckSRCCT(xmlSchemaParserCtxtPtr ctxt,
     /*
     * SPEC (3) "The corresponding complex type definition component must
     * satisfy the conditions set out in Constraints on Complex Type
-    * Definition Schema Components (3.4.6);"
+    * Definition Schema Components ($3.4.6);"
     * NOTE (3) will be done in xmlSchemaTypeFixup().
     */
     /*
     * SPEC (4) If clause 2.2.1 or clause 2.2.2 in the correspondence specification
     * above for {attribute wildcard} is satisfied, the intensional
     * intersection must be expressible, as defined in Attribute Wildcard
-    * Intersection (3.10.6).
+    * Intersection ($3.10.6).
     * NOTE (4) is done in xmlSchemaFixupTypeAttributeUses().
     */
     return (ret);
@@ -16792,7 +16822,7 @@ xmlSchemaCheckRCaseNameAndTypeOK(xmlSchemaParserCtxtPtr ctxt,
        return (1);
     /*
     * SPEC (2) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK (3.9.6)."
+    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
     */
     if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
            b->minOccurs, b->maxOccurs) != 0)
@@ -16884,19 +16914,19 @@ xmlSchemaCheckRCaseNSCompat(xmlSchemaParserCtxtPtr ctxt,
 {
     /* TODO:Error codes (rcase-NSCompat). */
     /*
-    * SPEC "For an element declaration particle to be a �valid restriction�
+    * SPEC "For an element declaration particle to be a `valid restriction`
     * of a wildcard particle all of the following must be true:"
     *
-    * SPEC (1) "The element declaration's {target namespace} is �valid�
+    * SPEC (1) "The element declaration's {target namespace} is `valid`
     * with respect to the wildcard's {namespace constraint} as defined by
-    * Wildcard allows Namespace Name (3.10.4)."
+    * Wildcard allows Namespace Name ($3.10.4)."
     */
     if (xmlSchemaCheckCVCWildcardNamespace((xmlSchemaWildcardPtr) b->children,
        ((xmlSchemaElementPtr) r->children)->targetNamespace) != 0)
        return (1);
     /*
     * SPEC (2) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK (3.9.6)."
+    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
     */
     if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
            b->minOccurs, b->maxOccurs) != 0)
@@ -16956,21 +16986,21 @@ xmlSchemaCheckRCaseNSSubset(xmlSchemaParserCtxtPtr ctxt,
     /* TODO: Error codes (rcase-NSSubset). */
     /*
     * SPEC (1) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK (3.9.6)."
+    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
     */
     if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
            b->minOccurs, b->maxOccurs))
        return (1);
     /*
     * SPEC (2) "R's {namespace constraint} must be an intensional subset
-    * of B's {namespace constraint} as defined by Wildcard Subset (3.10.6)."
+    * of B's {namespace constraint} as defined by Wildcard Subset ($3.10.6)."
     */
     if (xmlSchemaCheckCOSNSSubset((xmlSchemaWildcardPtr) r->children,
        (xmlSchemaWildcardPtr) b->children))
        return (1);
     /*
-    * SPEC (3) "Unless B is the content model wildcard of the ur-type
-    * definition, R's {process contents} must be identical to or stronger
+    * SPEC (3) "Unless B is the content model wildcard of the `ur-type
+    * definition`, R's {process contents} must be identical to or stronger
     * than B's {process contents}, where strict is stronger than lax is
     * stronger than skip."
     */
@@ -17048,12 +17078,12 @@ xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt,
     if ((r->children == NULL) || (r->children->children == NULL))
        return (-1);
     /*
-    * SPEC "For a group particle to be a �valid restriction� of a
+    * SPEC "For a group particle to be a `valid restriction` of a
     * wildcard particle..."
     *
-    * SPEC (1) "Every member of the {particles} of the group is a valid
-    * restriction of the wildcard as defined by
-    * Particle Valid (Restriction) (3.9.6)."
+    * SPEC (1) "Every member of the {particles} of the group is a `valid
+    * restriction` of the wildcard as defined by
+    * Particle Valid (Restriction) ($3.9.6)."
     */
     part = (xmlSchemaParticlePtr) r->children->children;
     do {
@@ -17064,7 +17094,7 @@ xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt,
     /*
     * SPEC (2) "The effective total range of the group [...] is a
     * valid restriction of B's occurrence range as defined by
-    * Occurrence Range OK (3.9.6)."
+    * Occurrence Range OK ($3.9.6)."
     */
     if (xmlSchemaCheckParticleRangeOK(
            xmlSchemaGetParticleTotalRangeMin(r),
@@ -17104,11 +17134,11 @@ xmlSchemaCheckRCaseRecurse(xmlSchemaParserCtxtPtr ctxt,
        (r->children->type != b->children->type))
        return (-1);
     /*
-    * SPEC "For an all or sequence group particle to be a valid
-    * restriction of another group particle with the same {compositor}..."
+    * SPEC "For an all or sequence group particle to be a `valid
+    * restriction` of another group particle with the same {compositor}..."
     *
     * SPEC (1) "R's occurrence range is a valid restriction of B's
-    * occurrence range as defined by Occurrence Range OK (3.9.6)."
+    * occurrence range as defined by Occurrence Range OK ($3.9.6)."
     */
     if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
            b->minOccurs, b->maxOccurs))
@@ -17732,7 +17762,7 @@ xmlSchemaFinishMemberTypeDefinitionsProperty(xmlSchemaParserCtxtPtr pctxt,
     xmlSchemaTypeLinkPtr link, lastLink, prevLink, subLink, newLink;
     /*
     * The actual value is then formed by replacing any union type
-    * definition in the �explicit members� with the members of their
+    * definition in the `explicit members` with the members of their
     * {member type definitions}, in order.
     *
     * TODO: There's a bug entry at
@@ -17866,8 +17896,8 @@ xmlSchemaTypeFixupWhitespace(xmlSchemaTypePtr type)
        }
     }
     /*
-    * For all �atomic� datatypes other than string (and types �derived�
-    * by �restriction� from it) the value of whiteSpace is fixed to
+    * For all `atomic` datatypes other than string (and types `derived`
+    * by `restriction` from it) the value of whiteSpace is fixed to
     * collapse
     */
     {
@@ -18056,7 +18086,7 @@ xmlSchemaFixupSimpleTypeStageTwo(xmlSchemaParserCtxtPtr pctxt,
     * SPEC src-simple-type 1
     * "The corresponding simple type definition, if any, must satisfy
     * the conditions set out in Constraints on Simple Type Definition
-    * Schema Components (3.14.6)."
+    * Schema Components ($3.14.6)."
     */
     /*
     * Schema Component Constraint: Simple Type Definition Properties Correct
@@ -18316,7 +18346,7 @@ xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt,
            ( ((xmlSchemaTreeItemPtr) particle->children)->children == NULL))) {
            if (type->flags & XML_SCHEMAS_TYPE_MIXED) {
                /*
-               * SPEC (2.1.4) "If the �effective mixed� is true, then
+               * SPEC (2.1.4) "If the `effective mixed` is true, then
                * a particle whose properties are as follows:..."
                *
                * Empty sequence model group with
@@ -18378,7 +18408,7 @@ xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt,
            if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) {
                /*
                * SPEC (3.2.1)
-               * "If the �effective content� is empty, then the
+               * "If the `effective content` is empty, then the
                *  {content type} of the [...] base ..."
                */
                type->contentType = baseType->contentType;
@@ -18485,7 +18515,7 @@ xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt,
                    particle->children =
                        ((xmlSchemaParticlePtr) baseType->subtypes)->children;
                    /*
-                   * SPEC "followed by the �effective content�."
+                   * SPEC "followed by the `effective content`."
                    */
                    particle->next = effectiveContent;
                    /*
@@ -18629,12 +18659,12 @@ xmlSchemaCheckFacet(xmlSchemaFacetPtr facet,
 
                /* 4.3.5.5 Constraints on enumeration Schema Components
                * Schema Component Constraint: enumeration valid restriction
-               * It is an �error� if any member of {value} is not in the
-               * �value space� of {base type definition}.
+               * It is an `error` if any member of {value} is not in the
+               * `value space` of {base type definition}.
                *
                * minInclusive, maxInclusive, minExclusive, maxExclusive:
-               * The value �must� be in the
-               * �value space� of the �base type�.
+               * The value `must` be in the
+               * `value space` of the `base type`.
                */
                /*
                * This function is intended to deliver a compiled value
@@ -19069,9 +19099,9 @@ xmlSchemaCheckAttrGroupCircular(xmlSchemaAttributeGroupPtr attrGr,
     * not be an <attributeGroup> with ref [attribute] which resolves
     * to the component corresponding to this <attributeGroup>. Indirect
     * circularity is also ruled out. That is, when QName resolution
-    * (Schema Document) (�3.15.3) is applied to a �QName� arising from
+    * (Schema Document) ($3.15.3) is applied to a `QName` arising from
     * any <attributeGroup>s with a ref [attribute] among the [children],
-    * it must not be the case that a �QName� is encountered at any depth
+    * it must not be the case that a `QName` is encountered at any depth
     * which resolves to the component corresponding to this <attributeGroup>.
     */
     if (attrGr->attrUses == NULL)
@@ -19328,8 +19358,8 @@ xmlSchemaCheckAGPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
     * SPEC ag-props-correct
     * (1) "The values of the properties of an attribute group definition
     * must be as described in the property tableau in The Attribute
-    * Group Definition Schema Component (3.6.1), modulo the impact of
-    * Missing Sub-components (5.3);"
+    * Group Definition Schema Component ($3.6.1), modulo the impact of
+    * Missing Sub-components ($5.3);"
     */
 
     if ((attrGr->attrUses != NULL) &&
@@ -19463,8 +19493,8 @@ xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
     * SPEC a-props-correct (1)
     * "The values of the properties of an attribute declaration must
     * be as described in the property tableau in The Attribute
-    * Declaration Schema Component (3.2.1), modulo the impact of
-    * Missing Sub-components (5.3)."
+    * Declaration Schema Component ($3.2.1), modulo the impact of
+    * Missing Sub-components ($5.3)."
     */
 
     if (WXS_ATTR_TYPEDEF(attr) == NULL)
@@ -19492,9 +19522,9 @@ xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
        /*
        * SPEC a-props-correct (2)
        * "if there is a {value constraint}, the canonical lexical
-       * representation of its value must be �valid� with respect
-       * to the {type definition} as defined in String Valid (3.14.4)."
-       * TODO: Don't care about the *cononical* stuff here, this requirement
+       * representation of its value must be `valid` with respect
+       * to the {type definition} as defined in String Valid ($3.14.4)."
+       * TODO: Don't care about the *canonical* stuff here, this requirement
        * will be removed in WXS 1.1 anyway.
        */
        ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt,
@@ -19561,15 +19591,15 @@ xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
     /*
     * SPEC (1) "The values of the properties of an element declaration
     * must be as described in the property tableau in The Element
-    * Declaration Schema Component (3.3.1), modulo the impact of Missing
-    * Sub-components (5.3)."
+    * Declaration Schema Component ($3.3.1), modulo the impact of Missing
+    * Sub-components ($5.3)."
     */
     if (WXS_SUBST_HEAD(elemDecl) != NULL) {
        xmlSchemaElementPtr head = WXS_SUBST_HEAD(elemDecl), circ;
 
        xmlSchemaCheckElementDeclComponent(head, pctxt);
        /*
-       * SPEC (3) "If there is a non-�absent� {substitution group
+       * SPEC (3) "If there is a non-`absent` {substitution group
        * affiliation}, then {scope} must be global."
        */
        if ((elemDecl->flags & XML_SCHEMAS_ELEM_GLOBAL) == 0) {
@@ -19613,9 +19643,9 @@ xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
        * of the element declaration must be validly derived from the {type
        * definition} of the {substitution group affiliation}, given the value
        * of the {substitution group exclusions} of the {substitution group
-       * affiliation}, as defined in Type Derivation OK (Complex) (3.4.6)
+       * affiliation}, as defined in Type Derivation OK (Complex) ($3.4.6)
        * (if the {type definition} is complex) or as defined in
-       * Type Derivation OK (Simple) (3.14.6) (if the {type definition} is
+       * Type Derivation OK (Simple) ($3.14.6) (if the {type definition} is
        * simple)."
        *
        * NOTE: {substitution group exclusions} means the values of the
@@ -19679,9 +19709,9 @@ xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
 
        /*
        * SPEC (2) "If there is a {value constraint}, the canonical lexical
-       * representation of its value must be �valid� with respect to the
+       * representation of its value must be `valid` with respect to the
        * {type definition} as defined in Element Default Valid (Immediate)
-       * (3.3.6)."
+       * ($3.3.6)."
        */
        if (typeDef == NULL) {
            xmlSchemaPErr(pctxt, elemDecl->node,
@@ -19749,7 +19779,7 @@ xmlSchemaCheckElemSubstGroup(xmlSchemaParserCtxtPtr ctxt,
        /*
        * SPEC (2) "It is validly substitutable for HEAD subject to HEAD's
        * {disallowed substitutions} as the blocking constraint, as defined in
-       * Substitution Group OK (Transitive) (3.3.6)."
+       * Substitution Group OK (Transitive) ($3.3.6)."
        */
        for (head = WXS_SUBST_HEAD(elemDecl); head != NULL;
            head = WXS_SUBST_HEAD(head)) {
@@ -19882,7 +19912,7 @@ xmlSchemaCheckElementDeclConsistent(xmlSchemaParserCtxtPtr pctxt,
                    * SPEC Element Declarations Consistent:
                    * "If the {particles} contains, either directly,
                    * indirectly (that is, within the {particles} of a
-                   * contained model group, recursively) or �implicitly�
+                   * contained model group, recursively) or `implicitly`
                    * two or more element declaration particles with
                    * the same {name} and {target namespace}, then
                    * all their type definitions must be the same
@@ -20080,12 +20110,12 @@ xmlSchemaAreValuesEqual(xmlSchemaValPtr x,
        ptx = xmlSchemaGetPrimitiveType(tx);
        pty = xmlSchemaGetPrimitiveType(ty);
        /*
-       * (1) if a datatype T' is �derived� by �restriction� from an
-       * atomic datatype T then the �value space� of T' is a subset of
-       * the �value space� of T. */
+       * (1) if a datatype T' is `derived` by `restriction` from an
+       * atomic datatype T then the `value space` of T' is a subset of
+       * the `value space` of T. */
        /*
-       * (2) if datatypes T' and T'' are �derived� by �restriction�
-       * from a common atomic ancestor T then the �value space�s of T'
+       * (2) if datatypes T' and T'' are `derived` by `restriction`
+       * from a common atomic ancestor T then the `value space`s of T'
        * and T'' may overlap.
        */
        if (ptx != pty)
@@ -20153,7 +20183,7 @@ xmlSchemaResolveAttrUseReferences(xmlSchemaAttributeUsePtr ause,
            ref->name, ref->targetNamespace);
         if (ause->attrDecl == NULL) {
            xmlSchemaPResCompAttrErr(ctxt,
-               XML_SCHEMAP_SRC_RESOLVE,
+               XML_SCHEMAP_SRC_RESOLVE,
                WXS_BASIC_CAST ause, ause->node,
                "ref", ref->name, ref->targetNamespace,
                XML_SCHEMA_TYPE_ATTRIBUTE, NULL);
@@ -20186,8 +20216,8 @@ xmlSchemaCheckAttrUsePropsCorrect(xmlSchemaParserCtxtPtr ctxt,
     * SPEC au-props-correct (1)
     * "The values of the properties of an attribute use must be as
     * described in the property tableau in The Attribute Use Schema
-    * Component (3.5.1), modulo the impact of Missing
-    * Sub-components (5.3)."
+    * Component ($3.5.1), modulo the impact of Missing
+    * Sub-components ($5.3)."
     */
 
     if (((WXS_ATTRUSE_DECL(use))->defValue != NULL) &&
@@ -20288,8 +20318,8 @@ xmlSchemaResolveAttrTypeReferences(xmlSchemaAttributePtr item,
     /*
     * The simple type definition corresponding to the <simpleType> element
     * information item in the [children], if present, otherwise the simple
-    * type definition �resolved� to by the �actual value� of the type
-    * [attribute], if present, otherwise the �simple ur-type definition�.
+    * type definition `resolved` to by the `actual value` of the type
+    * [attribute], if present, otherwise the `simple ur-type definition`.
     */
     if (item->flags & XML_SCHEMAS_ATTR_INTERNAL_RESOLVED)
        return(0);
@@ -20453,11 +20483,11 @@ xmlSchemaCheckSRCRedefineFirst(xmlSchemaParserCtxtPtr pctxt)
 
            /*
            * SPEC src-redefine:
-           * (6.2.1) "The �actual value� of its own name attribute plus
-           * target namespace must successfully �resolve� to a model
+           * (6.2.1) "The `actual value` of its own name attribute plus
+           * target namespace must successfully `resolve` to a model
            * group definition in I."
-           * (7.2.1) "The �actual value� of its own name attribute plus
-           * target namespace must successfully �resolve� to an attribute
+           * (7.2.1) "The `actual value` of its own name attribute plus
+           * target namespace must successfully `resolve` to an attribute
            * group definition in I."
 
            *
@@ -20630,10 +20660,10 @@ xmlSchemaCheckSRCRedefineSecond(xmlSchemaParserCtxtPtr pctxt)
                * SPEC src-redefine:
                * (6.2.2) "The {model group} of the model group definition
                * which corresponds to it per XML Representation of Model
-               * Group Definition Schema Components (3.7.2) must be a
-               * �valid restriction� of the {model group} of that model
+               * Group Definition Schema Components ($3.7.2) must be a
+               * `valid restriction` of the {model group} of that model
                * group definition in I, as defined in Particle Valid
-               * (Restriction) (3.9.6)."
+               * (Restriction) ($3.9.6)."
                */
                break;
            case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
@@ -20642,11 +20672,11 @@ xmlSchemaCheckSRCRedefineSecond(xmlSchemaParserCtxtPtr pctxt)
                * (7.2.2) "The {attribute uses} and {attribute wildcard} of
                * the attribute group definition which corresponds to it
                * per XML Representation of Attribute Group Definition Schema
-               * Components (�3.6.2) must be �valid restrictions� of the
+               * Components ($3.6.2) must be `valid restrictions` of the
                * {attribute uses} and {attribute wildcard} of that attribute
                * group definition in I, as defined in clause 2, clause 3 and
                * clause 4 of Derivation Valid (Restriction, Complex)
-               * (3.4.6) (where references to the base type definition are
+               * ($3.4.6) (where references to the base type definition are
                * understood as references to the attribute group definition
                * in I)."
                */
@@ -20821,9 +20851,9 @@ xmlSchemaFixupComponents(xmlSchemaParserCtxtPtr pctxt,
 
     * (6.2.2) The {model group} of the model group definition which
     * corresponds to it per XML Representation of Model Group
-    * Definition Schema Components (�3.7.2) must be a �valid
-    * restriction of the {model group} of that model group definition
-    * in I, as defined in Particle Valid (Restriction) (3.9.6)."
+    * Definition Schema Components ($3.7.2) must be a `valid
+    * restriction` of the {model group} of that model group definition
+    * in I, as defined in Particle Valid (Restriction) ($3.9.6)."
     */
     xmlSchemaCheckSRCRedefineFirst(pctxt);
 
@@ -21507,8 +21537,8 @@ xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type)
            return(XML_SCHEMA_WHITESPACE_REPLACE);
        else {
            /*
-           * For all �atomic� datatypes other than string (and types �derived�
-           * by �restriction� from it) the value of whiteSpace is fixed to
+           * For all `atomic` datatypes other than string (and types `derived`
+           * by `restriction` from it) the value of whiteSpace is fixed to
            * collapse
            * Note that this includes built-in list datatypes.
            */
@@ -21533,16 +21563,16 @@ xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type)
 }
 
 /************************************************************************
- *                                                                     *
- *                     Simple type validation                          *
- *                                                                     *
+ *                                                                     *
+ *                     Simple type validation                          *
+ *                                                                     *
  ************************************************************************/
 
 
 /************************************************************************
- *                                                                     *
- *                     DOM Validation code                             *
- *                                                                     *
+ *                                                                     *
+ *                     DOM Validation code                             *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -21936,9 +21966,9 @@ xmlSchemaVAddNodeQName(xmlSchemaValidCtxtPtr vctxt,
 }
 
 /************************************************************************
- *                                                                     *
+ *                                                                     *
  *  Validation of identity-constraints (IDC)                            *
- *                                                                     *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -22813,7 +22843,7 @@ xmlSchemaXPathProcessHistory(xmlSchemaValidCtxtPtr vctxt,
                    xmlChar *str = NULL;
                    /*
                    * cvc-identity-constraint:
-                   * 3 For each node in the �target node set� all
+                   * 3 For each node in the `target node set` all
                    * of the {fields}, with that node as the context
                    * node, evaluate to either an empty node-set or
                    * a node-set with exactly one member, which must
@@ -22943,8 +22973,8 @@ create_key:
 
            /*
            * 4.1 If the {identity-constraint category} is unique(/key),
-           * then no two members of the �qualified node set� have
-           * �key-sequences� whose members are pairwise equal, as
+           * then no two members of the `qualified node set` have
+           * `key-sequences` whose members are pairwise equal, as
            * defined by Equal in [XML Schemas: Datatypes].
            *
            * Get the IDC binding from the matcher and check for
@@ -23072,10 +23102,10 @@ selector_key_error:
            {
                xmlChar *str = NULL;
                /*
-               * 4.2.1 (KEY) The �target node set� and the
-               * �qualified node set� are equal, that is, every
-               * member of the �target node set� is also a member
-               * of the �qualified node set� and vice versa.
+               * 4.2.1 (KEY) The `target node set` and the
+               * `qualified node set` are equal, that is, every
+               * member of the `target node set` is also a member
+               * of the `qualified node set` and vice versa.
                */
                xmlSchemaCustomErr(ACTXT_CAST vctxt,
                    XML_SCHEMAV_CVC_IDC, NULL,
@@ -23866,9 +23896,9 @@ xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
 }
 
 /************************************************************************
- *                                                                     *
- *                     XML Reader validation code                      *
- *                                                                     *
+ *                                                                     *
+ *                     XML Reader validation code                      *
+ *                                                                     *
  ************************************************************************/
 
 static xmlSchemaAttrInfoPtr
@@ -24471,14 +24501,14 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
     */
     /*
     * 2.1 If The definition is ENTITY or is validly derived from ENTITY given
-    * the empty set, as defined in Type Derivation OK (Simple) (3.14.6), then
-    * the string must be a �declared entity name�.
+    * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6), then
+    * the string must be a `declared entity name`.
     */
     /*
     * 2.2 If The definition is ENTITIES or is validly derived from ENTITIES
-    * given the empty set, as defined in Type Derivation OK (Simple) (3.14.6),
-    * then every whitespace-delimited substring of the string must be a declared
-    * entity name.
+    * given the empty set, as defined in Type Derivation OK (Simple) ($3.14.6),
+    * then every whitespace-delimited substring of the string must be a `declared
+    * entity name`.
     */
     /*
     * 2.3 otherwise no further condition applies.
@@ -24490,8 +24520,8 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
     if (WXS_IS_ANY_SIMPLE_TYPE(type) || WXS_IS_ATOMIC(type)) {
        xmlSchemaTypePtr biType; /* The built-in type. */
        /*
-       * SPEC (1.2.1) "if {variety} is �atomic� then the string must �match�
-       * a literal in the �lexical space� of {base type definition}"
+       * SPEC (1.2.1) "if {variety} is `atomic` then the string must `match`
+       * a literal in the `lexical space` of {base type definition}"
        */
        /*
        * Whitespace-normalize.
@@ -24602,9 +24632,9 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
        xmlChar *tmpValue = NULL;
        unsigned long len = 0;
        xmlSchemaValPtr prevVal = NULL, curVal = NULL;
-       /* 1.2.2 if {variety} is �list� then the string must be a sequence
-       * of white space separated tokens, each of which �match�es a literal
-       * in the �lexical space� of {item type definition}
+       /* 1.2.2 if {variety} is `list` then the string must be a sequence
+       * of white space separated tokens, each of which `match`es a literal
+       * in the `lexical space` of {item type definition}
        */
        /*
        * Note that XML_SCHEMAS_TYPE_NORMVALUENEEDED will be set if
@@ -24685,10 +24715,10 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
     } else if (WXS_IS_UNION(type)) {
        xmlSchemaTypeLinkPtr memberLink;
        /*
-       * TODO: For all datatypes �derived� by �union�  whiteSpace does
-       * not apply directly; however, the normalization behavior of �union�
+       * TODO: For all datatypes `derived` by `union`  whiteSpace does
+       * not apply directly; however, the normalization behavior of `union`
        * types is controlled by the value of whiteSpace on that one of the
-       * �memberTypes� against which the �union� is successfully validated.
+       * `memberTypes` against which the `union` is successfully validated.
        *
        * This means that the value is normalized by the first validating
        * member type, then the facets of the union type are applied. This
@@ -24696,8 +24726,8 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
        */
 
        /*
-       * 1.2.3 if {variety} is �union� then the string must �match� a
-       * literal in the �lexical space� of at least one member of
+       * 1.2.3 if {variety} is `union` then the string must `match` a
+       * literal in the `lexical space` of at least one member of
        * {member type definitions}
        */
        memberLink = xmlSchemaGetUnionSimpleTypeMemberTypes(type);
@@ -24736,9 +24766,9 @@ xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
        */
        if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
            /*
-           * The normalization behavior of �union� types is controlled by
-           * the value of whiteSpace on that one of the �memberTypes�
-           * against which the �union� is successfully validated.
+           * The normalization behavior of `union` types is controlled by
+           * the value of whiteSpace on that one of the `memberTypes`
+           * against which the `union` is successfully validated.
            */
            NORMALIZE(memberLink->type);
            ret = xmlSchemaValidateFacets(actxt, node, type,
@@ -24898,14 +24928,14 @@ xmlSchemaProcessXSIType(xmlSchemaValidCtxtPtr vctxt,
 
            /*
            * SPEC cvc-elt (3.3.4) : (4.3) (Type Derivation OK)
-           * "The �local type definition� must be validly
+           * "The `local type definition` must be validly
            * derived from the {type definition} given the union of
            * the {disallowed substitutions} and the {type definition}'s
            * {prohibited substitutions}, as defined in
-           * Type Derivation OK (Complex) (3.4.6)
+           * Type Derivation OK (Complex) ($3.4.6)
            * (if it is a complex type definition),
            * or given {disallowed substitutions} as defined in Type
-           * Derivation OK (Simple) (3.14.6) (if it is a simple type
+           * Derivation OK (Simple) ($3.14.6) (if it is a simple type
            * definition)."
            *
            * {disallowed substitutions}: the "block" on the element decl.
@@ -24988,9 +25018,9 @@ xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt)
         return (vctxt->err);
     }
     if (actualType == NULL) {
-       VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
-           "The type definition is absent");
-       return (XML_SCHEMAV_CVC_TYPE_1);
+       VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
+           "The type definition is absent");
+       return (XML_SCHEMAV_CVC_TYPE_1);
     }
     if (vctxt->nbAttrInfos != 0) {
        int ret;
@@ -25080,9 +25110,9 @@ xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt)
     * No actual type definition.
     */
     if (actualType == NULL) {
-       VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
-           "The type definition is absent");
-       return (XML_SCHEMAV_CVC_TYPE_1);
+       VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
+           "The type definition is absent");
+       return (XML_SCHEMAV_CVC_TYPE_1);
     }
     /*
     * Remember the actual type definition.
@@ -25176,8 +25206,8 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
 
     /*
     * SPEC (cvc-attribute)
-    * (1) "The declaration must not be �absent� (see Missing
-    * Sub-components (5.3) for how this can fail to be
+    * (1) "The declaration must not be `absent` (see Missing
+    * Sub-components ($5.3) for how this can fail to be
     * the case)."
     * (2) "Its {type definition} must not be absent."
     *
@@ -25227,15 +25257,15 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
            * use with an {attribute declaration} whose {name} matches
            * the attribute information item's [local name] and whose
            * {target namespace} is identical to the attribute information
-           * item's [namespace name] (where an �absent� {target namespace}
+           * item's [namespace name] (where an `absent` {target namespace}
            * is taken to be identical to a [namespace name] with no value),
-           * then the attribute information must be �valid� with respect
+           * then the attribute information must be `valid` with respect
            * to that attribute use as per Attribute Locally Valid (Use)
-           * (3.5.4). In this case the {attribute declaration} of that
-           * attribute use is the �context-determined declaration� for the
+           * ($3.5.4). In this case the {attribute declaration} of that
+           * attribute use is the `context-determined declaration` for the
            * attribute information item with respect to Schema-Validity
-           * Assessment (Attribute) (3.2.4) and
-           * Assessment Outcome (Attribute) (3.2.5).
+           * Assessment (Attribute) ($3.2.4) and
+           * Assessment Outcome (Attribute) ($3.2.5).
            */
            iattr->state = XML_SCHEMAS_ATTR_ASSESSED;
            iattr->use = attrUse;
@@ -25312,13 +25342,13 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
                continue;
            /*
            * SPEC (cvc-complex-type)
-           * (3.2.2) "The attribute information item must be �valid� with
-           * respect to it as defined in Item Valid (Wildcard) (3.10.4)."
+           * (3.2.2) "The attribute information item must be `valid` with
+           * respect to it as defined in Item Valid (Wildcard) ($3.10.4)."
            *
            * SPEC Item Valid (Wildcard) (cvc-wildcard)
-           * "... its [namespace name] must be �valid� with respect to
+           * "... its [namespace name] must be `valid` with respect to
            * the wildcard constraint, as defined in Wildcard allows
-           * Namespace Name (3.10.4)."
+           * Namespace Name ($3.10.4)."
            */
            if (xmlSchemaCheckCVCWildcardNamespace(type->attributeWildcard,
                    iattr->nsName) == 0) {
@@ -25354,11 +25384,11 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
                    * SPEC (cvc-complex-type)
                    * (5) "Let [Definition:]  the wild IDs be the set of
                    * all attribute information item to which clause 3.2
-                   * applied and whose �validation� resulted in a
-                   * �context-determined declaration� of mustFind or no
-                   * �context-determined declaration� at all, and whose
+                   * applied and whose `validation` resulted in a
+                   * `context-determined declaration` of mustFind or no
+                   * `context-determined declaration` at all, and whose
                    * [local name] and [namespace name] resolve (as
-                   * defined by QName resolution (Instance) (3.15.4)) to
+                   * defined by QName resolution (Instance) ($3.15.4)) to
                    * an attribute declaration whose {type definition} is
                    * or is derived from ID. Then all of the following
                    * must be true:"
@@ -25368,7 +25398,7 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
                        iattr->typeDef, XML_SCHEMAS_ID)) {
                        /*
                        * SPEC (5.1) "There must be no more than one
-                       * item in �wild IDs�."
+                       * item in `wild IDs`."
                        */
                        if (wildIDs != 0) {
                            /* VAL TODO */
@@ -25379,7 +25409,7 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
                        wildIDs++;
                        /*
                        * SPEC (cvc-complex-type)
-                       * (5.2) "If �wild IDs� is non-empty, there must not
+                       * (5.2) "If `wild IDs` is non-empty, there must not
                        * be any attribute uses among the {attribute uses}
                        * whose {attribute declaration}'s {type definition}
                        * is or is derived from ID."
@@ -25589,9 +25619,9 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
            fixed = 0;
        /*
        * SPEC (cvc-attribute)
-       * (3) "The item's �normalized value� must be locally �valid�
+       * (3) "The item's `normalized value` must be locally `valid`
        * with respect to that {type definition} as per
-       * String Valid (3.14.4)."
+       * String Valid ($3.14.4)."
        *
        * VAL TODO: Do we already have the
        * "normalized attribute value" here?
@@ -25629,9 +25659,9 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
        if (fixed) {
            /*
            * SPEC Attribute Locally Valid (Use) (cvc-au)
-           * "For an attribute information item to be�valid�
+           * "For an attribute information item to be `valid`
            * with respect to an attribute use its *normalized*
-           * value must match the *canonical* lexical
+           * value must match the *canonical* lexical
            * representation of the attribute use's {value
            * constraint}value, if it is present and fixed."
            *
@@ -25640,7 +25670,7 @@ xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
            */
            /*
            * SPEC Attribute Locally Valid (cvc-attribute)
-           * (4) "The item's *actual* value must match the *value* of
+           * (4) "The item's *actual* value must match the *value* of
            * the {value constraint}, if it is present and fixed."
            */
            if (iattr->val == NULL) {
@@ -25870,8 +25900,8 @@ xmlSchemaCheckCOSValidDefault(xmlSchemaValidCtxtPtr vctxt,
        * SPEC (2.1) "its {content type} must be a simple type definition
        * or mixed."
        * SPEC (2.2.2) "If the {content type} is mixed, then the {content
-       * type}'s particle must be �emptiable� as defined by
-       * Particle Emptiable (3.9.6)."
+       * type}'s particle must be `emptiable` as defined by
+       * Particle Emptiable ($3.9.6)."
        */
        if ((! WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) &&
            ((! WXS_HAS_MIXED_CONTENT(inode->typeDef)) ||
@@ -25887,14 +25917,14 @@ xmlSchemaCheckCOSValidDefault(xmlSchemaValidCtxtPtr vctxt,
     }
     /*
     * 1 If the type definition is a simple type definition, then the string
-    * must be �valid� with respect to that definition as defined by String
-    * Valid (3.14.4).
+    * must be `valid` with respect to that definition as defined by String
+    * Valid ($3.14.4).
     *
     * AND
     *
     * 2.2.1 If the {content type} is a simple type definition, then the
-    * string must be �valid� with respect to that simple type definition
-    * as defined by String Valid (3.14.4).
+    * string must be `valid` with respect to that simple type definition
+    * as defined by String Valid ($3.14.4).
     */
     if (WXS_IS_SIMPLE(inode->typeDef)) {
 
@@ -26035,6 +26065,20 @@ xmlSchemaValidatorPopElem(xmlSchemaValidCtxtPtr vctxt)
                    "AUTOMATON create on '%s'\n", inode->localName);
 #endif
            }
+
+           /*
+            * Do not check further content if the node has been nilled
+            */
+           if (INODE_NILLED(inode)) {
+               ret = 0;
+#ifdef DEBUG_AUTOMATA
+               xmlGenericError(xmlGenericErrorContext,
+                   "AUTOMATON succeeded on nilled '%s'\n",
+                   inode->localName);
+#endif
+                goto skip_nilled;
+           }
+
            /*
            * Get hold of the still expected content, since a further
            * call to xmlRegExecPushString() will loose this information.
@@ -26072,6 +26116,9 @@ xmlSchemaValidatorPopElem(xmlSchemaValidCtxtPtr vctxt)
 
        }
     }
+
+skip_nilled:
+
     if (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS)
        goto end_elem;
 
@@ -26118,10 +26165,10 @@ character_content:
        (! INODE_NILLED(inode))) {
        /*
        * cvc-elt (3.3.4) : 5.1.1
-       * If the �actual type definition� is a �local type definition�
+       * If the `actual type definition` is a `local type definition`
        * then the canonical lexical representation of the {value constraint}
-       * value must be a valid default for the �actual type definition� as
-       * defined in Element Default Valid (Immediate) (3.3.6).
+       * value must be a valid default for the `actual type definition` as
+       * defined in Element Default Valid (Immediate) ($3.3.6).
        */
        /*
        * NOTE: 'local' above means types acquired by xsi:type.
@@ -26151,9 +26198,9 @@ character_content:
        * cvc-elt (3.3.4) : 5.1.2
        * The element information item with the canonical lexical
        * representation of the {value constraint} value used as its
-       * �normalized value� must be �valid� with respect to the
-       * �actual type definition� as defined by Element Locally Valid (Type)
-       * (3.3.4).
+       * `normalized value` must be `valid` with respect to the
+       * `actual type definition` as defined by Element Locally Valid (Type)
+       * ($3.3.4).
        */
        if (WXS_IS_SIMPLE(inode->typeDef)) {
            ret = xmlSchemaVCheckINodeDataType(vctxt,
@@ -26200,18 +26247,18 @@ default_psvi:
 
     } else if (! INODE_NILLED(inode)) {
        /*
-       * 5.2.1 The element information item must be �valid� with respect
-       * to the �actual type definition� as defined by Element Locally
-       * Valid (Type) (3.3.4).
+       * 5.2.1 The element information item must be `valid` with respect
+       * to the `actual type definition` as defined by Element Locally
+       * Valid (Type) ($3.3.4).
        */
        if (WXS_IS_SIMPLE(inode->typeDef)) {
             /*
            * SPEC (cvc-type) (3.1)
            * "If the type definition is a simple type definition, ..."
            * (3.1.3) "If clause 3.2 of Element Locally Valid
-           * (Element) (�3.3.4) did not apply, then the �normalized value�
-           * must be �valid� with respect to the type definition as defined
-           * by String Valid (3.14.4).
+           * (Element) ($3.3.4) did not apply, then the `normalized value`
+           * must be `valid` with respect to the type definition as defined
+           * by String Valid ($3.14.4).
            */
            ret = xmlSchemaVCheckINodeDataType(vctxt,
                    inode, inode->typeDef, inode->value);
@@ -26219,14 +26266,14 @@ default_psvi:
            /*
            * SPEC (cvc-type) (3.2) "If the type definition is a complex type
            * definition, then the element information item must be
-           * �valid� with respect to the type definition as per
-           * Element Locally Valid (Complex Type) (3.4.4);"
+           * `valid` with respect to the type definition as per
+           * Element Locally Valid (Complex Type) ($3.4.4);"
            *
            * SPEC (cvc-complex-type) (2.2)
            * "If the {content type} is a simple type definition, ...
-           * the �normalized value� of the element information item is
-           * �valid� with respect to that simple type definition as
-           * defined by String Valid (3.14.4)."
+           * the `normalized value` of the element information item is
+           * `valid` with respect to that simple type definition as
+           * defined by String Valid ($3.14.4)."
            */
            ret = xmlSchemaVCheckINodeDataType(vctxt,
                inode, inode->typeDef->contentTypeDef, inode->value);
@@ -26268,8 +26315,8 @@ default_psvi:
                */
                if (WXS_HAS_MIXED_CONTENT(inode->typeDef)) {
                    /*
-                   * 5.2.2.2.1 If the {content type} of the actual type
-                   * definition is mixed, then the *initial value* of the
+                   * 5.2.2.2.1 If the {content type} of the `actual type
+                   * definition` is mixed, then the *initial value* of the
                    * item must match the canonical lexical representation
                    * of the {value constraint} value.
                    *
@@ -26293,8 +26340,8 @@ default_psvi:
                    }
                } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
                    /*
-                   * 5.2.2.2.2 If the {content type} of the actual type
-                   * definition is a simple type definition, then the
+                   * 5.2.2.2.2 If the {content type} of the `actual type
+                   * definition` is a simple type definition, then the
                    * *actual value* of the item must match the canonical
                    * lexical representation of the {value constraint} value.
                    */
@@ -26335,9 +26382,9 @@ end_elem:
        goto internal_error;
     /*
     * MAYBE TODO:
-    * SPEC (6) "The element information item must be �valid� with
+    * SPEC (6) "The element information item must be `valid` with
     * respect to each of the {identity-constraint definitions} as per
-    * Identity-constraint Satisfied (3.11.4)."
+    * Identity-constraint Satisfied ($3.11.4)."
     */
     /*
     * PSVI TODO: If we expose IDC node-tables via PSVI then the tables
@@ -26415,8 +26462,8 @@ end_elem:
     vctxt->depth--;
     vctxt->inode = vctxt->elemInfos[vctxt->depth];
     /*
-    * VAL TODO: 7 If the element information item is the �validation root�, it must be
-    * �valid� per Validation Root Valid (ID/IDREF) (�3.3.4).
+    * VAL TODO: 7 If the element information item is the `validation root`, it must be
+    * `valid` per Validation Root Valid (ID/IDREF) ($3.3.4).
     */
     return (ret);
 
@@ -26497,11 +26544,11 @@ xmlSchemaValidateChildElem(xmlSchemaValidCtxtPtr vctxt)
                 * Fallback to "anyType".
                 *
                 * SPEC (cvc-assess-elt)
-                * "If the item cannot be �strictly assessed�, [...]
+                * "If the item cannot be `strictly assessed`, [...]
                 * an element information item's schema validity may be laxly
-                * assessed if its �context-determined declaration� is not
-                * skip by �validating� with respect to the �ur-type
-                * definition� as per Element Locally Valid (Type) (�3.3.4)."
+                * assessed if its `context-determined declaration` is not
+                * skip by `validating` with respect to the `ur-type
+                * definition` as per Element Locally Valid (Type) ($3.3.4)."
                */
                vctxt->inode->typeDef =
                    xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
@@ -26573,9 +26620,9 @@ xmlSchemaValidateChildElem(xmlSchemaValidCtxtPtr vctxt)
            * SPEC (2.4) "If the {content type} is element-only or mixed,
            * then the sequence of the element information item's
            * element information item [children], if any, taken in
-           * order, is �valid� with respect to the {content type}'s
+           * order, is `valid` with respect to the {content type}'s
            * particle, as defined in Element Sequence Locally Valid
-           * (Particle) (3.9.4)."
+           * (Particle) ($3.9.4)."
            */
            ret = xmlRegExecPushString2(regexCtxt,
                vctxt->inode->localName,
@@ -26910,15 +26957,15 @@ type_validation:
     if (vctxt->inode->typeDef == NULL) {
        vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
        ret = XML_SCHEMAV_CVC_TYPE_1;
-       VERROR(ret, NULL,
-           "The type definition is absent");
+       VERROR(ret, NULL,
+           "The type definition is absent");
        goto exit;
     }
     if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) {
        vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
        ret = XML_SCHEMAV_CVC_TYPE_2;
-           VERROR(ret, NULL,
-           "The type definition is abstract");
+           VERROR(ret, NULL,
+           "The type definition is abstract");
        goto exit;
     }
     /*
@@ -27165,9 +27212,9 @@ internal_error:
 #endif
 
 /************************************************************************
- *                                                                     *
- *                     SAX validation handlers                         *
- *                                                                     *
+ *                                                                     *
+ *                     SAX validation handlers                         *
+ *                                                                     *
  ************************************************************************/
 
 /*
@@ -27418,9 +27465,9 @@ internal_error:
 }
 
 /************************************************************************
- *                                                                     *
- *                     Validation interfaces                           *
- *                                                                     *
+ *                                                                     *
+ *                     Validation interfaces                           *
+ *                                                                     *
  ************************************************************************/
 
 /**
@@ -27450,8 +27497,28 @@ xmlSchemaNewValidCtxt(xmlSchemaPtr schema)
 }
 
 /**
+ * xmlSchemaValidateSetFilename:
+ * @vctxt: the schema validation context
+ * @filename: the file name
+ *
+ * Workaround to provide file error reporting information when this is
+ * not provided by current APIs
+ */
+void
+xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, const char *filename) {
+    if (vctxt == NULL)
+        return;
+    if (vctxt->filename != NULL)
+        xmlFree(vctxt->filename);
+    if (filename != NULL)
+        vctxt->filename = (char *) xmlStrdup((const xmlChar *) filename);
+    else
+        vctxt->filename = NULL;
+}
+
+/**
  * xmlSchemaClearValidCtxt:
- * @ctxt: the schema validation context
+ * @vctxt: the schema validation context
  *
  * Free the resources associated to the schema validation context;
  * leaves some fields alive intended for reuse of the context.
@@ -27552,6 +27619,11 @@ xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt)
     * where the user provides the dict?
     */
     vctxt->dict = xmlDictCreate();
+
+    if (vctxt->filename != NULL) {
+        xmlFree(vctxt->filename);
+       vctxt->filename = NULL;
+    }
 }
 
 /**
@@ -27637,6 +27709,8 @@ xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt)
        xmlSchemaItemListFree(ctxt->nodeQNames);
     if (ctxt->dict != NULL)
        xmlDictFree(ctxt->dict);
+    if (ctxt->filename != NULL)
+       xmlFree(ctxt->filename);
     xmlFree(ctxt);
 }
 
@@ -27791,7 +27865,10 @@ xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt)
     const xmlChar *nsName;
 
     /* DOC VAL TODO: Move this to the start function. */
-    valRoot = xmlDocGetRootElement(vctxt->doc);
+    if (vctxt->validationRoot != NULL)
+        valRoot = vctxt->validationRoot;
+    else
+       valRoot = xmlDocGetRootElement(vctxt->doc);
     if (valRoot == NULL) {
        /* VAL TODO: Error code? */
        VERROR(1, NULL, "The document has no document element");
@@ -28112,9 +28189,9 @@ xmlSchemaValidateDoc(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc)
 
 
 /************************************************************************
- *                                                                     *
- *             Function and data for SAX streaming API                 *
- *                                                                     *
+ *                                                                     *
+ *             Function and data for SAX streaming API                 *
+ *                                                                     *
  ************************************************************************/
 typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData;
 typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr;
@@ -28631,6 +28708,63 @@ xmlSchemaSAXUnplug(xmlSchemaSAXPlugPtr plug)
 }
 
 /**
+ * xmlSchemaValidateSetLocator:
+ * @vctxt: a schema validation context
+ * @f: the locator function pointer
+ * @ctxt: the locator context
+ *
+ * Allows to set a locator function to the validation context,
+ * which will be used to provide file and line information since
+ * those are not provided as part of the SAX validation flow
+ * Setting @f to NULL disable the locator.
+ */
+
+void
+xmlSchemaValidateSetLocator(xmlSchemaValidCtxtPtr vctxt,
+                            xmlSchemaValidityLocatorFunc f,
+                           void *ctxt)
+{
+    if (vctxt == NULL) return;
+    vctxt->locFunc = f;
+    vctxt->locCtxt = ctxt;
+}
+
+/**
+ * xmlSchemaValidateStreamLocator:
+ * @ctx: the xmlTextReaderPtr used
+ * @file: returned file information
+ * @line: returned line information
+ *
+ * Internal locator function for the readers
+ *
+ * Returns 0 in case the Schema validation could be (des)activated and
+ *         -1 in case of error.
+ */
+static int
+xmlSchemaValidateStreamLocator(void *ctx, const char **file,
+                               unsigned long *line) {
+    xmlParserCtxtPtr ctxt;
+
+    if ((ctx == NULL) || ((file == NULL) && (line == NULL)))
+        return(-1);
+
+    if (file != NULL)
+        *file = NULL;
+    if (line != NULL)
+        *line = 0;
+
+    ctxt = (xmlParserCtxtPtr) ctx;
+    if (ctxt->input != NULL) {
+       if (file != NULL)
+           *file = ctxt->input->filename;
+       if (line != NULL)
+           *line = ctxt->input->line;
+       return(0);
+    }
+    return(-1);
+}
+
+/**
  * xmlSchemaValidateStream:
  * @ctxt:  a schema validation context
  * @input:  the input to use for reading the data
@@ -28673,6 +28807,7 @@ xmlSchemaValidateStream(xmlSchemaValidCtxtPtr ctxt,
         xmlCtxtUseOptions(pctxt, options);
 #endif
     pctxt->linenumbers = 1;
+    xmlSchemaValidateSetLocator(ctxt, xmlSchemaValidateStreamLocator, pctxt);
 
     inputStream = xmlNewIOInputStream(pctxt, input, enc);;
     if (inputStream == NULL) {
index 4518499..ff64f50 100644 (file)
@@ -40,7 +40,7 @@ extern double xmlXPathPINF;
 extern double xmlXPathNINF;
 #endif
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
@@ -75,7 +75,7 @@ typedef struct _xmlSchemaValDuration xmlSchemaValDuration;
 typedef xmlSchemaValDuration *xmlSchemaValDurationPtr;
 struct _xmlSchemaValDuration {
     long               mon;            /* mon stores years also */
-    long               day;
+    long       day;
     double             sec;            /* sec stores min and hour also */
 };
 
@@ -189,7 +189,7 @@ static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL;
 
 /************************************************************************
  *                                                                     *
- *                     Datatype error handlers                         *
+ *                     Datatype error handlers                         *
  *                                                                     *
  ************************************************************************/
 /**
@@ -206,7 +206,7 @@ xmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra)
 
 /************************************************************************
  *                                                                     *
- *                     Base types support                              *
+ *                     Base types support                              *
  *                                                                     *
  ************************************************************************/
 
@@ -242,6 +242,10 @@ xmlSchemaNewMinLengthFacet(int value)
     }
     ret->type = XML_SCHEMA_FACET_MINLENGTH;
     ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER);
+    if (ret->val == NULL) {
+        xmlFree(ret);
+       return(NULL);
+    }
     ret->val->value.decimal.lo = value;
     return (ret);
 }
@@ -254,7 +258,7 @@ xmlSchemaNewMinLengthFacet(int value)
  * Initialize one primitive built-in type
  */
 static xmlSchemaTypePtr
-xmlSchemaInitBasicType(const char *name, xmlSchemaValType type, 
+xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
                       xmlSchemaTypePtr baseType) {
     xmlSchemaTypePtr ret;
 
@@ -267,31 +271,31 @@ xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
     ret->name = (const xmlChar *)name;
     ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME;
     ret->type = XML_SCHEMA_TYPE_BASIC;
-    ret->baseType = baseType;  
+    ret->baseType = baseType;
     ret->contentType = XML_SCHEMA_CONTENT_BASIC;
     /*
     * Primitive types.
     */
-    switch (type) {            
-       case XML_SCHEMAS_STRING:            
-       case XML_SCHEMAS_DECIMAL:    
-       case XML_SCHEMAS_DATE:    
-       case XML_SCHEMAS_DATETIME:    
-       case XML_SCHEMAS_TIME:    
-       case XML_SCHEMAS_GYEAR:    
-       case XML_SCHEMAS_GYEARMONTH:    
-       case XML_SCHEMAS_GMONTH:    
-       case XML_SCHEMAS_GMONTHDAY:    
-       case XML_SCHEMAS_GDAY:    
-       case XML_SCHEMAS_DURATION:    
-       case XML_SCHEMAS_FLOAT:    
-       case XML_SCHEMAS_DOUBLE:    
-       case XML_SCHEMAS_BOOLEAN:    
-       case XML_SCHEMAS_ANYURI:    
-       case XML_SCHEMAS_HEXBINARY:    
-       case XML_SCHEMAS_BASE64BINARY:  
-       case XML_SCHEMAS_QNAME: 
-       case XML_SCHEMAS_NOTATION:      
+    switch (type) {
+       case XML_SCHEMAS_STRING:
+       case XML_SCHEMAS_DECIMAL:
+       case XML_SCHEMAS_DATE:
+       case XML_SCHEMAS_DATETIME:
+       case XML_SCHEMAS_TIME:
+       case XML_SCHEMAS_GYEAR:
+       case XML_SCHEMAS_GYEARMONTH:
+       case XML_SCHEMAS_GMONTH:
+       case XML_SCHEMAS_GMONTHDAY:
+       case XML_SCHEMAS_GDAY:
+       case XML_SCHEMAS_DURATION:
+       case XML_SCHEMAS_FLOAT:
+       case XML_SCHEMAS_DOUBLE:
+       case XML_SCHEMAS_BOOLEAN:
+       case XML_SCHEMAS_ANYURI:
+       case XML_SCHEMAS_HEXBINARY:
+       case XML_SCHEMAS_BASE64BINARY:
+       case XML_SCHEMAS_QNAME:
+       case XML_SCHEMAS_NOTATION:
            ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
            break;
        default:
@@ -309,7 +313,7 @@ xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
        case XML_SCHEMAS_ENTITIES:
            ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
            ret->facets = xmlSchemaNewMinLengthFacet(1);
-           ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;      
+           ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
            break;
        default:
            ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
@@ -390,19 +394,19 @@ xmlSchemaInitTypes(void)
         return;
     xmlSchemaTypesBank = xmlHashCreate(40);
 
-    
+
     /*
     * 3.4.7 Built-in Complex Type Definition
     */
     xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType",
-                                                     XML_SCHEMAS_ANYTYPE, 
+                                                     XML_SCHEMAS_ANYTYPE,
                                                     NULL);
     xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef;
     xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
     /*
     * Init the content type.
     */
-    xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;    
+    xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
     {
        xmlSchemaParticlePtr particle;
        xmlSchemaModelGroupPtr sequence;
@@ -420,7 +424,7 @@ xmlSchemaInitTypes(void)
            return;
        }
        memset(sequence, 0, sizeof(xmlSchemaModelGroup));
-       sequence->type = XML_SCHEMA_TYPE_SEQUENCE;      
+       sequence->type = XML_SCHEMA_TYPE_SEQUENCE;
        particle->children = (xmlSchemaTreeItemPtr) sequence;
        /* Second particle. */
        particle = xmlSchemaAddParticle();
@@ -437,9 +441,9 @@ xmlSchemaInitTypes(void)
        }
        memset(wild, 0, sizeof(xmlSchemaWildcard));
        wild->type = XML_SCHEMA_TYPE_ANY;
-       wild->any = 1;  
-       wild->processContents = XML_SCHEMAS_ANY_LAX;    
-       particle->children = (xmlSchemaTreeItemPtr) wild;    
+       wild->any = 1;
+       wild->processContents = XML_SCHEMAS_ANY_LAX;
+       particle->children = (xmlSchemaTreeItemPtr) wild;
        /*
        * Create the attribute wildcard.
        */
@@ -451,10 +455,10 @@ xmlSchemaInitTypes(void)
        }
        memset(wild, 0, sizeof(xmlSchemaWildcard));
        wild->any = 1;
-       wild->processContents = XML_SCHEMAS_ANY_LAX;    
+       wild->processContents = XML_SCHEMAS_ANY_LAX;
        xmlSchemaTypeAnyTypeDef->attributeWildcard = wild;
     }
-    xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType", 
+    xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType",
                                                            XML_SCHEMAS_ANYSIMPLETYPE,
                                                           xmlSchemaTypeAnyTypeDef);
     /*
@@ -513,7 +517,7 @@ xmlSchemaInitTypes(void)
        xmlSchemaTypeAnySimpleTypeDef);
     xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION",
                                                     XML_SCHEMAS_NOTATION,
-                                                   xmlSchemaTypeAnySimpleTypeDef);    
+                                                   xmlSchemaTypeAnySimpleTypeDef);
     xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName",
                                                    XML_SCHEMAS_QNAME,
                                                   xmlSchemaTypeAnySimpleTypeDef);
@@ -583,7 +587,7 @@ xmlSchemaInitTypes(void)
                                                    xmlSchemaTypeNCNameDef);
     xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF",
                                                    XML_SCHEMAS_IDREF,
-                                                  xmlSchemaTypeNCNameDef);        
+                                                  xmlSchemaTypeNCNameDef);
     xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY",
                                                     XML_SCHEMAS_ENTITY,
                                                    xmlSchemaTypeNCNameDef);
@@ -615,7 +619,7 @@ xmlSchemaInitTypes(void)
  *
  * Cleanup the default XML Schemas type library
  */
-void   
+void
 xmlSchemaCleanupTypes(void) {
     if (xmlSchemaTypesInitialized == 0)
        return;
@@ -629,13 +633,13 @@ xmlSchemaCleanupTypes(void) {
        /* Content type. */
        particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes;
        /* Wildcard. */
-       xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) 
+       xmlSchemaFreeWildcard((xmlSchemaWildcardPtr)
            particle->children->children->children);
        xmlFree((xmlSchemaParticlePtr) particle->children->children);
        /* Sequence model group. */
        xmlFree((xmlSchemaModelGroupPtr) particle->children);
        xmlFree((xmlSchemaParticlePtr) particle);
-       xmlSchemaTypeAnyTypeDef->subtypes = NULL;       
+       xmlSchemaTypeAnyTypeDef->subtypes = NULL;
     }
     xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType);
     xmlSchemaTypesInitialized = 0;
@@ -665,12 +669,12 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType)
                (facetType == XML_SCHEMA_FACET_WHITESPACE))
                return (1);
            else
-               return (0);     
+               return (0);
        case XML_SCHEMAS_STRING:
        case XML_SCHEMAS_NOTATION:
        case XML_SCHEMAS_QNAME:
-       case XML_SCHEMAS_ANYURI:            
-       case XML_SCHEMAS_BASE64BINARY:    
+       case XML_SCHEMAS_ANYURI:
+       case XML_SCHEMAS_BASE64BINARY:
        case XML_SCHEMAS_HEXBINARY:
            if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
                (facetType == XML_SCHEMA_FACET_MINLENGTH) ||
@@ -693,12 +697,12 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType)
                (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
                return (1);
            else
-               return (0); 
+               return (0);
        case XML_SCHEMAS_TIME:
-       case XML_SCHEMAS_GDAY: 
+       case XML_SCHEMAS_GDAY:
        case XML_SCHEMAS_GMONTH:
-       case XML_SCHEMAS_GMONTHDAY: 
-       case XML_SCHEMAS_GYEAR: 
+       case XML_SCHEMAS_GMONTHDAY:
+       case XML_SCHEMAS_GYEAR:
        case XML_SCHEMAS_GYEARMONTH:
        case XML_SCHEMAS_DATE:
        case XML_SCHEMAS_DATETIME:
@@ -714,7 +718,7 @@ xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType)
                (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
                return (1);
            else
-               return (0);                                      
+               return (0);
        default:
            break;
     }
@@ -736,7 +740,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type)
     if (xmlSchemaTypesInitialized == 0)
        xmlSchemaInitTypes();
     switch (type) {
-       
+
        case XML_SCHEMAS_ANYSIMPLETYPE:
            return (xmlSchemaTypeAnySimpleTypeDef);
        case XML_SCHEMAS_STRING:
@@ -752,7 +756,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type)
        case XML_SCHEMAS_GMONTH:
            return (xmlSchemaTypeGMonthDef);
        case XML_SCHEMAS_GMONTHDAY:
-           return (xmlSchemaTypeGMonthDayDef);
+           return (xmlSchemaTypeGMonthDayDef);
        case XML_SCHEMAS_GYEAR:
            return (xmlSchemaTypeGYearDef);
        case XML_SCHEMAS_GYEARMONTH:
@@ -828,7 +832,7 @@ xmlSchemaGetBuiltInType(xmlSchemaValType type)
        case XML_SCHEMAS_BASE64BINARY:
            return (xmlSchemaTypeBase64BinaryDef);
        case XML_SCHEMAS_ANYTYPE:
-           return (xmlSchemaTypeAnyTypeDef);       
+           return (xmlSchemaTypeAnyTypeDef);
        default:
            return (NULL);
     }
@@ -880,7 +884,7 @@ xmlSchemaValueGetNext(xmlSchemaValPtr cur) {
  */
 const xmlChar *
 xmlSchemaValueGetAsString(xmlSchemaValPtr val)
-{    
+{
     if (val == NULL)
        return (NULL);
     switch (val->type) {
@@ -913,7 +917,7 @@ xmlSchemaValueGetAsString(xmlSchemaValPtr val)
  */
 int
 xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val)
-{    
+{
     if ((val == NULL) || (val->type != XML_SCHEMAS_BOOLEAN))
        return (0);
     return (val->value.b);
@@ -924,8 +928,8 @@ xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val)
  * @type:  the value type
  * @value:  the value
  *
- * Allocate a new simple type value. The type can be 
- * of XML_SCHEMAS_STRING. 
+ * Allocate a new simple type value. The type can be
+ * of XML_SCHEMAS_STRING.
  * WARNING: This one is intended to be expanded for other
  * string based types. We need this for anySimpleType as well.
  * The given value is consumed and freed with the struct.
@@ -1007,11 +1011,11 @@ xmlSchemaNewQNameValue(const xmlChar *namespaceName,
  *
  * Cleanup the default XML Schemas type library
  */
-void   
+void
 xmlSchemaFreeValue(xmlSchemaValPtr value) {
     xmlSchemaValPtr prev;
 
-    while (value != NULL) {    
+    while (value != NULL) {
        switch (value->type) {
            case XML_SCHEMAS_STRING:
            case XML_SCHEMAS_NORMSTRING:
@@ -1025,7 +1029,7 @@ xmlSchemaFreeValue(xmlSchemaValPtr value) {
            case XML_SCHEMAS_IDREF:
            case XML_SCHEMAS_IDREFS:
            case XML_SCHEMAS_ENTITY:
-           case XML_SCHEMAS_ENTITIES:        
+           case XML_SCHEMAS_ENTITIES:
            case XML_SCHEMAS_ANYURI:
            case XML_SCHEMAS_ANYSIMPLETYPE:
                if (value->value.str != NULL)
@@ -1052,7 +1056,7 @@ xmlSchemaFreeValue(xmlSchemaValPtr value) {
        prev = value;
        value = value->next;
        xmlFree(prev);
-    }    
+    }
 }
 
 /**
@@ -1088,9 +1092,9 @@ xmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr type)
     if ((type == NULL) || (type->type != XML_SCHEMA_TYPE_BASIC))
        return (NULL);
     switch (type->builtInType) {
-       case XML_SCHEMAS_NMTOKENS: 
+       case XML_SCHEMAS_NMTOKENS:
            return (xmlSchemaTypeNmtokenDef );
-       case XML_SCHEMAS_IDREFS: 
+       case XML_SCHEMAS_IDREFS:
            return (xmlSchemaTypeIdrefDef);
        case XML_SCHEMAS_ENTITIES:
            return (xmlSchemaTypeEntityDef);
@@ -1342,13 +1346,13 @@ _xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) {
  */
 static int
 _xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) {
-    const xmlChar *cur = *str;    
+    const xmlChar *cur = *str;
     int ret = 0;
     int value = 0;
 
     PARSE_2_DIGITS(value, cur, ret);
     if (ret != 0)
-       return ret;    
+       return ret;
     if (*cur != ':')
        return 1;
     if (!VALID_HOUR(value))
@@ -1614,7 +1618,7 @@ xmlSchemaValidateDates (xmlSchemaValType type,
             const xmlChar *rewnd = cur;
             cur++;
 
-           ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
+           ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
             if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) {
 
                 /*
@@ -1852,7 +1856,7 @@ xmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
         }
        cur++;
        if (collapse)
-           while IS_WSP_BLANK_CH(*cur) cur++;        
+           while IS_WSP_BLANK_CH(*cur) cur++;
     }
 
     if (isneg) {
@@ -1908,13 +1912,13 @@ xmlSchemaStrip(const xmlChar *value) {
  */
 xmlChar *
 xmlSchemaWhiteSpaceReplace(const xmlChar *value) {
-    const xmlChar *cur = value;    
-    xmlChar *ret = NULL, *mcur; 
+    const xmlChar *cur = value;
+    xmlChar *ret = NULL, *mcur;
 
-    if (value == NULL) 
+    if (value == NULL)
        return(NULL);
-    
-    while ((*cur != 0) && 
+
+    while ((*cur != 0) &&
        (((*cur) != 0xd) && ((*cur) != 0x9) && ((*cur) != 0xa))) {
        cur++;
     }
@@ -1927,7 +1931,7 @@ xmlSchemaWhiteSpaceReplace(const xmlChar *value) {
        if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) )
            *mcur = ' ';
        mcur++;
-    } while (*mcur != 0);          
+    } while (*mcur != 0);
     return(ret);
 }
 
@@ -2072,7 +2076,7 @@ xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo,
     const xmlChar *tmp, *cur = *str;
     int ret = 0, i = 0;
 
-    if (!((*cur >= '0') && (*cur <= '9'))) 
+    if (!((*cur >= '0') && (*cur <= '9')))
         return(-2);
 
     while (*cur == '0') {        /* ignore leading zeroes */
@@ -2148,7 +2152,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
     if ((flags == 0) && (value != NULL)) {
 
         if ((type->builtInType != XML_SCHEMAS_STRING) &&
-         (type->builtInType != XML_SCHEMAS_ANYTYPE) && 
+         (type->builtInType != XML_SCHEMAS_ANYTYPE) &&
          (type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) {
            if (type->builtInType == XML_SCHEMAS_NORMSTRING)
                norm = xmlSchemaWhiteSpaceReplace(value);
@@ -2160,7 +2164,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
     }
 
     switch (type->builtInType) {
-        case XML_SCHEMAS_UNKNOWN:            
+        case XML_SCHEMAS_UNKNOWN:
             goto error;
        case XML_SCHEMAS_ANYTYPE:
        case XML_SCHEMAS_ANYSIMPLETYPE:
@@ -2171,10 +2175,10 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                    *val = v;
                } else {
                    goto error;
-               }               
+               }
            }
            goto return0;
-        case XML_SCHEMAS_STRING:               
+        case XML_SCHEMAS_STRING:
            if (! normOnTheFly) {
                const xmlChar *cur = value;
 
@@ -2253,7 +2257,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                 const xmlChar *cur = value;
                 unsigned int len, neg, integ, hasLeadingZeroes;
                xmlChar cval[25];
-               xmlChar *cptr = cval;           
+               xmlChar *cptr = cval;
 
                 if ((cur == NULL) || (*cur == 0))
                     goto return1;
@@ -2327,10 +2331,10 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                     v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL);
                     if (v != NULL) {
                        /*
-                       * Now evaluate the significant digits of the number
-                       */
+                       * Now evaluate the significant digits of the number
+                       */
                        if (len != 0) {
-                           
+
                            if (integ != ~0u) {
                                /*
                                * Get rid of trailing zeroes in the
@@ -2604,8 +2608,8 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                        } else {
                            cur++;
                        }
-                   }               
-               }                
+                   }
+               }
                 if (val != NULL) {
                     v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);
                     if (v != NULL) {
@@ -2618,7 +2622,7 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                 goto return0;
             }
         case XML_SCHEMAS_LANGUAGE:
-           if (normOnTheFly) {             
+           if (normOnTheFly) {
                norm = xmlSchemaCollapseString(value);
                if (norm != NULL)
                    value = norm;
@@ -2903,11 +2907,11 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
                 }
                 goto done;
             }
-        case XML_SCHEMAS_ANYURI:{              
+        case XML_SCHEMAS_ANYURI:{
                 if (*value != 0) {
                    xmlURIPtr uri;
                    xmlChar *tmpval, *cur;
-                   if (normOnTheFly) {             
+                   if (normOnTheFly) {
                        norm = xmlSchemaCollapseString(value);
                        if (norm != NULL)
                            value = norm;
@@ -2996,12 +3000,12 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
             }
         case XML_SCHEMAS_BASE64BINARY:{
                 /* ISSUE:
-                 * 
+                 *
                  * Ignore all stray characters? (yes, currently)
                  * Worry about long lines? (no, currently)
-                 * 
+                 *
                  * rfc2045.txt:
-                 * 
+                 *
                  * "The encoded output stream must be represented in lines of
                  * no more than 76 characters each.  All line breaks or other
                  * characters not found in Table 1 must be ignored by decoding
@@ -3412,7 +3416,7 @@ xmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y)
     /*
      * First test: If x is -ve and not zero
      */
-    if ((x->value.decimal.sign) && 
+    if ((x->value.decimal.sign) &&
        ((x->value.decimal.lo != 0) ||
         (x->value.decimal.mi != 0) ||
         (x->value.decimal.hi != 0))) {
@@ -3653,7 +3657,7 @@ xmlSchemaDupVal (xmlSchemaValPtr v)
     xmlSchemaValPtr ret = xmlSchemaNewValue(v->type);
     if (ret == NULL)
         return NULL;
-    
+
     memcpy(ret, v, sizeof(xmlSchemaVal));
     ret->next = NULL;
     return ret;
@@ -3699,7 +3703,7 @@ xmlSchemaCopyValue(xmlSchemaValPtr val)
                if (val->value.str != NULL)
                    cur->value.str = xmlStrdup(BAD_CAST val->value.str);
                break;
-           case XML_SCHEMAS_QNAME:        
+           case XML_SCHEMAS_QNAME:
            case XML_SCHEMAS_NOTATION:
                cur = xmlSchemaDupVal(val);
                if (val->value.qname.name != NULL)
@@ -3841,16 +3845,17 @@ _xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
             if (tyr == 0)
                 tyr--;
            /*
-            * Coverity detected an overrun in daysInMonth 
+            * Coverity detected an overrun in daysInMonth
             * of size 12 at position 12 with index variable "((r)->mon - 1)"
             */
-           if (tmon < 0)
-               tmon = 0;
+           if (tmon < 1)
+               tmon = 1;
            if (tmon > 12)
                tmon = 12;
             tempdays += MAX_DAYINMONTH(tyr, tmon);
             carry = -1;
-        } else if (tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
+        } else if (VALID_YEAR(r->year) && VALID_MONTH(r->mon) &&
+                   tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
             tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
             carry = 1;
         } else
@@ -3866,7 +3871,7 @@ _xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
                 r->year++;
        }
     }
-    
+
     r->day = tempdays;
 
     /*
@@ -3931,7 +3936,7 @@ xmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset)
  * _xmlSchemaDateCastYMToDays:
  * @dt: an #xmlSchemaValPtr
  *
- * Convert mon and year of @dt to total number of days. Take the 
+ * Convert mon and year of @dt to total number of days. Take the
  * number of years since (or before) 1 AD and add the number of leap
  * years. This is a function  because negative
  * years must be handled a little differently and there is no zero year.
@@ -4111,7 +4116,7 @@ xmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y)
                 ret = -1;
             else if (sec > 0.0)
                 ret = 1;
-            
+
         }
        xmlSchemaFreeValue(p1);
        xmlSchemaFreeValue(q1);
@@ -4252,7 +4257,7 @@ xmlSchemaComparePreserveReplaceStrings(const xmlChar *x,
                                       int invert)
 {
     int tmp;
-    
+
     while ((*x != 0) && (*y != 0)) {
        if (IS_WSP_REPLACE_CH(*y)) {
            if (! IS_WSP_SPACE_CH(*x)) {
@@ -4267,7 +4272,7 @@ xmlSchemaComparePreserveReplaceStrings(const xmlChar *x,
                    else
                        return(1);
                }
-           }       
+           }
        } else {
            tmp = *x - *y;
            if (tmp < 0) {
@@ -4321,7 +4326,7 @@ xmlSchemaComparePreserveCollapseStrings(const xmlChar *x,
 {
     int tmp;
 
-    /* 
+    /*
     * Skip leading blank chars of the collapsed string.
     */
     while IS_WSP_BLANK_CH(*y)
@@ -4410,12 +4415,12 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x,
 {
     int tmp;
 
-    /* 
+    /*
     * Skip leading blank chars of the collapsed string.
     */
     while IS_WSP_BLANK_CH(*y)
        y++;
-    
+
     while ((*x != 0) && (*y != 0)) {
        if IS_WSP_BLANK_CH(*y) {
            if (! IS_WSP_BLANK_CH(*x)) {
@@ -4435,8 +4440,8 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x,
                }
            }
            x++;
-           y++;            
-           /* 
+           y++;
+           /*
            * Skip contiguous blank chars of the collapsed string.
            */
            while IS_WSP_BLANK_CH(*y)
@@ -4470,7 +4475,7 @@ xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x,
             return(-1);
         else
             return(1);
-    }   
+    }
     if (*y != 0) {
        /*
        * Skip trailing blank chars of the collapsed string.
@@ -4503,27 +4508,27 @@ xmlSchemaCompareReplacedStrings(const xmlChar *x,
                                const xmlChar *y)
 {
     int tmp;
-   
+
     while ((*x != 0) && (*y != 0)) {
        if IS_WSP_BLANK_CH(*y) {
            if (! IS_WSP_BLANK_CH(*x)) {
                if ((*x - 0x20) < 0)
-                   return(-1);
+                   return(-1);
                else
                    return(1);
-           }       
+           }
        } else {
            if IS_WSP_BLANK_CH(*x) {
                if ((0x20 - *y) < 0)
-                   return(-1);
+                   return(-1);
                else
                    return(1);
            }
            tmp = *x - *y;
            if (tmp < 0)
-               return(-1);
+               return(-1);
            if (tmp > 0)
-               return(1);
+               return(1);
        }
        x++;
        y++;
@@ -4549,7 +4554,7 @@ static int
 xmlSchemaCompareNormStrings(const xmlChar *x,
                            const xmlChar *y) {
     int tmp;
-    
+
     while (IS_BLANK_CH(*x)) x++;
     while (IS_BLANK_CH(*y)) y++;
     while ((*x != 0) && (*y != 0)) {
@@ -4742,13 +4747,13 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
                 (ytype == XML_SCHEMAS_GYEARMONTH))
                 return (xmlSchemaCompareDates(x, y));
             return (-2);
-       /* 
+       /*
        * Note that we will support comparison of string types against
        * anySimpleType as well.
        */
        case XML_SCHEMAS_ANYSIMPLETYPE:
        case XML_SCHEMAS_STRING:
-        case XML_SCHEMAS_NORMSTRING:           
+        case XML_SCHEMAS_NORMSTRING:
         case XML_SCHEMAS_TOKEN:
         case XML_SCHEMAS_LANGUAGE:
         case XML_SCHEMAS_NMTOKEN:
@@ -4772,10 +4777,10 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
            /*
            * TODO: Compare those against QName.
            */
-           if (ytype == XML_SCHEMAS_QNAME) {           
+           if (ytype == XML_SCHEMAS_QNAME) {
                TODO
                if (y == NULL)
-                   return(-2);    
+                   return(-2);
                return (-2);
            }
             if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) ||
@@ -4797,7 +4802,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
                        /* TODO: What about x < y or x > y. */
                        if (xmlStrEqual(xv, yv))
                            return (0);
-                       else 
+                       else
                            return (2);
                    } else if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
                        return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0));
@@ -4823,7 +4828,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
                        return (xmlSchemaCompareNormStrings(xv, yv));
                } else
                    return (-2);
-                
+
            }
             return (-2);
        }
@@ -4894,7 +4899,7 @@ xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
                 else
                     return(-1);
             }
-            return (-2);    
+            return (-2);
         case XML_SCHEMAS_IDREFS:
         case XML_SCHEMAS_ENTITIES:
         case XML_SCHEMAS_NMTOKENS:
@@ -4929,7 +4934,7 @@ xmlSchemaCompareValues(xmlSchemaValPtr x, xmlSchemaValPtr y) {
 
     if (y->type == XML_SCHEMAS_STRING)
        yws = XML_SCHEMA_WHITESPACE_PRESERVE;
-    else if (x->type == XML_SCHEMAS_NORMSTRING)
+    else if (y->type == XML_SCHEMAS_NORMSTRING)
         yws = XML_SCHEMA_WHITESPACE_REPLACE;
     else
         yws = XML_SCHEMA_WHITESPACE_COLLAPSE;
@@ -5082,7 +5087,7 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
            if (expectedLen != NULL)
                *expectedLen = facet->val->value.decimal.lo;
            return (XML_SCHEMAV_CVC_LENGTH_VALID);
-       }       
+       }
     } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
        if (actualLen < facet->val->value.decimal.lo) {
            if (expectedLen != NULL)
@@ -5096,12 +5101,12 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
            return (XML_SCHEMAV_CVC_MAXLENGTH_VALID);
        }
     } else
-       /* 
-       * NOTE: That we can pass NULL as xmlSchemaValPtr to 
+       /*
+       * NOTE: That we can pass NULL as xmlSchemaValPtr to
        * xmlSchemaValidateFacet, since the remaining facet types
-       * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION. 
+       * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION.
        */
-       return(xmlSchemaValidateFacet(NULL, facet, value, NULL));   
+       return(xmlSchemaValidateFacet(NULL, facet, value, NULL));
     return (0);
 }
 
@@ -5114,7 +5119,7 @@ xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
  * @ws: the whitespace type of the value
  * @length: the actual length of the value
  *
- * Checka a value against a "length", "minLength" and "maxLength" 
+ * Checka a value against a "length", "minLength" and "maxLength"
  * facet; sets @length to the computed length of @value.
  *
  * Returns 0 if the value is valid, a positive error code
@@ -5126,7 +5131,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
                                     const xmlChar *value,
                                     xmlSchemaValPtr val,
                                     unsigned long *length,
-                                    xmlSchemaWhitespaceValueType ws)  
+                                    xmlSchemaWhitespaceValueType ws)
 {
     unsigned int len = 0;
 
@@ -5137,7 +5142,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
        (facet->type != XML_SCHEMA_FACET_MAXLENGTH) &&
        (facet->type != XML_SCHEMA_FACET_MINLENGTH))
        return (-1);
-       
+
     /*
     * TODO: length, maxLength and minLength must be of type
     * nonNegativeInteger only. Check if decimal is used somehow.
@@ -5171,7 +5176,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
                    if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
                        len = xmlSchemaNormLen(value);
                    else
-                   /* 
+                   /*
                    * Should be OK for "preserve" as well.
                    */
                    len = xmlUTF8Strlen(value);
@@ -5183,7 +5188,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
            case XML_SCHEMAS_NMTOKEN:
            case XML_SCHEMAS_NAME:
            case XML_SCHEMAS_NCNAME:
-           case XML_SCHEMAS_ID:                
+           case XML_SCHEMAS_ID:
                /*
                * FIXME: What exactly to do with anyURI?
                */
@@ -5192,11 +5197,11 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
                    len = xmlSchemaNormLen(value);
                break;
            case XML_SCHEMAS_QNAME:
-           case XML_SCHEMAS_NOTATION:
-               /*
+           case XML_SCHEMAS_NOTATION:
+               /*
                * For QName and NOTATION, those facets are
                * deprecated and should be ignored.
-               */
+               */
                return (0);
            default:
                TODO
@@ -5216,7 +5221,7 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
        if (len > facet->val->value.decimal.lo)
            return(XML_SCHEMAV_CVC_MAXLENGTH_VALID);
     }
-    
+
     return (0);
 }
 
@@ -5228,18 +5233,18 @@ xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
  * @val:  the precomputed value
  * @length: the actual length of the value
  *
- * Checka a value against a "length", "minLength" and "maxLength" 
+ * Checka a value against a "length", "minLength" and "maxLength"
  * facet; sets @length to the computed length of @value.
  *
  * Returns 0 if the value is valid, a positive error code
  * otherwise and -1 in case of an internal or API error.
  */
 int
-xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type, 
+xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type,
                             xmlSchemaFacetPtr facet,
                             const xmlChar *value,
                             xmlSchemaValPtr val,
-                            unsigned long *length)  
+                            unsigned long *length)
 {
     if (type == NULL)
         return(-1);
@@ -5249,7 +5254,7 @@ xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type,
 }
 
 /**
- * xmlSchemaValidateLengthFacetWhtsp: 
+ * xmlSchemaValidateLengthFacetWhtsp:
  * @facet:  the facet to check
  * @valType:  the built-in type
  * @value:  the lexical repr. of the value to be validated
@@ -5257,7 +5262,7 @@ xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type,
  * @ws: the whitespace type of the value
  * @length: the actual length of the value
  *
- * Checka a value against a "length", "minLength" and "maxLength" 
+ * Checka a value against a "length", "minLength" and "maxLength"
  * facet; sets @length to the computed length of @value.
  *
  * Returns 0 if the value is valid, a positive error code
@@ -5292,7 +5297,7 @@ xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
 static int
 xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
                               xmlSchemaWhitespaceValueType fws,
-                              xmlSchemaValType valType,                               
+                              xmlSchemaValType valType,
                               const xmlChar *value,
                               xmlSchemaValPtr val,
                               xmlSchemaWhitespaceValueType ws)
@@ -5304,7 +5309,7 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
 
     switch (facet->type) {
        case XML_SCHEMA_FACET_PATTERN:
-           /* 
+           /*
            * NOTE that for patterns, the @value needs to be the normalized
            * value, *not* the lexical initial value or the canonical value.
            */
@@ -5405,7 +5410,7 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
            else {
                switch (valType) {
                    case XML_SCHEMAS_STRING:
-                   case XML_SCHEMAS_NORMSTRING:                        
+                   case XML_SCHEMAS_NORMSTRING:
                        if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
                            /*
                            * This is to ensure API compatibility with the old
@@ -5421,13 +5426,13 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
                            if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
                                len = xmlSchemaNormLen(value);
                            else
-                               /* 
+                               /*
                                * Should be OK for "preserve" as well.
                                */
                                len = xmlUTF8Strlen(value);
                        }
                        break;
-                   case XML_SCHEMAS_IDREF:                 
+                   case XML_SCHEMAS_IDREF:
                    case XML_SCHEMAS_TOKEN:
                    case XML_SCHEMAS_LANGUAGE:
                    case XML_SCHEMAS_NMTOKEN:
@@ -5436,11 +5441,11 @@ xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
                    case XML_SCHEMAS_ID:
                    case XML_SCHEMAS_ANYURI:
                        if (value != NULL)
-                           len = xmlSchemaNormLen(value);
-                       break;             
+                           len = xmlSchemaNormLen(value);
+                       break;
                    default:
                        TODO
-               }
+               }
            }
            if (facet->type == XML_SCHEMA_FACET_LENGTH) {
                if (len != facet->val->value.decimal.lo)
@@ -5550,7 +5555,7 @@ xmlSchemaValidateFacet(xmlSchemaTypePtr base,
 int
 xmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet,
                            xmlSchemaWhitespaceValueType fws,
-                           xmlSchemaValType valType,                       
+                           xmlSchemaValType valType,
                            const xmlChar *value,
                            xmlSchemaValPtr val,
                            xmlSchemaWhitespaceValueType ws)
@@ -5611,13 +5616,13 @@ xmlSchemaFormatFloat(double number, char buffer[], int buffersize)
            /*
             * Result is in work, and after_fraction points
             * just past the fractional part.
-            * Use scientific notation 
+            * Use scientific notation
            */
            integer_place = DBL_DIG + EXPONENT_DIGITS + 1;
            fraction_place = DBL_DIG - 1;
            snprintf(work, sizeof(work),"%*.*e",
                integer_place, fraction_place, number);
-           after_fraction = strchr(work + DBL_DIG, 'e');           
+           after_fraction = strchr(work + DBL_DIG, 'e');
            /* Remove fractional trailing zeroes */
            ptr = after_fraction;
            while (*(--ptr) == '0')
@@ -5644,12 +5649,12 @@ xmlSchemaFormatFloat(double number, char buffer[], int buffersize)
  * @val: the precomputed value
  * @retValue: the returned value
  *
- * Get a the cononical lexical representation of the value.
+ * Get the canonical lexical representation of the value.
  * The caller has to FREE the returned retValue.
  *
  * WARNING: Some value types are not supported yet, resulting
  * in a @retValue of "???".
- * 
+ *
  * TODO: XML Schema 1.0 does not define canonical representations
  * for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay,
  * anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.
@@ -5669,7 +5674,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
            if (val->value.str == NULL)
                *retValue = BAD_CAST xmlStrdup(BAD_CAST "");
            else
-               *retValue = 
+               *retValue =
                    BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
            break;
        case XML_SCHEMAS_NORMSTRING:
@@ -5686,7 +5691,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
        case XML_SCHEMAS_TOKEN:
        case XML_SCHEMAS_LANGUAGE:
        case XML_SCHEMAS_NMTOKEN:
-       case XML_SCHEMAS_NAME:  
+       case XML_SCHEMAS_NAME:
        case XML_SCHEMAS_NCNAME:
        case XML_SCHEMAS_ID:
        case XML_SCHEMAS_IDREF:
@@ -5695,10 +5700,10 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
        case XML_SCHEMAS_ANYURI:   /* Unclear */
            if (val->value.str == NULL)
                return (-1);
-           *retValue = 
+           *retValue =
                BAD_CAST xmlSchemaCollapseString(BAD_CAST val->value.str);
            if (*retValue == NULL)
-               *retValue = 
+               *retValue =
                    BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
            break;
        case XML_SCHEMAS_QNAME:
@@ -5720,7 +5725,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
            /*
            * TODO: Lookout for a more simple implementation.
            */
-           if ((val->value.decimal.total == 1) && 
+           if ((val->value.decimal.total == 1) &&
                (val->value.decimal.lo == 0)) {
                *retValue = xmlStrdup(BAD_CAST "0.0");
            } else {
@@ -5754,7 +5759,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                else
                    snprintf(offs, bufsize - (offs - buf),
                        "%lu", dec.lo);
-                       
+
                if (dec.frac != 0) {
                    if (dec.frac != dec.total) {
                        int diff = dec.total - dec.frac;
@@ -5767,7 +5772,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                        unsigned int i = 0;
                        /*
                        * Insert missing zeroes behind the decimal point.
-                       */                      
+                       */
                        while (*(offs + i) != 0)
                            i++;
                        if (i < dec.total) {
@@ -5904,7 +5909,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                snprintf((char *) *retValue, 6, "---%02u",
                    val->value.date.day);
            }
-           break;        
+           break;
         case XML_SCHEMAS_GMONTHDAY: {
                /* TODO: Unclear in XML Schema 1.0 */
                /* TODO: What to do with the timezone? */
@@ -5921,14 +5926,14 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                /* TODO: What to do with the timezone? */
                if (val->value.date.year < 0)
                    snprintf(buf, 35, "-%04ld-%02u",
-                       labs(val->value.date.year), 
+                       labs(val->value.date.year),
                        val->value.date.mon);
                else
                    snprintf(buf, 35, "%04ld-%02u",
                        val->value.date.year, val->value.date.mon);
                *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
            }
-           break;              
+           break;
        case XML_SCHEMAS_TIME:
            {
                char buf[30];
@@ -5939,8 +5944,8 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                    norm = xmlSchemaDateNormalize(val, 0);
                    if (norm == NULL)
                        return (-1);
-                   /* 
-                   * TODO: Check if "%.14g" is portable.                   
+                   /*
+                   * TODO: Check if "%.14g" is portable.
                    */
                    snprintf(buf, 30,
                        "%02u:%02u:%02.14gZ",
@@ -5956,7 +5961,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                        val->value.date.sec);
                }
                *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-           }       
+           }
            break;
         case XML_SCHEMAS_DATE:
            {
@@ -5984,7 +5989,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                        val->value.date.day);
                }
                *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
-           }       
+           }
            break;
         case XML_SCHEMAS_DATETIME:
            {
@@ -6028,8 +6033,8 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
            *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.base64.str);
            break;
        case XML_SCHEMAS_FLOAT: {
-               char buf[30];           
-               /* 
+               char buf[30];
+               /*
                * |m| < 16777216, -149 <= e <= 104.
                * TODO: Handle, NaN, INF, -INF. The format is not
                * yet conformant. The c type float does not cover
@@ -6050,7 +6055,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
                snprintf(buf, 40, "%01.14e", val->value.d);
                *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
            }
-           break;      
+           break;
        default:
            *retValue = BAD_CAST xmlStrdup(BAD_CAST "???");
            return (1);
@@ -6066,7 +6071,7 @@ xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
  * @retValue: the returned value
  * @ws: the whitespace type of the value
  *
- * Get a the cononical representation of the value.
+ * Get the canonical representation of the value.
  * The caller has to free the returned @retValue.
  *
  * Returns 0 if the value could be built, 1 if the value type is
@@ -6109,7 +6114,7 @@ xmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr val,
            break;
        default:
            return (xmlSchemaGetCanonValue(val, retValue));
-    }    
+    }
     return (0);
 }
 
index 910f244..a37220d 100644 (file)
@@ -3,7 +3,7 @@
  *
  * This module provides various utility functions for manipulating
  * the xmlChar* type. All functions named xmlStr* have been moved here
- * from the parser.c file (their original home). 
+ * from the parser.c file (their original home).
  *
  * See Copyright for the status of this software.
  *
@@ -40,7 +40,7 @@
 xmlChar *
 xmlStrndup(const xmlChar *cur, int len) {
     xmlChar *ret;
-    
+
     if ((cur == NULL) || (len < 0)) return(NULL);
     ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
     if (ret == NULL) {
@@ -85,7 +85,7 @@ xmlChar *
 xmlCharStrndup(const char *cur, int len) {
     int i;
     xmlChar *ret;
-    
+
     if ((cur == NULL) || (len < 0)) return(NULL);
     ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
     if (ret == NULL) {
@@ -170,7 +170,7 @@ xmlStrEqual(const xmlChar *str1, const xmlChar *str2) {
  * @name:  the localname of the QName
  * @str:  the second xmlChar *
  *
- * Check if a QName is Equal to a given string 
+ * Check if a QName is Equal to a given string
  *
  * Returns 1 if they are equal, 0 if they are different
  */
@@ -340,7 +340,7 @@ xmlStrchr(const xmlChar *str, xmlChar val) {
 const xmlChar *
 xmlStrstr(const xmlChar *str, const xmlChar *val) {
     int n;
-    
+
     if (str == NULL) return(NULL);
     if (val == NULL) return(NULL);
     n = xmlStrlen(val);
@@ -368,7 +368,7 @@ xmlStrstr(const xmlChar *str, const xmlChar *val) {
 const xmlChar *
 xmlStrcasestr(const xmlChar *str, const xmlChar *val) {
     int n;
-    
+
     if (str == NULL) return(NULL);
     if (val == NULL) return(NULL);
     n = xmlStrlen(val);
@@ -396,7 +396,7 @@ xmlStrcasestr(const xmlChar *str, const xmlChar *val) {
 xmlChar *
 xmlStrsub(const xmlChar *str, int start, int len) {
     int i;
-    
+
     if (str == NULL) return(NULL);
     if (start < 0) return(NULL);
     if (len < 0) return(NULL);
@@ -519,7 +519,7 @@ xmlStrcat(xmlChar *cur, const xmlChar *add) {
     const xmlChar *p = add;
 
     if (add == NULL) return(cur);
-    if (cur == NULL) 
+    if (cur == NULL)
         return(xmlStrdup(add));
 
     while (*p != 0) p++; /* non input consuming */
@@ -537,20 +537,20 @@ xmlStrcat(xmlChar *cur, const xmlChar *add) {
  *
  * Returns the number of characters written to @buf or -1 if an error occurs.
  */
-int XMLCDECL 
+int XMLCDECL
 xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) {
     va_list args;
     int ret;
-    
+
     if((buf == NULL) || (msg == NULL)) {
         return(-1);
     }
-    
+
     va_start(args, msg);
     ret = vsnprintf((char *) buf, len, (const char *) msg, args);
     va_end(args);
     buf[len - 1] = 0; /* be safe ! */
-    
+
     return(ret);
 }
 
@@ -565,17 +565,17 @@ xmlStrPrintf(xmlChar *buf, int len, const xmlChar *msg, ...) {
  *
  * Returns the number of characters written to @buf or -1 if an error occurs.
  */
-int 
+int
 xmlStrVPrintf(xmlChar *buf, int len, const xmlChar *msg, va_list ap) {
     int ret;
-    
+
     if((buf == NULL) || (msg == NULL)) {
         return(-1);
     }
-    
+
     ret = vsnprintf((char *) buf, len, (const char *) msg, ap);
     buf[len - 1] = 0; /* be safe ! */
-    
+
     return(ret);
 }
 
@@ -858,7 +858,7 @@ xmlChar *
 xmlUTF8Strndup(const xmlChar *utf, int len) {
     xmlChar *ret;
     int i;
-    
+
     if ((utf == NULL) || (len < 0)) return(NULL);
     i = xmlUTF8Strsize(utf, len);
     ret = (xmlChar *) xmlMallocAtomic((i + 1) * sizeof(xmlChar));
index 450d0f0..ce6e9a4 100644 (file)
@@ -204,729 +204,729 @@ static xmlUnicodeRange xmlUnicodeCats[] = {
   {"Zp", xmlUCSIsCatZp},
   {"Zs", xmlUCSIsCatZs}};
 
-static const xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f}, 
-    {0xad, 0xad}, {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f}, 
-    {0x17b4, 0x17b5}, {0x200b, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063}, 
-    {0x206a, 0x206f}, {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00}, 
+static const xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f},
+    {0xad, 0xad}, {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f},
+    {0x17b4, 0x17b5}, {0x200b, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063},
+    {0x206a, 0x206f}, {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00},
     {0xdfff, 0xe000}, {0xf8ff, 0xf8ff}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb} };
-static const xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, 
-    {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd}, 
+static const xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
+    {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd},
     {0x100000, 0x100000}, {0x10fffd, 0x10fffd} };
 static xmlChRangeGroup xmlCG = {18,7,xmlCS,xmlCL};
 
-static const xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603}, 
-    {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200b, 0x200f}, 
-    {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff}, 
+static const xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603},
+    {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200b, 0x200f},
+    {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff},
     {0xfff9, 0xfffb} };
-static const xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001}, 
+static const xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
     {0xe0020, 0xe007f} };
 static xmlChRangeGroup xmlCfG = {11,3,xmlCfS,xmlCfL};
 
-static const xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a}, 
-    {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6}, 
-    {0xf8, 0x236}, {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4}, 
-    {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a}, 
-    {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5}, 
-    {0x3f7, 0x3fb}, {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5}, 
-    {0x4f8, 0x4f9}, {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559}, 
-    {0x561, 0x587}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, 
-    {0x640, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, 
-    {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, 
-    {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5}, 
-    {0x7b1, 0x7b1}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950}, 
-    {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8}, 
-    {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, 
-    {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a}, 
-    {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33}, 
-    {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e}, 
-    {0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8}, 
-    {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd}, 
-    {0xad0, 0xad0}, {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10}, 
-    {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39}, 
-    {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71}, 
-    {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95}, 
-    {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4}, 
-    {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c}, 
-    {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39}, 
-    {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8}, 
-    {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde}, 
-    {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28}, 
-    {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1}, 
-    {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30}, 
-    {0xe32, 0xe33}, {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84}, 
-    {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97}, 
-    {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7}, 
-    {0xeaa, 0xeab}, {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd}, 
-    {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00}, 
-    {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021}, 
-    {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5}, 
-    {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, 
-    {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, 
-    {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, 
-    {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, 
-    {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, 
-    {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, 
-    {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, 
-    {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, 
-    {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, 
-    {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, 
-    {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877}, 
-    {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, 
-    {0x1d00, 0x1d6b}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, 
-    {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, 
-    {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, 
-    {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, 
-    {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, 
-    {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f}, 
-    {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115}, 
-    {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, 
-    {0x212a, 0x212d}, {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f}, 
-    {0x2145, 0x2149}, {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c}, 
-    {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff}, 
-    {0x3105, 0x312c}, {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, 
-    {0x3400, 0x3400}, {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, 
-    {0xa000, 0xa48c}, {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, 
-    {0xfa30, 0xfa6a}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d}, 
-    {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e}, 
-    {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d}, 
-    {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74}, 
-    {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe}, 
+static const xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a},
+    {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6},
+    {0xf8, 0x236}, {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4},
+    {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a},
+    {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5},
+    {0x3f7, 0x3fb}, {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5},
+    {0x4f8, 0x4f9}, {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559},
+    {0x561, 0x587}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a},
+    {0x640, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5},
+    {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff},
+    {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5},
+    {0x7b1, 0x7b1}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950},
+    {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
+    {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd},
+    {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a},
+    {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33},
+    {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e},
+    {0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
+    {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
+    {0xad0, 0xad0}, {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10},
+    {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39},
+    {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71},
+    {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95},
+    {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4},
+    {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c},
+    {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39},
+    {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8},
+    {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde},
+    {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
+    {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1},
+    {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30},
+    {0xe32, 0xe33}, {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84},
+    {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
+    {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
+    {0xeaa, 0xeab}, {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd},
+    {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00},
+    {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021},
+    {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5},
+    {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9},
+    {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d},
+    {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286},
+    {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0},
+    {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5},
+    {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e},
+    {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346},
+    {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676},
+    {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711},
+    {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
+    {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877},
+    {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974},
+    {0x1d00, 0x1d6b}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15},
+    {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57},
+    {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d},
+    {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4},
+    {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec},
+    {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f},
+    {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115},
+    {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128},
+    {0x212a, 0x212d}, {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f},
+    {0x2145, 0x2149}, {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c},
+    {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff},
+    {0x3105, 0x312c}, {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff},
+    {0x3400, 0x3400}, {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5},
+    {0xa000, 0xa48c}, {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d},
+    {0xfa30, 0xfa6a}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d},
+    {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e},
+    {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d},
+    {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74},
+    {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe},
     {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} };
-static const xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, 
-    {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, 
-    {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, 
-    {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d}, 
-    {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, 
-    {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, 
-    {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f}, 
-    {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac}, 
-    {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, 
-    {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, 
-    {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e}, 
-    {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, 
-    {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da}, 
-    {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, 
-    {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, 
-    {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9}, 
+static const xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
+    {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
+    {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
+    {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d},
+    {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
+    {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
+    {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f},
+    {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac},
+    {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
+    {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
+    {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e},
+    {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
+    {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da},
+    {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734},
+    {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788},
+    {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9},
     {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
 static xmlChRangeGroup xmlLG = {279,50,xmlLS,xmlLL};
 
-static const xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa}, 
-    {0xb5, 0xb5}, {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101}, 
-    {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109}, 
-    {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111}, 
-    {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119}, 
-    {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121}, 
-    {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129}, 
-    {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131}, 
-    {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a}, 
-    {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142}, 
-    {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b}, 
-    {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153}, 
-    {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b}, 
-    {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163}, 
-    {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b}, 
-    {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173}, 
-    {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c}, 
-    {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188}, 
-    {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b}, 
-    {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5}, 
-    {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0}, 
-    {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf}, 
-    {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce}, 
-    {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6}, 
-    {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df}, 
-    {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7}, 
-    {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0}, 
-    {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb}, 
-    {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203}, 
-    {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b}, 
-    {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213}, 
-    {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b}, 
-    {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223}, 
-    {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b}, 
-    {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236}, 
-    {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1}, 
-    {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd}, 
-    {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5}, 
-    {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed}, 
-    {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb}, 
-    {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465}, 
-    {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d}, 
-    {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475}, 
-    {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d}, 
-    {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d}, 
-    {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495}, 
-    {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d}, 
-    {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5}, 
-    {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad}, 
-    {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5}, 
-    {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd}, 
-    {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6}, 
-    {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce}, 
-    {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7}, 
-    {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df}, 
-    {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7}, 
-    {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef}, 
-    {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9}, 
-    {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507}, 
-    {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f}, 
-    {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01}, 
-    {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09}, 
-    {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11}, 
-    {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19}, 
-    {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21}, 
-    {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29}, 
-    {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31}, 
-    {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39}, 
-    {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41}, 
-    {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49}, 
-    {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51}, 
-    {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59}, 
-    {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61}, 
-    {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69}, 
-    {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71}, 
-    {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79}, 
-    {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81}, 
-    {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89}, 
-    {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91}, 
-    {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3}, 
-    {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab}, 
-    {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3}, 
-    {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb}, 
-    {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3}, 
-    {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb}, 
-    {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3}, 
-    {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb}, 
-    {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3}, 
-    {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb}, 
-    {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3}, 
-    {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07}, 
-    {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45}, 
-    {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87}, 
-    {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7}, 
-    {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3}, 
-    {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7}, 
-    {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f}, 
-    {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139}, 
-    {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, 
+static const xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa},
+    {0xb5, 0xb5}, {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101},
+    {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109},
+    {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111},
+    {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119},
+    {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121},
+    {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129},
+    {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131},
+    {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a},
+    {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142},
+    {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b},
+    {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153},
+    {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b},
+    {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163},
+    {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b},
+    {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173},
+    {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c},
+    {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188},
+    {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b},
+    {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5},
+    {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0},
+    {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf},
+    {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce},
+    {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6},
+    {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df},
+    {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7},
+    {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0},
+    {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb},
+    {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203},
+    {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b},
+    {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213},
+    {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b},
+    {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223},
+    {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b},
+    {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236},
+    {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1},
+    {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd},
+    {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5},
+    {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed},
+    {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb},
+    {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465},
+    {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d},
+    {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475},
+    {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d},
+    {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d},
+    {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495},
+    {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d},
+    {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5},
+    {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad},
+    {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5},
+    {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd},
+    {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6},
+    {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce},
+    {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7},
+    {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df},
+    {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7},
+    {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef},
+    {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9},
+    {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507},
+    {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f},
+    {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01},
+    {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09},
+    {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11},
+    {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19},
+    {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21},
+    {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29},
+    {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31},
+    {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39},
+    {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41},
+    {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49},
+    {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51},
+    {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59},
+    {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61},
+    {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69},
+    {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71},
+    {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79},
+    {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81},
+    {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89},
+    {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91},
+    {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3},
+    {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab},
+    {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3},
+    {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb},
+    {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3},
+    {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb},
+    {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3},
+    {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb},
+    {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3},
+    {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb},
+    {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3},
+    {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07},
+    {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45},
+    {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87},
+    {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7},
+    {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3},
+    {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7},
+    {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f},
+    {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139},
+    {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17},
     {0xff41, 0xff5a} };
-static const xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433}, 
-    {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b}, 
-    {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3}, 
-    {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537}, 
-    {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3}, 
-    {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f}, 
-    {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1}, 
-    {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e}, 
-    {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f}, 
+static const xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433},
+    {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b},
+    {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
+    {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537},
+    {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3},
+    {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f},
+    {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1},
+    {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e},
+    {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f},
     {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9} };
 static xmlChRangeGroup xmlLlG = {396,28,xmlLlS,xmlLlL};
 
-static const xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1}, 
-    {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559}, 
-    {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6}, 
-    {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005}, 
-    {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe}, 
+static const xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1},
+    {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559},
+    {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6},
+    {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005},
+    {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe},
     {0xff70, 0xff70}, {0xff9e, 0xff9f} };
 static xmlChRangeGroup xmlLmG = {20,0,xmlLmS,NULL};
 
-static const xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3}, 
-    {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a}, 
-    {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef}, 
-    {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f}, 
-    {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939}, 
-    {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c}, 
-    {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, 
-    {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1}, 
-    {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28}, 
-    {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39}, 
-    {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d}, 
-    {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, 
-    {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1}, 
-    {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30}, 
-    {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, 
-    {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a}, 
-    {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c}, 
-    {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5}, 
-    {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28}, 
-    {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c}, 
-    {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, 
-    {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, 
-    {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, 
-    {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, 
-    {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, 
-    {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, 
-    {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, 
-    {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0}, 
-    {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd}, 
-    {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, 
-    {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, 
-    {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9}, 
-    {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d}, 
-    {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286}, 
-    {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0}, 
-    {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5}, 
-    {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e}, 
-    {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346}, 
-    {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676}, 
-    {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711}, 
-    {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770}, 
-    {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877}, 
-    {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974}, 
-    {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096}, 
-    {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c}, 
-    {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400}, 
-    {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c}, 
-    {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a}, 
-    {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, 
-    {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, 
-    {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, 
-    {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d}, 
-    {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, 
+static const xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3},
+    {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
+    {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef},
+    {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f},
+    {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939},
+    {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c},
+    {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2},
+    {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1},
+    {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28},
+    {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39},
+    {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d},
+    {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3},
+    {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1},
+    {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30},
+    {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d},
+    {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a},
+    {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c},
+    {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5},
+    {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
+    {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c},
+    {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
+    {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c},
+    {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61},
+    {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd},
+    {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45},
+    {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a},
+    {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3},
+    {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0},
+    {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd},
+    {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b},
+    {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055},
+    {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9},
+    {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d},
+    {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286},
+    {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0},
+    {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5},
+    {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e},
+    {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346},
+    {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676},
+    {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711},
+    {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
+    {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877},
+    {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974},
+    {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096},
+    {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c},
+    {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400},
+    {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c},
+    {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a},
+    {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c},
+    {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1},
+    {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb},
+    {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d},
+    {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7},
     {0xffda, 0xffdc} };
-static const xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026}, 
-    {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d}, 
-    {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e}, 
-    {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d}, 
-    {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835}, 
-    {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f}, 
+static const xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
+    {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
+    {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
+    {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d},
+    {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
+    {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
     {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
 static xmlChRangeGroup xmlLoG = {211,20,xmlLoS,xmlLoL};
 
-static const xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8}, 
-    {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f}, 
+static const xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8},
+    {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f},
     {0x1fa8, 0x1faf}, {0x1fbc, 0x1fbc}, {0x1fcc, 0x1fcc}, {0x1ffc, 0x1ffc} };
 static xmlChRangeGroup xmlLtG = {10,0,xmlLtS,NULL};
 
-static const xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6}, 
-    {0xd8, 0xde}, {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104}, 
-    {0x106, 0x106}, {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c}, 
-    {0x10e, 0x10e}, {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114}, 
-    {0x116, 0x116}, {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c}, 
-    {0x11e, 0x11e}, {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124}, 
-    {0x126, 0x126}, {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c}, 
-    {0x12e, 0x12e}, {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134}, 
-    {0x136, 0x136}, {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d}, 
-    {0x13f, 0x13f}, {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145}, 
-    {0x147, 0x147}, {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e}, 
-    {0x150, 0x150}, {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156}, 
-    {0x158, 0x158}, {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e}, 
-    {0x160, 0x160}, {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166}, 
-    {0x168, 0x168}, {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e}, 
-    {0x170, 0x170}, {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176}, 
-    {0x178, 0x179}, {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182}, 
-    {0x184, 0x184}, {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191}, 
-    {0x193, 0x194}, {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0}, 
-    {0x1a2, 0x1a2}, {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9}, 
-    {0x1ac, 0x1ac}, {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5}, 
-    {0x1b7, 0x1b8}, {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7}, 
-    {0x1ca, 0x1ca}, {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1}, 
-    {0x1d3, 0x1d3}, {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9}, 
-    {0x1db, 0x1db}, {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2}, 
-    {0x1e4, 0x1e4}, {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea}, 
-    {0x1ec, 0x1ec}, {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4}, 
-    {0x1f6, 0x1f8}, {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe}, 
-    {0x200, 0x200}, {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206}, 
-    {0x208, 0x208}, {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e}, 
-    {0x210, 0x210}, {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216}, 
-    {0x218, 0x218}, {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e}, 
-    {0x220, 0x220}, {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226}, 
-    {0x228, 0x228}, {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e}, 
-    {0x230, 0x230}, {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a}, 
-    {0x38c, 0x38c}, {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab}, 
-    {0x3d2, 0x3d4}, {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc}, 
-    {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4}, 
-    {0x3e6, 0x3e6}, {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec}, 
-    {0x3ee, 0x3ee}, {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa}, 
-    {0x400, 0x42f}, {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464}, 
-    {0x466, 0x466}, {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c}, 
-    {0x46e, 0x46e}, {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474}, 
-    {0x476, 0x476}, {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c}, 
-    {0x47e, 0x47e}, {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c}, 
-    {0x48e, 0x48e}, {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494}, 
-    {0x496, 0x496}, {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c}, 
-    {0x49e, 0x49e}, {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4}, 
-    {0x4a6, 0x4a6}, {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac}, 
-    {0x4ae, 0x4ae}, {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4}, 
-    {0x4b6, 0x4b6}, {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc}, 
-    {0x4be, 0x4be}, {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5}, 
-    {0x4c7, 0x4c7}, {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd}, 
-    {0x4d0, 0x4d0}, {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6}, 
-    {0x4d8, 0x4d8}, {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de}, 
-    {0x4e0, 0x4e0}, {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6}, 
-    {0x4e8, 0x4e8}, {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee}, 
-    {0x4f0, 0x4f0}, {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8}, 
-    {0x500, 0x500}, {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506}, 
-    {0x508, 0x508}, {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e}, 
-    {0x531, 0x556}, {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02}, 
-    {0x1e04, 0x1e04}, {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a}, 
-    {0x1e0c, 0x1e0c}, {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12}, 
-    {0x1e14, 0x1e14}, {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a}, 
-    {0x1e1c, 0x1e1c}, {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22}, 
-    {0x1e24, 0x1e24}, {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a}, 
-    {0x1e2c, 0x1e2c}, {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32}, 
-    {0x1e34, 0x1e34}, {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a}, 
-    {0x1e3c, 0x1e3c}, {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42}, 
-    {0x1e44, 0x1e44}, {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a}, 
-    {0x1e4c, 0x1e4c}, {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52}, 
-    {0x1e54, 0x1e54}, {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a}, 
-    {0x1e5c, 0x1e5c}, {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62}, 
-    {0x1e64, 0x1e64}, {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a}, 
-    {0x1e6c, 0x1e6c}, {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72}, 
-    {0x1e74, 0x1e74}, {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a}, 
-    {0x1e7c, 0x1e7c}, {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82}, 
-    {0x1e84, 0x1e84}, {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a}, 
-    {0x1e8c, 0x1e8c}, {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92}, 
-    {0x1e94, 0x1e94}, {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4}, 
-    {0x1ea6, 0x1ea6}, {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac}, 
-    {0x1eae, 0x1eae}, {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4}, 
-    {0x1eb6, 0x1eb6}, {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc}, 
-    {0x1ebe, 0x1ebe}, {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4}, 
-    {0x1ec6, 0x1ec6}, {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc}, 
-    {0x1ece, 0x1ece}, {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4}, 
-    {0x1ed6, 0x1ed6}, {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc}, 
-    {0x1ede, 0x1ede}, {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4}, 
-    {0x1ee6, 0x1ee6}, {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec}, 
-    {0x1eee, 0x1eee}, {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4}, 
-    {0x1ef6, 0x1ef6}, {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d}, 
-    {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59}, 
-    {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f}, 
-    {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec}, 
-    {0x1ff8, 0x1ffb}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d}, 
-    {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124}, 
-    {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131}, 
+static const xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6},
+    {0xd8, 0xde}, {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104},
+    {0x106, 0x106}, {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c},
+    {0x10e, 0x10e}, {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114},
+    {0x116, 0x116}, {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c},
+    {0x11e, 0x11e}, {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124},
+    {0x126, 0x126}, {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c},
+    {0x12e, 0x12e}, {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134},
+    {0x136, 0x136}, {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d},
+    {0x13f, 0x13f}, {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145},
+    {0x147, 0x147}, {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e},
+    {0x150, 0x150}, {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156},
+    {0x158, 0x158}, {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e},
+    {0x160, 0x160}, {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166},
+    {0x168, 0x168}, {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e},
+    {0x170, 0x170}, {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176},
+    {0x178, 0x179}, {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182},
+    {0x184, 0x184}, {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191},
+    {0x193, 0x194}, {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0},
+    {0x1a2, 0x1a2}, {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9},
+    {0x1ac, 0x1ac}, {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5},
+    {0x1b7, 0x1b8}, {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7},
+    {0x1ca, 0x1ca}, {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1},
+    {0x1d3, 0x1d3}, {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9},
+    {0x1db, 0x1db}, {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2},
+    {0x1e4, 0x1e4}, {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea},
+    {0x1ec, 0x1ec}, {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4},
+    {0x1f6, 0x1f8}, {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe},
+    {0x200, 0x200}, {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206},
+    {0x208, 0x208}, {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e},
+    {0x210, 0x210}, {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216},
+    {0x218, 0x218}, {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e},
+    {0x220, 0x220}, {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226},
+    {0x228, 0x228}, {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e},
+    {0x230, 0x230}, {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a},
+    {0x38c, 0x38c}, {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab},
+    {0x3d2, 0x3d4}, {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
+    {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4},
+    {0x3e6, 0x3e6}, {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec},
+    {0x3ee, 0x3ee}, {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa},
+    {0x400, 0x42f}, {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464},
+    {0x466, 0x466}, {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c},
+    {0x46e, 0x46e}, {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474},
+    {0x476, 0x476}, {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c},
+    {0x47e, 0x47e}, {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c},
+    {0x48e, 0x48e}, {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494},
+    {0x496, 0x496}, {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c},
+    {0x49e, 0x49e}, {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4},
+    {0x4a6, 0x4a6}, {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac},
+    {0x4ae, 0x4ae}, {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4},
+    {0x4b6, 0x4b6}, {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc},
+    {0x4be, 0x4be}, {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5},
+    {0x4c7, 0x4c7}, {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd},
+    {0x4d0, 0x4d0}, {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6},
+    {0x4d8, 0x4d8}, {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de},
+    {0x4e0, 0x4e0}, {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6},
+    {0x4e8, 0x4e8}, {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee},
+    {0x4f0, 0x4f0}, {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8},
+    {0x500, 0x500}, {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506},
+    {0x508, 0x508}, {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e},
+    {0x531, 0x556}, {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02},
+    {0x1e04, 0x1e04}, {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a},
+    {0x1e0c, 0x1e0c}, {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12},
+    {0x1e14, 0x1e14}, {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a},
+    {0x1e1c, 0x1e1c}, {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22},
+    {0x1e24, 0x1e24}, {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a},
+    {0x1e2c, 0x1e2c}, {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32},
+    {0x1e34, 0x1e34}, {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a},
+    {0x1e3c, 0x1e3c}, {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42},
+    {0x1e44, 0x1e44}, {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a},
+    {0x1e4c, 0x1e4c}, {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52},
+    {0x1e54, 0x1e54}, {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a},
+    {0x1e5c, 0x1e5c}, {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62},
+    {0x1e64, 0x1e64}, {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a},
+    {0x1e6c, 0x1e6c}, {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72},
+    {0x1e74, 0x1e74}, {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a},
+    {0x1e7c, 0x1e7c}, {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82},
+    {0x1e84, 0x1e84}, {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a},
+    {0x1e8c, 0x1e8c}, {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92},
+    {0x1e94, 0x1e94}, {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4},
+    {0x1ea6, 0x1ea6}, {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac},
+    {0x1eae, 0x1eae}, {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4},
+    {0x1eb6, 0x1eb6}, {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc},
+    {0x1ebe, 0x1ebe}, {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4},
+    {0x1ec6, 0x1ec6}, {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc},
+    {0x1ece, 0x1ece}, {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4},
+    {0x1ed6, 0x1ed6}, {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc},
+    {0x1ede, 0x1ede}, {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4},
+    {0x1ee6, 0x1ee6}, {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec},
+    {0x1eee, 0x1eee}, {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4},
+    {0x1ef6, 0x1ef6}, {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d},
+    {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59},
+    {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f},
+    {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec},
+    {0x1ff8, 0x1ffb}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d},
+    {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124},
+    {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131},
     {0x2133, 0x2133}, {0x213e, 0x213f}, {0x2145, 0x2145}, {0xff21, 0xff3a} };
-static const xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419}, 
-    {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c}, 
-    {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, 
-    {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9}, 
-    {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514}, 
-    {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e}, 
-    {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550}, 
-    {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed}, 
-    {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689}, 
-    {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734}, 
+static const xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419},
+    {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c},
+    {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6},
+    {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9},
+    {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
+    {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e},
+    {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
+    {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed},
+    {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689},
+    {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734},
     {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8} };
 static xmlChRangeGroup xmlLuG = {390,31,xmlLuS,xmlLuL};
 
-static const xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f}, 
-    {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, 
-    {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, 
-    {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, 
-    {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, 
-    {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c}, 
-    {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983}, 
-    {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd}, 
-    {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c}, 
-    {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71}, 
-    {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9}, 
-    {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c}, 
-    {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57}, 
-    {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd}, 
-    {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48}, 
-    {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc}, 
-    {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6}, 
-    {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d}, 
-    {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4}, 
-    {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31}, 
-    {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, 
-    {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, 
-    {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84}, 
-    {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, 
-    {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714}, 
-    {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3}, 
-    {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b}, 
-    {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, 
+static const xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f},
+    {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
+    {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
+    {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc},
+    {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711},
+    {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c},
+    {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983},
+    {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
+    {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c},
+    {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71},
+    {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9},
+    {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c},
+    {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57},
+    {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd},
+    {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48},
+    {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc},
+    {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
+    {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
+    {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4},
+    {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31},
+    {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9},
+    {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35},
+    {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84},
+    {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6},
+    {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714},
+    {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3},
+    {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b},
+    {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a},
     {0xfb1e, 0xfb1e}, {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
-static const xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, 
-    {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, 
+static const xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172},
+    {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad},
     {0xe0100, 0xe01ef} };
 static xmlChRangeGroup xmlMG = {113,6,xmlMS,xmlML};
 
-static const xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940}, 
-    {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8}, 
-    {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40}, 
-    {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc}, 
-    {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48}, 
-    {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2}, 
-    {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, 
-    {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4}, 
-    {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03}, 
-    {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57}, 
-    {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, 
-    {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031}, 
-    {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5}, 
-    {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931}, 
+static const xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940},
+    {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8},
+    {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40},
+    {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc},
+    {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48},
+    {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2},
+    {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03},
+    {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4},
+    {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03},
+    {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57},
+    {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3},
+    {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031},
+    {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5},
+    {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931},
     {0x1933, 0x1938} };
 static const xmlChLRange xmlMcL[] = {{0x1d165, 0x1d166}, {0x1d16d, 0x1d172} };
 static xmlChRangeGroup xmlMcG = {55,2,xmlMcS,xmlMcL};
 
-static const xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f}, 
-    {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd}, 
-    {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615}, 
-    {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4}, 
-    {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a}, 
-    {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948}, 
-    {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981}, 
-    {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3}, 
-    {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48}, 
-    {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc}, 
-    {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3}, 
-    {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43}, 
-    {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0}, 
-    {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d}, 
-    {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6}, 
-    {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca}, 
-    {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a}, 
-    {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, 
-    {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, 
-    {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87}, 
-    {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030}, 
-    {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059}, 
-    {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, 
-    {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd}, 
-    {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928}, 
-    {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, 
-    {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e}, 
+static const xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f},
+    {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd},
+    {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615},
+    {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4},
+    {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a},
+    {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948},
+    {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981},
+    {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3},
+    {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48},
+    {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc},
+    {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3},
+    {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43},
+    {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0},
+    {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d},
+    {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6},
+    {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca},
+    {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a},
+    {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc},
+    {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37},
+    {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87},
+    {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030},
+    {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059},
+    {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773},
+    {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd},
+    {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928},
+    {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1},
+    {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e},
     {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
-static const xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182}, 
+static const xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182},
     {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0xe0100, 0xe01ef} };
 static xmlChRangeGroup xmlMnG = {108,5,xmlMnS,xmlMnL};
 
-static const xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3}, 
-    {0xb9, 0xb9}, {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9}, 
-    {0x966, 0x96f}, {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f}, 
-    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f}, 
-    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, 
-    {0xf20, 0xf33}, {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0}, 
-    {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f}, 
-    {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183}, 
-    {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007}, 
-    {0x3021, 0x3029}, {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229}, 
+static const xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3},
+    {0xb9, 0xb9}, {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9},
+    {0x966, 0x96f}, {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f},
+    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f},
+    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
+    {0xf20, 0xf33}, {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0},
+    {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f},
+    {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183},
+    {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007},
+    {0x3021, 0x3029}, {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229},
     {0x3251, 0x325f}, {0x3280, 0x3289}, {0x32b1, 0x32bf}, {0xff10, 0xff19} };
-static const xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323}, 
+static const xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323},
     {0x1034a, 0x1034a}, {0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
 static xmlChRangeGroup xmlNG = {42,5,xmlNS,xmlNL};
 
-static const xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669}, 
-    {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f}, 
-    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f}, 
-    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9}, 
-    {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9}, 
+static const xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669},
+    {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f},
+    {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f},
+    {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
+    {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9},
     {0x1810, 0x1819}, {0x1946, 0x194f}, {0xff10, 0xff19} };
 static const xmlChLRange xmlNdL[] = {{0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
 static xmlChRangeGroup xmlNdG = {21,2,xmlNdS,xmlNdL};
 
-static const xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9}, 
-    {0xbc, 0xbe}, {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33}, 
-    {0x1372, 0x137c}, {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079}, 
-    {0x2080, 0x2089}, {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff}, 
-    {0x2776, 0x2793}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f}, 
+static const xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9},
+    {0xbc, 0xbe}, {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33},
+    {0x1372, 0x137c}, {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079},
+    {0x2080, 0x2089}, {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff},
+    {0x2776, 0x2793}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f},
     {0x3280, 0x3289}, {0x32b1, 0x32bf} };
 static const xmlChLRange xmlNoL[] = {{0x10107, 0x10133}, {0x10320, 0x10323} };
 static xmlChRangeGroup xmlNoG = {20,2,xmlNoS,xmlNoL};
 
-static const xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a}, 
-    {0x2c, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f}, 
-    {0x7b, 0x7b}, {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7}, 
-    {0xbb, 0xbb}, {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387}, 
-    {0x55a, 0x55f}, {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0}, 
-    {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b}, 
-    {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d}, 
-    {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f}, 
-    {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85}, 
-    {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, 
-    {0x169b, 0x169c}, {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, 
-    {0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027}, 
-    {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057}, 
-    {0x207d, 0x207e}, {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6}, 
-    {0x2768, 0x2775}, {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db}, 
-    {0x29fc, 0x29fd}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f}, 
-    {0x3030, 0x3030}, {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb}, 
-    {0xfd3e, 0xfd3f}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63}, 
-    {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a}, 
-    {0xff0c, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d}, 
+static const xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a},
+    {0x2c, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f},
+    {0x7b, 0x7b}, {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7},
+    {0xbb, 0xbb}, {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387},
+    {0x55a, 0x55f}, {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0},
+    {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b},
+    {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d},
+    {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f},
+    {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85},
+    {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e},
+    {0x169b, 0x169c}, {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6},
+    {0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027},
+    {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057},
+    {0x207d, 0x207e}, {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6},
+    {0x2768, 0x2775}, {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db},
+    {0x29fc, 0x29fd}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f},
+    {0x3030, 0x3030}, {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb},
+    {0xfd3e, 0xfd3f}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63},
+    {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a},
+    {0xff0c, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d},
     {0xff3f, 0xff3f}, {0xff5b, 0xff5b}, {0xff5d, 0xff5d}, {0xff5f, 0xff65} };
 static const xmlChLRange xmlPL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
 static xmlChRangeGroup xmlPG = {84,2,xmlPS,xmlPL};
 
-static const xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a}, 
-    {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030}, 
-    {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63}, 
+static const xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a},
+    {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030},
+    {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63},
     {0xff0d, 0xff0d} };
 static xmlChRangeGroup xmlPdG = {11,0,xmlPdS,NULL};
 
-static const xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d}, 
-    {0x7d, 0x7d}, {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c}, 
-    {0x2046, 0x2046}, {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a}, 
-    {0x23b5, 0x23b5}, {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d}, 
-    {0x276f, 0x276f}, {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775}, 
-    {0x27e7, 0x27e7}, {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984}, 
-    {0x2986, 0x2986}, {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c}, 
-    {0x298e, 0x298e}, {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994}, 
-    {0x2996, 0x2996}, {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db}, 
-    {0x29fd, 0x29fd}, {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d}, 
-    {0x300f, 0x300f}, {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017}, 
-    {0x3019, 0x3019}, {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f}, 
-    {0xfe36, 0xfe36}, {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c}, 
-    {0xfe3e, 0xfe3e}, {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44}, 
-    {0xfe48, 0xfe48}, {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e}, 
-    {0xff09, 0xff09}, {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60}, 
+static const xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d},
+    {0x7d, 0x7d}, {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c},
+    {0x2046, 0x2046}, {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a},
+    {0x23b5, 0x23b5}, {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d},
+    {0x276f, 0x276f}, {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775},
+    {0x27e7, 0x27e7}, {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984},
+    {0x2986, 0x2986}, {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c},
+    {0x298e, 0x298e}, {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994},
+    {0x2996, 0x2996}, {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db},
+    {0x29fd, 0x29fd}, {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d},
+    {0x300f, 0x300f}, {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017},
+    {0x3019, 0x3019}, {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f},
+    {0xfe36, 0xfe36}, {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c},
+    {0xfe3e, 0xfe3e}, {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44},
+    {0xfe48, 0xfe48}, {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e},
+    {0xff09, 0xff09}, {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60},
     {0xff63, 0xff63} };
 static xmlChRangeGroup xmlPeG = {63,0,xmlPeS,NULL};
 
-static const xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27}, 
-    {0x2a, 0x2a}, {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, 
-    {0x5c, 0x5c}, {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e}, 
-    {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be}, 
-    {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, 
-    {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, 
-    {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, 
-    {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85}, 
-    {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e}, 
-    {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da}, 
-    {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017}, 
-    {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043}, 
-    {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6}, 
-    {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46}, 
-    {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61}, 
-    {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07}, 
-    {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b}, 
+static const xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27},
+    {0x2a, 0x2a}, {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40},
+    {0x5c, 0x5c}, {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e},
+    {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be},
+    {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d},
+    {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4},
+    {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4},
+    {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85},
+    {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e},
+    {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da},
+    {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017},
+    {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043},
+    {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6},
+    {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46},
+    {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61},
+    {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07},
+    {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b},
     {0xff1f, 0xff20}, {0xff3c, 0xff3c}, {0xff61, 0xff61}, {0xff64, 0xff64} };
 static const xmlChLRange xmlPoL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
 static xmlChRangeGroup xmlPoG = {72,2,xmlPoS,xmlPoL};
 
-static const xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b}, 
-    {0x7b, 0x7b}, {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b}, 
-    {0x201a, 0x201a}, {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d}, 
-    {0x208d, 0x208d}, {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768}, 
-    {0x276a, 0x276a}, {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770}, 
-    {0x2772, 0x2772}, {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8}, 
-    {0x27ea, 0x27ea}, {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987}, 
-    {0x2989, 0x2989}, {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f}, 
-    {0x2991, 0x2991}, {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997}, 
-    {0x29d8, 0x29d8}, {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008}, 
-    {0x300a, 0x300a}, {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010}, 
-    {0x3014, 0x3014}, {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a}, 
-    {0x301d, 0x301d}, {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37}, 
-    {0xfe39, 0xfe39}, {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f}, 
-    {0xfe41, 0xfe41}, {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59}, 
-    {0xfe5b, 0xfe5b}, {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b}, 
+static const xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b},
+    {0x7b, 0x7b}, {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b},
+    {0x201a, 0x201a}, {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d},
+    {0x208d, 0x208d}, {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768},
+    {0x276a, 0x276a}, {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770},
+    {0x2772, 0x2772}, {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8},
+    {0x27ea, 0x27ea}, {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987},
+    {0x2989, 0x2989}, {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f},
+    {0x2991, 0x2991}, {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997},
+    {0x29d8, 0x29d8}, {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008},
+    {0x300a, 0x300a}, {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010},
+    {0x3014, 0x3014}, {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a},
+    {0x301d, 0x301d}, {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37},
+    {0xfe39, 0xfe39}, {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f},
+    {0xfe41, 0xfe41}, {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59},
+    {0xfe5b, 0xfe5b}, {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b},
     {0xff5b, 0xff5b}, {0xff5f, 0xff5f}, {0xff62, 0xff62} };
 static xmlChRangeGroup xmlPsG = {65,0,xmlPsS,NULL};
 
-static const xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b}, 
-    {0x3c, 0x3e}, {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e}, 
-    {0xa2, 0xa9}, {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6}, 
-    {0xb8, 0xb8}, {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5}, 
-    {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, 
-    {0x384, 0x385}, {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f}, 
-    {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa}, 
-    {0xaf1, 0xaf1}, {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f}, 
-    {0xf01, 0xf03}, {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, 
-    {0xf36, 0xf36}, {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, 
-    {0xfcf, 0xfcf}, {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff}, 
-    {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf}, 
-    {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052}, 
-    {0x207a, 0x207c}, {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101}, 
-    {0x2103, 0x2106}, {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, 
-    {0x211e, 0x2123}, {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, 
-    {0x212e, 0x212e}, {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144}, 
-    {0x214a, 0x214b}, {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0}, 
-    {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617}, 
-    {0x2619, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704}, 
-    {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d}, 
-    {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767}, 
-    {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5}, 
-    {0x27f0, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d}, 
-    {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, 
-    {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, 
-    {0x303e, 0x303f}, {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f}, 
-    {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d}, 
-    {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff}, 
-    {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd}, 
-    {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04}, 
-    {0xff0b, 0xff0b}, {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40}, 
-    {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee}, 
+static const xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b},
+    {0x3c, 0x3e}, {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e},
+    {0xa2, 0xa9}, {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6},
+    {0xb8, 0xb8}, {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5},
+    {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375},
+    {0x384, 0x385}, {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f},
+    {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa},
+    {0xaf1, 0xaf1}, {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f},
+    {0xf01, 0xf03}, {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34},
+    {0xf36, 0xf36}, {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc},
+    {0xfcf, 0xfcf}, {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff},
+    {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf},
+    {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052},
+    {0x207a, 0x207c}, {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101},
+    {0x2103, 0x2106}, {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118},
+    {0x211e, 0x2123}, {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129},
+    {0x212e, 0x212e}, {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144},
+    {0x214a, 0x214b}, {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0},
+    {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617},
+    {0x2619, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704},
+    {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d},
+    {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767},
+    {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5},
+    {0x27f0, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d},
+    {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb},
+    {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037},
+    {0x303e, 0x303f}, {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f},
+    {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d},
+    {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff},
+    {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd},
+    {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04},
+    {0xff0b, 0xff0b}, {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40},
+    {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee},
     {0xfffc, 0xfffd} };
-static const xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, 
-    {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, 
-    {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, 
-    {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1}, 
-    {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, 
-    {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, 
+static const xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
+    {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
+    {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
+    {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1},
+    {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715},
+    {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f},
     {0x1d789, 0x1d789}, {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
 static xmlChRangeGroup xmlSG = {133,20,xmlSS,xmlSL};
 
-static const xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5}, 
-    {0x9f2, 0x9f3}, {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f}, 
-    {0x17db, 0x17db}, {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69}, 
+static const xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5},
+    {0x9f2, 0x9f3}, {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f},
+    {0x17db, 0x17db}, {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69},
     {0xff04, 0xff04}, {0xffe0, 0xffe1}, {0xffe5, 0xffe6} };
 static xmlChRangeGroup xmlScG = {13,0,xmlScS,NULL};
 
-static const xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60}, 
-    {0xa8, 0xa8}, {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5}, 
-    {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375}, 
-    {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, 
-    {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c}, 
+static const xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60},
+    {0xa8, 0xa8}, {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5},
+    {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375},
+    {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf},
+    {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c},
     {0xff3e, 0xff3e}, {0xff40, 0xff40}, {0xffe3, 0xffe3} };
 static xmlChRangeGroup xmlSkG = {22,0,xmlSkS,NULL};
 
-static const xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e}, 
-    {0x7c, 0x7c}, {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7}, 
-    {0xf7, 0xf7}, {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052}, 
-    {0x207a, 0x207c}, {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b}, 
-    {0x2190, 0x2194}, {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3}, 
-    {0x21a6, 0x21a6}, {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2}, 
-    {0x21d4, 0x21d4}, {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321}, 
-    {0x237c, 0x237c}, {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1}, 
-    {0x25f8, 0x25ff}, {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff}, 
-    {0x2900, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff}, 
-    {0xfb29, 0xfb29}, {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b}, 
-    {0xff1c, 0xff1e}, {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2}, 
+static const xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e},
+    {0x7c, 0x7c}, {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7},
+    {0xf7, 0xf7}, {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052},
+    {0x207a, 0x207c}, {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b},
+    {0x2190, 0x2194}, {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3},
+    {0x21a6, 0x21a6}, {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2},
+    {0x21d4, 0x21d4}, {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321},
+    {0x237c, 0x237c}, {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1},
+    {0x25f8, 0x25ff}, {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff},
+    {0x2900, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff},
+    {0xfb29, 0xfb29}, {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b},
+    {0xff1c, 0xff1e}, {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2},
     {0xffe9, 0xffec} };
-static const xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db}, 
-    {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735}, 
-    {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789}, 
+static const xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db},
+    {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735},
+    {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789},
     {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
 static xmlChRangeGroup xmlSmG = {48,10,xmlSmS,xmlSmL};
 
-static const xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9}, 
-    {0xae, 0xae}, {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482}, 
-    {0x60e, 0x60f}, {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa}, 
-    {0xb70, 0xb70}, {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03}, 
-    {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36}, 
-    {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf}, 
-    {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106}, 
-    {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123}, 
-    {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e}, 
-    {0x2132, 0x2132}, {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199}, 
-    {0x219c, 0x219f}, {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad}, 
-    {0x21af, 0x21cd}, {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3}, 
-    {0x2300, 0x2307}, {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b}, 
-    {0x237d, 0x239a}, {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a}, 
-    {0x249c, 0x24e9}, {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7}, 
-    {0x2600, 0x2617}, {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691}, 
-    {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727}, 
-    {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756}, 
-    {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af}, 
-    {0x27b1, 0x27be}, {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99}, 
-    {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004}, 
-    {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f}, 
-    {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243}, 
-    {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0}, 
-    {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, 
-    {0xfdfd, 0xfdfd}, {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee}, 
+static const xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9},
+    {0xae, 0xae}, {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482},
+    {0x60e, 0x60f}, {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa},
+    {0xb70, 0xb70}, {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03},
+    {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36},
+    {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf},
+    {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106},
+    {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123},
+    {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e},
+    {0x2132, 0x2132}, {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199},
+    {0x219c, 0x219f}, {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad},
+    {0x21af, 0x21cd}, {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3},
+    {0x2300, 0x2307}, {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b},
+    {0x237d, 0x239a}, {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a},
+    {0x249c, 0x24e9}, {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7},
+    {0x2600, 0x2617}, {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691},
+    {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727},
+    {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756},
+    {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af},
+    {0x27b1, 0x27be}, {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99},
+    {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004},
+    {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f},
+    {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243},
+    {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0},
+    {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6},
+    {0xfdfd, 0xfdfd}, {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee},
     {0xfffc, 0xfffd} };
-static const xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f}, 
-    {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164}, 
-    {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9}, 
+static const xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
+    {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
+    {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
     {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356} };
 static xmlChRangeGroup xmlSoG = {103,10,xmlSoS,xmlSoL};
 
-static const xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0}, 
-    {0x1680, 0x1680}, {0x180e, 0x180e}, {0x2000, 0x200a}, {0x2028, 0x2029}, 
+static const xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0},
+    {0x1680, 0x1680}, {0x180e, 0x180e}, {0x2000, 0x200a}, {0x2028, 0x2029},
     {0x202f, 0x202f}, {0x205f, 0x205f}, {0x3000, 0x3000} };
 static xmlChRangeGroup xmlZG = {9,0,xmlZS,NULL};
 
@@ -961,7 +961,7 @@ static xmlIntFunc
        else
            low = mid + 1;
     }
-    return (NULL);    
+    return (NULL);
 }
 
 /**
index 11b15e0..fac20ac 100644 (file)
 
 #include <libxml/xmlwriter.h>
 
+#include "buf.h"
+#include "enc.h"
+#include "save.h"
+
 #define B64LINELEN 72
 #define B64CRLF "\r\n"
 
 /*
  * The following VA_COPY was coded following an example in
  * the Samba project.  It may not be sufficient for some
- * esoteric implementations of va_list (i.e. it may need
- * something involving a memcpy) but (hopefully) will be
- * sufficient for libxml2.
+ * esoteric implementations of va_list but (hopefully) will
+ * be sufficient for libxml2.
  */
 #ifndef VA_COPY
   #ifdef HAVE_VA_COPY
     #ifdef HAVE___VA_COPY
       #define VA_COPY(dest,src) __va_copy(dest, src)
     #else
-      #define VA_COPY(dest,src) (dest) = (src)
+      #ifndef VA_LIST_IS_ARRAY
+        #define VA_COPY(dest,src) (dest) = (src)
+      #else
+        #include <string.h>
+        #define VA_COPY(dest,src) memcpy((char *)(dest),(char *)(src),sizeof(va_list))
+      #endif
     #endif
   #endif
 #endif
@@ -548,9 +556,9 @@ xmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version,
     writer->out->encoder = encoder;
     if (encoder != NULL) {
        if (writer->out->conv == NULL) {
-           writer->out->conv = xmlBufferCreateSize(4000);
+           writer->out->conv = xmlBufCreateSize(4000);
        }
-        xmlCharEncOutFunc(encoder, writer->out->conv, NULL);
+        xmlCharEncOutput(writer->out, 1);
         if ((writer->doc != NULL) && (writer->doc->encoding == NULL))
             writer->doc->encoding = xmlStrdup((xmlChar *)writer->out->encoder->name);
     } else
@@ -1074,10 +1082,10 @@ xmlTextWriterStartElementNS(xmlTextWriterPtr writer,
     sum += count;
 
     if (namespaceURI != 0) {
-        xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *) 
+        xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *)
         xmlMalloc(sizeof(xmlTextWriterNsStackEntry));
         if (p == 0) {
-            xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 
+            xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
                             "xmlTextWriterStartElementNS : out of memory!\n");
             return -1;
         }
@@ -1501,8 +1509,8 @@ xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content)
                     break;
                 case XML_TEXTWRITER_ATTRIBUTE:
                     buf = NULL;
-                    xmlAttrSerializeTxtContent(writer->out->buffer, writer->doc,
-                                               NULL, content);
+                    xmlBufAttrSerializeTxtContent(writer->out->buffer,
+                                                  writer->doc, NULL, content);
                     break;
                default:
                    break;
@@ -1663,7 +1671,7 @@ xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data,
  * Write hqx encoded data to an xmlOutputBuffer.
  * ::todo
  *
- * Returns the bytes written (may be 0 because of buffering) 
+ * Returns the bytes written (may be 0 because of buffering)
  * or -1 in case of error
  */
 static int
@@ -1672,8 +1680,8 @@ xmlOutputBufferWriteBinHex(xmlOutputBufferPtr out,
 {
     int count;
     int sum;
-    static char hex[16] = 
-       {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+    static char hex[16] =
+       {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
     int i;
 
     if ((out == NULL) || (data == NULL) || (len < 0)) {
@@ -1849,7 +1857,7 @@ xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer,
         nsentry.uri = (xmlChar *)namespaceURI;
         nsentry.elem = xmlListFront(writer->nodes);
 
-        curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack, 
+        curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack,
                                                            (void *)&nsentry);
         if ((curns != NULL)) {
             xmlFree(buf);
@@ -2234,10 +2242,12 @@ xmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name,
     if (count == -1)
         return -1;
     sum += count;
-    count = xmlTextWriterWriteString(writer, content);
-    if (count == -1)
-        return -1;
-    sum += count;
+    if (content != NULL) {
+       count = xmlTextWriterWriteString(writer, content);
+       if (count == -1)
+           return -1;
+       sum += count;
+    }
     count = xmlTextWriterEndElement(writer);
     if (count == -1)
         return -1;
@@ -2496,8 +2506,8 @@ xmlTextWriterEndPI(xmlTextWriterPtr writer)
 
     if (writer->indent) {
         count = xmlOutputBufferWriteString(writer->out, "\n");
-       if (count < 0)
-               return -1;
+       if (count < 0)
+       return -1;
         sum += count;
     }
 
@@ -4606,6 +4616,26 @@ xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str)
 }
 
 /**
+ * xmlTextWriterSetQuoteChar:
+ * @writer:  the xmlTextWriterPtr
+ * @quotechar:  the quote character
+ *
+ * Set the character used for quoting attributes.
+ *
+ * Returns -1 on error or 0 otherwise.
+ */
+int
+xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar)
+{
+    if ((writer == NULL) || ((quotechar != '\'') && (quotechar != '"')))
+        return -1;
+
+    writer->qchar = quotechar;
+
+    return 0;
+}
+
+/**
  * xmlTextWriterWriteIndent:
  * @writer:  the xmlTextWriterPtr
  *
diff --git a/xpath.c b/xpath.c
index d9d902c..dc41ce6 100644 (file)
--- a/xpath.c
+++ b/xpath.c
@@ -55,6 +55,8 @@
 #include <libxml/pattern.h>
 #endif
 
+#include "buf.h"
+
 #ifdef LIBXML_PATTERN_ENABLED
 #define XPATH_STREAMING
 #endif
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
 
+/**
+ * WITH_TIM_SORT:
+ *
+ * Use the Timsort algorithm provided in timsort.h to sort
+ * nodeset as this is a great improvement over the old Shell sort
+ * used in xmlXPathNodeSetSort()
+ */
+#define WITH_TIM_SORT
+
 /*
 * XP_OPTIMIZED_NON_ELEM_COMPARISON:
 * If defined, this will use xmlXPathCmpNodesExt() instead of
 /* #define XP_DEBUG_OBJ_USAGE */
 
 /*
- * TODO:
- * There are a few spots where some tests are done which depend upon ascii
- * data.  These should be enhanced for full UTF8 support (see particularly
- * any use of the macros IS_ASCII_CHARACTER and IS_ASCII_DIGIT)
+ * XPATH_MAX_STEPS:
+ * when compiling an XPath expression we arbitrary limit the maximum
+ * number of step operation in the compiled expression. 1000000 is
+ * an insanely large value which should never be reached under normal
+ * circumstances
  */
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-
-/************************************************************************
- *                                                                     *
- *                     Floating point stuff                            *
- *                                                                     *
- ************************************************************************/
-
-#ifndef TRIO_REPLACE_STDIO
-#define TRIO_PUBLIC static
-#endif
-#include "trionan.c"
+#define XPATH_MAX_STEPS 1000000
 
 /*
- * The lack of portability of this section of the libc is annoying !
- */
-double xmlXPathNAN = 0;
-double xmlXPathPINF = 1;
-double xmlXPathNINF = -1;
-static double xmlXPathNZERO = 0; /* not exported from headers */
-static int xmlXPathInitialized = 0;
-
-/**
- * xmlXPathInit:
- *
- * Initialize the XPath environment
- */
-void
-xmlXPathInit(void) {
-    if (xmlXPathInitialized) return;
-
-    xmlXPathPINF = trio_pinf();
-    xmlXPathNINF = trio_ninf();
-    xmlXPathNAN = trio_nan();
-    xmlXPathNZERO = trio_nzero();
-
-    xmlXPathInitialized = 1;
-}
-
-/**
- * xmlXPathIsNaN:
- * @val:  a double value
- *
- * Provides a portable isnan() function to detect whether a double
- * is a NotaNumber. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 if the value is a NaN, 0 otherwise
- */
-int
-xmlXPathIsNaN(double val) {
-    return(trio_isnan(val));
-}
-
-/**
- * xmlXPathIsInf:
- * @val:  a double value
- *
- * Provides a portable isinf() function to detect whether a double
- * is a +Infinite or -Infinite. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
- */
-int
-xmlXPathIsInf(double val) {
-    return(trio_isinf(val));
-}
-
-#endif /* SCHEMAS or XPATH */
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlXPathGetSign:
- * @val:  a double value
- *
- * Provides a portable function to detect the sign of a double
- * Modified from trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 if the value is Negative, 0 if positive
+ * XPATH_MAX_STACK_DEPTH:
+ * when evaluating an XPath expression we arbitrary limit the maximum
+ * number of object allowed to be pushed on the stack. 1000000 is
+ * an insanely large value which should never be reached under normal
+ * circumstances
  */
-static int
-xmlXPathGetSign(double val) {
-    return(trio_signbit(val));
-}
-
+#define XPATH_MAX_STACK_DEPTH 1000000
 
 /*
- * TODO: when compatibility allows remove all "fake node libxslt" strings
- *       the test should just be name[0] = ' '
+ * XPATH_MAX_NODESET_LENGTH:
+ * when evaluating an XPath expression nodesets are created and we
+ * arbitrary limit the maximum length of those node set. 10000000 is
+ * an insanely large value which should never be reached under normal
+ * circumstances, one would first need to construct an in memory tree
+ * with more than 10 millions nodes.
  */
-#ifdef DEBUG_XPATH_EXPRESSION
-#define DEBUG_STEP
-#define DEBUG_EXPR
-#define DEBUG_EVAL_COUNTS
-#endif
+#define XPATH_MAX_NODESET_LENGTH 10000000
 
-static xmlNs xmlXPathXMLNamespaceStruct = {
-    NULL,
-    XML_NAMESPACE_DECL,
-    XML_XML_NAMESPACE,
-    BAD_CAST "xml",
-    NULL,
-    NULL
-};
-static xmlNsPtr xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct;
-#ifndef LIBXML_THREAD_ENABLED
 /*
- * Optimizer is disabled only when threaded apps are detected while
- * the library ain't compiled for thread safety.
+ * TODO:
+ * There are a few spots where some tests are done which depend upon ascii
+ * data.  These should be enhanced for full UTF8 support (see particularly
+ * any use of the macros IS_ASCII_CHARACTER and IS_ASCII_DIGIT)
  */
-static int xmlXPathDisableOptimizer = 0;
-#endif
-
-/************************************************************************
- *                                                                     *
- *                     Error handling routines                         *
- *                                                                     *
- ************************************************************************/
 
+#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
 /**
- * XP_ERRORNULL:
- * @X:  the error code
+ * xmlXPathCmpNodesExt:
+ * @node1:  the first node
+ * @node2:  the second node
  *
- * Macro to raise an XPath error and return NULL.
- */
-#define XP_ERRORNULL(X)                                                        \
-    { xmlXPathErr(ctxt, X); return(NULL); }
-
-/*
- * The array xmlXPathErrorMessages corresponds to the enum xmlXPathError
- */
-static const char *xmlXPathErrorMessages[] = {
-    "Ok\n",
-    "Number encoding\n",
-    "Unfinished literal\n",
-    "Start of literal\n",
-    "Expected $ for variable reference\n",
-    "Undefined variable\n",
-    "Invalid predicate\n",
-    "Invalid expression\n",
-    "Missing closing curly brace\n",
-    "Unregistered function\n",
-    "Invalid operand\n",
-    "Invalid type\n",
-    "Invalid number of arguments\n",
-    "Invalid context size\n",
-    "Invalid context position\n",
-    "Memory allocation error\n",
-    "Syntax error\n",
-    "Resource error\n",
-    "Sub resource error\n",
-    "Undefined namespace prefix\n",
-    "Encoding error\n",
-    "Char out of XML range\n",
-    "Invalid or incomplete context\n",
-    "Stack usage errror\n",
-    "?? Unknown error ??\n"    /* Must be last in the list! */
-};
-#define MAXERRNO ((int)(sizeof(xmlXPathErrorMessages) /        \
-                  sizeof(xmlXPathErrorMessages[0])) - 1)
-/**
- * xmlXPathErrMemory:
- * @ctxt:  an XPath context
- * @extra:  extra informations
+ * Compare two nodes w.r.t document order.
+ * This one is optimized for handling of non-element nodes.
  *
- * Handle a redefinition of attribute error
+ * Returns -2 in case of error 1 if first point < second point, 0 if
+ *         it's the same node, -1 otherwise
  */
-static void
-xmlXPathErrMemory(xmlXPathContextPtr ctxt, const char *extra)
-{
-    if (ctxt != NULL) {
-        if (extra) {
-            xmlChar buf[200];
+static int
+xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
+    int depth1, depth2;
+    int misc = 0, precedence1 = 0, precedence2 = 0;
+    xmlNodePtr miscNode1 = NULL, miscNode2 = NULL;
+    xmlNodePtr cur, root;
+    long l1, l2;
 
-            xmlStrPrintf(buf, 200,
-                         BAD_CAST "Memory allocation failed : %s\n",
-                         extra);
-            ctxt->lastError.message = (char *) xmlStrdup(buf);
-        } else {
-            ctxt->lastError.message = (char *)
-              xmlStrdup(BAD_CAST "Memory allocation failed\n");
-        }
-        ctxt->lastError.domain = XML_FROM_XPATH;
-        ctxt->lastError.code = XML_ERR_NO_MEMORY;
-       if (ctxt->error != NULL)
-           ctxt->error(ctxt->userData, &ctxt->lastError);
-    } else {
-        if (extra)
-            __xmlRaiseError(NULL, NULL, NULL,
-                            NULL, NULL, XML_FROM_XPATH,
-                            XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
-                            extra, NULL, NULL, 0, 0,
-                            "Memory allocation failed : %s\n", extra);
-        else
-            __xmlRaiseError(NULL, NULL, NULL,
-                            NULL, NULL, XML_FROM_XPATH,
-                            XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
-                            NULL, NULL, NULL, 0, 0,
-                            "Memory allocation failed\n");
-    }
-}
+    if ((node1 == NULL) || (node2 == NULL))
+       return(-2);
 
-/**
- * xmlXPathPErrMemory:
- * @ctxt:  an XPath parser context
- * @extra:  extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlXPathPErrMemory(xmlXPathParserContextPtr ctxt, const char *extra)
-{
-    if (ctxt == NULL)
-       xmlXPathErrMemory(NULL, extra);
-    else {
-       ctxt->error = XPATH_MEMORY_ERROR;
-       xmlXPathErrMemory(ctxt->context, extra);
-    }
-}
+    if (node1 == node2)
+       return(0);
 
-/**
- * xmlXPathErr:
- * @ctxt:  a XPath parser context
- * @error:  the error code
- *
- * Handle an XPath error
- */
-void
-xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
-{
-    if ((error < 0) || (error > MAXERRNO))
-       error = MAXERRNO;
-    if (ctxt == NULL) {
-       __xmlRaiseError(NULL, NULL, NULL,
-                       NULL, NULL, XML_FROM_XPATH,
-                       error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
-                       XML_ERR_ERROR, NULL, 0,
-                       NULL, NULL, NULL, 0, 0,
-                       "%s", xmlXPathErrorMessages[error]);
-       return;
+    /*
+     * a couple of optimizations which will avoid computations in most cases
+     */
+    switch (node1->type) {
+       case XML_ELEMENT_NODE:
+           if (node2->type == XML_ELEMENT_NODE) {
+               if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
+                   (0 > (long) node2->content) &&
+                   (node1->doc == node2->doc))
+               {
+                   l1 = -((long) node1->content);
+                   l2 = -((long) node2->content);
+                   if (l1 < l2)
+                       return(1);
+                   if (l1 > l2)
+                       return(-1);
+               } else
+                   goto turtle_comparison;
+           }
+           break;
+       case XML_ATTRIBUTE_NODE:
+           precedence1 = 1; /* element is owner */
+           miscNode1 = node1;
+           node1 = node1->parent;
+           misc = 1;
+           break;
+       case XML_TEXT_NODE:
+       case XML_CDATA_SECTION_NODE:
+       case XML_COMMENT_NODE:
+       case XML_PI_NODE: {
+           miscNode1 = node1;
+           /*
+           * Find nearest element node.
+           */
+           if (node1->prev != NULL) {
+               do {
+                   node1 = node1->prev;
+                   if (node1->type == XML_ELEMENT_NODE) {
+                       precedence1 = 3; /* element in prev-sibl axis */
+                       break;
+                   }
+                   if (node1->prev == NULL) {
+                       precedence1 = 2; /* element is parent */
+                       /*
+                       * URGENT TODO: Are there any cases, where the
+                       * parent of such a node is not an element node?
+                       */
+                       node1 = node1->parent;
+                       break;
+                   }
+               } while (1);
+           } else {
+               precedence1 = 2; /* element is parent */
+               node1 = node1->parent;
+           }
+           if ((node1 == NULL) || (node1->type != XML_ELEMENT_NODE) ||
+               (0 <= (long) node1->content)) {
+               /*
+               * Fallback for whatever case.
+               */
+               node1 = miscNode1;
+               precedence1 = 0;
+           } else
+               misc = 1;
+       }
+           break;
+       case XML_NAMESPACE_DECL:
+           /*
+           * TODO: why do we return 1 for namespace nodes?
+           */
+           return(1);
+       default:
+           break;
+    }
+    switch (node2->type) {
+       case XML_ELEMENT_NODE:
+           break;
+       case XML_ATTRIBUTE_NODE:
+           precedence2 = 1; /* element is owner */
+           miscNode2 = node2;
+           node2 = node2->parent;
+           misc = 1;
+           break;
+       case XML_TEXT_NODE:
+       case XML_CDATA_SECTION_NODE:
+       case XML_COMMENT_NODE:
+       case XML_PI_NODE: {
+           miscNode2 = node2;
+           if (node2->prev != NULL) {
+               do {
+                   node2 = node2->prev;
+                   if (node2->type == XML_ELEMENT_NODE) {
+                       precedence2 = 3; /* element in prev-sibl axis */
+                       break;
+                   }
+                   if (node2->prev == NULL) {
+                       precedence2 = 2; /* element is parent */
+                       node2 = node2->parent;
+                       break;
+                   }
+               } while (1);
+           } else {
+               precedence2 = 2; /* element is parent */
+               node2 = node2->parent;
+           }
+           if ((node2 == NULL) || (node2->type != XML_ELEMENT_NODE) ||
+               (0 <= (long) node2->content))
+           {
+               node2 = miscNode2;
+               precedence2 = 0;
+           } else
+               misc = 1;
+       }
+           break;
+       case XML_NAMESPACE_DECL:
+           return(1);
+       default:
+           break;
+    }
+    if (misc) {
+       if (node1 == node2) {
+           if (precedence1 == precedence2) {
+               /*
+               * The ugly case; but normally there aren't many
+               * adjacent non-element nodes around.
+               */
+               cur = miscNode2->prev;
+               while (cur != NULL) {
+                   if (cur == miscNode1)
+                       return(1);
+                   if (cur->type == XML_ELEMENT_NODE)
+                       return(-1);
+                   cur = cur->prev;
+               }
+               return (-1);
+           } else {
+               /*
+               * Evaluate based on higher precedence wrt to the element.
+               * TODO: This assumes attributes are sorted before content.
+               *   Is this 100% correct?
+               */
+               if (precedence1 < precedence2)
+                   return(1);
+               else
+                   return(-1);
+           }
+       }
+       /*
+       * Special case: One of the helper-elements is contained by the other.
+       * <foo>
+       *   <node2>
+       *     <node1>Text-1(precedence1 == 2)</node1>
+       *   </node2>
+       *   Text-6(precedence2 == 3)
+       * </foo>
+       */
+       if ((precedence2 == 3) && (precedence1 > 1)) {
+           cur = node1->parent;
+           while (cur) {
+               if (cur == node2)
+                   return(1);
+               cur = cur->parent;
+           }
+       }
+       if ((precedence1 == 3) && (precedence2 > 1)) {
+           cur = node2->parent;
+           while (cur) {
+               if (cur == node1)
+                   return(-1);
+               cur = cur->parent;
+           }
+       }
+    }
+
+    /*
+     * Speedup using document order if availble.
+     */
+    if ((node1->type == XML_ELEMENT_NODE) &&
+       (node2->type == XML_ELEMENT_NODE) &&
+       (0 > (long) node1->content) &&
+       (0 > (long) node2->content) &&
+       (node1->doc == node2->doc)) {
+
+       l1 = -((long) node1->content);
+       l2 = -((long) node2->content);
+       if (l1 < l2)
+           return(1);
+       if (l1 > l2)
+           return(-1);
+    }
+
+turtle_comparison:
+
+    if (node1 == node2->prev)
+       return(1);
+    if (node1 == node2->next)
+       return(-1);
+    /*
+     * compute depth to root
+     */
+    for (depth2 = 0, cur = node2;cur->parent != NULL;cur = cur->parent) {
+       if (cur == node1)
+           return(1);
+       depth2++;
+    }
+    root = cur;
+    for (depth1 = 0, cur = node1;cur->parent != NULL;cur = cur->parent) {
+       if (cur == node2)
+           return(-1);
+       depth1++;
+    }
+    /*
+     * Distinct document (or distinct entities :-( ) case.
+     */
+    if (root != cur) {
+       return(-2);
+    }
+    /*
+     * get the nearest common ancestor.
+     */
+    while (depth1 > depth2) {
+       depth1--;
+       node1 = node1->parent;
+    }
+    while (depth2 > depth1) {
+       depth2--;
+       node2 = node2->parent;
+    }
+    while (node1->parent != node2->parent) {
+       node1 = node1->parent;
+       node2 = node2->parent;
+       /* should not happen but just in case ... */
+       if ((node1 == NULL) || (node2 == NULL))
+           return(-2);
+    }
+    /*
+     * Find who's first.
+     */
+    if (node1 == node2->prev)
+       return(1);
+    if (node1 == node2->next)
+       return(-1);
+    /*
+     * Speedup using document order if availble.
+     */
+    if ((node1->type == XML_ELEMENT_NODE) &&
+       (node2->type == XML_ELEMENT_NODE) &&
+       (0 > (long) node1->content) &&
+       (0 > (long) node2->content) &&
+       (node1->doc == node2->doc)) {
+
+       l1 = -((long) node1->content);
+       l2 = -((long) node2->content);
+       if (l1 < l2)
+           return(1);
+       if (l1 > l2)
+           return(-1);
+    }
+
+    for (cur = node1->next;cur != NULL;cur = cur->next)
+       if (cur == node2)
+           return(1);
+    return(-1); /* assume there is no sibling list corruption */
+}
+#endif /* XP_OPTIMIZED_NON_ELEM_COMPARISON */
+
+/*
+ * Wrapper for the Timsort argorithm from timsort.h
+ */
+#ifdef WITH_TIM_SORT
+#define SORT_NAME libxml_domnode
+#define SORT_TYPE xmlNodePtr
+/**
+ * wrap_cmp:
+ * @x: a node
+ * @y: another node
+ *
+ * Comparison function for the Timsort implementation
+ *
+ * Returns -2 in case of error -1 if first point < second point, 0 if
+ *         it's the same node, +1 otherwise
+ */
+static
+int wrap_cmp( xmlNodePtr x, xmlNodePtr y );
+#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
+    static int wrap_cmp( xmlNodePtr x, xmlNodePtr y )
+    {
+        int res = xmlXPathCmpNodesExt(x, y);
+        return res == -2 ? res : -res;
+    }
+#else
+    static int wrap_cmp( xmlNodePtr x, xmlNodePtr y )
+    {
+        int res = xmlXPathCmpNodes(x, y);
+        return res == -2 ? res : -res;
+    }
+#endif
+#define SORT_CMP(x, y)  (wrap_cmp(x, y))
+#include "timsort.h"
+#endif /* WITH_TIM_SORT */
+
+#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
+
+/************************************************************************
+ *                                                                     *
+ *                     Floating point stuff                            *
+ *                                                                     *
+ ************************************************************************/
+
+#ifndef TRIO_REPLACE_STDIO
+#define TRIO_PUBLIC static
+#endif
+#include "trionan.c"
+
+/*
+ * The lack of portability of this section of the libc is annoying !
+ */
+double xmlXPathNAN = 0;
+double xmlXPathPINF = 1;
+double xmlXPathNINF = -1;
+static double xmlXPathNZERO = 0; /* not exported from headers */
+static int xmlXPathInitialized = 0;
+
+/**
+ * xmlXPathInit:
+ *
+ * Initialize the XPath environment
+ */
+void
+xmlXPathInit(void) {
+    if (xmlXPathInitialized) return;
+
+    xmlXPathPINF = trio_pinf();
+    xmlXPathNINF = trio_ninf();
+    xmlXPathNAN = trio_nan();
+    xmlXPathNZERO = trio_nzero();
+
+    xmlXPathInitialized = 1;
+}
+
+/**
+ * xmlXPathIsNaN:
+ * @val:  a double value
+ *
+ * Provides a portable isnan() function to detect whether a double
+ * is a NotaNumber. Based on trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 if the value is a NaN, 0 otherwise
+ */
+int
+xmlXPathIsNaN(double val) {
+    return(trio_isnan(val));
+}
+
+/**
+ * xmlXPathIsInf:
+ * @val:  a double value
+ *
+ * Provides a portable isinf() function to detect whether a double
+ * is a +Infinite or -Infinite. Based on trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
+ */
+int
+xmlXPathIsInf(double val) {
+    return(trio_isinf(val));
+}
+
+#endif /* SCHEMAS or XPATH */
+#ifdef LIBXML_XPATH_ENABLED
+/**
+ * xmlXPathGetSign:
+ * @val:  a double value
+ *
+ * Provides a portable function to detect the sign of a double
+ * Modified from trio code
+ * http://sourceforge.net/projects/ctrio/
+ *
+ * Returns 1 if the value is Negative, 0 if positive
+ */
+static int
+xmlXPathGetSign(double val) {
+    return(trio_signbit(val));
+}
+
+
+/*
+ * TODO: when compatibility allows remove all "fake node libxslt" strings
+ *       the test should just be name[0] = ' '
+ */
+#ifdef DEBUG_XPATH_EXPRESSION
+#define DEBUG_STEP
+#define DEBUG_EXPR
+#define DEBUG_EVAL_COUNTS
+#endif
+
+static xmlNs xmlXPathXMLNamespaceStruct = {
+    NULL,
+    XML_NAMESPACE_DECL,
+    XML_XML_NAMESPACE,
+    BAD_CAST "xml",
+    NULL,
+    NULL
+};
+static xmlNsPtr xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct;
+#ifndef LIBXML_THREAD_ENABLED
+/*
+ * Optimizer is disabled only when threaded apps are detected while
+ * the library ain't compiled for thread safety.
+ */
+static int xmlXPathDisableOptimizer = 0;
+#endif
+
+/************************************************************************
+ *                                                                     *
+ *                     Error handling routines                         *
+ *                                                                     *
+ ************************************************************************/
+
+/**
+ * XP_ERRORNULL:
+ * @X:  the error code
+ *
+ * Macro to raise an XPath error and return NULL.
+ */
+#define XP_ERRORNULL(X)                                                        \
+    { xmlXPathErr(ctxt, X); return(NULL); }
+
+/*
+ * The array xmlXPathErrorMessages corresponds to the enum xmlXPathError
+ */
+static const char *xmlXPathErrorMessages[] = {
+    "Ok\n",
+    "Number encoding\n",
+    "Unfinished literal\n",
+    "Start of literal\n",
+    "Expected $ for variable reference\n",
+    "Undefined variable\n",
+    "Invalid predicate\n",
+    "Invalid expression\n",
+    "Missing closing curly brace\n",
+    "Unregistered function\n",
+    "Invalid operand\n",
+    "Invalid type\n",
+    "Invalid number of arguments\n",
+    "Invalid context size\n",
+    "Invalid context position\n",
+    "Memory allocation error\n",
+    "Syntax error\n",
+    "Resource error\n",
+    "Sub resource error\n",
+    "Undefined namespace prefix\n",
+    "Encoding error\n",
+    "Char out of XML range\n",
+    "Invalid or incomplete context\n",
+    "Stack usage error\n",
+    "Forbidden variable\n",
+    "?? Unknown error ??\n"    /* Must be last in the list! */
+};
+#define MAXERRNO ((int)(sizeof(xmlXPathErrorMessages) /        \
+                  sizeof(xmlXPathErrorMessages[0])) - 1)
+/**
+ * xmlXPathErrMemory:
+ * @ctxt:  an XPath context
+ * @extra:  extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPathErrMemory(xmlXPathContextPtr ctxt, const char *extra)
+{
+    if (ctxt != NULL) {
+        if (extra) {
+            xmlChar buf[200];
+
+            xmlStrPrintf(buf, 200,
+                         BAD_CAST "Memory allocation failed : %s\n",
+                         extra);
+            ctxt->lastError.message = (char *) xmlStrdup(buf);
+        } else {
+            ctxt->lastError.message = (char *)
+              xmlStrdup(BAD_CAST "Memory allocation failed\n");
+        }
+        ctxt->lastError.domain = XML_FROM_XPATH;
+        ctxt->lastError.code = XML_ERR_NO_MEMORY;
+       if (ctxt->error != NULL)
+           ctxt->error(ctxt->userData, &ctxt->lastError);
+    } else {
+        if (extra)
+            __xmlRaiseError(NULL, NULL, NULL,
+                            NULL, NULL, XML_FROM_XPATH,
+                            XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+                            extra, NULL, NULL, 0, 0,
+                            "Memory allocation failed : %s\n", extra);
+        else
+            __xmlRaiseError(NULL, NULL, NULL,
+                            NULL, NULL, XML_FROM_XPATH,
+                            XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
+                            NULL, NULL, NULL, 0, 0,
+                            "Memory allocation failed\n");
+    }
+}
+
+/**
+ * xmlXPathPErrMemory:
+ * @ctxt:  an XPath parser context
+ * @extra:  extra informations
+ *
+ * Handle a redefinition of attribute error
+ */
+static void
+xmlXPathPErrMemory(xmlXPathParserContextPtr ctxt, const char *extra)
+{
+    if (ctxt == NULL)
+       xmlXPathErrMemory(NULL, extra);
+    else {
+       ctxt->error = XPATH_MEMORY_ERROR;
+       xmlXPathErrMemory(ctxt->context, extra);
+    }
+}
+
+/**
+ * xmlXPathErr:
+ * @ctxt:  a XPath parser context
+ * @error:  the error code
+ *
+ * Handle an XPath error
+ */
+void
+xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
+{
+    if ((error < 0) || (error > MAXERRNO))
+       error = MAXERRNO;
+    if (ctxt == NULL) {
+       __xmlRaiseError(NULL, NULL, NULL,
+                       NULL, NULL, XML_FROM_XPATH,
+                       error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
+                       XML_ERR_ERROR, NULL, 0,
+                       NULL, NULL, NULL, 0, 0,
+                       "%s", xmlXPathErrorMessages[error]);
+       return;
     }
     ctxt->error = error;
     if (ctxt->context == NULL) {
@@ -420,8 +787,7 @@ xmlPointerListAddSize(xmlPointerListPtr list,
     if (list->items == NULL) {
        if (initialSize <= 0)
            initialSize = 1;
-       list->items = (void **) xmlMalloc(
-           initialSize * sizeof(void *));
+       list->items = (void **) xmlMalloc(initialSize * sizeof(void *));
        if (list->items == NULL) {
            xmlXPathErrMemory(NULL,
                "xmlPointerListCreate: allocating item\n");
@@ -430,12 +796,17 @@ xmlPointerListAddSize(xmlPointerListPtr list,
        list->number = 0;
        list->size = initialSize;
     } else if (list->size <= list->number) {
+        if (list->size > 50000000) {
+           xmlXPathErrMemory(NULL,
+               "xmlPointerListAddSize: re-allocating item\n");
+            return(-1);
+        }
        list->size *= 2;
        list->items = (void **) xmlRealloc(list->items,
            list->size * sizeof(void *));
        if (list->items == NULL) {
            xmlXPathErrMemory(NULL,
-               "xmlPointerListCreate: re-allocating item\n");
+               "xmlPointerListAddSize: re-allocating item\n");
            list->size = 0;
            return(-1);
        }
@@ -553,8 +924,6 @@ typedef enum {
     NODE_TYPE_PI = XML_PI_NODE
 } xmlXPathTypeVal;
 
-#define XP_REWRITE_DOS_CHILD_ELEM 1
-
 typedef struct _xmlXPathStepOp xmlXPathStepOp;
 typedef xmlXPathStepOp *xmlXPathStepOpPtr;
 struct _xmlXPathStepOp {
@@ -568,7 +937,6 @@ struct _xmlXPathStepOp {
     void *value5;
     void *cache;
     void *cacheURI;
-    int rewriteType;
 };
 
 struct _xmlXPathCompExpr {
@@ -723,6 +1091,10 @@ xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2,
     if (comp->nbStep >= comp->maxStep) {
        xmlXPathStepOp *real;
 
+        if (comp->maxStep >= XPATH_MAX_STEPS) {
+           xmlXPathErrMemory(NULL, "adding step\n");
+           return(-1);
+        }
        comp->maxStep *= 2;
        real = (xmlXPathStepOp *) xmlRealloc(comp->steps,
                                      comp->maxStep * sizeof(xmlXPathStepOp));
@@ -734,7 +1106,6 @@ xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2,
        comp->steps = real;
     }
     comp->last = comp->nbStep;
-    comp->steps[comp->nbStep].rewriteType = 0;
     comp->steps[comp->nbStep].ch1 = ch1;
     comp->steps[comp->nbStep].ch2 = ch2;
     comp->steps[comp->nbStep].op = op;
@@ -2052,6 +2423,11 @@ xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val)
            ret->type = XPATH_NODESET;
            ret->boolval = 0;
            ret->nodesetval = xmlXPathNodeSetCreate(val);
+           if (ret->nodesetval == NULL) {
+               ctxt->lastError.domain = XML_FROM_XPATH;
+               ctxt->lastError.code = XML_ERR_NO_MEMORY;
+               return(NULL);
+           }
 #ifdef XP_DEBUG_OBJ_USAGE
            xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET);
 #endif
@@ -2480,11 +2856,16 @@ valuePush(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr value)
     if (ctxt->valueNr >= ctxt->valueMax) {
         xmlXPathObjectPtr *tmp;
 
+        if (ctxt->valueMax >= XPATH_MAX_STACK_DEPTH) {
+            xmlXPathErrMemory(NULL, "XPath stack depth limit reached\n");
+            ctxt->error = XPATH_MEMORY_ERROR;
+            return (0);
+        }
         tmp = (xmlXPathObjectPtr *) xmlRealloc(ctxt->valueTab,
                                              2 * ctxt->valueMax *
                                              sizeof(ctxt->valueTab[0]));
         if (tmp == NULL) {
-            xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
+            xmlXPathErrMemory(NULL, "pushing value\n");
             ctxt->error = XPATH_MEMORY_ERROR;
             return (0);
         }
@@ -2795,6 +3176,12 @@ xmlXPathFormatNumber(double number, char buffer[], int buffersize)
                                fraction_place, number);
            }
 
+           /* Remove leading spaces sometimes inserted by snprintf */
+           while (work[0] == ' ') {
+               for (ptr = &work[0];(ptr[0] = ptr[1]);ptr++);
+               size--;
+           }
+
            /* Remove fractional trailing zeroes */
            after_fraction = work + size;
            ptr = after_fraction;
@@ -2812,413 +3199,126 @@ xmlXPathFormatNumber(double number, char buffer[], int buffersize)
            }
            memmove(buffer, work, size);
        }
-       break;
-    }
-}
-
-
-/************************************************************************
- *                                                                     *
- *                     Routines to handle NodeSets                     *
- *                                                                     *
- ************************************************************************/
-
-/**
- * xmlXPathOrderDocElems:
- * @doc:  an input document
- *
- * Call this routine to speed up XPath computation on static documents.
- * This stamps all the element nodes with the document order
- * Like for line information, the order is kept in the element->content
- * field, the value stored is actually - the node number (starting at -1)
- * to be able to differentiate from line numbers.
- *
- * Returns the number of elements found in the document or -1 in case
- *    of error.
- */
-long
-xmlXPathOrderDocElems(xmlDocPtr doc) {
-    long count = 0;
-    xmlNodePtr cur;
-
-    if (doc == NULL)
-       return(-1);
-    cur = doc->children;
-    while (cur != NULL) {
-       if (cur->type == XML_ELEMENT_NODE) {
-           cur->content = (void *) (-(++count));
-           if (cur->children != NULL) {
-               cur = cur->children;
-               continue;
-           }
-       }
-       if (cur->next != NULL) {
-           cur = cur->next;
-           continue;
-       }
-       do {
-           cur = cur->parent;
-           if (cur == NULL)
-               break;
-           if (cur == (xmlNodePtr) doc) {
-               cur = NULL;
-               break;
-           }
-           if (cur->next != NULL) {
-               cur = cur->next;
-               break;
-           }
-       } while (cur != NULL);
-    }
-    return(count);
-}
-
-/**
- * xmlXPathCmpNodes:
- * @node1:  the first node
- * @node2:  the second node
- *
- * Compare two nodes w.r.t document order
- *
- * Returns -2 in case of error 1 if first point < second point, 0 if
- *         it's the same node, -1 otherwise
- */
-int
-xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
-    int depth1, depth2;
-    int attr1 = 0, attr2 = 0;
-    xmlNodePtr attrNode1 = NULL, attrNode2 = NULL;
-    xmlNodePtr cur, root;
-
-    if ((node1 == NULL) || (node2 == NULL))
-       return(-2);
-    /*
-     * a couple of optimizations which will avoid computations in most cases
-     */
-    if (node1 == node2)                /* trivial case */
-       return(0);
-    if (node1->type == XML_ATTRIBUTE_NODE) {
-       attr1 = 1;
-       attrNode1 = node1;
-       node1 = node1->parent;
-    }
-    if (node2->type == XML_ATTRIBUTE_NODE) {
-       attr2 = 1;
-       attrNode2 = node2;
-       node2 = node2->parent;
-    }
-    if (node1 == node2) {
-       if (attr1 == attr2) {
-           /* not required, but we keep attributes in order */
-           if (attr1 != 0) {
-               cur = attrNode2->prev;
-               while (cur != NULL) {
-                   if (cur == attrNode1)
-                       return (1);
-                   cur = cur->prev;
-               }
-               return (-1);
-           }
-           return(0);
-       }
-       if (attr2 == 1)
-           return(1);
-       return(-1);
-    }
-    if ((node1->type == XML_NAMESPACE_DECL) ||
-        (node2->type == XML_NAMESPACE_DECL))
-       return(1);
-    if (node1 == node2->prev)
-       return(1);
-    if (node1 == node2->next)
-       return(-1);
-
-    /*
-     * Speedup using document order if availble.
-     */
-    if ((node1->type == XML_ELEMENT_NODE) &&
-       (node2->type == XML_ELEMENT_NODE) &&
-       (0 > (long) node1->content) &&
-       (0 > (long) node2->content) &&
-       (node1->doc == node2->doc)) {
-       long l1, l2;
-
-       l1 = -((long) node1->content);
-       l2 = -((long) node2->content);
-       if (l1 < l2)
-           return(1);
-       if (l1 > l2)
-           return(-1);
-    }
-
-    /*
-     * compute depth to root
-     */
-    for (depth2 = 0, cur = node2;cur->parent != NULL;cur = cur->parent) {
-       if (cur == node1)
-           return(1);
-       depth2++;
-    }
-    root = cur;
-    for (depth1 = 0, cur = node1;cur->parent != NULL;cur = cur->parent) {
-       if (cur == node2)
-           return(-1);
-       depth1++;
-    }
-    /*
-     * Distinct document (or distinct entities :-( ) case.
-     */
-    if (root != cur) {
-       return(-2);
-    }
-    /*
-     * get the nearest common ancestor.
-     */
-    while (depth1 > depth2) {
-       depth1--;
-       node1 = node1->parent;
-    }
-    while (depth2 > depth1) {
-       depth2--;
-       node2 = node2->parent;
-    }
-    while (node1->parent != node2->parent) {
-       node1 = node1->parent;
-       node2 = node2->parent;
-       /* should not happen but just in case ... */
-       if ((node1 == NULL) || (node2 == NULL))
-           return(-2);
-    }
-    /*
-     * Find who's first.
-     */
-    if (node1 == node2->prev)
-       return(1);
-    if (node1 == node2->next)
-       return(-1);
-    /*
-     * Speedup using document order if availble.
-     */
-    if ((node1->type == XML_ELEMENT_NODE) &&
-       (node2->type == XML_ELEMENT_NODE) &&
-       (0 > (long) node1->content) &&
-       (0 > (long) node2->content) &&
-       (node1->doc == node2->doc)) {
-       long l1, l2;
-
-       l1 = -((long) node1->content);
-       l2 = -((long) node2->content);
-       if (l1 < l2)
-           return(1);
-       if (l1 > l2)
-           return(-1);
+       break;
     }
+}
 
-    for (cur = node1->next;cur != NULL;cur = cur->next)
-       if (cur == node2)
-           return(1);
-    return(-1); /* assume there is no sibling list corruption */
+
+/************************************************************************
+ *                                                                     *
+ *                     Routines to handle NodeSets                     *
+ *                                                                     *
+ ************************************************************************/
+
+/**
+ * xmlXPathOrderDocElems:
+ * @doc:  an input document
+ *
+ * Call this routine to speed up XPath computation on static documents.
+ * This stamps all the element nodes with the document order
+ * Like for line information, the order is kept in the element->content
+ * field, the value stored is actually - the node number (starting at -1)
+ * to be able to differentiate from line numbers.
+ *
+ * Returns the number of elements found in the document or -1 in case
+ *    of error.
+ */
+long
+xmlXPathOrderDocElems(xmlDocPtr doc) {
+    long count = 0;
+    xmlNodePtr cur;
+
+    if (doc == NULL)
+       return(-1);
+    cur = doc->children;
+    while (cur != NULL) {
+       if (cur->type == XML_ELEMENT_NODE) {
+           cur->content = (void *) (-(++count));
+           if (cur->children != NULL) {
+               cur = cur->children;
+               continue;
+           }
+       }
+       if (cur->next != NULL) {
+           cur = cur->next;
+           continue;
+       }
+       do {
+           cur = cur->parent;
+           if (cur == NULL)
+               break;
+           if (cur == (xmlNodePtr) doc) {
+               cur = NULL;
+               break;
+           }
+           if (cur->next != NULL) {
+               cur = cur->next;
+               break;
+           }
+       } while (cur != NULL);
+    }
+    return(count);
 }
 
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
 /**
- * xmlXPathCmpNodesExt:
+ * xmlXPathCmpNodes:
  * @node1:  the first node
  * @node2:  the second node
  *
- * Compare two nodes w.r.t document order.
- * This one is optimized for handling of non-element nodes.
+ * Compare two nodes w.r.t document order
  *
  * Returns -2 in case of error 1 if first point < second point, 0 if
  *         it's the same node, -1 otherwise
  */
-static int
-xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
+int
+xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
     int depth1, depth2;
-    int misc = 0, precedence1 = 0, precedence2 = 0;
-    xmlNodePtr miscNode1 = NULL, miscNode2 = NULL;
+    int attr1 = 0, attr2 = 0;
+    xmlNodePtr attrNode1 = NULL, attrNode2 = NULL;
     xmlNodePtr cur, root;
-    long l1, l2;
 
     if ((node1 == NULL) || (node2 == NULL))
        return(-2);
-
-    if (node1 == node2)
-       return(0);
-
     /*
      * a couple of optimizations which will avoid computations in most cases
      */
-    switch (node1->type) {
-       case XML_ELEMENT_NODE:
-           if (node2->type == XML_ELEMENT_NODE) {
-               if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
-                   (0 > (long) node2->content) &&
-                   (node1->doc == node2->doc))
-               {
-                   l1 = -((long) node1->content);
-                   l2 = -((long) node2->content);
-                   if (l1 < l2)
-                       return(1);
-                   if (l1 > l2)
-                       return(-1);
-               } else
-                   goto turtle_comparison;
-           }
-           break;
-       case XML_ATTRIBUTE_NODE:
-           precedence1 = 1; /* element is owner */
-           miscNode1 = node1;
-           node1 = node1->parent;
-           misc = 1;
-           break;
-       case XML_TEXT_NODE:
-       case XML_CDATA_SECTION_NODE:
-       case XML_COMMENT_NODE:
-       case XML_PI_NODE: {
-           miscNode1 = node1;
-           /*
-           * Find nearest element node.
-           */
-           if (node1->prev != NULL) {
-               do {
-                   node1 = node1->prev;
-                   if (node1->type == XML_ELEMENT_NODE) {
-                       precedence1 = 3; /* element in prev-sibl axis */
-                       break;
-                   }
-                   if (node1->prev == NULL) {
-                       precedence1 = 2; /* element is parent */
-                       /*
-                       * URGENT TODO: Are there any cases, where the
-                       * parent of such a node is not an element node?
-                       */
-                       node1 = node1->parent;
-                       break;
-                   }
-               } while (1);
-           } else {
-               precedence1 = 2; /* element is parent */
-               node1 = node1->parent;
-           }
-           if ((node1 == NULL) || (node1->type != XML_ELEMENT_NODE) ||
-               (0 <= (long) node1->content)) {
-               /*
-               * Fallback for whatever case.
-               */
-               node1 = miscNode1;
-               precedence1 = 0;
-           } else
-               misc = 1;
-       }
-           break;
-       case XML_NAMESPACE_DECL:
-           /*
-           * TODO: why do we return 1 for namespace nodes?
-           */
-           return(1);
-       default:
-           break;
+    if (node1 == node2)                /* trivial case */
+       return(0);
+    if (node1->type == XML_ATTRIBUTE_NODE) {
+       attr1 = 1;
+       attrNode1 = node1;
+       node1 = node1->parent;
     }
-    switch (node2->type) {
-       case XML_ELEMENT_NODE:
-           break;
-       case XML_ATTRIBUTE_NODE:
-           precedence2 = 1; /* element is owner */
-           miscNode2 = node2;
-           node2 = node2->parent;
-           misc = 1;
-           break;
-       case XML_TEXT_NODE:
-       case XML_CDATA_SECTION_NODE:
-       case XML_COMMENT_NODE:
-       case XML_PI_NODE: {
-           miscNode2 = node2;
-           if (node2->prev != NULL) {
-               do {
-                   node2 = node2->prev;
-                   if (node2->type == XML_ELEMENT_NODE) {
-                       precedence2 = 3; /* element in prev-sibl axis */
-                       break;
-                   }
-                   if (node2->prev == NULL) {
-                       precedence2 = 2; /* element is parent */
-                       node2 = node2->parent;
-                       break;
-                   }
-               } while (1);
-           } else {
-               precedence2 = 2; /* element is parent */
-               node2 = node2->parent;
-           }
-           if ((node2 == NULL) || (node2->type != XML_ELEMENT_NODE) ||
-               (0 <= (long) node1->content))
-           {
-               node2 = miscNode2;
-               precedence2 = 0;
-           } else
-               misc = 1;
-       }
-           break;
-       case XML_NAMESPACE_DECL:
-           return(1);
-       default:
-           break;
+    if (node2->type == XML_ATTRIBUTE_NODE) {
+       attr2 = 1;
+       attrNode2 = node2;
+       node2 = node2->parent;
     }
-    if (misc) {
-       if (node1 == node2) {
-           if (precedence1 == precedence2) {
-               /*
-               * The ugly case; but normally there aren't many
-               * adjacent non-element nodes around.
-               */
-               cur = miscNode2->prev;
-               while (cur != NULL) {
-                   if (cur == miscNode1)
-                       return(1);
-                   if (cur->type == XML_ELEMENT_NODE)
-                       return(-1);
-                   cur = cur->prev;
-               }
-               return (-1);
-           } else {
-               /*
-               * Evaluate based on higher precedence wrt to the element.
-               * TODO: This assumes attributes are sorted before content.
-               *   Is this 100% correct?
-               */
-               if (precedence1 < precedence2)
-                   return(1);
-               else
-                   return(-1);
-           }
-       }
-       /*
-       * Special case: One of the helper-elements is contained by the other.
-       * <foo>
-       *   <node2>
-       *     <node1>Text-1(precedence1 == 2)</node1>
-       *   </node2>
-       *   Text-6(precedence2 == 3)
-       * </foo>
-       */
-       if ((precedence2 == 3) && (precedence1 > 1)) {
-           cur = node1->parent;
-           while (cur) {
-               if (cur == node2)
-                   return(1);
-               cur = cur->parent;
-           }
-       }
-       if ((precedence1 == 3) && (precedence2 > 1)) {
-           cur = node2->parent;
-           while (cur) {
-               if (cur == node1)
-                   return(-1);
-               cur = cur->parent;
+    if (node1 == node2) {
+       if (attr1 == attr2) {
+           /* not required, but we keep attributes in order */
+           if (attr1 != 0) {
+               cur = attrNode2->prev;
+               while (cur != NULL) {
+                   if (cur == attrNode1)
+                       return (1);
+                   cur = cur->prev;
+               }
+               return (-1);
            }
+           return(0);
        }
+       if (attr2 == 1)
+           return(1);
+       return(-1);
     }
+    if ((node1->type == XML_NAMESPACE_DECL) ||
+        (node2->type == XML_NAMESPACE_DECL))
+       return(1);
+    if (node1 == node2->prev)
+       return(1);
+    if (node1 == node2->next)
+       return(-1);
 
     /*
      * Speedup using document order if availble.
@@ -3228,6 +3328,7 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
        (0 > (long) node1->content) &&
        (0 > (long) node2->content) &&
        (node1->doc == node2->doc)) {
+       long l1, l2;
 
        l1 = -((long) node1->content);
        l2 = -((long) node2->content);
@@ -3237,12 +3338,6 @@ xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
            return(-1);
     }
 
-turtle_comparison:
-
-    if (node1 == node2->prev)
-       return(1);
-    if (node1 == node2->next)
-       return(-1);
     /*
      * compute depth to root
      */
@@ -3296,6 +3391,7 @@ turtle_comparison:
        (0 > (long) node1->content) &&
        (0 > (long) node2->content) &&
        (node1->doc == node2->doc)) {
+       long l1, l2;
 
        l1 = -((long) node1->content);
        l2 = -((long) node2->content);
@@ -3310,7 +3406,6 @@ turtle_comparison:
            return(1);
     return(-1); /* assume there is no sibling list corruption */
 }
-#endif /* XP_OPTIMIZED_NON_ELEM_COMPARISON */
 
 /**
  * xmlXPathNodeSetSort:
@@ -3320,13 +3415,19 @@ turtle_comparison:
  */
 void
 xmlXPathNodeSetSort(xmlNodeSetPtr set) {
+#ifndef WITH_TIM_SORT
     int i, j, incr, len;
     xmlNodePtr tmp;
+#endif
 
     if (set == NULL)
        return;
 
-    /* Use Shell's sort to sort the node-set */
+#ifndef WITH_TIM_SORT
+    /*
+     * Use the old Shell's sort implementation to sort the node-set
+     * Timsort ought to be quite faster
+     */
     len = set->nodeNr;
     for (incr = len / 2; incr > 0; incr /= 2) {
        for (i = incr; i < len; i++) {
@@ -3349,6 +3450,9 @@ xmlXPathNodeSetSort(xmlNodeSetPtr set) {
            }
        }
     }
+#else /* WITH_TIM_SORT */
+    libxml_domnode_tim_sort(set->nodeTab, set->nodeNr);
+#endif /* WITH_TIM_SORT */
 }
 
 #define XML_NODESET_DEFAULT    10
@@ -3527,8 +3631,10 @@ xmlXPathNodeSetContains (xmlNodeSetPtr cur, xmlNodePtr val) {
  * @ns:  a the namespace node
  *
  * add a new namespace node to an existing NodeSet
+ *
+ * Returns 0 in case of success and -1 in case of error
  */
-void
+int
 xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
     int i;
 
@@ -3536,7 +3642,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
     if ((cur == NULL) || (ns == NULL) || (node == NULL) ||
         (ns->type != XML_NAMESPACE_DECL) ||
        (node->type != XML_ELEMENT_NODE))
-       return;
+       return(-1);
 
     /* @@ with_ns to check whether namespace nodes should be looked at @@ */
     /*
@@ -3547,7 +3653,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
            (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) &&
            (((xmlNsPtr)cur->nodeTab[i])->next == (xmlNsPtr) node) &&
            (xmlStrEqual(ns->prefix, ((xmlNsPtr)cur->nodeTab[i])->prefix)))
-           return;
+           return(0);
     }
 
     /*
@@ -3558,7 +3664,7 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
                                             sizeof(xmlNodePtr));
        if (cur->nodeTab == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
        memset(cur->nodeTab, 0 ,
               XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
@@ -3566,16 +3672,21 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
     } else if (cur->nodeNr == cur->nodeMax) {
         xmlNodePtr *temp;
 
+        if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+            xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
+            return(-1);
+        }
        temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
                                      sizeof(xmlNodePtr));
        if (temp == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
         cur->nodeMax *= 2;
        cur->nodeTab = temp;
     }
     cur->nodeTab[cur->nodeNr++] = xmlXPathNodeSetDupNs(node, ns);
+    return(0);
 }
 
 /**
@@ -3584,24 +3695,21 @@ xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
  * @val:  a new xmlNodePtr
  *
  * add a new xmlNodePtr to an existing NodeSet
+ *
+ * Returns 0 in case of success, and -1 in case of error
  */
-void
+int
 xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
     int i;
 
-    if ((cur == NULL) || (val == NULL)) return;
-
-#if 0
-    if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
-       return; /* an XSLT fake node */
-#endif
+    if ((cur == NULL) || (val == NULL)) return(-1);
 
     /* @@ with_ns to check whether namespace nodes should be looked at @@ */
     /*
      * prevent duplcates
      */
     for (i = 0;i < cur->nodeNr;i++)
-        if (cur->nodeTab[i] == val) return;
+        if (cur->nodeTab[i] == val) return(0);
 
     /*
      * grow the nodeTab if needed
@@ -3611,7 +3719,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
                                             sizeof(xmlNodePtr));
        if (cur->nodeTab == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
        memset(cur->nodeTab, 0 ,
               XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
@@ -3619,11 +3727,15 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
     } else if (cur->nodeNr == cur->nodeMax) {
         xmlNodePtr *temp;
 
+        if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+            xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
+            return(-1);
+        }
        temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
                                      sizeof(xmlNodePtr));
        if (temp == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
         cur->nodeMax *= 2;
        cur->nodeTab = temp;
@@ -3635,6 +3747,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
            xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
     } else
        cur->nodeTab[cur->nodeNr++] = val;
+    return(0);
 }
 
 /**
@@ -3644,15 +3757,12 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
  *
  * add a new xmlNodePtr to an existing NodeSet, optimized version
  * when we are sure the node is not already in the set.
+ *
+ * Returns 0 in case of success and -1 in case of failure
  */
-void
+int
 xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
-    if ((cur == NULL) || (val == NULL)) return;
-
-#if 0
-    if ((val->type == XML_ELEMENT_NODE) && (val->name[0] == ' '))
-       return; /* an XSLT fake node */
-#endif
+    if ((cur == NULL) || (val == NULL)) return(-1);
 
     /* @@ with_ns to check whether namespace nodes should be looked at @@ */
     /*
@@ -3663,7 +3773,7 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
                                             sizeof(xmlNodePtr));
        if (cur->nodeTab == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
        memset(cur->nodeTab, 0 ,
               XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
@@ -3671,11 +3781,15 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
     } else if (cur->nodeNr == cur->nodeMax) {
         xmlNodePtr *temp;
 
+        if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+            xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
+            return(-1);
+        }
        temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
                                      sizeof(xmlNodePtr));
        if (temp == NULL) {
            xmlXPathErrMemory(NULL, "growing nodeset\n");
-           return;
+           return(-1);
        }
        cur->nodeTab = temp;
         cur->nodeMax *= 2;
@@ -3687,6 +3801,7 @@ xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
            xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
     } else
        cur->nodeTab[cur->nodeNr++] = val;
+    return(0);
 }
 
 /**
@@ -3782,6 +3897,10 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
        } else if (val1->nodeNr == val1->nodeMax) {
            xmlNodePtr *temp;
 
+            if (val1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+                xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
+                return(NULL);
+            }
            temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * 2 *
                                             sizeof(xmlNodePtr));
            if (temp == NULL) {
@@ -3803,68 +3922,6 @@ xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
     return(val1);
 }
 
-#if 0 /* xmlXPathNodeSetMergeUnique() is currently not used anymore */
-/**
- * xmlXPathNodeSetMergeUnique:
- * @val1:  the first NodeSet or NULL
- * @val2:  the second NodeSet
- *
- * Merges two nodesets, all nodes from @val2 are added to @val1
- * if @val1 is NULL, a new set is created and copied from @val2
- *
- * Returns @val1 once extended or NULL in case of error.
- */
-static xmlNodeSetPtr
-xmlXPathNodeSetMergeUnique(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
-    int i;
-
-    if (val2 == NULL) return(val1);
-    if (val1 == NULL) {
-       val1 = xmlXPathNodeSetCreate(NULL);
-    }
-    if (val1 == NULL)
-        return (NULL);
-
-    /* @@ with_ns to check whether namespace nodes should be looked at @@ */
-
-    for (i = 0;i < val2->nodeNr;i++) {
-       /*
-        * grow the nodeTab if needed
-        */
-       if (val1->nodeMax == 0) {
-           val1->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
-                                                   sizeof(xmlNodePtr));
-           if (val1->nodeTab == NULL) {
-               xmlXPathErrMemory(NULL, "merging nodeset\n");
-               return(NULL);
-           }
-           memset(val1->nodeTab, 0 ,
-                  XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
-           val1->nodeMax = XML_NODESET_DEFAULT;
-       } else if (val1->nodeNr == val1->nodeMax) {
-           xmlNodePtr *temp;
-
-           val1->nodeMax *= 2;
-           temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax *
-                                            sizeof(xmlNodePtr));
-           if (temp == NULL) {
-               xmlXPathErrMemory(NULL, "merging nodeset\n");
-               return(NULL);
-           }
-           val1->nodeTab = temp;
-       }
-       if (val2->nodeTab[i]->type == XML_NAMESPACE_DECL) {
-           xmlNsPtr ns = (xmlNsPtr) val2->nodeTab[i];
-
-           val1->nodeTab[val1->nodeNr++] =
-               xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
-       } else
-           val1->nodeTab[val1->nodeNr++] = val2->nodeTab[i];
-    }
-
-    return(val1);
-}
-#endif /* xmlXPathNodeSetMergeUnique() is currently not used anymore */
 
 /**
  * xmlXPathNodeSetMergeAndClear:
@@ -3951,6 +4008,10 @@ xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
            } else if (set1->nodeNr >= set1->nodeMax) {
                xmlNodePtr *temp;
 
+                if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+                    xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
+                    return(NULL);
+                }
                temp = (xmlNodePtr *) xmlRealloc(
                    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
                if (temp == NULL) {
@@ -4035,6 +4096,10 @@ xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
            } else if (set1->nodeNr >= set1->nodeMax) {
                xmlNodePtr *temp;
 
+                if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
+                    xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
+                    return(NULL);
+                }
                temp = (xmlNodePtr *) xmlRealloc(
                    set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
                if (temp == NULL) {
@@ -4333,9 +4398,12 @@ xmlXPathNewNodeSetList(xmlNodeSetPtr val)
         ret = xmlXPathNewNodeSet(NULL);
     else {
         ret = xmlXPathNewNodeSet(val->nodeTab[0]);
-        if (ret)
-            for (i = 1; i < val->nodeNr; ++i)
-                xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i]);
+        if (ret) {
+            for (i = 1; i < val->nodeNr; ++i) {
+                if (xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i])
+                   < 0) break;
+           }
+       }
     }
 
     return (ret);
@@ -4411,8 +4479,10 @@ xmlXPathDifference (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
 
     for (i = 0; i < l1; i++) {
        cur = xmlXPathNodeSetItem(nodes1, i);
-       if (!xmlXPathNodeSetContains(nodes2, cur))
-           xmlXPathNodeSetAddUnique(ret, cur);
+       if (!xmlXPathNodeSetContains(nodes2, cur)) {
+           if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
+               break;
+       }
     }
     return(ret);
 }
@@ -4445,8 +4515,10 @@ xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
 
     for (i = 0; i < l1; i++) {
        cur = xmlXPathNodeSetItem(nodes1, i);
-       if (xmlXPathNodeSetContains(nodes2, cur))
-           xmlXPathNodeSetAddUnique(ret, cur);
+       if (xmlXPathNodeSetContains(nodes2, cur)) {
+           if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
+               break;
+       }
     }
     return(ret);
 }
@@ -4482,7 +4554,8 @@ xmlXPathDistinctSorted (xmlNodeSetPtr nodes) {
        strval = xmlXPathCastNodeToString(cur);
        if (xmlHashLookup(hash, strval) == NULL) {
            xmlHashAddEntry(hash, strval, strval);
-           xmlXPathNodeSetAddUnique(ret, cur);
+           if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
+               break;
        } else {
            xmlFree(strval);
        }
@@ -4574,7 +4647,8 @@ xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
        cur = xmlXPathNodeSetItem(nodes, i);
        if (cur == node)
            break;
-       xmlXPathNodeSetAddUnique(ret, cur);
+       if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
+           break;
     }
     return(ret);
 }
@@ -4678,7 +4752,8 @@ xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
        cur = xmlXPathNodeSetItem(nodes, i);
        if (cur == node)
            break;
-       xmlXPathNodeSetAddUnique(ret, cur);
+       if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
+           break;
     }
     xmlXPathNodeSetSort(ret);  /* bug 413451 */
     return(ret);
@@ -7701,6 +7776,7 @@ xmlXPathNextChildElement(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
     return(NULL);
 }
 
+#if 0
 /**
  * xmlXPathNextDescendantOrSelfElemParent:
  * @ctxt:  the XPath Parser context
@@ -7728,7 +7804,7 @@ xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
 #ifdef LIBXML_DOCB_ENABLED
            case XML_DOCB_DOCUMENT_NODE:
 #endif
-           case XML_HTML_DOCUMENT_NODE:            
+           case XML_HTML_DOCUMENT_NODE:
                return(contextNode);
            default:
                return(NULL);
@@ -7776,6 +7852,7 @@ next_sibling:
     }
     return(NULL);
 }
+#endif
 
 /**
  * xmlXPathNextDescendant:
@@ -7803,6 +7880,8 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
         return(ctxt->context->node->children);
     }
 
+    if (cur->type == XML_NAMESPACE_DECL)
+        return(NULL);
     if (cur->children != NULL) {
        /*
         * Do not descend on entities declarations
@@ -8185,6 +8264,10 @@ xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
 static int
 xmlXPathIsAncestor(xmlNodePtr ancestor, xmlNodePtr node) {
     if ((ancestor == NULL) || (node == NULL)) return(0);
+    if (node->type == XML_NAMESPACE_DECL)
+        return(0);
+    if (ancestor->type == XML_NAMESPACE_DECL)
+        return(0);
     /* nodes need to be in the same document */
     if (ancestor->doc != node->doc) return(0);
     /* avoid searching if ancestor or node is the root node */
@@ -8222,7 +8305,7 @@ xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur)
         if (cur->type == XML_ATTRIBUTE_NODE)
             return(cur->parent);
     }
-    if (cur == NULL)
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return (NULL);
     if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
        cur = cur->prev;
@@ -8269,6 +8352,8 @@ xmlXPathNextPrecedingInternal(xmlXPathParserContextPtr ctxt,
             return (NULL);
         ctxt->ancestor = cur->parent;
     }
+    if (cur->type == XML_NAMESPACE_DECL)
+        return(NULL);
     if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
        cur = cur->prev;
     while (cur->prev == NULL) {
@@ -8476,7 +8561,7 @@ xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) {
            int i = 0;
 
            tmp = cur->nodesetval->nodeTab[0];
-           if (tmp != NULL) {
+           if ((tmp != NULL) && (tmp->type != XML_NAMESPACE_DECL)) {
                tmp = tmp->children;
                while (tmp != NULL) {
                    tmp = tmp->next;
@@ -9146,7 +9231,7 @@ void
 xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   xmlXPathObjectPtr str;
   xmlXPathObjectPtr find;
-  xmlBufferPtr target;
+  xmlBufPtr target;
   const xmlChar *point;
   int offset;
 
@@ -9156,16 +9241,16 @@ xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   CAST_TO_STRING;
   str = valuePop(ctxt);
 
-  target = xmlBufferCreate();
+  target = xmlBufCreate();
   if (target) {
     point = xmlStrstr(str->stringval, find->stringval);
     if (point) {
       offset = (int)(point - str->stringval);
-      xmlBufferAdd(target, str->stringval, offset);
+      xmlBufAdd(target, str->stringval, offset);
     }
     valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufferContent(target)));
-    xmlBufferFree(target);
+       xmlBufContent(target)));
+    xmlBufFree(target);
   }
   xmlXPathReleaseObject(ctxt->context, str);
   xmlXPathReleaseObject(ctxt->context, find);
@@ -9189,7 +9274,7 @@ void
 xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   xmlXPathObjectPtr str;
   xmlXPathObjectPtr find;
-  xmlBufferPtr target;
+  xmlBufPtr target;
   const xmlChar *point;
   int offset;
 
@@ -9199,17 +9284,17 @@ xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   CAST_TO_STRING;
   str = valuePop(ctxt);
 
-  target = xmlBufferCreate();
+  target = xmlBufCreate();
   if (target) {
     point = xmlStrstr(str->stringval, find->stringval);
     if (point) {
       offset = (int)(point - str->stringval) + xmlStrlen(find->stringval);
-      xmlBufferAdd(target, &str->stringval[offset],
+      xmlBufAdd(target, &str->stringval[offset],
                   xmlStrlen(str->stringval) - offset);
     }
     valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufferContent(target)));
-    xmlBufferFree(target);
+       xmlBufContent(target)));
+    xmlBufFree(target);
   }
   xmlXPathReleaseObject(ctxt->context, str);
   xmlXPathReleaseObject(ctxt->context, find);
@@ -9233,7 +9318,7 @@ void
 xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   xmlXPathObjectPtr obj = NULL;
   xmlChar *source = NULL;
-  xmlBufferPtr target;
+  xmlBufPtr target;
   xmlChar blank;
 
   if (ctxt == NULL) return;
@@ -9251,7 +9336,7 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
   obj = valuePop(ctxt);
   source = obj->stringval;
 
-  target = xmlBufferCreate();
+  target = xmlBufCreate();
   if (target && source) {
 
     /* Skip leading whitespaces */
@@ -9265,16 +9350,16 @@ xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
        blank = 0x20;
       } else {
        if (blank) {
-         xmlBufferAdd(target, &blank, 1);
+         xmlBufAdd(target, &blank, 1);
          blank = 0;
        }
-       xmlBufferAdd(target, source, 1);
+       xmlBufAdd(target, source, 1);
       }
       source++;
     }
     valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufferContent(target)));
-    xmlBufferFree(target);
+       xmlBufContent(target)));
+    xmlBufFree(target);
   }
   xmlXPathReleaseObject(ctxt->context, obj);
 }
@@ -9305,7 +9390,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
     xmlXPathObjectPtr str;
     xmlXPathObjectPtr from;
     xmlXPathObjectPtr to;
-    xmlBufferPtr target;
+    xmlBufPtr target;
     int offset, max;
     xmlChar ch;
     const xmlChar *point;
@@ -9320,7 +9405,7 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
     CAST_TO_STRING;
     str = valuePop(ctxt);
 
-    target = xmlBufferCreate();
+    target = xmlBufCreate();
     if (target) {
        max = xmlUTF8Strlen(to->stringval);
        for (cptr = str->stringval; (ch=*cptr); ) {
@@ -9329,10 +9414,10 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
                if (offset < max) {
                    point = xmlUTF8Strpos(to->stringval, offset);
                    if (point)
-                       xmlBufferAdd(target, point, xmlUTF8Strsize(point, 1));
+                       xmlBufAdd(target, point, xmlUTF8Strsize(point, 1));
                }
            } else
-               xmlBufferAdd(target, cptr, xmlUTF8Strsize(cptr, 1));
+               xmlBufAdd(target, cptr, xmlUTF8Strsize(cptr, 1));
 
            /* Step to next character in input */
            cptr++;
@@ -9358,8 +9443,8 @@ xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
        }
     }
     valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufferContent(target)));
-    xmlBufferFree(target);
+       xmlBufContent(target)));
+    xmlBufFree(target);
     xmlXPathReleaseObject(ctxt->context, str);
     xmlXPathReleaseObject(ctxt->context, from);
     xmlXPathReleaseObject(ctxt->context, to);
@@ -9866,7 +9951,7 @@ xmlChar *
 xmlXPathParseName(xmlXPathParserContextPtr ctxt) {
     const xmlChar *in;
     xmlChar *ret;
-    int count = 0;
+    size_t count = 0;
 
     if ((ctxt == NULL) || (ctxt->cur == NULL)) return(NULL);
     /*
@@ -9885,6 +9970,10 @@ xmlXPathParseName(xmlXPathParserContextPtr ctxt) {
            in++;
        if ((*in > 0) && (*in < 0x80)) {
            count = in - ctxt->cur;
+            if (count > XML_MAX_NAME_LENGTH) {
+                ctxt->cur = in;
+                XP_ERRORNULL(XPATH_EXPR_ERROR);
+            }
            ret = xmlStrndup(ctxt->cur, count);
            ctxt->cur = in;
            return(ret);
@@ -9928,6 +10017,9 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
            xmlChar *buffer;
            int max = len * 2;
 
+            if (len > XML_MAX_NAME_LENGTH) {
+                XP_ERRORNULL(XPATH_EXPR_ERROR);
+            }
            buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
            if (buffer == NULL) {
                XP_ERRORNULL(XPATH_MEMORY_ERROR);
@@ -9939,6 +10031,9 @@ xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
                   (IS_COMBINING(c)) ||
                   (IS_EXTENDER(c))) {
                if (len + 10 > max) {
+                    if (max > XML_MAX_NAME_LENGTH) {
+                        XP_ERRORNULL(XPATH_EXPR_ERROR);
+                    }
                    max *= 2;
                    buffer = (xmlChar *) xmlRealloc(buffer,
                                                    max * sizeof(xmlChar));
@@ -10291,7 +10386,7 @@ xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) {
                   name, prefix);
     SKIP_BLANKS;
     if ((ctxt->context != NULL) && (ctxt->context->flags & XML_XPATH_NOVAR)) {
-       XP_ERROR(XPATH_UNDEF_VARIABLE_ERROR);
+       XP_ERROR(XPATH_FORBID_VARIABLE_ERROR);
     }
 }
 
@@ -11655,9 +11750,13 @@ xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
            */
            if (contextObj == NULL)
                contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode);
-           else
-               xmlXPathNodeSetAddUnique(contextObj->nodesetval,
-                   contextNode);
+           else {
+               if (xmlXPathNodeSetAddUnique(contextObj->nodesetval,
+                   contextNode) < 0) {
+                   ctxt->error = XPATH_MEMORY_ERROR;
+                   goto evaluation_exit;
+               }
+           }
 
            valuePush(ctxt, contextObj);
 
@@ -11803,9 +11902,13 @@ xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt,
            */
            if (contextObj == NULL)
                contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode);
-           else
-               xmlXPathNodeSetAddUnique(contextObj->nodesetval,
-                   contextNode);
+           else {
+               if (xmlXPathNodeSetAddUnique(contextObj->nodesetval,
+                   contextNode) < 0) {
+                   ctxt->error = XPATH_MEMORY_ERROR;
+                   goto evaluation_exit;
+               }
+           }
 
             frame = xmlXPathSetFrame(ctxt);
            valuePush(ctxt, contextObj);
@@ -11977,22 +12080,25 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
 #define XP_TEST_HIT \
     if (hasAxisRange != 0) { \
        if (++pos == maxPos) { \
-           addNode(seq, cur); \
-       goto axis_range_end; } \
+           if (addNode(seq, cur) < 0) \
+               ctxt->error = XPATH_MEMORY_ERROR; \
+           goto axis_range_end; } \
     } else { \
-       addNode(seq, cur); \
+       if (addNode(seq, cur) < 0) \
+           ctxt->error = XPATH_MEMORY_ERROR; \
        if (breakOnFirstHit) goto first_hit; }
 
 #define XP_TEST_HIT_NS \
     if (hasAxisRange != 0) { \
        if (++pos == maxPos) { \
            hasNsNodes = 1; \
-           xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur); \
+           if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \
+               ctxt->error = XPATH_MEMORY_ERROR; \
        goto axis_range_end; } \
     } else { \
        hasNsNodes = 1; \
-       xmlXPathNodeSetAddNs(seq, \
-       xpctxt->node, (xmlNsPtr) cur); \
+       if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \
+           ctxt->error = XPATH_MEMORY_ERROR; \
        if (breakOnFirstHit) goto first_hit; }
 
     xmlXPathAxisVal axis = (xmlXPathAxisVal) op->value;
@@ -12012,8 +12118,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
     xmlNodeSetPtr contextSeq;
     int contextIdx;
     xmlNodePtr contextNode;
-    /* The context node for a compound traversal */
-    xmlNodePtr outerContextNode;
     /* The final resulting node set wrt to all context nodes */
     xmlNodeSetPtr outSeq;
     /*
@@ -12029,9 +12133,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
     int breakOnFirstHit;
 
     xmlXPathTraversalFunction next = NULL;
-    /* compound axis traversal */
-    xmlXPathTraversalFunctionExt outerNext = NULL;
-    void (*addNode) (xmlNodeSetPtr, xmlNodePtr);
+    int (*addNode) (xmlNodeSetPtr, xmlNodePtr);
     xmlXPathNodeSetMergeFunction mergeAndClear;
     xmlNodePtr oldContextNode;
     xmlXPathContextPtr xpctxt = ctxt->context;
@@ -12080,13 +12182,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
             break;
         case AXIS_CHILD:
            last = NULL;
-           if (op->rewriteType == XP_REWRITE_DOS_CHILD_ELEM) {
-               /*
-               * This iterator will give us only nodes which can
-               * hold element nodes.
-               */
-               outerNext = xmlXPathNextDescendantOrSelfElemParent;
-           }
            if (((test == NODE_TEST_NAME) || (test == NODE_TEST_ALL)) &&
                (type == NODE_TYPE_NODE))
            {
@@ -12216,32 +12311,13 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
     addNode = xmlXPathNodeSetAddUnique;
     outSeq = NULL;
     seq = NULL;
-    outerContextNode = NULL;
     contextNode = NULL;
     contextIdx = 0;
 
 
-    while ((contextIdx < contextSeq->nodeNr) || (contextNode != NULL)) {
-       if (outerNext != NULL) {
-           /*
-           * This is a compound traversal.
-           */
-           if (contextNode == NULL) {
-               /*
-               * Set the context for the outer traversal.
-               */
-               outerContextNode = contextSeq->nodeTab[contextIdx++];
-               contextNode = outerNext(NULL, outerContextNode);
-           } else
-               contextNode = outerNext(contextNode, outerContextNode);
-           if (contextNode == NULL)
-               continue;
-           /*
-           * Set the context for the main traversal.
-           */
-           xpctxt->node = contextNode;
-       } else
-           xpctxt->node = contextSeq->nodeTab[contextIdx++];
+    while (((contextIdx < contextSeq->nodeNr) || (contextNode != NULL)) &&
+           (ctxt->error == XPATH_EXPRESSION_OK)) {
+       xpctxt->node = contextSeq->nodeTab[contextIdx++];
 
        if (seq == NULL) {
            seq = xmlXPathNodeSetCreate(NULL);
@@ -12328,7 +12404,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
                                break;
                        }
                    } else if (cur->type == type) {
-                       if (type == XML_NAMESPACE_DECL)
+                       if (cur->type == XML_NAMESPACE_DECL)
                            XP_TEST_HIT_NS
                        else
                            XP_TEST_HIT
@@ -12349,7 +12425,14 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
                     if (axis == AXIS_ATTRIBUTE) {
                         if (cur->type == XML_ATTRIBUTE_NODE)
                        {
-                           XP_TEST_HIT
+                            if (prefix == NULL)
+                           {
+                               XP_TEST_HIT
+                            } else if ((cur->ns != NULL) &&
+                               (xmlStrEqual(URI, cur->ns->href)))
+                           {
+                               XP_TEST_HIT
+                            }
                         }
                     } else if (axis == AXIS_NAMESPACE) {
                         if (cur->type == XML_NAMESPACE_DECL)
@@ -12439,7 +12522,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
                     }
                     break;
            } /* switch(test) */
-        } while (cur != NULL);
+        } while ((cur != NULL) && (ctxt->error == XPATH_EXPRESSION_OK));
 
        goto apply_predicates;
 
@@ -12480,13 +12563,16 @@ first_hit: /* ---------------------------------------------------------- */
 #endif
 
 apply_predicates: /* --------------------------------------------------- */
+        if (ctxt->error != XPATH_EXPRESSION_OK)
+           goto error;
+
         /*
        * Apply predicates.
        */
         if ((predOp != NULL) && (seq->nodeNr > 0)) {
            /*
            * E.g. when we have a "/foo[some expression][n]".
-           */      
+           */
            /*
            * QUESTION TODO: The old predicate evaluation took into
            *  account location-sets.
@@ -12495,7 +12581,7 @@ apply_predicates: /* --------------------------------------------------- */
            *  All what I learned now from the evaluation semantics
            *  does not indicate that a location-set will be processed
            *  here, so this looks OK.
-           */      
+           */
            /*
            * Iterate over all predicates, starting with the outermost
            * predicate.
@@ -12988,8 +13074,10 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
                tmp = xmlXPathCacheNewNodeSet(ctxt->context,
                    ctxt->context->node);
            } else {
-               xmlXPathNodeSetAddUnique(tmp->nodesetval,
-                   ctxt->context->node);
+               if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
+                                            ctxt->context->node) < 0) {
+                   ctxt->error = XPATH_MEMORY_ERROR;
+               }
            }
            valuePush(ctxt, tmp);
            if (op->ch2 != -1)
@@ -13102,8 +13190,10 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
                tmp = xmlXPathCacheNewNodeSet(ctxt->context,
                    ctxt->context->node);
            } else {
-               xmlXPathNodeSetAddUnique(tmp->nodesetval,
-                   ctxt->context->node);
+               if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
+                                            ctxt->context->node) < 0) {
+                   ctxt->error = XPATH_MEMORY_ERROR;
+               }
            }
            valuePush(ctxt, tmp);
            ctxt->context->contextSize = oldset->nodeNr;
@@ -13121,7 +13211,8 @@ xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
            */
            res = valuePop(ctxt);
            if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
-               xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]);
+               if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]) < 0)
+                   ctxt->error = XPATH_MEMORY_ERROR;
            }
            /*
            * Cleanup
@@ -13433,10 +13524,15 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
                 int frame;
 
                 frame = xmlXPathSetFrame(ctxt);
-                if (op->ch1 != -1)
+                if (op->ch1 != -1) {
                     total +=
                         xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
-               if (ctxt->valueNr < op->value) {
+                    if (ctxt->error != XPATH_EXPRESSION_OK) {
+                        xmlXPathPopFrame(ctxt, frame);
+                        return (total);
+                    }
+                }
+               if (ctxt->valueNr < ctxt->valueFrame + op->value) {
                    xmlGenericError(xmlGenericErrorContext,
                            "xmlXPathCompOpEval: parameter error\n");
                    ctxt->error = XPATH_INVALID_OPERAND;
@@ -13498,17 +13594,20 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
            bak = ctxt->context->node;
            pp = ctxt->context->proximityPosition;
            cs = ctxt->context->contextSize;
-            if (op->ch1 != -1)
+            if (op->ch1 != -1) {
                 total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
-           ctxt->context->contextSize = cs;
-           ctxt->context->proximityPosition = pp;
-           ctxt->context->node = bak;
-           ctxt->context->doc = bakd;
-           CHECK_ERROR0;
+                ctxt->context->contextSize = cs;
+                ctxt->context->proximityPosition = pp;
+                ctxt->context->node = bak;
+                ctxt->context->doc = bakd;
+               CHECK_ERROR0;
+            }
             if (op->ch2 != -1) {
                 total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
-               ctxt->context->doc = bakd;
-               ctxt->context->node = bak;
+                ctxt->context->contextSize = cs;
+                ctxt->context->proximityPosition = pp;
+                ctxt->context->node = bak;
+                ctxt->context->doc = bakd;
                CHECK_ERROR0;
            }
             return (total);
@@ -13800,8 +13899,10 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
                            tmp = xmlXPathCacheNewNodeSet(ctxt->context,
                                ctxt->context->node);
                        } else {
-                           xmlXPathNodeSetAddUnique(tmp->nodesetval,
-                               ctxt->context->node);
+                           if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
+                                              ctxt->context->node) < 0) {
+                               ctxt->error = XPATH_MEMORY_ERROR;
+                           }
                        }
                         valuePush(ctxt, tmp);
                         ctxt->context->contextSize = oldset->nodeNr;
@@ -13831,7 +13932,9 @@ xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
                        */
                         res = valuePop(ctxt);
                         if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
-                            xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]);
+                            if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i])
+                               < 0)
+                               ctxt->error = XPATH_MEMORY_ERROR;
                         }
 
                         /*
@@ -14194,7 +14297,7 @@ xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp,
            if (toBool)
                return(1);
            xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval,
-               (xmlNodePtr) ctxt->doc);
+                                    (xmlNodePtr) ctxt->doc);
        } else {
            /* Select "self::node()" */
            if (toBool)
@@ -14287,7 +14390,11 @@ next_node:
                } else if (ret == 1) {
                    if (toBool)
                        goto return_1;
-                   xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur);
+                   if (xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur)
+                       < 0) {
+                       ctxt->lastError.domain = XML_FROM_XPATH;
+                       ctxt->lastError.code = XML_ERR_NO_MEMORY;
+                   }
                }
                if ((cur->children == NULL) || (depth >= max_depth)) {
                    ret = xmlStreamPop(patstream);
@@ -14303,6 +14410,7 @@ next_node:
        }
 
 scan_children:
+       if (cur->type == XML_NAMESPACE_DECL) break;
        if ((cur->children != NULL) && (depth < max_depth)) {
            /*
             * Do not descend on entities declarations
@@ -14623,57 +14731,64 @@ xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
 }
 #endif /* XPATH_STREAMING */
 
-static int
-xmlXPathCanRewriteDosExpression(xmlChar *expr)
-{
-    if (expr == NULL)
-       return(0);
-    do {
-        if ((*expr == '/') && (*(++expr) == '/'))
-           return(1);
-    } while (*expr++);
-    return(0);
-}
 static void
-xmlXPathRewriteDOSExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op)
+xmlXPathOptimizeExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op)
 {
     /*
     * Try to rewrite "descendant-or-self::node()/foo" to an optimized
     * internal representation.
     */
-    if (op->ch1 != -1) {
-       if ((op->op == XPATH_OP_COLLECT /* 11 */) &&
-           ((xmlXPathAxisVal) op->value == AXIS_CHILD /* 4 */) &&
-           ((xmlXPathTestVal) op->value2 == NODE_TEST_NAME /* 5 */) &&
-           ((xmlXPathTypeVal) op->value3 == NODE_TYPE_NODE /* 0 */))
-       {
-           /*
-           * This is a "child::foo"
-           */
-           xmlXPathStepOpPtr prevop = &comp->steps[op->ch1];
-
-           if ((prevop->op == XPATH_OP_COLLECT /* 11 */) &&
-               (prevop->ch1 != -1) &&
-               ((xmlXPathAxisVal) prevop->value ==
-                   AXIS_DESCENDANT_OR_SELF) &&
-               (prevop->ch2 == -1) &&
-               ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) &&
-               ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE) &&
-               (comp->steps[prevop->ch1].op == XPATH_OP_ROOT))
-           {
-               /*
-               * This is a "/descendant-or-self::node()" without predicates.
-               * Eliminate it.
-               */
-               op->ch1 = prevop->ch1;
-               op->rewriteType = XP_REWRITE_DOS_CHILD_ELEM;
-           }
+
+    if ((op->op == XPATH_OP_COLLECT /* 11 */) &&
+        (op->ch1 != -1) &&
+        (op->ch2 == -1 /* no predicate */))
+    {
+        xmlXPathStepOpPtr prevop = &comp->steps[op->ch1];
+
+        if ((prevop->op == XPATH_OP_COLLECT /* 11 */) &&
+            ((xmlXPathAxisVal) prevop->value ==
+                AXIS_DESCENDANT_OR_SELF) &&
+            (prevop->ch2 == -1) &&
+            ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) &&
+            ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE))
+        {
+            /*
+            * This is a "descendant-or-self::node()" without predicates.
+            * Try to eliminate it.
+            */
+
+            switch ((xmlXPathAxisVal) op->value) {
+                case AXIS_CHILD:
+                case AXIS_DESCENDANT:
+                    /*
+                    * Convert "descendant-or-self::node()/child::" or
+                    * "descendant-or-self::node()/descendant::" to
+                    * "descendant::"
+                    */
+                    op->ch1   = prevop->ch1;
+                    op->value = AXIS_DESCENDANT;
+                    break;
+                case AXIS_SELF:
+                case AXIS_DESCENDANT_OR_SELF:
+                    /*
+                    * Convert "descendant-or-self::node()/self::" or
+                    * "descendant-or-self::node()/descendant-or-self::" to
+                    * to "descendant-or-self::"
+                    */
+                    op->ch1   = prevop->ch1;
+                    op->value = AXIS_DESCENDANT_OR_SELF;
+                    break;
+                default:
+                    break;
+            }
        }
-       if (op->ch1 != -1)
-           xmlXPathRewriteDOSExpression(comp, &comp->steps[op->ch1]);
     }
+
+    /* Recurse */
+    if (op->ch1 != -1)
+        xmlXPathOptimizeExpression(comp, &comp->steps[op->ch1]);
     if (op->ch2 != -1)
-       xmlXPathRewriteDOSExpression(comp, &comp->steps[op->ch2]);
+       xmlXPathOptimizeExpression(comp, &comp->steps[op->ch2]);
 }
 
 /**
@@ -14731,12 +14846,8 @@ xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
        comp->string = xmlStrdup(str);
        comp->nb = 0;
 #endif
-       if ((comp->expr != NULL) &&
-           (comp->nbStep > 2) &&
-           (comp->last >= 0) &&
-           (xmlXPathCanRewriteDosExpression(comp->expr) == 1))
-       {
-           xmlXPathRewriteDOSExpression(comp, &comp->steps[comp->last]);
+       if ((comp->nbStep > 1) && (comp->last >= 0)) {
+           xmlXPathOptimizeExpression(comp, &comp->steps[comp->last]);
        }
     }
     return(comp);
@@ -14913,17 +15024,12 @@ xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
 #endif
     {
        xmlXPathCompileExpr(ctxt, 1);
-       /*
-       * In this scenario the expression string will sit in ctxt->base.
-       */
        if ((ctxt->error == XPATH_EXPRESSION_OK) &&
            (ctxt->comp != NULL) &&
-           (ctxt->base != NULL) &&
-           (ctxt->comp->nbStep > 2) &&
-           (ctxt->comp->last >= 0) &&
-           (xmlXPathCanRewriteDosExpression((xmlChar *) ctxt->base) == 1))
+           (ctxt->comp->nbStep > 1) &&
+           (ctxt->comp->last >= 0))
        {
-           xmlXPathRewriteDOSExpression(ctxt->comp,
+           xmlXPathOptimizeExpression(ctxt->comp,
                &ctxt->comp->steps[ctxt->comp->last]);
        }
     }
@@ -14994,6 +15100,49 @@ xmlXPathEval(const xmlChar *str, xmlXPathContextPtr ctx) {
 }
 
 /**
+ * xmlXPathSetContextNode:
+ * @node: the node to to use as the context node
+ * @ctx:  the XPath context
+ *
+ * Sets 'node' as the context node. The node must be in the same
+ * document as that associated with the context.
+ *
+ * Returns -1 in case of error or 0 if successful
+ */
+int
+xmlXPathSetContextNode(xmlNodePtr node, xmlXPathContextPtr ctx) {
+    if ((node == NULL) || (ctx == NULL))
+        return(-1);
+
+    if (node->doc == ctx->doc) {
+        ctx->node = node;
+       return(0);
+    }
+    return(-1);
+}
+
+/**
+ * xmlXPathNodeEval:
+ * @node: the node to to use as the context node
+ * @str:  the XPath expression
+ * @ctx:  the XPath context
+ *
+ * Evaluate the XPath Location Path in the given context. The node 'node'
+ * is set as the context node. The context node is not restored.
+ *
+ * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
+ *         the caller has to free the object.
+ */
+xmlXPathObjectPtr
+xmlXPathNodeEval(xmlNodePtr node, const xmlChar *str, xmlXPathContextPtr ctx) {
+    if (str == NULL)
+        return(NULL);
+    if (xmlXPathSetContextNode(node, ctx) < 0)
+        return(NULL);
+    return(xmlXPathEval(str, ctx));
+}
+
+/**
  * xmlXPathEvalExpression:
  * @str:  the XPath expression
  * @ctxt:  the XPath context
@@ -15097,7 +15246,7 @@ static void
 xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
     xmlXPathObjectPtr str;
     int escape_reserved;
-    xmlBufferPtr target;
+    xmlBufPtr target;
     xmlChar *cptr;
     xmlChar escape[4];
 
@@ -15108,7 +15257,7 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
     CAST_TO_STRING;
     str = valuePop(ctxt);
 
-    target = xmlBufferCreate();
+    target = xmlBufCreate();
 
     escape[0] = '%';
     escape[3] = 0;
@@ -15133,7 +15282,7 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
                  *cptr == ':' || *cptr == '@' || *cptr == '&' ||
                  *cptr == '=' || *cptr == '+' || *cptr == '$' ||
                  *cptr == ','))) {
-               xmlBufferAdd(target, cptr, 1);
+               xmlBufAdd(target, cptr, 1);
            } else {
                if ((*cptr >> 4) < 10)
                    escape[1] = '0' + (*cptr >> 4);
@@ -15144,13 +15293,13 @@ xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
                else
                    escape[2] = 'A' - 10 + (*cptr & 0xF);
 
-               xmlBufferAdd(target, &escape[0], 3);
+               xmlBufAdd(target, &escape[0], 3);
            }
        }
     }
     valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
-       xmlBufferContent(target)));
-    xmlBufferFree(target);
+       xmlBufContent(target)));
+    xmlBufFree(target);
     xmlXPathReleaseObject(ctxt->context, str);
 }
 
index 0b463dd..4b4ac2e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Added support for the element() scheme described in:
  * W3C Proposed Recommendation 13 November 2002
- * http://www.w3.org/TR/2002/PR-xptr-element-20021113/  
+ * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
  *
  * See Copyright for the status of this software.
  *
 #endif
 #endif
 
-#define TODO                                                           \
+#define TODO                                                           \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Unimplemented block at %s:%d\n",                           \
             __FILE__, __LINE__);
 
-#define STRANGE                                                        \
+#define STRANGE                                                        \
     xmlGenericError(xmlGenericErrorContext,                            \
            "Internal error at %s:%d\n",                                \
             __FILE__, __LINE__);
 
 /************************************************************************
  *                                                                     *
- *             Some factorized error routines                          *
+ *             Some factorized error routines                          *
  *                                                                     *
  ************************************************************************/
 
@@ -134,7 +134,7 @@ xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level);
 static int
 xmlXPtrGetArity(xmlNodePtr cur) {
     int i;
-    if (cur == NULL) 
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(-1);
     cur = cur->children;
     for (i = 0;cur != NULL;cur = cur->next) {
@@ -157,7 +157,7 @@ xmlXPtrGetArity(xmlNodePtr cur) {
 static int
 xmlXPtrGetIndex(xmlNodePtr cur) {
     int i;
-    if (cur == NULL) 
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(-1);
     for (i = 1;cur != NULL;cur = cur->prev) {
        if ((cur->type == XML_ELEMENT_NODE) ||
@@ -179,11 +179,11 @@ xmlXPtrGetIndex(xmlNodePtr cur) {
 static xmlNodePtr
 xmlXPtrGetNthChild(xmlNodePtr cur, int no) {
     int i;
-    if (cur == NULL) 
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(cur);
     cur = cur->children;
     for (i = 0;i <= no;cur = cur->next) {
-       if (cur == NULL) 
+       if (cur == NULL)
            return(cur);
        if ((cur->type == XML_ELEMENT_NODE) ||
            (cur->type == XML_DOCUMENT_NODE) ||
@@ -553,7 +553,7 @@ xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathObjectPtr end) {
            break;
        case XPATH_NODESET:
            /*
-            * Empty set ... 
+            * Empty set ...
             */
            if (end->nodesetval->nodeNr <= 0)
                return(NULL);
@@ -731,7 +731,7 @@ xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
 
     if (i >= cur->locNr) {
 #ifdef DEBUG
-        xmlGenericError(xmlGenericErrorContext, 
+        xmlGenericError(xmlGenericErrorContext,
                "xmlXPtrLocationSetDel: Range wasn't found in RangeList\n");
 #endif
         return;
@@ -903,7 +903,7 @@ static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
 #define NXT(val) ctxt->cur[(val)]
 #define CUR_PTR ctxt->cur
 
-#define SKIP_BLANKS                                                    \
+#define SKIP_BLANKS                                                    \
     while (IS_BLANK_CH(*(ctxt->cur))) NEXT
 
 #define CURRENT (*ctxt->cur)
@@ -945,7 +945,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
  * xmlXPtrEvalXPtrPart:
  * @ctxt:  the XPointer Parser context
  * @name:  the preparsed Scheme for the XPtrPart
- * 
+ *
  * XPtrPart ::= 'xpointer' '(' XPtrExpr ')'
  *            | Scheme '(' SchemeSpecificExpr ')'
  *
@@ -953,7 +953,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
  *
  * SchemeSpecificExpr ::= StringWithBalancedParens
  *
- * StringWithBalancedParens ::=  
+ * StringWithBalancedParens ::=
  *              [^()]* ('(' StringWithBalancedParens ')' [^()]*)*
  *              [VC: Parenthesis escaping]
  *
@@ -971,7 +971,7 @@ xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
  *
  * Parse and evaluate an XPtrPart. Basically it generates the unescaped
  * string and if the scheme is 'xpointer' it will call the XPath interpreter.
- * 
+ *
  * TODO: there is no new scheme registration mechanism
  */
 
@@ -1097,7 +1097,7 @@ xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
            xmlFree(name);
            XP_ERROR(XPATH_MEMORY_ERROR);
        }
-       
+
        xmlXPathRegisterNs(ctxt->context, prefix, URI);
        CUR_PTR = left;
        xmlFree(URI);
@@ -1229,7 +1229,7 @@ xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name) {
     while (CUR == '/') {
        int child = 0;
        NEXT;
-        
+
        while ((CUR >= '0') && (CUR <= '9')) {
            child = child * 10 + (CUR - '0');
            NEXT;
@@ -1253,7 +1253,7 @@ static void
 xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) {
     if (ctxt->valueTab == NULL) {
        /* Allocate the value stack */
-       ctxt->valueTab = (xmlXPathObjectPtr *) 
+       ctxt->valueTab = (xmlXPathObjectPtr *)
                         xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
        if (ctxt->valueTab == NULL) {
            xmlXPtrErrMemory("allocating evaluation context");
@@ -1375,6 +1375,8 @@ xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
        return(NULL);
 
     ctxt = xmlXPathNewParserContext(str, ctx);
+    if (ctxt == NULL)
+       return(NULL);
     ctxt->xptr = 1;
     xmlXPtrEvalXPointer(ctxt);
 
@@ -1396,13 +1398,13 @@ xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
                    /*
                     * Evaluation may push a root nodeset which is unused
                     */
-                   xmlNodeSetPtr set; 
+                   xmlNodeSetPtr set;
                    set = tmp->nodesetval;
                    if ((set->nodeNr != 1) ||
                        (set->nodeTab[0] != (xmlNodePtr) ctx->doc))
                        stack++;
                } else
-                   stack++;    
+                   stack++;
            }
            xmlXPathFreeObject(tmp);
         }
@@ -1416,7 +1418,7 @@ xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
        xmlXPathFreeObject(res);
        res = NULL;
     }
-        
+
     xmlXPathFreeParserContext(ctxt);
     return(res);
 }
@@ -1444,11 +1446,13 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
        return(NULL);
     start = (xmlNodePtr) range->user;
 
-    if (start == NULL)
+    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
        return(NULL);
     end = range->user2;
     if (end == NULL)
        return(xmlCopyNode(start, 1));
+    if (end->type == XML_NAMESPACE_DECL)
+        return(NULL);
 
     cur = start;
     index1 = range->index;
@@ -1478,7 +1482,7 @@ xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
                /* prune and return full set */
                if (last != NULL)
                    xmlAddNextSibling(last, tmp);
-               else 
+               else
                    xmlAddChild(parent, tmp);
                return(list);
            } else {
@@ -1732,7 +1736,7 @@ xmlXPtrNbLocChildren(xmlNodePtr node) {
  * @ctxt:  the XPointer Parser context
  * @nargs:  the number of args
  *
- * Function implementing here() operation 
+ * Function implementing here() operation
  * as described in 5.4.3
  */
 static void
@@ -1741,7 +1745,7 @@ xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
 
     if (ctxt->context->here == NULL)
        XP_ERROR(XPTR_SYNTAX_ERROR);
-    
+
     valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL));
 }
 
@@ -1750,7 +1754,7 @@ xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
  * @ctxt:  the XPointer Parser context
  * @nargs:  the number of args
  *
- * Function implementing origin() operation 
+ * Function implementing origin() operation
  * as described in 5.4.3
  */
 static void
@@ -1759,7 +1763,7 @@ xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
 
     if (ctxt->context->origin == NULL)
        XP_ERROR(XPTR_SYNTAX_ERROR);
-    
+
     valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL));
 }
 
@@ -1768,7 +1772,7 @@ xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
  * @ctxt:  the XPointer Parser context
  * @nargs:  the number of args
  *
- * Function implementing start-point() operation 
+ * Function implementing start-point() operation
  * as described in 5.4.3
  * ----------------
  * location-set start-point(location-set)
@@ -1805,6 +1809,8 @@ xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
         */
        tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
        xmlXPathFreeObject(obj);
+       if (tmp == NULL)
+            XP_ERROR(XPATH_MEMORY_ERROR)
        obj = tmp;
     }
 
@@ -1860,7 +1866,7 @@ xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
  * @ctxt:  the XPointer Parser context
  * @nargs:  the number of args
  *
- * Function implementing end-point() operation 
+ * Function implementing end-point() operation
  * as described in 5.4.3
  * ----------------------------
  * location-set end-point(location-set)
@@ -1899,10 +1905,16 @@ xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
         */
        tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
        xmlXPathFreeObject(obj);
+       if (tmp == NULL)
+            XP_ERROR(XPATH_MEMORY_ERROR)
        obj = tmp;
     }
 
     newset = xmlXPtrLocationSetCreate(NULL);
+    if (newset == NULL) {
+       xmlXPathFreeObject(obj);
+        XP_ERROR(XPATH_MEMORY_ERROR);
+    }
     oldset = (xmlLocationSetPtr) obj->user;
     if (oldset != NULL) {
        int i;
@@ -1996,7 +2008,7 @@ xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
                        case XML_NOTATION_NODE:
                        case XML_HTML_DOCUMENT_NODE: {
                            int indx = xmlXPtrGetIndex(node);
-                            
+
                            node = node->parent;
                            return(xmlXPtrNewRange(node, indx - 1,
                                                   node, indx + 1));
@@ -2047,6 +2059,8 @@ xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
         */
        tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
        xmlXPathFreeObject(set);
+       if (tmp == NULL)
+            XP_ERROR(XPATH_MEMORY_ERROR)
        set = tmp;
     }
     oldset = (xmlLocationSetPtr) set->user;
@@ -2055,6 +2069,10 @@ xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
      * The loop is to compute the covering range for each item and add it
      */
     newset = xmlXPtrLocationSetCreate(NULL);
+    if (newset == NULL) {
+       xmlXPathFreeObject(set);
+        XP_ERROR(XPATH_MEMORY_ERROR);
+    }
     for (i = 0;i < oldset->locNr;i++) {
        xmlXPtrLocationSetAdd(newset,
                xmlXPtrCoveringRange(ctxt, oldset->locTab[i]));
@@ -2193,6 +2211,8 @@ xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
         */
        tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
        xmlXPathFreeObject(set);
+       if (tmp == NULL)
+            XP_ERROR(XPATH_MEMORY_ERROR)
        set = tmp;
     }
     oldset = (xmlLocationSetPtr) set->user;
@@ -2201,6 +2221,10 @@ xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
      * The loop is to compute the covering range for each item and add it
      */
     newset = xmlXPtrLocationSetCreate(NULL);
+    if (newset == NULL) {
+       xmlXPathFreeObject(set);
+        XP_ERROR(XPATH_MEMORY_ERROR);
+    }
     for (i = 0;i < oldset->locNr;i++) {
        xmlXPtrLocationSetAdd(newset,
                xmlXPtrInsideRange(ctxt, oldset->locTab[i]));
@@ -2243,7 +2267,7 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) {
 
     cur = ctxt->cur;
     newset = xmlXPtrLocationSetCreate(NULL);
-    
+
     for (i = 0; i < oldset->nodeNr; i++) {
        ctxt->cur = cur;
 
@@ -2277,7 +2301,7 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) {
            res = valuePop(ctxt);
            xmlXPathFreeObject(res);
        }
-       
+
        ctxt->context->node = NULL;
     }
 
@@ -2297,14 +2321,14 @@ xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt, int nargs) {
  * @level: incremented/decremented to show level in tree
  *
  * Advance to the next element or text node in document order
- * TODO: add a stack for entering/exiting entities 
+ * TODO: add a stack for entering/exiting entities
  *
  * Returns -1 in case of failure, 0 otherwise
  */
 xmlNodePtr
 xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) {
 next:
-    if (cur == NULL)
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(NULL);
     if (cur->children != NULL) {
         cur = cur->children ;
@@ -2362,7 +2386,7 @@ xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
     if ((node == NULL) || (indx == NULL))
        return(-1);
     cur = *node;
-    if (cur == NULL)
+    if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
        return(-1);
     pos = *indx;
 
@@ -2400,7 +2424,7 @@ xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
            return(0);
        }
        /*
-        * We should have a text (or cdata) node ... 
+        * We should have a text (or cdata) node ...
         */
        len = 0;
        if ((cur->type != XML_ELEMENT_NODE) &&
@@ -2453,13 +2477,12 @@ xmlXPtrMatchString(const xmlChar *string, xmlNodePtr start, int startindex,
 
     if (string == NULL)
        return(-1);
-    if (start == NULL)
+    if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
        return(-1);
-    if ((end == NULL) || (endindex == NULL))
+    if ((end == NULL) || (*end == NULL) ||
+        ((*end)->type == XML_NAMESPACE_DECL) || (endindex == NULL))
        return(-1);
     cur = start;
-    if (cur == NULL)
-       return(-1);
     pos = startindex - 1;
     stringlen = xmlStrlen(string);
 
@@ -2538,13 +2561,12 @@ xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex,
 
     if (string == NULL)
        return(-1);
-    if ((start == NULL) || (startindex == NULL))
+    if ((start == NULL) || (*start == NULL) ||
+        ((*start)->type == XML_NAMESPACE_DECL) || (startindex == NULL))
        return(-1);
     if ((end == NULL) || (endindex == NULL))
        return(-1);
     cur = *start;
-    if (cur == NULL)
-       return(-1);
     pos = *startindex - 1;
     first = string[0];
 
@@ -2577,7 +2599,7 @@ xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex,
                    /*
                     * An empty string is considered to match before each
                     * character of the string-value and after the final
-                    * character. 
+                    * character.
                     */
 #ifdef DEBUG_RANGES
                    xmlGenericError(xmlGenericErrorContext,
@@ -2618,14 +2640,12 @@ xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
     xmlNodePtr cur;
     int pos, len = 0;
 
-    if ((node == NULL) || (indx == NULL))
+    if ((node == NULL) || (*node == NULL) ||
+        ((*node)->type == XML_NAMESPACE_DECL) || (indx == NULL))
        return(-1);
     cur = *node;
     pos = *indx;
 
-    if (cur == NULL)
-       return(-1);
-
     if ((cur->type == XML_ELEMENT_NODE) ||
        (cur->type == XML_DOCUMENT_NODE) ||
        (cur->type == XML_HTML_DOCUMENT_NODE)) {
@@ -2729,7 +2749,7 @@ xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
  * @nargs:  the number of args
  *
  * Function implementing the string-range() function
- * range as described in 5.4.2 
+ * range as described in 5.4.2
  *
  * ------------------------------
  * [Definition: For each location in the location-set argument,
@@ -2798,6 +2818,10 @@ xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
 
     set = valuePop(ctxt);
     newset = xmlXPtrLocationSetCreate(NULL);
+    if (newset == NULL) {
+       xmlXPathFreeObject(set);
+        XP_ERROR(XPATH_MEMORY_ERROR);
+    }
     if (set->nodesetval == NULL) {
         goto error;
     }
@@ -2809,6 +2833,8 @@ xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
         */
        tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
        xmlXPathFreeObject(set);
+       if (tmp == NULL)
+            XP_ERROR(XPATH_MEMORY_ERROR)
        set = tmp;
     }
     oldset = (xmlLocationSetPtr) set->user;
@@ -2893,7 +2919,7 @@ error:
  * @ctxt:  the XPointer Parser context
  *
  *  [8]   Predicate ::=   '[' PredicateExpr ']'
- *  [9]   PredicateExpr ::=   Expr 
+ *  [9]   PredicateExpr ::=   Expr
  *
  * Evaluate a predicate as in xmlXPathEvalPredicate() but for
  * a Location Set instead of a node set
@@ -2942,7 +2968,7 @@ xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) {
         */
         cur = ctxt->cur;
        newset = xmlXPtrLocationSetCreate(NULL);
-       
+
         for (i = 0; i < oldset->locNr; i++) {
            ctxt->cur = cur;
 
@@ -2978,7 +3004,7 @@ xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) {
                res = valuePop(ctxt);
                xmlXPathFreeObject(res);
            }
-           
+
            ctxt->context->node = NULL;
        }
 
index 966a8de..5ef1819 100644 (file)
@@ -118,7 +118,7 @@ pytests: $(PYSCRIPTS) $(TESTDIRS)
 
 tests:
        -@(if [ -x $(PYTHON) ] ; then                                   \
-          $(MAKE) MAKEFLAGS+=--silent pytests ; fi);
+          $(MAKE) pytests ; fi);
 
 #
 # Heavy, works well only on RHEL3
@@ -126,7 +126,7 @@ tests:
 valgrind:
        -@(if [ -x $(PYTHON) ] ; then                                   \
           echo '## Running the regression tests under Valgrind' ;      \
-          $(MAKE) CHECKER='valgrind -q' MAKEFLAGS+=--silent pytests ; fi);
+          $(MAKE) CHECKER='valgrind -q' pytests ; fi);
 
 CLEANFILES=$(PYSCRIPTS) test.log
 
index 8aee9e7..2a9f034 100644 (file)
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
 @SET_MAKE@
 VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,32 +78,43 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = xstc
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
        $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.in
+       $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-AM_V_GEN = $(am__v_GEN_$(V))
-am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
-am__v_GEN_0 = @echo "  GEN   " $@;
-AM_V_at = $(am__v_at_$(V))
-am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
+am__v_at_1 = 
 SOURCES =
 DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
-AS = @AS@
 AUTOCONF = @AUTOCONF@
 AUTOHEADER = @AUTOHEADER@
 AUTOMAKE = @AUTOMAKE@
@@ -96,6 +151,7 @@ HTML_DIR = @HTML_DIR@
 HTML_OBJ = @HTML_OBJ@
 HTTP_OBJ = @HTTP_OBJ@
 ICONV_LIBS = @ICONV_LIBS@
+ICU_LIBS = @ICU_LIBS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -140,6 +196,9 @@ PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
 PYTHON = @PYTHON@
 PYTHON_INCLUDES = @PYTHON_INCLUDES@
 PYTHON_LIBS = @PYTHON_LIBS@
@@ -151,7 +210,6 @@ RANLIB = @RANLIB@
 RDL_LIBS = @RDL_LIBS@
 READER_TEST = @READER_TEST@
 RELDATE = @RELDATE@
-RM = @RM@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -176,7 +234,6 @@ TEST_VTIME = @TEST_VTIME@
 TEST_XINCLUDE = @TEST_XINCLUDE@
 TEST_XPATH = @TEST_XPATH@
 TEST_XPTR = @TEST_XPTR@
-THREADS_W32 = @THREADS_W32@
 THREAD_CFLAGS = @THREAD_CFLAGS@
 THREAD_LIBS = @THREAD_LIBS@
 VERSION = @VERSION@
@@ -209,6 +266,7 @@ WITH_SAX1 = @WITH_SAX1@
 WITH_SCHEMAS = @WITH_SCHEMAS@
 WITH_SCHEMATRON = @WITH_SCHEMATRON@
 WITH_THREADS = @WITH_THREADS@
+WITH_THREAD_ALLOC = @WITH_THREAD_ALLOC@
 WITH_TREE = @WITH_TREE@
 WITH_TRIO = @WITH_TRIO@
 WITH_VALID = @WITH_VALID@
@@ -344,11 +402,11 @@ mostlyclean-libtool:
 
 clean-libtool:
        -rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
+
+ctags CTAGS:
 
-ctags: CTAGS
-CTAGS:
+cscope cscopelist:
 
 
 distdir: $(DISTFILES)
@@ -395,10 +453,15 @@ install-am: all-am
 
 installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
@@ -480,15 +543,16 @@ uninstall-am:
 .MAKE: install-am install-strip
 
 .PHONY: all all-am check check-am clean clean-generic clean-libtool \
-       distclean distclean-generic distclean-libtool distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+       cscopelist-am ctags-am distclean distclean-generic \
+       distclean-libtool distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags-am uninstall uninstall-am
 
 #
 # Nothing is done by make, only make tests and
@@ -589,7 +653,7 @@ pytests: $(PYSCRIPTS) $(TESTDIRS)
 
 tests:
        -@(if [ -x $(PYTHON) ] ; then                                   \
-          $(MAKE) MAKEFLAGS+=--silent pytests ; fi);
+          $(MAKE) pytests ; fi);
 
 #
 # Heavy, works well only on RHEL3
@@ -597,7 +661,7 @@ tests:
 valgrind:
        -@(if [ -x $(PYTHON) ] ; then                                   \
           echo '## Running the regression tests under Valgrind' ;      \
-          $(MAKE) CHECKER='valgrind -q' MAKEFLAGS+=--silent pytests ; fi);
+          $(MAKE) CHECKER='valgrind -q' pytests ; fi);
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/xzlib.c b/xzlib.c
index 928bd17..0dcb9f4 100644 (file)
--- a/xzlib.c
+++ b/xzlib.c
@@ -182,12 +182,37 @@ xz_open(const char *path, int fd, const char *mode ATTRIBUTE_UNUSED)
     return (xzFile) state;
 }
 
+static int
+xz_compressed(xzFile f) {
+    xz_statep state;
+
+    if (f == NULL)
+        return(-1);
+    state = (xz_statep) f;
+    if (state->init <= 0)
+        return(-1);
+
+    switch (state->how) {
+        case COPY:
+           return(0);
+       case GZIP:
+       case LZMA:
+           return(1);
+    }
+    return(-1);
+}
+
 xzFile
 __libxml2_xzopen(const char *path, const char *mode)
 {
     return xz_open(path, -1, mode);
 }
 
+int
+__libxml2_xzcompressed(xzFile f) {
+    return xz_compressed(f);
+}
+
 xzFile
 __libxml2_xzdopen(int fd, const char *mode)
 {
@@ -245,6 +270,20 @@ xz_avail(xz_statep state)
     return 0;
 }
 
+#ifdef HAVE_ZLIB_H
+static int
+xz_avail_zstrm(xz_statep state)
+{
+    int ret;
+    state->strm.avail_in = state->zstrm.avail_in;
+    state->strm.next_in = state->zstrm.next_in;
+    ret = xz_avail(state);
+    state->zstrm.avail_in = (uInt) state->strm.avail_in;
+    state->zstrm.next_in = (Bytef *) state->strm.next_in;
+    return ret;
+}
+#endif
+
 static int
 is_format_xz(xz_statep state)
 {
@@ -314,6 +353,10 @@ is_format_lzma(xz_statep state)
 #define NEXT() ((strm->avail_in == 0 && xz_avail(state) == -1) ? -1 : \
                 (strm->avail_in == 0 ? -1 : \
                  (strm->avail_in--, *(strm->next_in)++)))
+/* Same thing, but from zstrm */
+#define NEXTZ() ((strm->avail_in == 0 && xz_avail_zstrm(state) == -1) ? -1 : \
+                (strm->avail_in == 0 ? -1 : \
+                 (strm->avail_in--, *(strm->next_in)++)))
 
 /* Get a four-byte little-endian integer and return 0 on success and the value
    in *ret.  Otherwise -1 is returned and *ret is not modified. */
@@ -324,10 +367,10 @@ gz_next4(xz_statep state, unsigned long *ret)
     unsigned long val;
     z_streamp strm = &(state->zstrm);
 
-    val = NEXT();
-    val += (unsigned) NEXT() << 8;
-    val += (unsigned long) NEXT() << 16;
-    ch = NEXT();
+    val = NEXTZ();
+    val += (unsigned) NEXTZ() << 8;
+    val += (unsigned long) NEXTZ() << 16;
+    ch = NEXTZ();
     if (ch == -1)
         return -1;
     val += (unsigned long) ch << 24;
diff --git a/xzlib.h b/xzlib.h
index 43c75e1..29ba55e 100644 (file)
--- a/xzlib.h
+++ b/xzlib.h
@@ -15,4 +15,5 @@ xzFile __libxml2_xzopen(const char *path, const char *mode);
 xzFile __libxml2_xzdopen(int fd, const char *mode);
 int __libxml2_xzread(xzFile file, void *buf, unsigned len);
 int __libxml2_xzclose(xzFile file);
+int __libxml2_xzcompressed(xzFile f);
 #endif /* LIBXML2_XZLIB_H */